opencandle 0.7.0 → 0.9.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 (101) hide show
  1. package/README.md +34 -21
  2. package/dist/cli-main.d.ts +1 -0
  3. package/dist/cli-main.js +224 -0
  4. package/dist/cli-main.js.map +1 -0
  5. package/dist/cli.d.ts +1 -1
  6. package/dist/cli.js +13 -229
  7. package/dist/cli.js.map +1 -1
  8. package/dist/doctor/cli-command.d.ts +1 -0
  9. package/dist/doctor/cli-command.js +69 -0
  10. package/dist/doctor/cli-command.js.map +1 -0
  11. package/dist/doctor/render.d.ts +2 -0
  12. package/dist/doctor/render.js +32 -0
  13. package/dist/doctor/render.js.map +1 -0
  14. package/dist/doctor/report.d.ts +63 -0
  15. package/dist/doctor/report.js +500 -0
  16. package/dist/doctor/report.js.map +1 -0
  17. package/dist/infra/native-dependencies.d.ts +8 -0
  18. package/dist/infra/native-dependencies.js +49 -0
  19. package/dist/infra/native-dependencies.js.map +1 -1
  20. package/dist/infra/node-version.js +2 -5
  21. package/dist/infra/node-version.js.map +1 -1
  22. package/dist/monitor.d.ts +1 -1
  23. package/dist/monitor.js +2 -1
  24. package/dist/monitor.js.map +1 -1
  25. package/dist/onboarding/provider-status.d.ts +3 -5
  26. package/dist/onboarding/provider-status.js +5 -34
  27. package/dist/onboarding/provider-status.js.map +1 -1
  28. package/dist/pi/session-writer-lock.d.ts +30 -0
  29. package/dist/pi/session-writer-lock.js +111 -0
  30. package/dist/pi/session-writer-lock.js.map +1 -0
  31. package/dist/pi/session.d.ts +0 -1
  32. package/dist/pi/session.js +2 -1
  33. package/dist/pi/session.js.map +1 -1
  34. package/dist/prompts/policy-cards.js +8 -4
  35. package/dist/prompts/policy-cards.js.map +1 -1
  36. package/dist/prompts/workflow-prompts.js +25 -6
  37. package/dist/prompts/workflow-prompts.js.map +1 -1
  38. package/dist/providers/external-tool-command.d.ts +17 -0
  39. package/dist/providers/external-tool-command.js +114 -0
  40. package/dist/providers/external-tool-command.js.map +1 -0
  41. package/dist/providers/reddit-cli.d.ts +2 -6
  42. package/dist/providers/reddit-cli.js +4 -33
  43. package/dist/providers/reddit-cli.js.map +1 -1
  44. package/dist/providers/twitter-cli.d.ts +2 -6
  45. package/dist/providers/twitter-cli.js +4 -33
  46. package/dist/providers/twitter-cli.js.map +1 -1
  47. package/dist/routing/classify-intent.js +15 -12
  48. package/dist/routing/classify-intent.js.map +1 -1
  49. package/dist/routing/entity-extractor.js +1 -1
  50. package/dist/routing/entity-extractor.js.map +1 -1
  51. package/dist/routing/planning.js +9 -6
  52. package/dist/routing/planning.js.map +1 -1
  53. package/dist/routing/router-llm-client.d.ts +1 -1
  54. package/dist/routing/router-llm-client.js +1 -1
  55. package/dist/routing/router-llm-client.js.map +1 -1
  56. package/dist/routing/router.js +44 -3
  57. package/dist/routing/router.js.map +1 -1
  58. package/dist/workflows/compare-assets.js +4 -1
  59. package/dist/workflows/compare-assets.js.map +1 -1
  60. package/gui/server/ask-user-bridge.ts +26 -19
  61. package/gui/server/chat-event-adapter.ts +49 -3
  62. package/gui/server/http-routes.ts +577 -0
  63. package/gui/server/invoke-tool.ts +102 -7
  64. package/gui/server/live-chat-event-adapter.ts +16 -4
  65. package/gui/server/server.ts +70 -296
  66. package/gui/server/session-actions.ts +7 -1
  67. package/gui/server/session-entry-wait.ts +79 -0
  68. package/gui/server/writer-lock.ts +1 -122
  69. package/gui/server/ws-hub.ts +25 -0
  70. package/gui/shared/chat-events.ts +42 -19
  71. package/gui/shared/event-reducer.ts +41 -26
  72. package/gui/web/dist/assets/CatalogOverlay-DcTXLc7u.js +1 -0
  73. package/gui/web/dist/assets/index-DdMnIvZ7.css +2 -0
  74. package/gui/web/dist/assets/index-YlMaahAS.js +65 -0
  75. package/gui/web/dist/index.html +2 -2
  76. package/package.json +23 -19
  77. package/src/cli-main.ts +270 -0
  78. package/src/cli.ts +14 -267
  79. package/src/doctor/cli-command.ts +83 -0
  80. package/src/doctor/render.ts +37 -0
  81. package/src/doctor/report.ts +638 -0
  82. package/src/infra/native-dependencies.ts +67 -0
  83. package/src/infra/node-version.ts +2 -5
  84. package/src/monitor.ts +3 -1
  85. package/src/onboarding/provider-status.ts +10 -38
  86. package/src/pi/session-writer-lock.ts +156 -0
  87. package/src/pi/session.ts +2 -1
  88. package/src/prompts/policy-cards.ts +12 -4
  89. package/src/prompts/workflow-prompts.ts +28 -6
  90. package/src/providers/external-tool-command.ts +164 -0
  91. package/src/providers/reddit-cli.ts +10 -41
  92. package/src/providers/twitter-cli.ts +10 -41
  93. package/src/routing/classify-intent.ts +22 -17
  94. package/src/routing/entity-extractor.ts +1 -1
  95. package/src/routing/planning.ts +15 -10
  96. package/src/routing/router-llm-client.ts +2 -1
  97. package/src/routing/router.ts +57 -6
  98. package/src/workflows/compare-assets.ts +4 -2
  99. package/gui/web/dist/assets/CatalogOverlay-CgeY5Pkp.js +0 -1
  100. package/gui/web/dist/assets/index-C6W_2eAn.js +0 -69
  101. package/gui/web/dist/assets/index-hwbx24a5.css +0 -1
package/README.md CHANGED
@@ -8,19 +8,23 @@ npx opencandle gui
8
8
 
9
9
  OpenCandle is an open source financial investigator: a terminal agent and local browser workbench for market research that starts from real provider data, shows source gaps, and keeps risk visible.
10
10
 
11
- [Docs](./docs/index.md) | [First run](./docs/first-run.md) | [GUI quickstart](./docs/gui-quickstart.md) | [Data sources](./docs/data-sources.md) | [Build a tool](./docs/build-a-tool.md)
11
+ [![CI](https://github.com/Kahtaf/OpenCandle/actions/workflows/ci.yml/badge.svg)](https://github.com/Kahtaf/OpenCandle/actions/workflows/ci.yml)
12
+ [![npm](https://img.shields.io/npm/v/opencandle)](https://www.npmjs.com/package/opencandle)
13
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/Kahtaf/OpenCandle/blob/main/LICENSE)
14
+
15
+ [Docs](https://opencandle.app/docs/) | [First run](https://opencandle.app/docs/first-run.html) | [GUI quickstart](https://opencandle.app/docs/gui-quickstart.html) | [Data sources](https://opencandle.app/docs/data-sources.html) | [Build a tool](https://opencandle.app/docs/build-a-tool.html)
12
16
 
13
17
  ## See It Work
14
18
 
15
19
  ### Terminal UI
16
20
 
17
- [![OpenCandle terminal UI demo](./assets/opencandle-tui-poster.png)](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4)
21
+ [![OpenCandle terminal UI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui-poster.png)](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4)
18
22
 
19
23
  [Watch the terminal UI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4) | [Download MP4](https://github.com/Kahtaf/OpenCandle/raw/refs/heads/main/assets/opencandle-tui.mp4)
20
24
 
21
25
  ### Local GUI
22
26
 
23
- [![OpenCandle local GUI demo](./assets/opencandle-gui-poster.png)](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4)
27
+ [![OpenCandle local GUI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui-poster.png)](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4)
24
28
 
25
29
  [Watch the local GUI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4) | [Download MP4](https://github.com/Kahtaf/OpenCandle/raw/refs/heads/main/assets/opencandle-gui.mp4)
26
30
 
@@ -53,13 +57,13 @@ OpenCandle is read-only research software. It does not place trades, route order
53
57
 
54
58
  ## Quick Start
55
59
 
56
- Requires Node.js `^20.19.0`, `^22.12.0`, or `>=24.0.0 <27`.
60
+ Requires Node.js `>=22.19.0 <27`.
57
61
 
58
62
  ```bash
59
63
  npx opencandle
60
64
  ```
61
65
 
62
- On first run, OpenCandle walks you through model setup. You can use Pi sign-in when available or provide a model API key. Data-provider keys are separate and optional.
66
+ On first run, OpenCandle walks you through model setup. In the terminal, you can use Pi sign-in when available or provide a model API key. In the GUI, use the API-key setup panel or complete terminal `/setup` first and refresh the browser. Data-provider keys are separate and optional.
63
67
 
64
68
  Start the GUI instead:
65
69
 
@@ -69,7 +73,7 @@ npx opencandle gui
69
73
 
70
74
  Then open `http://127.0.0.1:14567`.
71
75
 
72
- For a five-minute path from install to a successful answer, see [docs/first-run.md](./docs/first-run.md).
76
+ For a five-minute path from install to a successful answer, see [First Run](https://opencandle.app/docs/first-run.html).
73
77
 
74
78
  ## Example Prompts
75
79
 
@@ -93,13 +97,18 @@ Useful slash commands:
93
97
  /analyze AAPL
94
98
  ```
95
99
 
96
- Provider diagnostics run from your shell:
100
+ Health diagnostics run from your shell:
97
101
 
98
102
  ```bash
99
103
  opencandle doctor
104
+ opencandle doctor --json
105
+ opencandle doctor --sessions
106
+ opencandle doctor --full
100
107
  opencandle doctor --enable twitter
101
108
  ```
102
109
 
110
+ The GUI also has a Diagnostics page at `/diagnostics` with the same health report, provider setup links, model setup actions, and an explicit browser-session check for Reddit and Twitter/X.
111
+
103
112
  ## Data Sources
104
113
 
105
114
  | Area | Examples | Source |
@@ -134,7 +143,7 @@ Model access comes from Pi. Market data provider keys can be set in the environm
134
143
  | `OPENCANDLE_GUI_PORT` | GUI port, default `14567` |
135
144
  | `OPENCANDLE_NOTIFICATION_WEBHOOK_URL` | Optional local webhook target for alert/report notification delivery attempts |
136
145
 
137
- Environment variables override `~/.opencandle/config.json`. See [docs/configuration.md](./docs/configuration.md) for the full reference, including advanced routing and diagnostic switches.
146
+ Environment variables override `~/.opencandle/config.json`. See [Configuration](https://opencandle.app/docs/configuration.html) for the full reference, including advanced routing and diagnostic switches.
138
147
 
139
148
  ## From Source
140
149
 
@@ -196,7 +205,7 @@ Package exports:
196
205
  - `opencandle/tools`
197
206
  - `opencandle/workflows`
198
207
 
199
- If you want to add a new first-party tool or publish an add-on package, start with [docs/build-a-tool.md](./docs/build-a-tool.md).
208
+ If you want to add a new first-party tool or publish an add-on package, start with [Build a Tool](https://opencandle.app/docs/build-a-tool.html).
200
209
 
201
210
  ## Development
202
211
 
@@ -220,7 +229,7 @@ Baseline check:
220
229
  npm test
221
230
  ```
222
231
 
223
- The e2e, provider, and eval commands can hit live APIs, live model providers, or local agent CLIs. Run them intentionally; see [docs/testing-and-evals.md](./docs/testing-and-evals.md).
232
+ The e2e, provider, and eval commands can hit live APIs, live model providers, or local agent CLIs. Run them intentionally; see [Testing and Evals](https://opencandle.app/docs/testing-and-evals.html).
224
233
 
225
234
  Repository rules that matter:
226
235
 
@@ -238,21 +247,25 @@ npx tsx tests/harness/cli.ts wait --ipc /tmp/opencandle-ipc
238
247
  npx tsx tests/harness/cli.ts trace --ipc /tmp/opencandle-ipc
239
248
  ```
240
249
 
241
- See [tests/harness/README.md](./tests/harness/README.md) for the full flow.
250
+ See [tests/harness/README.md](https://github.com/Kahtaf/OpenCandle/blob/main/tests/harness/README.md) for the full flow.
242
251
 
243
252
  ## Documentation
244
253
 
245
- - [Getting Started](./docs/getting-started.md)
246
- - [First Run](./docs/first-run.md)
247
- - [TUI](./docs/tui.md)
248
- - [GUI Quickstart](./docs/gui-quickstart.md)
249
- - [Investigation Recipes](./docs/investigation-recipes.md)
250
- - [Data Sources](./docs/data-sources.md)
251
- - [Configuration](./docs/configuration.md)
252
- - [System Architecture](./docs/system-architecture.md)
253
- - [Testing and Evals](./docs/testing-and-evals.md)
254
- - [Benchmarking](./docs/benchmarking.md)
254
+ - [Getting Started](https://opencandle.app/docs/getting-started.html)
255
+ - [First Run](https://opencandle.app/docs/first-run.html)
256
+ - [TUI](https://opencandle.app/docs/tui.html)
257
+ - [GUI Quickstart](https://opencandle.app/docs/gui-quickstart.html)
258
+ - [Investigation Recipes](https://opencandle.app/docs/investigation-recipes.html)
259
+ - [Data Sources](https://opencandle.app/docs/data-sources.html)
260
+ - [Configuration](https://opencandle.app/docs/configuration.html)
261
+ - [System Architecture](https://opencandle.app/docs/system-architecture.html)
262
+ - [Testing and Evals](https://opencandle.app/docs/testing-and-evals.html)
263
+ - [Benchmarking](https://opencandle.app/docs/benchmarking.html)
255
264
 
256
265
  ## License
257
266
 
258
267
  MIT
268
+
269
+ ## Contributing and Security
270
+
271
+ See [Contributing](https://opencandle.app/docs/contributing.html), [Security](https://opencandle.app/docs/security.html), and the [Code of Conduct](https://github.com/Kahtaf/OpenCandle/blob/main/CODE_OF_CONDUCT.md) before opening large changes or reporting sensitive issues. Redact API keys, account identifiers, holdings, and local state from public issues.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,224 @@
1
+ import { spawn } from "node:child_process";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, resolve } from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { AuthStorage, createAgentSessionRuntime, createAgentSessionServices, DefaultPackageManager, getAgentDir, InteractiveMode, initTheme, ModelRegistry, SettingsManager, } from "@earendil-works/pi-coding-agent";
6
+ import { loadEnv } from "./config.js";
7
+ import { handleDoctorCommand } from "./doctor/cli-command.js";
8
+ import { createOpenCandleSession } from "./pi/session.js";
9
+ import { continueOpenCandleSession } from "./pi/session-storage.js";
10
+ import { acquireSessionWriterLock, refreshSessionWriterLock, releaseSessionWriterLock, writerLockScopeForSession, } from "./pi/session-writer-lock.js";
11
+ const require = createRequire(import.meta.url);
12
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
13
+ async function handlePackageCommand(args, cwd, agentDir) {
14
+ const [command, ...rest] = args;
15
+ if (!command || !["install", "remove", "uninstall", "list", "update"].includes(command)) {
16
+ return false;
17
+ }
18
+ const settingsManager = SettingsManager.create(cwd, agentDir);
19
+ const packageManager = new DefaultPackageManager({
20
+ cwd,
21
+ agentDir,
22
+ settingsManager,
23
+ });
24
+ packageManager.setProgressCallback((event) => {
25
+ if (event.type === "start" || event.type === "progress") {
26
+ process.stdout.write(`${event.message}\n`);
27
+ }
28
+ });
29
+ const source = rest.find((a) => !a.startsWith("-"));
30
+ const local = rest.includes("-l") || rest.includes("--local");
31
+ switch (command === "uninstall" ? "remove" : command) {
32
+ case "install": {
33
+ if (!source) {
34
+ console.error("Usage: opencandle install <source> [-l]");
35
+ process.exitCode = 1;
36
+ return true;
37
+ }
38
+ await packageManager.install(source, { local });
39
+ packageManager.addSourceToSettings(source, { local });
40
+ console.log(`Installed ${source}`);
41
+ return true;
42
+ }
43
+ case "remove": {
44
+ if (!source) {
45
+ console.error("Usage: opencandle remove <source> [-l]");
46
+ process.exitCode = 1;
47
+ return true;
48
+ }
49
+ await packageManager.remove(source, { local });
50
+ const removed = packageManager.removeSourceFromSettings(source, {
51
+ local,
52
+ });
53
+ if (!removed) {
54
+ console.error(`No matching package found for ${source}`);
55
+ process.exitCode = 1;
56
+ }
57
+ else {
58
+ console.log(`Removed ${source}`);
59
+ }
60
+ return true;
61
+ }
62
+ case "list": {
63
+ const globalPkgs = settingsManager.getGlobalSettings().packages ?? [];
64
+ const projectPkgs = settingsManager.getProjectSettings().packages ?? [];
65
+ if (globalPkgs.length === 0 && projectPkgs.length === 0) {
66
+ console.log("No packages installed.");
67
+ return true;
68
+ }
69
+ if (globalPkgs.length > 0) {
70
+ console.log("User packages:");
71
+ for (const pkg of globalPkgs) {
72
+ const s = typeof pkg === "string" ? pkg : pkg.source;
73
+ const path = packageManager.getInstalledPath(s, "user");
74
+ console.log(` ${s}${path ? `\n ${path}` : ""}`);
75
+ }
76
+ }
77
+ if (projectPkgs.length > 0) {
78
+ console.log("Project packages:");
79
+ for (const pkg of projectPkgs) {
80
+ const s = typeof pkg === "string" ? pkg : pkg.source;
81
+ const path = packageManager.getInstalledPath(s, "project");
82
+ console.log(` ${s}${path ? `\n ${path}` : ""}`);
83
+ }
84
+ }
85
+ return true;
86
+ }
87
+ case "update": {
88
+ await packageManager.update(source);
89
+ console.log(source ? `Updated ${source}` : "All packages updated.");
90
+ return true;
91
+ }
92
+ }
93
+ return false;
94
+ }
95
+ async function handleGuiCommand(args, cwd) {
96
+ if (args[0] !== "gui")
97
+ return false;
98
+ const tsxCli = require.resolve("tsx/cli");
99
+ const serverPath = resolve(packageRoot, "gui/server/server.ts");
100
+ const child = spawn(process.execPath, [tsxCli, serverPath, ...args.slice(1)], {
101
+ cwd,
102
+ env: process.env,
103
+ stdio: "inherit",
104
+ });
105
+ const exitCode = await new Promise((resolveExit) => {
106
+ child.on("close", (code, signal) => {
107
+ if (signal) {
108
+ resolveExit(1);
109
+ }
110
+ else {
111
+ resolveExit(code ?? 0);
112
+ }
113
+ });
114
+ });
115
+ process.exitCode = exitCode;
116
+ return true;
117
+ }
118
+ async function handleMonitorCommand(args, cwd) {
119
+ if (args[0] !== "monitor")
120
+ return false;
121
+ const tsxCli = require.resolve("tsx/cli");
122
+ const monitorPath = resolve(packageRoot, "src/monitor.ts");
123
+ const child = spawn(process.execPath, [tsxCli, monitorPath, ...args.slice(1)], {
124
+ cwd,
125
+ env: process.env,
126
+ stdio: "inherit",
127
+ });
128
+ const exitCode = await new Promise((resolveExit) => {
129
+ child.on("close", (code, signal) => {
130
+ if (signal) {
131
+ resolveExit(1);
132
+ }
133
+ else {
134
+ resolveExit(code ?? 0);
135
+ }
136
+ });
137
+ });
138
+ process.exitCode = exitCode;
139
+ return true;
140
+ }
141
+ async function main() {
142
+ const rawArgs = process.argv.slice(2);
143
+ const cwd = process.cwd();
144
+ const agentDir = getAgentDir();
145
+ loadEnv();
146
+ if (await handleGuiCommand(rawArgs, cwd)) {
147
+ return;
148
+ }
149
+ if (await handleMonitorCommand(rawArgs, cwd)) {
150
+ return;
151
+ }
152
+ if (await handleDoctorCommand(rawArgs, cwd, agentDir)) {
153
+ return;
154
+ }
155
+ if (await handlePackageCommand(rawArgs, cwd, agentDir)) {
156
+ return;
157
+ }
158
+ // Default: start the OpenCandle interactive agent
159
+ const settingsManager = SettingsManager.create(cwd, agentDir);
160
+ const authStorage = AuthStorage.create();
161
+ const modelRegistry = ModelRegistry.create(authStorage);
162
+ const shouldSuppressFallbackMessage = modelRegistry.getAvailable().length === 0;
163
+ initTheme(settingsManager.getTheme(), true);
164
+ const sessionManager = continueOpenCandleSession(cwd);
165
+ const sessionWriterLockScope = writerLockScopeForSession(sessionManager);
166
+ const sessionWriterLock = await acquireSessionWriterLock(sessionWriterLockScope, "tui");
167
+ if (sessionWriterLock.role !== "writer") {
168
+ console.error(`Session is currently being written by ${sessionWriterLock.lock.processKind} (pid ${sessionWriterLock.lock.pid}).`);
169
+ process.exitCode = 1;
170
+ return;
171
+ }
172
+ let activeSessionWriterLockScope = sessionWriterLockScope;
173
+ const writerLockHeartbeat = setInterval(() => refreshSessionWriterLock(activeSessionWriterLockScope), 5000);
174
+ let runtime;
175
+ try {
176
+ runtime = await createAgentSessionRuntime(async (opts) => {
177
+ const services = await createAgentSessionServices({
178
+ cwd: opts.cwd,
179
+ agentDir: opts.agentDir,
180
+ authStorage,
181
+ settingsManager,
182
+ modelRegistry,
183
+ });
184
+ const result = await createOpenCandleSession({
185
+ cwd: opts.cwd,
186
+ agentDir: opts.agentDir,
187
+ settingsManager,
188
+ authStorage,
189
+ modelRegistry,
190
+ sessionManager: opts.sessionManager,
191
+ bindExtensions: false,
192
+ });
193
+ return {
194
+ ...result,
195
+ services,
196
+ diagnostics: services.diagnostics,
197
+ };
198
+ }, { cwd, agentDir, sessionManager });
199
+ runtime.setRebindSession(async (nextSession) => {
200
+ const nextSessionWriterLockScope = writerLockScopeForSession(nextSession.sessionManager);
201
+ if (nextSessionWriterLockScope === activeSessionWriterLockScope)
202
+ return;
203
+ const nextSessionWriterLock = await acquireSessionWriterLock(nextSessionWriterLockScope, "tui");
204
+ if (nextSessionWriterLock.role !== "writer") {
205
+ throw new Error(`Session is currently being written by ${nextSessionWriterLock.lock.processKind} (pid ${nextSessionWriterLock.lock.pid}).`);
206
+ }
207
+ releaseSessionWriterLock(activeSessionWriterLockScope);
208
+ activeSessionWriterLockScope = nextSessionWriterLockScope;
209
+ });
210
+ const interactiveMode = new InteractiveMode(runtime, {
211
+ modelFallbackMessage: shouldSuppressFallbackMessage
212
+ ? undefined
213
+ : runtime.modelFallbackMessage,
214
+ });
215
+ await interactiveMode.run();
216
+ }
217
+ finally {
218
+ clearInterval(writerLockHeartbeat);
219
+ releaseSessionWriterLock(activeSessionWriterLockScope);
220
+ await runtime?.dispose();
221
+ }
222
+ }
223
+ await main();
224
+ //# sourceMappingURL=cli-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import "./infra/node-version.js";
2
+ export {};
package/dist/cli.js CHANGED
@@ -1,234 +1,18 @@
1
1
  #!/usr/bin/env node
2
- import "./infra/node-version.js";
3
- import { spawn } from "node:child_process";
4
- import { createRequire } from "node:module";
5
- import { dirname, resolve } from "node:path";
6
- import { fileURLToPath } from "node:url";
7
- import { AuthStorage, createAgentSessionRuntime, createAgentSessionServices, DefaultPackageManager, getAgentDir, InteractiveMode, initTheme, ModelRegistry, SettingsManager, } from "@earendil-works/pi-coding-agent";
8
- import { loadEnv } from "./config.js";
9
- import { formatProviderStatus, probeAllProviderStatuses } from "./onboarding/provider-status.js";
10
- import { getProvider } from "./onboarding/providers.js";
11
- import { clearProviderOnboardingEntry, loadOnboardingState, saveOnboardingState, } from "./onboarding/state.js";
12
- import { createOpenCandleSession } from "./pi/session.js";
13
- import { continueOpenCandleSession } from "./pi/session-storage.js";
14
- const require = createRequire(import.meta.url);
15
- const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
16
- async function handlePackageCommand(args, cwd, agentDir) {
17
- const [command, ...rest] = args;
18
- if (!command || !["install", "remove", "uninstall", "list", "update"].includes(command)) {
19
- return false;
20
- }
21
- const settingsManager = SettingsManager.create(cwd, agentDir);
22
- const packageManager = new DefaultPackageManager({
23
- cwd,
24
- agentDir,
25
- settingsManager,
26
- });
27
- packageManager.setProgressCallback((event) => {
28
- if (event.type === "start" || event.type === "progress") {
29
- process.stdout.write(`${event.message}\n`);
30
- }
31
- });
32
- const source = rest.find((a) => !a.startsWith("-"));
33
- const local = rest.includes("-l") || rest.includes("--local");
34
- switch (command === "uninstall" ? "remove" : command) {
35
- case "install": {
36
- if (!source) {
37
- console.error("Usage: opencandle install <source> [-l]");
38
- process.exitCode = 1;
39
- return true;
40
- }
41
- await packageManager.install(source, { local });
42
- packageManager.addSourceToSettings(source, { local });
43
- console.log(`Installed ${source}`);
44
- return true;
45
- }
46
- case "remove": {
47
- if (!source) {
48
- console.error("Usage: opencandle remove <source> [-l]");
49
- process.exitCode = 1;
50
- return true;
51
- }
52
- await packageManager.remove(source, { local });
53
- const removed = packageManager.removeSourceFromSettings(source, {
54
- local,
55
- });
56
- if (!removed) {
57
- console.error(`No matching package found for ${source}`);
58
- process.exitCode = 1;
59
- }
60
- else {
61
- console.log(`Removed ${source}`);
62
- }
63
- return true;
64
- }
65
- case "list": {
66
- const globalPkgs = settingsManager.getGlobalSettings().packages ?? [];
67
- const projectPkgs = settingsManager.getProjectSettings().packages ?? [];
68
- if (globalPkgs.length === 0 && projectPkgs.length === 0) {
69
- console.log("No packages installed.");
70
- return true;
71
- }
72
- if (globalPkgs.length > 0) {
73
- console.log("User packages:");
74
- for (const pkg of globalPkgs) {
75
- const s = typeof pkg === "string" ? pkg : pkg.source;
76
- const path = packageManager.getInstalledPath(s, "user");
77
- console.log(` ${s}${path ? `\n ${path}` : ""}`);
78
- }
79
- }
80
- if (projectPkgs.length > 0) {
81
- console.log("Project packages:");
82
- for (const pkg of projectPkgs) {
83
- const s = typeof pkg === "string" ? pkg : pkg.source;
84
- const path = packageManager.getInstalledPath(s, "project");
85
- console.log(` ${s}${path ? `\n ${path}` : ""}`);
86
- }
87
- }
88
- return true;
89
- }
90
- case "update": {
91
- await packageManager.update(source);
92
- console.log(source ? `Updated ${source}` : "All packages updated.");
93
- return true;
94
- }
95
- }
96
- return false;
97
- }
98
- async function handleGuiCommand(args, cwd) {
99
- if (args[0] !== "gui")
100
- return false;
101
- const tsxCli = require.resolve("tsx/cli");
102
- const serverPath = resolve(packageRoot, "gui/server/server.ts");
103
- const child = spawn(process.execPath, [tsxCli, serverPath, ...args.slice(1)], {
104
- cwd,
105
- env: process.env,
106
- stdio: "inherit",
107
- });
108
- const exitCode = await new Promise((resolveExit) => {
109
- child.on("close", (code, signal) => {
110
- if (signal) {
111
- resolveExit(1);
112
- }
113
- else {
114
- resolveExit(code ?? 0);
115
- }
116
- });
117
- });
118
- process.exitCode = exitCode;
119
- return true;
120
- }
121
- async function handleMonitorCommand(args, cwd) {
122
- if (args[0] !== "monitor")
123
- return false;
124
- const tsxCli = require.resolve("tsx/cli");
125
- const monitorPath = resolve(packageRoot, "src/monitor.ts");
126
- const child = spawn(process.execPath, [tsxCli, monitorPath, ...args.slice(1)], {
127
- cwd,
128
- env: process.env,
129
- stdio: "inherit",
130
- });
131
- const exitCode = await new Promise((resolveExit) => {
132
- child.on("close", (code, signal) => {
133
- if (signal) {
134
- resolveExit(1);
135
- }
136
- else {
137
- resolveExit(code ?? 0);
138
- }
139
- });
140
- });
141
- process.exitCode = exitCode;
142
- return true;
143
- }
144
- async function handleDoctorCommand(args) {
145
- if (args[0] !== "doctor")
146
- return false;
2
+ import { ensureOpenCandleNativeDependencies } from "./infra/native-dependencies.js";
3
+ import { assertSupportedNodeVersion } from "./infra/node-version.js";
4
+ if (process.argv[2] === "doctor") {
5
+ const [{ loadEnv }, { handleDoctorCommand }, { getAgentDir }] = await Promise.all([
6
+ import("./config.js"),
7
+ import("./doctor/cli-command.js"),
8
+ import("@earendil-works/pi-coding-agent"),
9
+ ]);
147
10
  loadEnv();
148
- const enableFlag = args.findIndex((arg) => arg === "--enable" || arg === "--reenable");
149
- if (enableFlag >= 0) {
150
- const providerId = args[enableFlag + 1];
151
- if (!providerId) {
152
- console.error("Usage: opencandle doctor --enable <provider>");
153
- process.exitCode = 1;
154
- return true;
155
- }
156
- try {
157
- getProvider(providerId);
158
- }
159
- catch {
160
- console.error(`Unknown provider: ${providerId}`);
161
- process.exitCode = 1;
162
- return true;
163
- }
164
- saveOnboardingState(clearProviderOnboardingEntry(loadOnboardingState(), providerId));
165
- console.log(`Re-enabled ${providerId}.`);
166
- }
167
- const statuses = await probeAllProviderStatuses({ force: args.includes("--no-cache") });
168
- console.log("OpenCandle provider status");
169
- for (const status of statuses) {
170
- console.log(` ${formatProviderStatus(status)}`);
171
- }
172
- return true;
11
+ await handleDoctorCommand(process.argv.slice(2), process.cwd(), getAgentDir());
173
12
  }
174
- async function main() {
175
- const rawArgs = process.argv.slice(2);
176
- const cwd = process.cwd();
177
- const agentDir = getAgentDir();
178
- if (await handleGuiCommand(rawArgs, cwd)) {
179
- return;
180
- }
181
- if (await handleMonitorCommand(rawArgs, cwd)) {
182
- return;
183
- }
184
- if (await handleDoctorCommand(rawArgs)) {
185
- return;
186
- }
187
- if (await handlePackageCommand(rawArgs, cwd, agentDir)) {
188
- return;
189
- }
190
- // Default: start the OpenCandle interactive agent
191
- loadEnv();
192
- const settingsManager = SettingsManager.create(cwd, agentDir);
193
- const authStorage = AuthStorage.create();
194
- const modelRegistry = ModelRegistry.create(authStorage);
195
- const shouldSuppressFallbackMessage = modelRegistry.getAvailable().length === 0;
196
- initTheme(settingsManager.getTheme(), true);
197
- const sessionManager = continueOpenCandleSession(cwd);
198
- const runtime = await createAgentSessionRuntime(async (opts) => {
199
- const services = await createAgentSessionServices({
200
- cwd: opts.cwd,
201
- agentDir: opts.agentDir,
202
- authStorage,
203
- settingsManager,
204
- modelRegistry,
205
- });
206
- const result = await createOpenCandleSession({
207
- cwd: opts.cwd,
208
- agentDir: opts.agentDir,
209
- settingsManager,
210
- authStorage,
211
- modelRegistry,
212
- sessionManager: opts.sessionManager,
213
- bindExtensions: false,
214
- });
215
- return {
216
- ...result,
217
- services,
218
- diagnostics: services.diagnostics,
219
- };
220
- }, { cwd, agentDir, sessionManager });
221
- try {
222
- const interactiveMode = new InteractiveMode(runtime, {
223
- modelFallbackMessage: shouldSuppressFallbackMessage
224
- ? undefined
225
- : runtime.modelFallbackMessage,
226
- });
227
- await interactiveMode.run();
228
- }
229
- finally {
230
- await runtime.dispose();
231
- }
13
+ else {
14
+ assertSupportedNodeVersion();
15
+ await ensureOpenCandleNativeDependencies();
16
+ await import("./cli-main.js");
232
17
  }
233
- await main();
234
18
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,eAAe,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AACjG,OAAO,EAAE,WAAW,EAAmB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAE3E,KAAK,UAAU,oBAAoB,CACjC,IAAc,EACd,GAAW,EACX,QAAgB;IAEhB,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACxF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,qBAAqB,CAAC;QAC/C,GAAG;QACH,QAAQ;QACR,eAAe;KAChB,CAAC,CAAC;IACH,cAAc,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE9D,QAAQ,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QACrD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,cAAc,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,wBAAwB,CAAC,MAAM,EAAE;gBAC9D,KAAK;aACN,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;gBACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,UAAU,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtE,MAAM,WAAW,GAAG,eAAe,CAAC,kBAAkB,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;oBAC7B,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBACrD,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;oBAC9B,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBACrD,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAc,EAAE,GAAW;IACzD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5E,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,WAAW,EAAE,EAAE;QACzD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,MAAM,EAAE,CAAC;gBACX,WAAW,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAc,EAAE,GAAW;IAC7D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;QAC7E,GAAG;QACH,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,WAAW,EAAE,EAAE;QACzD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,MAAM,EAAE,CAAC;gBACX,WAAW,CAAC,CAAC,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,IAAc;IAC/C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEvC,OAAO,EAAE,CAAC;IACV,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,YAAY,CAAC,CAAC;IACvF,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAA2B,CAAC;QAClE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,WAAW,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,mBAAmB,CAAC,4BAA4B,CAAC,mBAAmB,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,MAAM,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,IAAI,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,IAAI,MAAM,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,OAAO;IACT,CAAC;IAED,kDAAkD;IAClD,OAAO,EAAE,CAAC;IACV,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,6BAA6B,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;IAEhF,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;IAE5C,MAAM,cAAc,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAC7C,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;YAChD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW;YACX,eAAe;YACf,aAAa;SACd,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;YAC3C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,eAAe;YACf,WAAW;YACX,aAAa;YACb,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QACH,OAAO;YACL,GAAG,MAAM;YACT,QAAQ;YACR,WAAW,EAAE,QAAQ,CAAC,WAAW;SAClC,CAAC;IACJ,CAAC,EACD,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAClC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE;YACnD,oBAAoB,EAAE,6BAA6B;gBACjD,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,CAAC,oBAAoB;SACjC,CAAC,CAAC;QACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChF,MAAM,CAAC,aAAa,CAAC;QACrB,MAAM,CAAC,yBAAyB,CAAC;QACjC,MAAM,CAAC,iCAAiC,CAAC;KAC1C,CAAC,CAAC;IACH,OAAO,EAAE,CAAC;IACV,MAAM,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACjF,CAAC;KAAM,CAAC;IACN,0BAA0B,EAAE,CAAC;IAC7B,MAAM,kCAAkC,EAAE,CAAC;IAC3C,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function handleDoctorCommand(args: string[], cwd: string, agentDir: string): Promise<boolean>;