You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Records decisions from spec review: coding controls stay inside the vanilla chat flow and remain unobtrusive, coding state is scoped to coding-enabled chat sessions, and Serena is offered as a predefined MCP settings template with uv/setup guidance rather than auto-installed.
Tests: rg -n "TBD|TODO|PLACEHOLDER|FIXME|\?\?" docs/architecture/coding-workspace.md
Tests: sed -n '100,240p' docs/architecture/coding-workspace.md
Tests: sed -n '350,520p' docs/architecture/coding-workspace.md
Follow-up: decide Architect write approvals and first ACP backend.
Adds the v1 design doc, marks T-001..T-009 complete in the task
tracker, and records the implemented snapshot plus deferred work in the
architecture doc.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…renderers
Completes the Tamagotchi renderer integration for the coding workspace
slice: coding store with native-only engine, coding tool registration
through the LLM tools store, prompt contribution registration, merged
chat renderers, compact chat controls, and MCP backend detection that
resolves to unavailable/available/serena from registered MCP tools.
Extends the MCP settings UI with a Serena server preset and an
updated settings contract test plus package export.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
We reviewed changes in e298f0b...479e940 on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.
Some issues found as part of this review are outside of the diff in this pull request and aren't shown in the inline review comments due to GitHub's API limitations. You can see those issues on the DeepSource dashboard.
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
The reason will be displayed to describe this comment to others. Learn more.
No default export found in imported module "./coding-workspace/CodingWorkspaceControls.vue"
It is recommended to use default imports only if there is a default export in the module being imported. If there are no default exports in the source module, it is better to use named imports, and it helps the build tools while optimizing the code.
The reason will be displayed to describe this comment to others. Learn more.
Using target="_blank" without rel="noopener noreferrer" is a security risk
A malicious actor can gain full control over the user's DOM window object.
This can lead to phishing attacks such as fake login prompts or password alerts being shown to the user.
The reason will be displayed to describe this comment to others. Learn more.
Found `async` function without any `await` expressions
A function that does not contain any await expressions should not be async (except for some edge cases in TypeScript which are discussed below). Asynchronous functions in JavaScript behave differently than other functions in two important ways:
The reason will be displayed to describe this comment to others. Learn more.
Found `async` function without any `await` expressions
A function that does not contain any await expressions should not be async (except for some edge cases in TypeScript which are discussed below). Asynchronous functions in JavaScript behave differently than other functions in two important ways:
The reason will be displayed to describe this comment to others. Learn more.
Found `async` function without any `await` expressions
A function that does not contain any await expressions should not be async (except for some edge cases in TypeScript which are discussed below). Asynchronous functions in JavaScript behave differently than other functions in two important ways:
The reason will be displayed to describe this comment to others. Learn more.
'toolExecutionContext' was used before it was defined
Variables, functions and types should always be used after they've been defined. This issue will flag any code snippets that use variables or types before definition.
The reason will be displayed to describe this comment to others. Learn more.
'toolExecutionContext' was used before it was defined
Variables, functions and types should always be used after they've been defined. This issue will flag any code snippets that use variables or types before definition.
The reason will be displayed to describe this comment to others. Learn more.
Found `async` function without any `await` expressions
A function that does not contain any await expressions should not be async (except for some edge cases in TypeScript which are discussed below). Asynchronous functions in JavaScript behave differently than other functions in two important ways:
The reason will be displayed to describe this comment to others. Learn more.
Found `async` function without any `await` expressions
A function that does not contain any await expressions should not be async (except for some edge cases in TypeScript which are discussed below). Asynchronous functions in JavaScript behave differently than other functions in two important ways:
The reason will be displayed to describe this comment to others. Learn more.
Found `async` function without any `await` expressions
A function that does not contain any await expressions should not be async (except for some edge cases in TypeScript which are discussed below). Asynchronous functions in JavaScript behave differently than other functions in two important ways:
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces an AIRI-native coding workspace, integrating compact controls, a Spec mode state machine, async native subagent job models, and custom chat renderers into the Tamagotchi renderer and Stage UI. It also adds a code-intelligence facade that prefers Serena MCP tools with fallback options. Feedback on the changes suggests localizing hardcoded English strings in the controls component, correcting a redundant ternary expression in the diagnostics model to properly map severity to tone, and resetting the mcpRuntime to its unavailable state upon store disposal to prevent stale references.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
The reason will be displayed to describe this comment to others. Learn more.
Several user-facing labels, titles, and placeholders in this component are hardcoded in English (e.g., 'Ask', 'Spec', 'Requirements', 'Workspace root'). To support internationalization, these strings should be defined in the localization files (e.g., packages/i18n/src/locales/en/settings.yaml) and retrieved using the t(...) translation helper.
The reason will be displayed to describe this comment to others. Learn more.
The ternary expression severity ? row : row is redundant as it returns row in both branches. It appears the intention was to map the severity to a corresponding tone (similar to the logic in diagnosticRows) so that the diagnostics renderer can style the rows correctly.
The reason will be displayed to describe this comment to others. Learn more.
When the store is disposed, mcpRuntime is not reset to unavailableMcpRuntime. This leaves a stale reference to the handlers of the disposed mcpToolsStore (such as listMcpToolsAndUpdateCodingBackend), which can prevent garbage collection and lead to unexpected behavior if tools are invoked after disposal.
- Adds missing opener/noreferrer to the Serena setup URL anchor to fix the
target=_blank security finding (JS-0712).
- Extracts pickBestSerenaGroup and groupReadOnlySerenaTools from
selectSerenaReadOnlyTools to reduce per-function cyclomatic complexity.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
`groupReadOnlySerenaTools` has a cyclomatic complexity of 6 with "medium" risk
A function with high cyclomatic complexity can be hard to understand and
maintain. Cyclomatic complexity is a software metric that measures the number of
independent paths through a function. A higher cyclomatic complexity indicates
that the function has more decision points and is more complex.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary\n- Adds shared coding workspace contracts, code-intelligence facade, spec mode state machine, async native subagent job model, tool definitions, prompt contributions, and compact chat renderers under packages/stage-ui/src/coding-workspace/\n- Integrates coding workspace into the Tamagotchi renderer via a dedicated store, native-only Serena-preferred engine, merged chat renderers, compact chat controls, and MCP bridge with refresh-based backend detection\n- Extends MCP settings UI with a Serena preset and updates the stage-ui exports contract\n- Normal AIRI chat remains the default experience; coding tools and prompts register only when coding context is enabled\n\n## Verification\n- Stage UI coding-workspace module tests: 5 files, 30 tests passed\n- Tamagotchi store tests: 2 files, 7 tests passed\n- Stage UI export contract test: passed\n- @proj-airi/stage-ui vue-tsc --noEmit: passed\n- @proj-airi/stage-tamagotchi vue-tsc --noEmit: passed\n\n## Deferred follow-ups before ACP or swarm runtime\n- Connect workspace_update_spec_artifact to AIRI-owned workspace persistence\n- Persist coding workspace state per chat session\n- Add approval-backed filesystem, patch, terminal, and command tools\n- Native swarm runtime for async subagent job execution\n- ACP/Pi/Codex subprocess engines\n\n## Test plan\n- [x] Run pnpm test across affected packages\n- [x] Run both package typechecks\n- [x] Review coding workspace store wiring and MCP backend detection\n- [x] Review chat renderer merge in InteractiveArea.vue\n\n🤖 Generated with Factory