Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
f23de83
feat: add visualstudio.com to autoApprove URLs in settings
ktmage Feb 24, 2026
e43f646
feat: add zipcloud and google to autoApprove URLs in settings
ktmage Feb 24, 2026
beb6d58
feat: add Biome as linter and formatter
ktmage Feb 24, 2026
261be23
fix: resolve Biome lint and format violations
ktmage Feb 24, 2026
cd3a5d3
docs: add Biome check to CI and update CONTRIBUTING.md
ktmage Feb 24, 2026
d28bfe8
Merge branch 'master' into feature/1/biome
ktmage Feb 25, 2026
4c67eec
Merge pull request #19 from ktmage/feature/1/biome
ktmage Feb 25, 2026
ae4ce7f
feat: add accessibility signal options for chat interactions
ktmage Feb 25, 2026
c77fe3b
Refactor icon usage in ToolConfigPanel and ToolPartView components; a…
ktmage Feb 25, 2026
e5a3441
refactor: reorganize imports and improve test coverage for utility fu…
ktmage Feb 25, 2026
e312c87
feat: add hooks and tests for locale, messages, permissions, provider…
ktmage Feb 25, 2026
ee6294d
feat: add TodoHeader and TodoView components for task management
ktmage Feb 25, 2026
04fda3e
feat: add ContextIndicator, InputArea, MessageItem, MessagesArea, and…
ktmage Feb 25, 2026
0dcd4f3
refactor: remove unused components (ContextIndicator, InputArea, Mess…
ktmage Feb 25, 2026
7da0972
refactor: optimize dependencies in useEffect for improved performance
ktmage Feb 25, 2026
d86c237
refactor: add DOMPurify for XSS protection and update dependencies in…
ktmage Feb 25, 2026
e03b95a
refactor: add DOMPurify third-party notice for XSS protection
ktmage Feb 25, 2026
d6795d0
refactor: enhance formatRelativeTime for localization support in Engl…
ktmage Feb 25, 2026
b174b24
refactor: replace useEffect with useClickOutside for improved click h…
ktmage Feb 28, 2026
848b6bd
refactor: replace button elements with IconButton component for consi…
ktmage Feb 28, 2026
6f6d85b
refactor: replace button elements with ActionButton component for con…
ktmage Feb 28, 2026
55be6f4
refactor: replace button elements with LinkButton component for consi…
ktmage Feb 28, 2026
f538181
refactor: implement ListItem and StatusItem components for improved U…
ktmage Feb 28, 2026
abfe7ed
Add CSS modules for various components in the webview
ktmage Feb 28, 2026
d514a73
feat: add MessageItem and MessagesArea components for message handling
ktmage Feb 28, 2026
a4ef482
fix: resolve Biome lint errors (exhaustive-deps, formatting)
ktmage Feb 28, 2026
e68cb0f
Merge pull request #20 from ktmage/refactor/2-3-4-5-6-7-8/various-imp…
ktmage Feb 28, 2026
e1ac0a0
feat: add Popover component and related tests; refactor IconButton an…
ktmage Feb 28, 2026
3dc302f
fix: adjust padding and border-radius for button styling in ModelSele…
ktmage Feb 28, 2026
f084773
fix: reposition IconButton for opening terminal in InputArea component
ktmage Feb 28, 2026
24c1762
fix: update border styles for IconButton and FileAttachmentBar compon…
ktmage Feb 28, 2026
dfcaeb6
test: add tests for active state and ref forwarding in IconButton com…
ktmage Feb 28, 2026
0bdb98c
fix: adjust padding and height for IconButton and FileAttachmentBar c…
ktmage Feb 28, 2026
447bbc8
fix: reorder imports for consistency and improve readability in IconB…
ktmage Feb 28, 2026
91c25e9
feat: add shell command execution via ! prefix
ktmage Feb 28, 2026
58e445a
feat: add ShellResultView terminal-style component
ktmage Feb 28, 2026
d039c68
feat: hide user bubble and render ShellResultView for shell messages
ktmage Feb 28, 2026
e471513
fix: scope Markdown CSS to .markdown class to prevent style bleeding
ktmage Feb 28, 2026
1215971
test: add comprehensive tests for shell command feature
ktmage Feb 28, 2026
fd2c6c8
style: fix Biome formatting errors
ktmage Feb 28, 2026
f5d7744
Merge pull request #21 from ktmage/feature/17-shell-command-execution
ktmage Feb 28, 2026
b9875a4
feat: add backend support for file change diffs
ktmage Feb 28, 2026
56bc6a6
feat: add message types, locale strings, and icons for file diffs
ktmage Feb 28, 2026
faa8163
feat: add useFileChanges hook for managing file diff state
ktmage Feb 28, 2026
456aaa8
feat: add FileChangesHeader collapsible component
ktmage Feb 28, 2026
7836f4f
feat: integrate file changes into App
ktmage Feb 28, 2026
06f82f8
test: add tests for file change diff feature
ktmage Feb 28, 2026
8a3444e
style: apply Biome formatting fixes
ktmage Feb 28, 2026
943bc5f
Merge pull request #22 from ktmage/feature/16/file-diff
ktmage Feb 28, 2026
6c1f390
feat: migrate Todo display from message parsing to session.todo() API…
ktmage Feb 28, 2026
7e0e0f6
Merge pull request #23 from ktmage/feature/15/migrate-todo-to-session…
ktmage Feb 28, 2026
5d8f75b
feat: add forkSession SDK method and message protocol
ktmage Feb 28, 2026
2eaf494
feat: add Fork button to checkpoint divider UI
ktmage Feb 28, 2026
4ce7857
test: add session fork unit and scenario tests
ktmage Feb 28, 2026
23ee4f3
style: fix biome format errors in MessagesArea
ktmage Feb 28, 2026
605ae3e
Merge pull request #24 from ktmage/feature/14/session-fork
ktmage Feb 28, 2026
d68c766
feat: add getChildSessions API and child session protocol messages
ktmage Feb 28, 2026
4bc3d70
feat: add child session navigation UI with subtask display and back n…
ktmage Feb 28, 2026
38f9f59
test: add child session navigation unit and scenario tests
ktmage Feb 28, 2026
553417b
feat: add @agent mention SDK and protocol layer
ktmage Feb 28, 2026
31e74a9
feat: add @agent mention UI components
ktmage Feb 28, 2026
f141710
test: add agent mention unit and scenario tests
ktmage Feb 28, 2026
86a90a7
fix: filter agents to subagent-only and refresh child sessions on ses…
ktmage Feb 28, 2026
60b7229
test: update agent mention test to verify subagent-only filtering
ktmage Feb 28, 2026
3d79a46
fix: use AgentPartInput in parts instead of body.agent for subagent i…
ktmage Feb 28, 2026
39779f7
feat: render task tool calls as subtask display instead of code block…
ktmage Feb 28, 2026
0b4ea19
test: add task tool part rendering and isTaskToolPart tests
ktmage Feb 28, 2026
08de313
fix: use metadata sessionId and partial title match for child session…
ktmage Feb 28, 2026
63a1273
test: add findMatchingChild tests and server-format title matching tests
ktmage Feb 28, 2026
446e1ab
style: move agent chip to context bar alongside file chips
ktmage Feb 28, 2026
80eafce
style: fix import ordering in MessageItem
ktmage Feb 28, 2026
801f3e3
Merge pull request #25 from ktmage/feature/12/child-session-nav
ktmage Feb 28, 2026
84e9d87
feat: セッション共有・共有解除の SDK 呼び出しとメッセージ定義を追加
ktmage Feb 28, 2026
614712a
feat: ChatHeader に共有・共有解除ボタンを追加
ktmage Feb 28, 2026
e0553fe
test: セッション共有の単体テスト・シナリオテストを追加
ktmage Feb 28, 2026
cf423aa
style: biome フォーマットを修正
ktmage Feb 28, 2026
8245392
Merge pull request #26 from ktmage/feature/10/session-share
ktmage Feb 28, 2026
d62790c
feat: add undo/redo session protocol layer
ktmage Feb 28, 2026
0cb5223
feat: add undo/redo UI to ChatHeader
ktmage Feb 28, 2026
829e0b7
test: add undo/redo unit and scenario tests
ktmage Feb 28, 2026
598f2c7
style: fix biome formatting in App.tsx
ktmage Feb 28, 2026
5ee7bda
Merge pull request #27 from ktmage/feature/9/undo-redo
ktmage Feb 28, 2026
65630ca
feat: インラインポップアップにTab/矢印キーによるキーボードナビゲーションを追加
ktmage Mar 1, 2026
c428315
test: ポップアップTabナビゲーションの単体テスト・シナリオテストを追加
ktmage Mar 1, 2026
ab86152
feat: react-icons パッケージを追加
ktmage Mar 1, 2026
c62837c
feat: ハードコードSVGを react-icons/vsc に置換
ktmage Mar 1, 2026
9b2b4fe
test: 未テストだった7アイコンのテストを追加
ktmage Mar 1, 2026
f8c83a1
fix: update OpenCode repository URLs to anomalyco/opencode
ktmage Mar 1, 2026
caad5cd
docs: add Unreleased section and version links to CHANGELOG
ktmage Mar 1, 2026
390a4c9
build: move @types/dompurify to devDependencies
ktmage Mar 1, 2026
9b41e8b
Merge pull request #33 from ktmage/feature/28/svg-icons
ktmage Mar 1, 2026
e7b1e19
Merge pull request #32 from ktmage/feature/29/tab-select
ktmage Mar 1, 2026
e83d347
merge: development の最新を取り込み (#32, #33)
ktmage Mar 1, 2026
8584804
docs: add react-icons license and update CHANGELOG for #32, #33
ktmage Mar 1, 2026
c87ec0a
Merge pull request #35 from ktmage/feature/30/fix-docs
ktmage Mar 1, 2026
bc1df93
docs: リポジトリURLを opencode-gui に更新
ktmage Mar 1, 2026
3221c26
Merge pull request #36 from ktmage/feature/31/rename-repo
ktmage Mar 1, 2026
e4b4a66
chore: release v0.2.0
ktmage Mar 1, 2026
31de79f
docs: add demo GIF
ktmage Mar 1, 2026
2104087
Merge pull request #38 from ktmage/chore/37/v0.2.0-release-tasks
ktmage Mar 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ jobs:

- run: npm ci

- name: Lint & Format check
run: npx biome check .

- run: npm test
20 changes: 18 additions & 2 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,27 @@
"https://*.wikipedia.org": true,
"https://*.netlify.app": true,
"https://*.hotwired.dev": true,
"https://*.opencode.ai": true
"https://*.opencode.ai": true,
"https://*.visualstudio.com": true,
"https://*.zipcloud.ibsnet.co.jp": true,
"https://*.google.com": true
},
"chat.instructionsFilesLocations": {
".ktmage/instructions": true,
".ktmage/project/instructions": true
},
"chat.agent.maxRequests": 100
"chat.agent.maxRequests": 100,
"accessibility.signalOptions.volume": 70,
"accessibility.signals.chatEditModifiedFile": {
"sound": "on"
},
"accessibility.signals.chatRequestSent": {
"sound": "on"
},
"accessibility.signals.chatResponseReceived": {
"sound": "on"
},
"accessibility.signals.chatUserActionRequired": {
"sound": "on"
}
}
38 changes: 38 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,40 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/),
and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.2.0] - 2026-03-01

### Added

- Message editing & checkpoint restore
- Reasoning / thinking display
- Shell command execution
- File changes diff view
- Session fork
- Child session navigation (subtask)
- Subtask display for task tool calls
- Agent mention (`@` mention)
- Session sharing
- Undo / Redo
- Settings panel
- Keyboard navigation for inline popups (Tab / Arrow keys)
- Biome as linter/formatter
- DOMPurify for XSS protection
- CSS Modules for component styling

### Changed

- Replace hardcoded SVG icons with react-icons/vsc
- UI component architecture refactored to Atoms/Molecules/Organisms
- Todo display migrated from message parsing to session.todo() API
- OpenCode repository URL updated (opencode-ai → anomalyco)
- Repository URL updated to opencode-gui

### Fixed

- Markdown CSS scoped to `.markdown` class to prevent style bleeding

## [0.1.0] - 2026-02-24

### Added
Expand All @@ -19,3 +53,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
- Context compression indicator
- Todo display
- i18n support (English, Japanese)

[Unreleased]: https://github.com/ktmage/opencode-gui/compare/v0.2.0...HEAD
[0.2.0]: https://github.com/ktmage/opencode-gui/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/ktmage/opencode-gui/releases/tag/v0.1.0
58 changes: 44 additions & 14 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ This project itself is developed primarily through AI-assisted coding, and we we

- Node.js v22+
- npm
- [OpenCode](https://github.com/opencode-ai/opencode) installed with LLM provider authentication configured
- [OpenCode](https://github.com/anomalyco/opencode) installed with LLM provider authentication configured

#### Setup

```sh
git clone https://github.com/<your-fork>/OpenCodeGUI.git
cd OpenCodeGUI
git clone https://github.com/<your-fork>/opencode-gui.git
cd opencode-gui
npm install
npm run build
```
Expand All @@ -45,7 +45,7 @@ npm test

#### Reporting Bugs / Requesting Features

Opening an issue before starting work is recommended. Use the provided [issue templates](https://github.com/ktmage/OpenCodeGUI/issues/new/choose).
Opening an issue before starting work is recommended. Use the provided [issue templates](https://github.com/ktmage/opencode-gui/issues/new/choose).

For small fixes (typos, documentation improvements), you may open a PR directly.

Expand All @@ -54,18 +54,33 @@ For small fixes (typos, documentation improvements), you may open a PR directly.
1. Fork the repository
2. Create a branch from `development`
3. Make your changes
4. Ensure `npm run build` and `npm test` pass
4. Ensure `npm run check`, `npm run build` and `npm test` pass
5. Open a pull request against `development`

PRs are squash-merged to keep the commit history clean.

### Code Style

There is no formal linter or formatter configured yet. Please follow the style of the existing codebase.
This project uses [Biome](https://biomejs.dev/) for linting and formatting. Run the following before submitting a PR:

```sh
npm run check
```

To auto-fix issues:

```sh
npm run check:fix
```

### Testing

When your change affects behavior, add or update scenario tests. Follow the existing test patterns in `webview/__tests__/scenarios/`.
When your change affects behavior, add or update tests. Follow existing test patterns:

- **Scenario tests:** `webview/__tests__/scenarios/`
- **Component unit tests:** `webview/__tests__/components/`
- **Hook unit tests:** `webview/__tests__/hooks/`
- **Utility tests:** `webview/__tests__/utils/`

### Review Process

Expand All @@ -92,13 +107,13 @@ By submitting a pull request, you agree that your contributions are licensed und

- Node.js v22+
- npm
- [OpenCode](https://github.com/opencode-ai/opencode) がインストール済みで、LLM プロバイダの認証が完了していること
- [OpenCode](https://github.com/anomalyco/opencode) がインストール済みで、LLM プロバイダの認証が完了していること

#### セットアップ

```sh
git clone https://github.com/<your-fork>/OpenCodeGUI.git
cd OpenCodeGUI
git clone https://github.com/<your-fork>/opencode-gui.git
cd opencode-gui
npm install
npm run build
```
Expand All @@ -113,7 +128,7 @@ npm test

#### バグ報告・機能リクエスト

作業を開始する前に Issue を立てることを推奨します。[Issue テンプレート](https://github.com/ktmage/OpenCodeGUI/issues/new/choose)を利用してください。
作業を開始する前に Issue を立てることを推奨します。[Issue テンプレート](https://github.com/ktmage/opencode-gui/issues/new/choose)を利用してください。

小さな修正(typo、ドキュメント改善など)は直接 PR を出しても構いません。

Expand All @@ -122,18 +137,33 @@ npm test
1. リポジトリをフォークする
2. `development` ブランチからブランチを作成する
3. 変更を加える
4. `npm run build` と `npm test` が通ることを確認する
4. `npm run check`、`npm run build`、`npm test` が通ることを確認する
5. `development` ブランチに対して Pull Request を出す

PR は Squash merge でマージされます。

### コードスタイル

現在、Linter や Formatter は導入していません。既存のコードベースのスタイルに合わせてください。
本プロジェクトでは [Biome](https://biomejs.dev/) を Linter/Formatter として使用しています。PR を出す前に以下を実行してください:

```sh
npm run check
```

問題を自動修正するには:

```sh
npm run check:fix
```

### テスト

動作に影響する変更の場合は、シナリオテストを追加・更新してください。`webview/__tests__/scenarios/` にある既存のテストパターンに習って書いてください。
動作に影響する変更の場合は、テストを追加・更新してください。既存のテストパターンに習って書いてください:

- **シナリオテスト:** `webview/__tests__/scenarios/`
- **コンポーネント単体テスト:** `webview/__tests__/components/`
- **フック単体テスト:** `webview/__tests__/hooks/`
- **ユーティリティテスト:** `webview/__tests__/utils/`

### レビュー体制

Expand Down
78 changes: 60 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# OpenCodeGUI

An unofficial VS Code sidebar chat interface for [OpenCode](https://github.com/opencode-ai/opencode).
An unofficial VS Code sidebar chat interface for [OpenCode](https://github.com/anomalyco/opencode).

OpenCode の非公式 VS Code サイドバーチャットインターフェース。

Expand All @@ -22,6 +22,10 @@ Use all OpenCode features from a familiar sidebar chat UI.
> **Disclaimer:**
> This project is experimental and developed primarily through AI-assisted coding. It is provided "as-is" without warranty of any kind. It may contain unexpected behavior, unconventional implementations, or undiscovered defects. Use at your own risk. The authors assume no liability for any damages arising from the use of this software.

### Demo

![Demo](media/demo.gif)

### Documents

| File | Description |
Expand All @@ -37,16 +41,27 @@ Use all OpenCode features from a familiar sidebar chat UI.
- Markdown rendering
- Tool call collapsible display
- Permission approval UI (Allow / Once / Deny)
- Session management (create, switch, delete)
- Session management (create, switch, fork, delete)
- Message editing & checkpoint restore
- Model selection
- File context attachment
- File changes diff view
- Shell command execution
- Context compression indicator
- Reasoning / thinking display
- Todo display
- Undo / Redo
- Session sharing
- Agent mention (`@` mention)
- Child session navigation (subtask)
- Settings panel
- Keyboard navigation for inline popups (Tab / Arrow keys)
- Subtask display
- i18n support (English, Japanese)

### Requirements

- [OpenCode](https://github.com/opencode-ai/opencode) installed
- [OpenCode](https://github.com/anomalyco/opencode) installed
- LLM provider authentication configured in OpenCode

### Installation
Expand Down Expand Up @@ -92,6 +107,12 @@ npm run watch:ext
npm run watch:webview
```

#### Lint & Format

```sh
npm run check
```

#### Debug

1. Run `npm run build`
Expand All @@ -116,12 +137,12 @@ webview/ # Webview (Browser, React)
main.tsx # React entry point
App.tsx # State management & SSE event handling
vscode-api.ts # VS Code Webview API wrapper
styles.css # Styles using VS Code theme variables
components/ # React components

dist/ # Build output (not tracked by git)
extension.js # Extension bundle
webview/ # Webview bundle
components/ # React components (CSS Modules)
hooks/ # Custom React hooks
contexts/ # React Context providers
locales/ # i18n locale files
utils/ # Utility functions
__tests__/ # Tests (unit, scenario)

esbuild.mjs # Extension build config
vite.config.ts # Webview build config
Expand All @@ -148,6 +169,10 @@ OpenCode の全機能をサイドバーのチャット UI から操作できま
> **免責事項:**
> 本プロジェクトは実験的な取り組みであり、主に AI を活用したコーディングにより開発されています。いかなる保証もなく「現状のまま」提供されます。予期しない動作、一般的でない実装、未発見の不具合が含まれる可能性があります。ご利用は自己責任でお願いいたします。本ソフトウェアの使用により生じたいかなる損害についても、作者は一切の責任を負いません。

### デモ

![デモ](media/demo.gif)

### ドキュメント

| ファイル | 説明 |
Expand All @@ -163,16 +188,27 @@ OpenCode の全機能をサイドバーのチャット UI から操作できま
- Markdown レンダリング
- ツールコールの折りたたみ表示
- パーミッション承認 UI(Allow / Once / Deny)
- セッション管理(作成、切替、削除)
- セッション管理(作成、切替、フォーク、削除)
- メッセージ編集とチェックポイント復元
- モデル選択
- ファイルコンテキスト添付
- ファイル変更差分表示
- シェルコマンド実行
- コンテキスト圧縮インジケーター
- 推論(思考過程)表示
- Todo 表示
- Undo / Redo
- セッション共有
- エージェントメンション(`@` メンション)
- 子セッションナビゲーション(サブタスク)
- 設定パネル
- インラインポップアップのキーボードナビゲーション(Tab / 矢印キー)
- サブタスク表示
- 多言語対応(英語、日本語)

### 必要条件

- [OpenCode](https://github.com/opencode-ai/opencode) がインストール済みであること
- [OpenCode](https://github.com/anomalyco/opencode) がインストール済みであること
- OpenCode 側で LLM プロバイダの認証が完了していること

### インストール
Expand Down Expand Up @@ -218,6 +254,12 @@ npm run watch:ext
npm run watch:webview
```

#### リント & フォーマット

```sh
npm run check
```

#### デバッグ実行

1. `npm run build` でビルドする
Expand All @@ -238,16 +280,16 @@ src/ # Extension Host (Node.js)
opencode-client.ts # OpenCode サーバー接続
chat-view-provider.ts # Webview パネル & メッセージングプロトコル

webview/ # Webview (ブラウザ, React)
webview/ # Webview (Browser, React)
main.tsx # React エントリーポイント
App.tsx # 状態管理 & SSE イベントハンドリング
vscode-api.ts # VS Code Webview API ラッパー
styles.css # VS Code テーマ変数を使ったスタイル
components/ # React コンポーネント

dist/ # ビルド出力(git 管理外)
extension.js # Extension バンドル
webview/ # Webview バンドル
components/ # React コンポーネント(CSS Modules)
hooks/ # カスタム React フック
contexts/ # React Context プロバイダー
locales/ # i18n ロケールファイル
utils/ # ユーティリティ関数
__tests__/ # テスト(単体、シナリオ)

esbuild.mjs # Extension ビルド設定
vite.config.ts # Webview ビルド設定
Expand Down
Loading