Skip to content

Add VS Code extension with sidebar, dashboard, and deep linking#23

Merged
hoangsonww merged 1 commit intomasterfrom
feat/add-vscode-extension
Apr 27, 2026
Merged

Add VS Code extension with sidebar, dashboard, and deep linking#23
hoangsonww merged 1 commit intomasterfrom
feat/add-vscode-extension

Conversation

@hoangsonww
Copy link
Copy Markdown
Owner

This pull request marks the first stable (1.0.0) release of Forge, introducing a major new surface: a first-class VS Code extension. Alongside the extension, the release includes enhancements to the dashboard (such as deep-linking and a plan-edit modal), improvements to markdown streaming and UI behavior, and several bug fixes. The documentation, changelogs, and release notes have been updated throughout to reflect the new stable status and added features.

Major new features and surfaces:

  • VS Code extension released: A new vscode-extension/ package provides an integrated editor experience, including an activity-bar webview, status-bar integration, command palette commands, deep-linking to the dashboard, and direct stats reading from the local database. The extension is documented in the README, changelog, architecture docs, and index page. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]

  • Dashboard enhancements:

    • Added URL deep-linking (?task=<id>, ?view=<name>) for direct navigation, used by the VS Code extension and other surfaces.
    • Introduced a plan-edit modal for approving and editing plans in the dashboard.
    • Implemented a per-task delta replay buffer to ensure late WebSocket clients receive all streamed tokens. [1] [2]

Improvements and fixes:

  • Markdown streaming and UI: Live markdown now streams with smoother, frame-coalesced updates; REPL output formatting matches forge run; status indicators are more reliable; and plan approval waits for explicit user action. [1] [2]

  • Bug fixes: Addressed issues with streaming deltas, task row clickability and status, cross-project task lookups, and UI layout glitches. [1] [2]

Documentation and release process:

  • Changelog and release notes: Updated for v1.0.0, highlighting stable APIs, new features, and fixes. Release instructions now reference the 1.0.0 versions of both the npm and Docker packages. [1] [2] [3] [4]

  • VS Code workspace cleanup: Removed comment blocks from .vscode/ configuration files for clarity. [1] [2] [3] [4] [5] [6]

…ar, and deep linking

- Introduce `vscode-extension/` package with activity-bar sidebar, status bar integration, and dashboard webview
- Implement commands for REPL, run task, run selection/file, dashboard lifecycle, doctor, settings, and task deep linking
- Read stats and recent tasks directly from local SQLite index for offline support
- Update docs, README, ARCHITECTURE.md, and index.html to document and showcase the new extension
- Add .vscodeignore, tsconfig, tasks, and supporting files for extension build and packaging
@hoangsonww hoangsonww self-assigned this Apr 27, 2026
@hoangsonww hoangsonww added the bug Something isn't working label Apr 27, 2026
@hoangsonww hoangsonww added documentation Improvements or additions to documentation enhancement New feature or request help wanted Extra attention is needed good first issue Good for newcomers question Further information is requested feature Feature request labels Apr 27, 2026
@hoangsonww hoangsonww merged commit 8e4a610 into master Apr 27, 2026
16 of 17 checks passed
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces version 1.0.0 of Forge, featuring a new VS Code extension that integrates the agentic coding workflow directly into the editor. The update includes deep-linking for dashboard tasks, live markdown streaming, and a plan-edit modal. The server-side logic was enhanced to support cross-project task lookups via a global index. Review feedback focuses on optimizing project path resolution with direct SQL queries, improving the reliability of the Forge home directory detection in the extension, and ensuring shell command quoting is compatible with Windows environments.

Comment thread src/ui/server.ts
// caller having to know which project the task was created in.
const indexed = getTask(taskId);
if (indexed) {
const proj = listProjects().find((p) => p.id === indexed.project_id);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Fetching and iterating through all projects to find a single project path is inefficient, especially as the number of projects grows. Since getDb() is already available in this file, you can query the project path directly from the database using the project_id.

Suggested change
const proj = listProjects().find((p) => p.id === indexed.project_id);
const proj = getDb().prepare('SELECT path FROM projects WHERE id = ?').get(indexed.project_id) as { path: string } | undefined;

updated_at: string;
}

const FORGE_HOME = process.env.FORGE_HOME || path.join(os.homedir(), '.forge');
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The FORGE_HOME path is determined by the environment variable or a default location. However, environment variables might not be correctly propagated to the VS Code extension host depending on how VS Code was launched (e.g., from a GUI shortcut vs. terminal). Consider adding a forge.home configuration setting to allow users to explicitly define their Forge home directory, ensuring offline stats work correctly even in environments with inconsistent variable propagation.

Comment on lines +58 to +62
function shellQuote(s: string): string {
if (s === '') return "''";
if (/^[A-Za-z0-9_./@:=+,-]+$/.test(s)) return s;
return `'${s.replace(/'/g, `'\\''`)}'`;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The shellQuote implementation uses single quotes, which is standard for POSIX shells (bash, zsh) but will fail in Windows PowerShell or Cmd when the path contains spaces (e.g., if forge.binaryPath is set to a path in C:\Program Files). In PowerShell, a quoted string is treated as a literal unless preceded by the call operator &.

Consider using a more robust quoting mechanism or detecting the shell type to ensure compatibility for Windows users not using WSL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working documentation Improvements or additions to documentation enhancement New feature or request feature Feature request good first issue Good for newcomers help wanted Extra attention is needed question Further information is requested

Projects

Development

Successfully merging this pull request may close these issues.

1 participant