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.
Files changed (146) hide show
  1. package/README.md +77 -43
  2. package/dist/src/app/AipanelApp.d.ts +6 -3
  3. package/dist/src/app/AipanelApp.js +22 -14
  4. package/dist/src/app/AipanelApp.js.map +1 -1
  5. package/dist/src/app/CommandRouter.js +27 -6
  6. package/dist/src/app/CommandRouter.js.map +1 -1
  7. package/dist/src/app/ProfileLoader.d.ts +3 -2
  8. package/dist/src/app/ProfileLoader.js +6 -5
  9. package/dist/src/app/ProfileLoader.js.map +1 -1
  10. package/dist/src/artifact/ArtifactRepository.d.ts +4 -9
  11. package/dist/src/artifact/ArtifactRepository.js +24 -60
  12. package/dist/src/artifact/ArtifactRepository.js.map +1 -1
  13. package/dist/src/cli/aipanel.js +2 -1
  14. package/dist/src/cli/aipanel.js.map +1 -1
  15. package/dist/src/compare/ComparisonEngine.d.ts +10 -1
  16. package/dist/src/compare/ComparisonEngine.js.map +1 -1
  17. package/dist/src/compare/ResponseNormalizer.d.ts +3 -2
  18. package/dist/src/compare/ResponseNormalizer.js +4 -2
  19. package/dist/src/compare/ResponseNormalizer.js.map +1 -1
  20. package/dist/src/context/ContextCollector.d.ts +5 -4
  21. package/dist/src/context/ContextCollector.js +4 -2
  22. package/dist/src/context/ContextCollector.js.map +1 -1
  23. package/dist/src/domain/artifact.d.ts +3 -2
  24. package/dist/src/domain/artifact.js +7 -7
  25. package/dist/src/domain/base.d.ts +0 -1
  26. package/dist/src/domain/base.js +1 -7
  27. package/dist/src/domain/base.js.map +1 -1
  28. package/dist/src/domain/run.d.ts +11 -23
  29. package/dist/src/domain/run.js +59 -51
  30. package/dist/src/domain/run.js.map +1 -1
  31. package/dist/src/domain/session.d.ts +6 -5
  32. package/dist/src/domain/session.js +9 -7
  33. package/dist/src/domain/session.js.map +1 -1
  34. package/dist/src/domain/value-objects.js +3 -1
  35. package/dist/src/domain/value-objects.js.map +1 -1
  36. package/dist/src/output/ResultRenderer.d.ts +3 -2
  37. package/dist/src/output/ResultRenderer.js +3 -0
  38. package/dist/src/output/ResultRenderer.js.map +1 -1
  39. package/dist/src/providers/ClaudeCodeAdapter.d.ts +1 -0
  40. package/dist/src/providers/ClaudeCodeAdapter.js +3 -0
  41. package/dist/src/providers/ClaudeCodeAdapter.js.map +1 -1
  42. package/dist/src/providers/CodexExecAdapter.d.ts +5 -0
  43. package/dist/src/providers/CodexExecAdapter.js +128 -0
  44. package/dist/src/providers/CodexExecAdapter.js.map +1 -0
  45. package/dist/src/providers/ProviderAdapter.d.ts +2 -0
  46. package/dist/src/providers/ProviderRegistry.d.ts +3 -2
  47. package/dist/src/providers/ProviderRegistry.js +3 -3
  48. package/dist/src/providers/ProviderRegistry.js.map +1 -1
  49. package/dist/src/run/RunCoordinator.d.ts +10 -16
  50. package/dist/src/run/RunCoordinator.js +5 -20
  51. package/dist/src/run/RunCoordinator.js.map +1 -1
  52. package/dist/src/run/RunRepository.d.ts +3 -7
  53. package/dist/src/run/RunRepository.js +9 -45
  54. package/dist/src/run/RunRepository.js.map +1 -1
  55. package/dist/src/session/SessionManager.d.ts +5 -3
  56. package/dist/src/session/SessionManager.js +5 -6
  57. package/dist/src/session/SessionManager.js.map +1 -1
  58. package/dist/src/session/SessionRepository.d.ts +3 -5
  59. package/dist/src/session/SessionRepository.js +14 -28
  60. package/dist/src/session/SessionRepository.js.map +1 -1
  61. package/dist/src/shared/clock.d.ts +0 -1
  62. package/dist/src/shared/clock.js +0 -3
  63. package/dist/src/shared/clock.js.map +1 -1
  64. package/dist/src/shared/file-system.d.ts +0 -6
  65. package/dist/src/shared/file-system.js +1 -23
  66. package/dist/src/shared/file-system.js.map +1 -1
  67. package/dist/src/usecases/ConsultUseCase.d.ts +4 -1
  68. package/dist/src/usecases/ConsultUseCase.js +10 -6
  69. package/dist/src/usecases/ConsultUseCase.js.map +1 -1
  70. package/dist/src/usecases/DebugUseCase.d.ts +4 -1
  71. package/dist/src/usecases/DebugUseCase.js +25 -6
  72. package/dist/src/usecases/DebugUseCase.js.map +1 -1
  73. package/dist/src/usecases/FollowupUseCase.js.map +1 -1
  74. package/package.json +19 -63
  75. package/dist/src/app/WorkflowSelector.d.ts +0 -4
  76. package/dist/src/app/WorkflowSelector.js +0 -6
  77. package/dist/src/app/WorkflowSelector.js.map +0 -1
  78. package/dist/src/app/index.d.ts +0 -4
  79. package/dist/src/app/index.js +0 -5
  80. package/dist/src/app/index.js.map +0 -1
  81. package/dist/src/app/types.d.ts +0 -36
  82. package/dist/src/app/types.js +0 -2
  83. package/dist/src/app/types.js.map +0 -1
  84. package/dist/src/artifact/index.d.ts +0 -1
  85. package/dist/src/artifact/index.js +0 -2
  86. package/dist/src/artifact/index.js.map +0 -1
  87. package/dist/src/compare/index.d.ts +0 -3
  88. package/dist/src/compare/index.js +0 -3
  89. package/dist/src/compare/index.js.map +0 -1
  90. package/dist/src/context/index.d.ts +0 -2
  91. package/dist/src/context/index.js +0 -2
  92. package/dist/src/context/index.js.map +0 -1
  93. package/dist/src/domain/index.d.ts +0 -5
  94. package/dist/src/domain/index.js +0 -6
  95. package/dist/src/domain/index.js.map +0 -1
  96. package/dist/src/index.d.ts +0 -16
  97. package/dist/src/index.js +0 -16
  98. package/dist/src/index.js.map +0 -1
  99. package/dist/src/orchestrator/PlanBuilder.d.ts +0 -6
  100. package/dist/src/orchestrator/PlanBuilder.js +0 -59
  101. package/dist/src/orchestrator/PlanBuilder.js.map +0 -1
  102. package/dist/src/orchestrator/ResultMerger.d.ts +0 -10
  103. package/dist/src/orchestrator/ResultMerger.js +0 -19
  104. package/dist/src/orchestrator/ResultMerger.js.map +0 -1
  105. package/dist/src/orchestrator/TaskExecutor.d.ts +0 -20
  106. package/dist/src/orchestrator/TaskExecutor.js +0 -81
  107. package/dist/src/orchestrator/TaskExecutor.js.map +0 -1
  108. package/dist/src/orchestrator/TaskScheduler.d.ts +0 -4
  109. package/dist/src/orchestrator/TaskScheduler.js +0 -19
  110. package/dist/src/orchestrator/TaskScheduler.js.map +0 -1
  111. package/dist/src/orchestrator/ValidationRunner.d.ts +0 -4
  112. package/dist/src/orchestrator/ValidationRunner.js +0 -22
  113. package/dist/src/orchestrator/ValidationRunner.js.map +0 -1
  114. package/dist/src/orchestrator/index.d.ts +0 -5
  115. package/dist/src/orchestrator/index.js +0 -6
  116. package/dist/src/orchestrator/index.js.map +0 -1
  117. package/dist/src/output/index.d.ts +0 -1
  118. package/dist/src/output/index.js +0 -2
  119. package/dist/src/output/index.js.map +0 -1
  120. package/dist/src/providers/index.d.ts +0 -3
  121. package/dist/src/providers/index.js +0 -4
  122. package/dist/src/providers/index.js.map +0 -1
  123. package/dist/src/run/index.d.ts +0 -2
  124. package/dist/src/run/index.js +0 -3
  125. package/dist/src/run/index.js.map +0 -1
  126. package/dist/src/session/index.d.ts +0 -2
  127. package/dist/src/session/index.js +0 -3
  128. package/dist/src/session/index.js.map +0 -1
  129. package/dist/src/shared/contracts.d.ts +0 -254
  130. package/dist/src/shared/contracts.js +0 -2
  131. package/dist/src/shared/contracts.js.map +0 -1
  132. package/dist/src/shared/errors.d.ts +0 -9
  133. package/dist/src/shared/errors.js +0 -11
  134. package/dist/src/shared/errors.js.map +0 -1
  135. package/dist/src/shared/index.d.ts +0 -4
  136. package/dist/src/shared/index.js +0 -5
  137. package/dist/src/shared/index.js.map +0 -1
  138. package/dist/src/usecases/CompareUseCase.d.ts +0 -6
  139. package/dist/src/usecases/CompareUseCase.js +0 -9
  140. package/dist/src/usecases/CompareUseCase.js.map +0 -1
  141. package/dist/src/usecases/helpers.d.ts +0 -9
  142. package/dist/src/usecases/helpers.js +0 -31
  143. package/dist/src/usecases/helpers.js.map +0 -1
  144. package/dist/src/usecases/index.d.ts +0 -5
  145. package/dist/src/usecases/index.js +0 -6
  146. 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` 単独 provider を前提に、`Session / Run / Artifact` を `aipanel` 側で正本管理します。
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 2 予約で、内部 placeholder のみ残している
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
- ## Package Install
43
+ ## Worktree Shortcut
42
44
 
43
- 公開後は package として install できます。
45
+ `aipanel` 直下の `.worktree/` Git worktree を増やしたいときは、以下のショートカットが使えます。
44
46
 
45
47
  ```bash
46
- npm install -g aipanel-cli
47
- aipanel providers --json
48
+ npm run worktree:add -- feature/debug-ui
49
+ make worktree-add BRANCH=feature/debug-ui
48
50
  ```
49
51
 
50
- 2026-03-10 JST 時点で、registry 経由の `npm install aipanel-cli` と `aipanel providers --json` まで確認済みです。
51
-
52
- ## Import Usage
52
+ 補足:
53
53
 
54
- CLI だけでなく、package として import できます。
54
+ - 既存の local branch があればその branch をそのまま開きます
55
+ - `origin/<branch>` だけ存在する場合は tracking branch を作ります
56
+ - どちらもない場合は `HEAD` から新しい branch を作ります
57
+ - 配置先は `.worktree/<branch>` です
55
58
 
56
- ```ts
57
- import { AipanelApp, Session, runCli } from "aipanel-cli";
58
- import { Run } from "aipanel-cli/domain";
59
+ base を変えたい場合:
59
60
 
60
- const app = new AipanelApp();
61
- const providers = await app.listProvidersUseCase.execute();
62
- console.log(providers.providers);
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
- await runCli(["providers", "--json"]);
66
+ 一覧確認:
65
67
 
66
- const session = Session.create({ title: "Imported session" });
67
- const run = Run.create({
68
- sessionId: session.sessionId,
69
- command: "consult",
70
- mode: "direct",
71
- });
68
+ ```bash
69
+ npm run worktree:list
70
+ make worktree-list
72
71
  ```
73
72
 
74
- 現時点で確認している import surface:
73
+ ## Package Install
75
74
 
76
- - root import: `AipanelApp`, `CommandRouter`, `runCli`, domain entity 群
77
- - subpath import: `aipanel-cli/domain`, `aipanel-cli/providers`, `aipanel-cli/usecases`, `aipanel-cli/shared`
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 followup --session session_xxx "この修正方針で進めていい?" --json
126
- node dist/bin/aipanel.js debug "この不具合の根本原因は?" --cwd ./repo --file src/cache.ts --log logs/error.log --json
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
- - repo-local Codex skill は [.agent/skills/aipanel/SKILL.md](./.agent/skills/aipanel/SKILL.md) にあります
203
- - install / build / command usage / storage inspection / tests / E2E の入口を 1 本にまとめています
204
- - アーキテクチャ図の再生成用 Skill [.agent/skills/aipanel-diagrams/SKILL.md](./.agent/skills/aipanel-diagrams/SKILL.md) にあります
205
- - Skill の参照ドキュメントは [docs/skills/aipanel-diagrams/00_overview.md](./docs/skills/aipanel-diagrams/00_overview.md) にあります
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 { ConsultUseCase, DebugUseCase, FollowupUseCase, ListProvidersUseCase } from "../usecases/index.js";
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, ProviderRegistry } from "../providers/index.js";
7
- import { RunCoordinator, RunRepository } from "../run/index.js";
8
- import { SessionManager, SessionRepository } from "../session/index.js";
9
- import { ConsultUseCase, DebugUseCase, FollowupUseCase, ListProvidersUseCase } from "../usecases/index.js";
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 ?? path.join(process.cwd(), ".aipanel"), cwd = process.env.AIPANEL_CWD ?? process.cwd(), } = {}) {
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({ repository: sessionRepository });
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
- const providerRegistry = new ProviderRegistry({
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,uBAAuB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,OAAO,UAAU;IACZ,aAAa,CAAgB;IAC7B,gBAAgB,CAAmB;IACnC,cAAc,CAAiB;IAC/B,oBAAoB,CAAuB;IAC3C,cAAc,CAAiB;IAC/B,eAAe,CAAkB;IACjC,YAAY,CAAe;IAEpC,YAAY,EACV,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EACtF,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,MAI5C,EAAE;QACJ,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAE3C,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,QAAQ,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC;YACnC,eAAe,EAAE,aAAa;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;QACvE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;YACnC,cAAc;YACd,cAAc;YACd,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;YAClB,gBAAgB,EAAE,IAAI,gBAAgB,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;CACF"}
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,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,OAAO,UAAU;IACZ,aAAa,CAAgB;IAC7B,cAAc,CAAiB;IAC/B,gBAAgB,CAAmB;IACnC,oBAAoB,CAAuB;IAC3C,cAAc,CAAiB;IAC/B,eAAe,CAAkB;IACjC,YAAY,CAAe;IAEpC,YAAY,EACV,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,EACtC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,MAI5C,EAAE;QACJ,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAE3C,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACzD,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;YACxC,UAAU,EAAE,iBAAiB;SAC9B,CAAC,CAAC;QACH,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC3C,QAAQ,EAAE,CAAC,IAAI,iBAAiB,EAAE,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAC3D,eAAe,EAAE,aAAa;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5E,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;YACvC,cAAc;YACd,cAAc;YACd,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB;YAChB,kBAAkB;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC;YACnC,cAAc;YACd,cAAc;YACd,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB;YAChB,kBAAkB;YAClB,gBAAgB,EAAE,IAAI,gBAAgB,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -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 { output: rendered.text, exitCode: result.status === "partial" ? 2 : 0 };
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 { output: rendered.text, exitCode: result.status === "partial" ? 2 : 0 };
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 { output: rendered.text, exitCode: result.status === "partial" ? 2 : 0 };
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":"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"}
1
+ {"version":3,"file":"CommandRouter.js","sourceRoot":"","sources":["../../../src/app/CommandRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgB7C,SAAS,aAAa,CAAC,IAAc,EAAE,KAAa,EAAE,IAAY;IAChE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,WAAqB;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACzC,MAAM,MAAM,GAAe;QACzB,OAAO;QACP,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,MAAM;QACpB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,MAAM,CAAC,SAAS,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/D,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;YAC3B,MAAM,CAAC,YAAY,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;YACnE,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;YACzD,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACpE,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC;YAC7B,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;YACrD,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC1D,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,OAAO,aAAa;IACf,GAAG,CAAa;IAEzB,YAAY,GAAe;QACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;QACpE,MAAM,qBAAqB,GACzB,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO,CAAC,eAAe,CAAC;QAC1E,MAAM,KAAK,GACT,MAAM,CAAC,KAAK;YACZ,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;QAE/D,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAC7C,MAAM,EACN,MAAM,CAAC,YAAY,CACpB,CAAC;gBACF,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAChD,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC;oBACnD,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;oBACZ,SAAS;oBACT,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;oBAChC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7D,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAC7C,MAAM,EACN,MAAM,CAAC,YAAY,CACpB,CAAC;gBACF,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,IAAI;oBACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC9C,CAAC;YACJ,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACzD,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC;oBACpD,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;oBACZ,SAAS;oBACT,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;oBAChC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAC7C,MAAM,EACN,MAAM,CAAC,YAAY,CACpB,CAAC;gBACF,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,IAAI;oBACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC9C,CAAC;YACJ,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC;oBACjD,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;oBAC7C,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,YAAY;oBACZ,SAAS;oBACT,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;oBAChC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7D,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAC7C,MAAM,EACN,MAAM,CAAC,YAAY,CACpB,CAAC;gBACF,OAAO;oBACL,MAAM,EAAE,QAAQ,CAAC,IAAI;oBACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC9C,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,CAAC;YACZ;gBACE,OAAO;oBACL,MAAM,EAAE;wBACN,QAAQ;wBACR,8BAA8B;wBAC9B,2HAA2H;wBAC3H,4FAA4F;wBAC5F,yHAAyH;qBAC1H,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5C,CAAC;QACN,CAAC;IACH,CAAC;CACF"}
@@ -1,10 +1,11 @@
1
- export interface Profile {
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
- if (!(await pathExists(this.profilePath))) {
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(this.profilePath, "utf8");
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;AAOhE,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,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,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAY;YACxB,eAAe,EAAE,aAAa;YAC9B,gBAAgB,EAAE,MAAM;SACzB,CAAC;QAEF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO;YACL,GAAG,QAAQ;YACX,GAAG,eAAe,CAAC,IAAI,CAAC;SACzB,CAAC;IACJ,CAAC;CACF"}
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, type Clock, type IdGenerator } from "../domain/index.js";
2
- export interface ArtifactRepositoryOptions {
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, 'content' | 'extension' | 'mimeType'> & {
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 {};