aipanel-cli 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -43
- package/dist/src/app/AipanelApp.d.ts +6 -3
- package/dist/src/app/AipanelApp.js +22 -14
- package/dist/src/app/AipanelApp.js.map +1 -1
- package/dist/src/app/CommandRouter.js +27 -6
- package/dist/src/app/CommandRouter.js.map +1 -1
- package/dist/src/app/ProfileLoader.d.ts +3 -2
- package/dist/src/app/ProfileLoader.js +6 -5
- package/dist/src/app/ProfileLoader.js.map +1 -1
- package/dist/src/artifact/ArtifactRepository.d.ts +4 -9
- package/dist/src/artifact/ArtifactRepository.js +24 -60
- package/dist/src/artifact/ArtifactRepository.js.map +1 -1
- package/dist/src/cli/aipanel.js +2 -1
- package/dist/src/cli/aipanel.js.map +1 -1
- package/dist/src/compare/ComparisonEngine.d.ts +10 -1
- package/dist/src/compare/ComparisonEngine.js.map +1 -1
- package/dist/src/compare/ResponseNormalizer.d.ts +3 -2
- package/dist/src/compare/ResponseNormalizer.js +4 -2
- package/dist/src/compare/ResponseNormalizer.js.map +1 -1
- package/dist/src/context/ContextCollector.d.ts +5 -4
- package/dist/src/context/ContextCollector.js +4 -2
- package/dist/src/context/ContextCollector.js.map +1 -1
- package/dist/src/domain/artifact.d.ts +3 -2
- package/dist/src/domain/artifact.js +7 -7
- package/dist/src/domain/base.d.ts +0 -1
- package/dist/src/domain/base.js +1 -7
- package/dist/src/domain/base.js.map +1 -1
- package/dist/src/domain/run.d.ts +11 -23
- package/dist/src/domain/run.js +59 -51
- package/dist/src/domain/run.js.map +1 -1
- package/dist/src/domain/session.d.ts +6 -5
- package/dist/src/domain/session.js +9 -7
- package/dist/src/domain/session.js.map +1 -1
- package/dist/src/domain/value-objects.js +3 -1
- package/dist/src/domain/value-objects.js.map +1 -1
- package/dist/src/output/ResultRenderer.d.ts +3 -2
- package/dist/src/output/ResultRenderer.js +3 -0
- package/dist/src/output/ResultRenderer.js.map +1 -1
- package/dist/src/providers/ClaudeCodeAdapter.d.ts +1 -0
- package/dist/src/providers/ClaudeCodeAdapter.js +3 -0
- package/dist/src/providers/ClaudeCodeAdapter.js.map +1 -1
- package/dist/src/providers/CodexExecAdapter.d.ts +5 -0
- package/dist/src/providers/CodexExecAdapter.js +128 -0
- package/dist/src/providers/CodexExecAdapter.js.map +1 -0
- package/dist/src/providers/ProviderAdapter.d.ts +2 -0
- package/dist/src/providers/ProviderRegistry.d.ts +3 -2
- package/dist/src/providers/ProviderRegistry.js +3 -3
- package/dist/src/providers/ProviderRegistry.js.map +1 -1
- package/dist/src/run/RunCoordinator.d.ts +10 -16
- package/dist/src/run/RunCoordinator.js +5 -20
- package/dist/src/run/RunCoordinator.js.map +1 -1
- package/dist/src/run/RunRepository.d.ts +3 -7
- package/dist/src/run/RunRepository.js +9 -45
- package/dist/src/run/RunRepository.js.map +1 -1
- package/dist/src/session/SessionManager.d.ts +5 -3
- package/dist/src/session/SessionManager.js +5 -6
- package/dist/src/session/SessionManager.js.map +1 -1
- package/dist/src/session/SessionRepository.d.ts +3 -5
- package/dist/src/session/SessionRepository.js +14 -28
- package/dist/src/session/SessionRepository.js.map +1 -1
- package/dist/src/shared/clock.d.ts +0 -1
- package/dist/src/shared/clock.js +0 -3
- package/dist/src/shared/clock.js.map +1 -1
- package/dist/src/shared/file-system.d.ts +0 -6
- package/dist/src/shared/file-system.js +1 -23
- package/dist/src/shared/file-system.js.map +1 -1
- package/dist/src/usecases/ConsultUseCase.d.ts +4 -1
- package/dist/src/usecases/ConsultUseCase.js +10 -6
- package/dist/src/usecases/ConsultUseCase.js.map +1 -1
- package/dist/src/usecases/DebugUseCase.d.ts +4 -1
- package/dist/src/usecases/DebugUseCase.js +25 -6
- package/dist/src/usecases/DebugUseCase.js.map +1 -1
- package/dist/src/usecases/FollowupUseCase.js.map +1 -1
- package/package.json +19 -63
- package/dist/src/app/WorkflowSelector.d.ts +0 -4
- package/dist/src/app/WorkflowSelector.js +0 -6
- package/dist/src/app/WorkflowSelector.js.map +0 -1
- package/dist/src/app/index.d.ts +0 -4
- package/dist/src/app/index.js +0 -5
- package/dist/src/app/index.js.map +0 -1
- package/dist/src/app/types.d.ts +0 -36
- package/dist/src/app/types.js +0 -2
- package/dist/src/app/types.js.map +0 -1
- package/dist/src/artifact/index.d.ts +0 -1
- package/dist/src/artifact/index.js +0 -2
- package/dist/src/artifact/index.js.map +0 -1
- package/dist/src/compare/index.d.ts +0 -3
- package/dist/src/compare/index.js +0 -3
- package/dist/src/compare/index.js.map +0 -1
- package/dist/src/context/index.d.ts +0 -2
- package/dist/src/context/index.js +0 -2
- package/dist/src/context/index.js.map +0 -1
- package/dist/src/domain/index.d.ts +0 -5
- package/dist/src/domain/index.js +0 -6
- package/dist/src/domain/index.js.map +0 -1
- package/dist/src/index.d.ts +0 -16
- package/dist/src/index.js +0 -16
- package/dist/src/index.js.map +0 -1
- package/dist/src/orchestrator/PlanBuilder.d.ts +0 -6
- package/dist/src/orchestrator/PlanBuilder.js +0 -59
- package/dist/src/orchestrator/PlanBuilder.js.map +0 -1
- package/dist/src/orchestrator/ResultMerger.d.ts +0 -10
- package/dist/src/orchestrator/ResultMerger.js +0 -19
- package/dist/src/orchestrator/ResultMerger.js.map +0 -1
- package/dist/src/orchestrator/TaskExecutor.d.ts +0 -20
- package/dist/src/orchestrator/TaskExecutor.js +0 -81
- package/dist/src/orchestrator/TaskExecutor.js.map +0 -1
- package/dist/src/orchestrator/TaskScheduler.d.ts +0 -4
- package/dist/src/orchestrator/TaskScheduler.js +0 -19
- package/dist/src/orchestrator/TaskScheduler.js.map +0 -1
- package/dist/src/orchestrator/ValidationRunner.d.ts +0 -4
- package/dist/src/orchestrator/ValidationRunner.js +0 -22
- package/dist/src/orchestrator/ValidationRunner.js.map +0 -1
- package/dist/src/orchestrator/index.d.ts +0 -5
- package/dist/src/orchestrator/index.js +0 -6
- package/dist/src/orchestrator/index.js.map +0 -1
- package/dist/src/output/index.d.ts +0 -1
- package/dist/src/output/index.js +0 -2
- package/dist/src/output/index.js.map +0 -1
- package/dist/src/providers/index.d.ts +0 -3
- package/dist/src/providers/index.js +0 -4
- package/dist/src/providers/index.js.map +0 -1
- package/dist/src/run/index.d.ts +0 -2
- package/dist/src/run/index.js +0 -3
- package/dist/src/run/index.js.map +0 -1
- package/dist/src/session/index.d.ts +0 -2
- package/dist/src/session/index.js +0 -3
- package/dist/src/session/index.js.map +0 -1
- package/dist/src/shared/contracts.d.ts +0 -254
- package/dist/src/shared/contracts.js +0 -2
- package/dist/src/shared/contracts.js.map +0 -1
- package/dist/src/shared/errors.d.ts +0 -9
- package/dist/src/shared/errors.js +0 -11
- package/dist/src/shared/errors.js.map +0 -1
- package/dist/src/shared/index.d.ts +0 -4
- package/dist/src/shared/index.js +0 -5
- package/dist/src/shared/index.js.map +0 -1
- package/dist/src/usecases/CompareUseCase.d.ts +0 -6
- package/dist/src/usecases/CompareUseCase.js +0 -9
- package/dist/src/usecases/CompareUseCase.js.map +0 -1
- package/dist/src/usecases/helpers.d.ts +0 -9
- package/dist/src/usecases/helpers.js +0 -31
- package/dist/src/usecases/helpers.js.map +0 -1
- package/dist/src/usecases/index.d.ts +0 -5
- package/dist/src/usecases/index.js +0 -6
- package/dist/src/usecases/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
# aipanel
|
|
2
2
|
|
|
3
|
-
`aipanel` は、Claude Code を provider として使いながら、相談、継続会話、デバッグ調査を CLI で進めるための TypeScript 製 broker / orchestrator です。
|
|
3
|
+
`aipanel` は、Claude Code と Codex を provider として使いながら、相談、継続会話、デバッグ調査を CLI で進めるための TypeScript 製 broker / orchestrator です。
|
|
4
4
|
|
|
5
|
-
現時点の phase 1 では、`claude-code`
|
|
5
|
+
現時点の phase 1 では、`claude-code` と `codex` の direct provider を前提に、`Session / Run / Artifact` を `aipanel` 側で正本管理します。
|
|
6
6
|
|
|
7
7
|
## Current Status
|
|
8
|
+
|
|
8
9
|
- phase 1 実装済み
|
|
9
|
-
- provider は `claude-code`
|
|
10
|
+
- provider は `claude-code`, `codex`
|
|
10
11
|
- 利用可能 command は `providers`, `consult`, `followup`, `debug`
|
|
11
|
-
- `compare` は phase
|
|
12
|
+
- `compare` は phase 1 の対象外
|
|
12
13
|
|
|
13
14
|
## Setup
|
|
15
|
+
|
|
14
16
|
```bash
|
|
15
17
|
npm install
|
|
16
18
|
npm run build
|
|
@@ -38,43 +40,46 @@ npm run dev -- providers --json
|
|
|
38
40
|
make dev
|
|
39
41
|
```
|
|
40
42
|
|
|
41
|
-
##
|
|
43
|
+
## Worktree Shortcut
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
`aipanel` 直下の `.worktree/` に Git worktree を増やしたいときは、以下のショートカットが使えます。
|
|
44
46
|
|
|
45
47
|
```bash
|
|
46
|
-
npm
|
|
47
|
-
|
|
48
|
+
npm run worktree:add -- feature/debug-ui
|
|
49
|
+
make worktree-add BRANCH=feature/debug-ui
|
|
48
50
|
```
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
## Import Usage
|
|
52
|
+
補足:
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
- 既存の local branch があればその branch をそのまま開きます
|
|
55
|
+
- `origin/<branch>` だけ存在する場合は tracking branch を作ります
|
|
56
|
+
- どちらもない場合は `HEAD` から新しい branch を作ります
|
|
57
|
+
- 配置先は `.worktree/<branch>` です
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
import { AipanelApp, Session, runCli } from "aipanel-cli";
|
|
58
|
-
import { Run } from "aipanel-cli/domain";
|
|
59
|
+
base を変えたい場合:
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
```bash
|
|
62
|
+
npm run worktree:add -- feature/debug-ui --base origin/main
|
|
63
|
+
make worktree-add BRANCH=feature/debug-ui BASE=origin/main
|
|
64
|
+
```
|
|
63
65
|
|
|
64
|
-
|
|
66
|
+
一覧確認:
|
|
65
67
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
command: "consult",
|
|
70
|
-
mode: "direct",
|
|
71
|
-
});
|
|
68
|
+
```bash
|
|
69
|
+
npm run worktree:list
|
|
70
|
+
make worktree-list
|
|
72
71
|
```
|
|
73
72
|
|
|
74
|
-
|
|
73
|
+
## Package Install
|
|
75
74
|
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
公開後は package として install できます。
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npm install -g aipanel-cli
|
|
79
|
+
aipanel providers --json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
2026-03-10 JST 時点で、registry 経由の `npm install aipanel-cli` と `aipanel providers --json` まで確認済みです。
|
|
78
83
|
|
|
79
84
|
公開前のローカル確認は tarball か `Makefile` で行えます。
|
|
80
85
|
|
|
@@ -102,11 +107,12 @@ make publish
|
|
|
102
107
|
```
|
|
103
108
|
|
|
104
109
|
## Commands
|
|
110
|
+
|
|
105
111
|
```bash
|
|
106
112
|
node dist/bin/aipanel.js providers [--json]
|
|
107
|
-
node dist/bin/aipanel.js consult "<question>" [--cwd <dir>] [--file <path>] [--diff <path>] [--log <path>] [--timeout <ms>] [--json]
|
|
108
|
-
node dist/bin/aipanel.js followup --session <sessionId> "<question>" [--cwd <dir>] [--timeout <ms>] [--json]
|
|
109
|
-
node dist/bin/aipanel.js debug "<question>" [--cwd <dir>] [--file <path>] [--diff <path>] [--log <path>] [--timeout <ms>] [--json]
|
|
113
|
+
node dist/bin/aipanel.js consult "<question>" [--provider <name>] [--cwd <dir>] [--file <path>] [--diff <path>] [--log <path>] [--model <name>] [--timeout <ms>] [--json]
|
|
114
|
+
node dist/bin/aipanel.js followup --session <sessionId> "<question>" [--provider <name>] [--cwd <dir>] [--model <name>] [--timeout <ms>] [--json]
|
|
115
|
+
node dist/bin/aipanel.js debug "<question>" [--provider <name>] [--cwd <dir>] [--file <path>] [--diff <path>] [--log <path>] [--model <name>] [--timeout <ms>] [--json]
|
|
110
116
|
```
|
|
111
117
|
|
|
112
118
|
repo からのショートカット:
|
|
@@ -121,15 +127,19 @@ make run ARGS='debug "この不具合の根本原因は?" --json --timeout 600
|
|
|
121
127
|
|
|
122
128
|
```bash
|
|
123
129
|
node dist/bin/aipanel.js consult "この設計どう?" --json
|
|
124
|
-
node dist/bin/aipanel.js consult "このログから原因わかる?" --cwd ./repo --log logs/app.log --file src/server.ts --json
|
|
125
|
-
node dist/bin/aipanel.js
|
|
126
|
-
node dist/bin/aipanel.js
|
|
130
|
+
node dist/bin/aipanel.js consult "このログから原因わかる?" --cwd ./repo --log logs/app.log --file src/server.ts --model sonnet --json
|
|
131
|
+
node dist/bin/aipanel.js consult "この差分レビューして" --provider codex --cwd ./repo --file src/server.ts --log logs/app.log --json
|
|
132
|
+
node dist/bin/aipanel.js followup --session session_xxx "この修正方針で進めていい?" --model sonnet --json
|
|
133
|
+
node dist/bin/aipanel.js debug "この不具合の根本原因は?" --cwd ./repo --file src/cache.ts --log logs/error.log --model sonnet --json
|
|
127
134
|
```
|
|
128
135
|
|
|
129
136
|
## Runtime Notes
|
|
137
|
+
|
|
130
138
|
- `--cwd` は provider 実行ディレクトリだけでなく、`--file`, `--diff`, `--log` の相対パス解決にも使われます
|
|
139
|
+
- `--model` は選択した provider にそのまま渡されます。未指定時は `.aipanel/profile.yml` の `defaultModel` を優先し、さらに未設定なら provider 側の既定を使います
|
|
131
140
|
- `AIPANEL_STORAGE_ROOT` を指定すると、session / run / artifact の保存先を切り替えられます
|
|
132
|
-
- `followup` は Claude Code の native resume を正本にせず、`aipanel` 側の session 履歴再構築を基本にしています
|
|
141
|
+
- `followup` は Claude Code / Codex の native resume を正本にせず、`aipanel` 側の session 履歴再構築を基本にしています
|
|
142
|
+
- `debug` の `--timeout` は orchestrated mode の各 provider call に適用されるので、合計所要時間は 3 倍近くになることがあります
|
|
133
143
|
|
|
134
144
|
例:
|
|
135
145
|
|
|
@@ -137,7 +147,19 @@ node dist/bin/aipanel.js debug "この不具合の根本原因は?" --cwd ./re
|
|
|
137
147
|
AIPANEL_STORAGE_ROOT="$(mktemp -d)" node dist/bin/aipanel.js consult "Reply with exactly: ready" --json --timeout 30000
|
|
138
148
|
```
|
|
139
149
|
|
|
150
|
+
profile で既定 model を固定したい場合:
|
|
151
|
+
|
|
152
|
+
```yaml
|
|
153
|
+
# .aipanel/profile.yml
|
|
154
|
+
defaultProvider: claude-code
|
|
155
|
+
defaultModel: sonnet
|
|
156
|
+
defaultTimeoutMs: 120000
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Codex を既定 provider にしたい場合は、`defaultProvider: codex` を指定したうえで `defaultModel` を省略して Codex CLI 側の既定を使うか、使いたい model を明示的に書いてください。
|
|
160
|
+
|
|
140
161
|
## Storage Layout
|
|
162
|
+
|
|
141
163
|
デフォルトでは `./.aipanel` 配下に保存します。
|
|
142
164
|
|
|
143
165
|
```text
|
|
@@ -159,53 +181,64 @@ AIPANEL_STORAGE_ROOT="$(mktemp -d)" node dist/bin/aipanel.js consult "Reply with
|
|
|
159
181
|
- `artifacts/`: context bundle, provider raw text/json, debug task outputs
|
|
160
182
|
|
|
161
183
|
## Tests
|
|
184
|
+
|
|
162
185
|
```bash
|
|
186
|
+
npm run lint
|
|
187
|
+
npm run fmt:check
|
|
163
188
|
npm run typecheck
|
|
164
189
|
npm run test:unit
|
|
165
190
|
npm run test:integration
|
|
166
191
|
npm run test:e2e
|
|
167
192
|
npm test
|
|
193
|
+
npm run audit
|
|
168
194
|
```
|
|
169
195
|
|
|
170
196
|
`Makefile` 経由でも同じ確認ができます。
|
|
171
197
|
|
|
172
198
|
```bash
|
|
199
|
+
make lint
|
|
200
|
+
make fmt-check
|
|
173
201
|
make typecheck
|
|
174
202
|
make test
|
|
203
|
+
make audit
|
|
175
204
|
```
|
|
176
205
|
|
|
177
206
|
テストの役割:
|
|
178
207
|
|
|
179
208
|
- `test:unit`: `ResponseNormalizer`, `ContextCollector`, `SessionManager`
|
|
180
|
-
- `test:integration`: built CLI + fake Claude provider で `providers/consult/followup/debug`
|
|
209
|
+
- `test:integration`: built CLI + fake Claude/Codex provider で `providers/consult/followup/debug`
|
|
181
210
|
- `test:e2e`: built CLI の永続化込みフルフロー確認
|
|
211
|
+
- integration / E2E では `defaultModel` fallback と `--model` override の両方を確認
|
|
182
212
|
|
|
183
213
|
## Verified Smoke Checks
|
|
214
|
+
|
|
184
215
|
2026-03-10 JST 時点で、以下を実行確認済みです。
|
|
185
216
|
|
|
217
|
+
- `npm run lint`
|
|
218
|
+
- `npm run fmt:check`
|
|
186
219
|
- `npm run typecheck`
|
|
187
220
|
- `npm test`
|
|
221
|
+
- `npm run audit`
|
|
188
222
|
- `npm run build`
|
|
189
223
|
- `npm run verify:package`
|
|
190
224
|
- `npm run dev -- providers --json`
|
|
191
225
|
- `npm start -- providers --json`
|
|
192
226
|
- `make smoke`
|
|
193
227
|
- `npm install --prefix "$tmpdir" aipanel-cli`
|
|
194
|
-
- `import("aipanel-cli")`
|
|
195
|
-
- `import("aipanel-cli/domain")`
|
|
196
228
|
- `node dist/bin/aipanel.js providers --json`
|
|
197
229
|
- 実 Claude Code を使った `consult`
|
|
198
230
|
- 実 Claude Code を使った `followup`
|
|
199
231
|
- 実 Claude Code を使った `debug`
|
|
232
|
+
- 実 Claude Code を使った `consult --model sonnet`
|
|
200
233
|
|
|
201
234
|
## Repo Skill
|
|
202
|
-
|
|
203
|
-
-
|
|
204
|
-
-
|
|
205
|
-
-
|
|
206
|
-
- draw.io 専用 sub-agent 定義は [drawio-diagrammer.yaml](./docs/skills/aipanel-diagrams/subagents/drawio-diagrammer.yaml) にあります
|
|
235
|
+
|
|
236
|
+
- 公開用の `aipanel-cli` 利用ガイド Skill は [skills/use-aipanel-cli/SKILL.md](./skills/use-aipanel-cli/SKILL.md) にあります
|
|
237
|
+
- `npx skills add sean-sunagaku/aipanel --skill use-aipanel-cli` で install できます
|
|
238
|
+
- install / build / command usage / TypeScript import / storage layout の入口を 1 本にまとめています
|
|
207
239
|
|
|
208
240
|
## Architecture Docs
|
|
241
|
+
|
|
209
242
|
- [Overview](./docs/rearchitecture/content_rearchitecture_2026-03-10/00_overview/00_overview.md)
|
|
210
243
|
- [Current Implementation Diagrams](./docs/rearchitecture/content_rearchitecture_2026-03-10/12_current-implementation-diagrams/12_current-implementation-diagrams.md)
|
|
211
244
|
- [Comparison](./docs/rearchitecture/content_rearchitecture_2026-03-10/06_comparison/06_comparison.md)
|
|
@@ -216,3 +249,4 @@ make test
|
|
|
216
249
|
- [Data Flow](./docs/rearchitecture/content_rearchitecture_2026-03-10/09_data-flow/09_data-flow.md)
|
|
217
250
|
- [Broker + Orchestrator Internal Design](./docs/rearchitecture/broker_orchestrator_design_2026-03-10/00_overview/00_overview.md)
|
|
218
251
|
- [NPM Package Distribution](./docs/distribution/npm-package.md)
|
|
252
|
+
- [Usage Improvement Notes](./docs/usage-review/aipanel-usage-improvements_2026-03-10.md)
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { ResultRenderer } from "../output/ResultRenderer.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ProviderRegistry } from "../providers/ProviderRegistry.js";
|
|
3
|
+
import { ConsultUseCase } from "../usecases/ConsultUseCase.js";
|
|
4
|
+
import { DebugUseCase } from "../usecases/DebugUseCase.js";
|
|
5
|
+
import { FollowupUseCase } from "../usecases/FollowupUseCase.js";
|
|
6
|
+
import { ListProvidersUseCase } from "../usecases/ListProvidersUseCase.js";
|
|
3
7
|
import { ProfileLoader } from "./ProfileLoader.js";
|
|
4
|
-
import { WorkflowSelector } from "./WorkflowSelector.js";
|
|
5
8
|
export declare class AipanelApp {
|
|
6
9
|
readonly profileLoader: ProfileLoader;
|
|
7
|
-
readonly workflowSelector: WorkflowSelector;
|
|
8
10
|
readonly resultRenderer: ResultRenderer;
|
|
11
|
+
readonly providerRegistry: ProviderRegistry;
|
|
9
12
|
readonly listProvidersUseCase: ListProvidersUseCase;
|
|
10
13
|
readonly consultUseCase: ConsultUseCase;
|
|
11
14
|
readonly followupUseCase: FollowupUseCase;
|
|
@@ -3,39 +3,47 @@ import { ArtifactRepository } from "../artifact/ArtifactRepository.js";
|
|
|
3
3
|
import { ComparisonEngine } from "../compare/ComparisonEngine.js";
|
|
4
4
|
import { ContextCollector } from "../context/ContextCollector.js";
|
|
5
5
|
import { ResultRenderer } from "../output/ResultRenderer.js";
|
|
6
|
-
import { ClaudeCodeAdapter
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { ClaudeCodeAdapter } from "../providers/ClaudeCodeAdapter.js";
|
|
7
|
+
import { CodexExecAdapter } from "../providers/CodexExecAdapter.js";
|
|
8
|
+
import { ProviderRegistry } from "../providers/ProviderRegistry.js";
|
|
9
|
+
import { RunCoordinator } from "../run/RunCoordinator.js";
|
|
10
|
+
import { RunRepository } from "../run/RunRepository.js";
|
|
11
|
+
import { SessionManager } from "../session/SessionManager.js";
|
|
12
|
+
import { SessionRepository } from "../session/SessionRepository.js";
|
|
13
|
+
import { ConsultUseCase } from "../usecases/ConsultUseCase.js";
|
|
14
|
+
import { DebugUseCase } from "../usecases/DebugUseCase.js";
|
|
15
|
+
import { FollowupUseCase } from "../usecases/FollowupUseCase.js";
|
|
16
|
+
import { ListProvidersUseCase } from "../usecases/ListProvidersUseCase.js";
|
|
10
17
|
import { ProfileLoader } from "./ProfileLoader.js";
|
|
11
|
-
import { WorkflowSelector } from "./WorkflowSelector.js";
|
|
12
18
|
export class AipanelApp {
|
|
13
19
|
profileLoader;
|
|
14
|
-
workflowSelector;
|
|
15
20
|
resultRenderer;
|
|
21
|
+
providerRegistry;
|
|
16
22
|
listProvidersUseCase;
|
|
17
23
|
consultUseCase;
|
|
18
24
|
followupUseCase;
|
|
19
25
|
debugUseCase;
|
|
20
|
-
constructor({ storageRoot = process.env.AIPANEL_STORAGE_ROOT ??
|
|
26
|
+
constructor({ storageRoot = process.env.AIPANEL_STORAGE_ROOT ??
|
|
27
|
+
path.join(process.cwd(), ".aipanel"), cwd = process.env.AIPANEL_CWD ?? process.cwd(), } = {}) {
|
|
21
28
|
this.profileLoader = new ProfileLoader(storageRoot);
|
|
22
|
-
this.workflowSelector = new WorkflowSelector();
|
|
23
29
|
this.resultRenderer = new ResultRenderer();
|
|
24
30
|
const sessionRepository = new SessionRepository({ storageRoot });
|
|
25
31
|
const runRepository = new RunRepository({ storageRoot });
|
|
26
32
|
const artifactRepository = new ArtifactRepository({ storageRoot });
|
|
27
|
-
const sessionManager = new SessionManager({
|
|
33
|
+
const sessionManager = new SessionManager({
|
|
34
|
+
repository: sessionRepository,
|
|
35
|
+
});
|
|
28
36
|
const runCoordinator = new RunCoordinator({ repository: runRepository });
|
|
29
37
|
const contextCollector = new ContextCollector({ cwd });
|
|
30
|
-
|
|
31
|
-
adapters: [new ClaudeCodeAdapter()],
|
|
38
|
+
this.providerRegistry = new ProviderRegistry({
|
|
39
|
+
adapters: [new ClaudeCodeAdapter(), new CodexExecAdapter()],
|
|
32
40
|
defaultProvider: "claude-code",
|
|
33
41
|
});
|
|
34
|
-
this.listProvidersUseCase = new ListProvidersUseCase(providerRegistry);
|
|
42
|
+
this.listProvidersUseCase = new ListProvidersUseCase(this.providerRegistry);
|
|
35
43
|
this.consultUseCase = new ConsultUseCase({
|
|
36
44
|
sessionManager,
|
|
37
45
|
runCoordinator,
|
|
38
|
-
providerRegistry,
|
|
46
|
+
providerRegistry: this.providerRegistry,
|
|
39
47
|
contextCollector,
|
|
40
48
|
artifactRepository,
|
|
41
49
|
});
|
|
@@ -43,7 +51,7 @@ export class AipanelApp {
|
|
|
43
51
|
this.debugUseCase = new DebugUseCase({
|
|
44
52
|
sessionManager,
|
|
45
53
|
runCoordinator,
|
|
46
|
-
providerRegistry,
|
|
54
|
+
providerRegistry: this.providerRegistry,
|
|
47
55
|
contextCollector,
|
|
48
56
|
artifactRepository,
|
|
49
57
|
comparisonEngine: new ComparisonEngine(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AipanelApp.js","sourceRoot":"","sources":["../../../src/app/AipanelApp.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"AipanelApp.js","sourceRoot":"","sources":["../../../src/app/AipanelApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,11 @@ function parseArgs(argv) {
|
|
|
42
42
|
index += 1;
|
|
43
43
|
continue;
|
|
44
44
|
}
|
|
45
|
+
if (token === "--model") {
|
|
46
|
+
parsed.model = readFlagValue(rest, index + 1, "--model");
|
|
47
|
+
index += 1;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
45
50
|
if (token === "--timeout") {
|
|
46
51
|
const timeout = Number(readFlagValue(rest, index + 1, "--timeout"));
|
|
47
52
|
index += 1;
|
|
@@ -83,6 +88,10 @@ export class CommandRouter {
|
|
|
83
88
|
const parsed = parseArgs(argv);
|
|
84
89
|
const profile = await this.app.profileLoader.load();
|
|
85
90
|
const providerName = parsed.providerName ?? profile.defaultProvider;
|
|
91
|
+
const shouldUseProfileModel = !parsed.providerName || parsed.providerName === profile.defaultProvider;
|
|
92
|
+
const model = parsed.model ??
|
|
93
|
+
(shouldUseProfileModel ? profile.defaultModel : undefined) ??
|
|
94
|
+
this.app.providerRegistry.getDefaultModel(providerName);
|
|
86
95
|
const timeoutMs = parsed.timeoutMs ?? profile.defaultTimeoutMs;
|
|
87
96
|
switch (parsed.command) {
|
|
88
97
|
case "providers": {
|
|
@@ -100,10 +109,14 @@ export class CommandRouter {
|
|
|
100
109
|
providerName,
|
|
101
110
|
timeoutMs,
|
|
102
111
|
cwd: parsed.cwd ?? process.cwd(),
|
|
112
|
+
...(model !== undefined ? { model } : {}),
|
|
103
113
|
...(parsed.sessionId ? { sessionId: parsed.sessionId } : {}),
|
|
104
114
|
});
|
|
105
115
|
const rendered = this.app.resultRenderer.render(result, parsed.outputFormat);
|
|
106
|
-
return {
|
|
116
|
+
return {
|
|
117
|
+
output: rendered.text,
|
|
118
|
+
exitCode: result.status === "partial" ? 2 : 0,
|
|
119
|
+
};
|
|
107
120
|
}
|
|
108
121
|
case "followup": {
|
|
109
122
|
if (!parsed.sessionId) {
|
|
@@ -118,9 +131,13 @@ export class CommandRouter {
|
|
|
118
131
|
providerName,
|
|
119
132
|
timeoutMs,
|
|
120
133
|
cwd: parsed.cwd ?? process.cwd(),
|
|
134
|
+
...(model !== undefined ? { model } : {}),
|
|
121
135
|
});
|
|
122
136
|
const rendered = this.app.resultRenderer.render(result, parsed.outputFormat);
|
|
123
|
-
return {
|
|
137
|
+
return {
|
|
138
|
+
output: rendered.text,
|
|
139
|
+
exitCode: result.status === "partial" ? 2 : 0,
|
|
140
|
+
};
|
|
124
141
|
}
|
|
125
142
|
case "debug": {
|
|
126
143
|
const result = await this.app.debugUseCase.execute({
|
|
@@ -131,10 +148,14 @@ export class CommandRouter {
|
|
|
131
148
|
providerName,
|
|
132
149
|
timeoutMs,
|
|
133
150
|
cwd: parsed.cwd ?? process.cwd(),
|
|
151
|
+
...(model !== undefined ? { model } : {}),
|
|
134
152
|
...(parsed.sessionId ? { sessionId: parsed.sessionId } : {}),
|
|
135
153
|
});
|
|
136
154
|
const rendered = this.app.resultRenderer.render(result, parsed.outputFormat);
|
|
137
|
-
return {
|
|
155
|
+
return {
|
|
156
|
+
output: rendered.text,
|
|
157
|
+
exitCode: result.status === "partial" ? 2 : 0,
|
|
158
|
+
};
|
|
138
159
|
}
|
|
139
160
|
case "help":
|
|
140
161
|
default:
|
|
@@ -142,9 +163,9 @@ export class CommandRouter {
|
|
|
142
163
|
output: [
|
|
143
164
|
"Usage:",
|
|
144
165
|
" aipanel providers [--json]",
|
|
145
|
-
" aipanel consult <question> [--provider <name>] [--file <path>] [--diff <path>] [--log <path>] [--json]",
|
|
146
|
-
" aipanel followup --session <id> <question> [--provider <name>] [--json]",
|
|
147
|
-
" aipanel debug <question> [--provider <name>] [--file <path>] [--diff <path>] [--log <path>] [--json]",
|
|
166
|
+
" aipanel consult <question> [--provider <name>] [--model <name>] [--file <path>] [--diff <path>] [--log <path>] [--json]",
|
|
167
|
+
" aipanel followup --session <id> <question> [--provider <name>] [--model <name>] [--json]",
|
|
168
|
+
" aipanel debug <question> [--provider <name>] [--model <name>] [--file <path>] [--diff <path>] [--log <path>] [--json]",
|
|
148
169
|
].join("\n"),
|
|
149
170
|
exitCode: parsed.command === "help" ? 0 : 1,
|
|
150
171
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandRouter.js","sourceRoot":"","sources":["../../../src/app/CommandRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"CommandRouter.js","sourceRoot":"","sources":["../../../src/app/CommandRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
interface Profile {
|
|
2
2
|
defaultProvider: string;
|
|
3
|
+
defaultModel?: string;
|
|
3
4
|
defaultTimeoutMs: number;
|
|
4
5
|
}
|
|
5
6
|
export declare class ProfileLoader {
|
|
6
7
|
readonly storageRoot: string;
|
|
7
8
|
constructor(storageRoot?: string);
|
|
8
|
-
get profilePath(): string;
|
|
9
9
|
load(): Promise<Profile>;
|
|
10
10
|
}
|
|
11
|
+
export {};
|
|
@@ -16,6 +16,9 @@ function parseSimpleYaml(text) {
|
|
|
16
16
|
if (key === "defaultProvider") {
|
|
17
17
|
profile.defaultProvider = value;
|
|
18
18
|
}
|
|
19
|
+
if (key === "defaultModel") {
|
|
20
|
+
profile.defaultModel = value;
|
|
21
|
+
}
|
|
19
22
|
if (key === "defaultTimeoutMs") {
|
|
20
23
|
const timeout = Number(value);
|
|
21
24
|
if (Number.isFinite(timeout)) {
|
|
@@ -30,18 +33,16 @@ export class ProfileLoader {
|
|
|
30
33
|
constructor(storageRoot = path.join(process.cwd(), ".aipanel")) {
|
|
31
34
|
this.storageRoot = storageRoot;
|
|
32
35
|
}
|
|
33
|
-
get profilePath() {
|
|
34
|
-
return path.join(this.storageRoot, "profile.yml");
|
|
35
|
-
}
|
|
36
36
|
async load() {
|
|
37
37
|
const defaults = {
|
|
38
38
|
defaultProvider: "claude-code",
|
|
39
39
|
defaultTimeoutMs: 120000,
|
|
40
40
|
};
|
|
41
|
-
|
|
41
|
+
const profilePath = path.join(this.storageRoot, "profile.yml");
|
|
42
|
+
if (!(await pathExists(profilePath))) {
|
|
42
43
|
return defaults;
|
|
43
44
|
}
|
|
44
|
-
const text = await readText(
|
|
45
|
+
const text = await readText(profilePath, "utf8");
|
|
45
46
|
return {
|
|
46
47
|
...defaults,
|
|
47
48
|
...parseSimpleYaml(text),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileLoader.js","sourceRoot":"","sources":["../../../src/app/ProfileLoader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ProfileLoader.js","sourceRoot":"","sources":["../../../src/app/ProfileLoader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAQhE,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE3C,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;YAC9B,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;QAClC,CAAC;QAED,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAC3B,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;QAC/B,CAAC;QAED,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,aAAa;IACf,WAAW,CAAS;IAE7B,YAAY,cAAsB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAY;YACxB,eAAe,EAAE,aAAa;YAC9B,gBAAgB,EAAE,MAAM;SACzB,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QAE/D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,eAAe,CAAC,IAAI,CAAC;SACzB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Artifact
|
|
2
|
-
|
|
1
|
+
import { Artifact } from "../domain/artifact.js";
|
|
2
|
+
import { type Clock, type IdGenerator } from "../domain/base.js";
|
|
3
|
+
interface ArtifactRepositoryOptions {
|
|
3
4
|
storageRoot?: string;
|
|
4
5
|
clock?: Clock;
|
|
5
6
|
idGenerator?: IdGenerator;
|
|
@@ -18,16 +19,10 @@ export declare class ArtifactRepository {
|
|
|
18
19
|
private readonly clock;
|
|
19
20
|
private readonly idGenerator;
|
|
20
21
|
constructor(options?: ArtifactRepositoryOptions);
|
|
21
|
-
get artifactsDirectory(): string;
|
|
22
|
-
runDirectory(runId?: string | null): string;
|
|
23
|
-
metadataPathFor(artifactId: string, runId?: string | null): string;
|
|
24
|
-
saveMetadata(artifact: Artifact): Promise<Artifact>;
|
|
25
22
|
writeTextArtifact(params: ArtifactWriteParams): Promise<Artifact>;
|
|
26
|
-
writeJsonArtifact(params: Omit<ArtifactWriteParams,
|
|
23
|
+
writeJsonArtifact(params: Omit<ArtifactWriteParams, "content" | "extension" | "mimeType"> & {
|
|
27
24
|
content: unknown;
|
|
28
25
|
extension?: string;
|
|
29
26
|
}): Promise<Artifact>;
|
|
30
|
-
get(artifactId: string, runId?: string | null): Promise<Artifact | null>;
|
|
31
|
-
listByRun(runId?: string | null): Promise<Artifact[]>;
|
|
32
27
|
}
|
|
33
28
|
export {};
|