cli-jaw 2.2.0 → 2.2.1-preview.20260625145621
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.ko.md +1 -1
- package/README.md +22 -3
- package/README.zh-CN.md +1 -1
- package/dist/bin/cli-jaw.js +13 -1
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/bgtask.js +2 -1
- package/dist/bin/commands/bgtask.js.map +1 -1
- package/dist/bin/commands/dispatch-batch-summary.js +38 -0
- package/dist/bin/commands/dispatch-batch-summary.js.map +1 -0
- package/dist/bin/commands/dispatch.js +91 -52
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/bin/commands/hooks.js +58 -0
- package/dist/bin/commands/hooks.js.map +1 -0
- package/dist/bin/commands/jwc.js +237 -0
- package/dist/bin/commands/jwc.js.map +1 -0
- package/dist/bin/commands/orchestrate.js +37 -2
- package/dist/bin/commands/orchestrate.js.map +1 -1
- package/dist/bin/commands/provider.js +213 -0
- package/dist/bin/commands/provider.js.map +1 -0
- package/dist/bin/commands/skill.js +17 -4
- package/dist/bin/commands/skill.js.map +1 -1
- package/dist/bin/commands/worker.js +162 -4
- package/dist/bin/commands/worker.js.map +1 -1
- package/dist/lib/mcp/skills-distribution.js +17 -19
- package/dist/lib/mcp/skills-distribution.js.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/src/agent/jwc-runtime.js +12 -3
- package/dist/src/agent/jwc-runtime.js.map +1 -1
- package/dist/src/agent/spawn/queue.js +14 -0
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn.js +1 -1
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/bgtask/recover.js +4 -1
- package/dist/src/bgtask/recover.js.map +1 -1
- package/dist/src/bgtask/registry.js +12 -2
- package/dist/src/bgtask/registry.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/bm25-filter.js +47 -0
- package/dist/src/browser/adaptive-fetch/bm25-filter.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/browser-escalation.js +136 -3
- package/dist/src/browser/adaptive-fetch/browser-escalation.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/browser-flow.js +118 -0
- package/dist/src/browser/adaptive-fetch/browser-flow.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/browser-runtime.js +10 -1
- package/dist/src/browser/adaptive-fetch/browser-runtime.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/camoufox-session.js +76 -0
- package/dist/src/browser/adaptive-fetch/camoufox-session.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/candidate-discovery.js +116 -0
- package/dist/src/browser/adaptive-fetch/candidate-discovery.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/challenge-detector.js +1 -1
- package/dist/src/browser/adaptive-fetch/challenge-detector.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js +66 -5
- package/dist/src/browser/adaptive-fetch/endpoint-resolvers.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/feed-parser.js +152 -0
- package/dist/src/browser/adaptive-fetch/feed-parser.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/fetcher.js +20 -1
- package/dist/src/browser/adaptive-fetch/fetcher.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/human-loop.js +10 -1
- package/dist/src/browser/adaptive-fetch/human-loop.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/index.js +17 -397
- package/dist/src/browser/adaptive-fetch/index.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/live-smoke-manifest.js +99 -0
- package/dist/src/browser/adaptive-fetch/live-smoke-manifest.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/metadata.js +74 -5
- package/dist/src/browser/adaptive-fetch/metadata.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/public-endpoint-normalizers.js +414 -0
- package/dist/src/browser/adaptive-fetch/public-endpoint-normalizers.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/reader-adapters.js +36 -0
- package/dist/src/browser/adaptive-fetch/reader-adapters.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/scheduler.js +472 -0
- package/dist/src/browser/adaptive-fetch/scheduler.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/stage-types.js +2 -0
- package/dist/src/browser/adaptive-fetch/stage-types.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/structured-extractor.js +117 -0
- package/dist/src/browser/adaptive-fetch/structured-extractor.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/third-party-readers.js +15 -1
- package/dist/src/browser/adaptive-fetch/third-party-readers.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/tls-fetch.js +81 -0
- package/dist/src/browser/adaptive-fetch/tls-fetch.js.map +1 -0
- package/dist/src/browser/adaptive-fetch/validators.js +11 -8
- package/dist/src/browser/adaptive-fetch/validators.js.map +1 -1
- package/dist/src/browser/adaptive-fetch/ytdlp-reader.js +82 -0
- package/dist/src/browser/adaptive-fetch/ytdlp-reader.js.map +1 -0
- package/dist/src/cli/commands.js +67 -13
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/handlers-search.js +28 -0
- package/dist/src/cli/handlers-search.js.map +1 -0
- package/dist/src/cli/handlers-skill-invoke.js +30 -0
- package/dist/src/cli/handlers-skill-invoke.js.map +1 -0
- package/dist/src/cli/handlers.js +12 -1
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/code-mode/acp-host.js +1 -8
- package/dist/src/code-mode/acp-host.js.map +1 -1
- package/dist/src/command-contract/catalog.js +22 -1
- package/dist/src/command-contract/catalog.js.map +1 -1
- package/dist/src/core/cli-detection.js +7 -0
- package/dist/src/core/cli-detection.js.map +1 -1
- package/dist/src/core/skill-cache.js +34 -0
- package/dist/src/core/skill-cache.js.map +1 -0
- package/dist/src/goal/heartbeat.js +13 -7
- package/dist/src/goal/heartbeat.js.map +1 -1
- package/dist/src/memory/heartbeat.js +12 -1
- package/dist/src/memory/heartbeat.js.map +1 -1
- package/dist/src/orchestrator/attestation.js +156 -0
- package/dist/src/orchestrator/attestation.js.map +1 -0
- package/dist/src/orchestrator/pipeline.js +34 -6
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/sanitize.js +4 -0
- package/dist/src/orchestrator/sanitize.js.map +1 -1
- package/dist/src/orchestrator/state-machine.js +69 -13
- package/dist/src/orchestrator/state-machine.js.map +1 -1
- package/dist/src/orchestrator/worker-output-store.js +64 -0
- package/dist/src/orchestrator/worker-output-store.js.map +1 -0
- package/dist/src/orchestrator/worker-progress.js.map +1 -1
- package/dist/src/orchestrator/worker-registry.js +91 -10
- package/dist/src/orchestrator/worker-registry.js.map +1 -1
- package/dist/src/orchestrator/worker-replay-notice.js +28 -0
- package/dist/src/orchestrator/worker-replay-notice.js.map +1 -0
- package/dist/src/orchestrator/worker-run-store.js +142 -0
- package/dist/src/orchestrator/worker-run-store.js.map +1 -0
- package/dist/src/prompt/builder.js +35 -3
- package/dist/src/prompt/builder.js.map +1 -1
- package/dist/src/prompt/context-hooks.js +210 -0
- package/dist/src/prompt/context-hooks.js.map +1 -0
- package/dist/src/prompt/templates/orchestration.md +1 -1
- package/dist/src/routes/bgtask.js +13 -4
- package/dist/src/routes/bgtask.js.map +1 -1
- package/dist/src/routes/command.js +1 -1
- package/dist/src/routes/command.js.map +1 -1
- package/dist/src/routes/orchestrate.js +85 -10
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/shared/runtime-observability.js +20 -0
- package/dist/src/shared/runtime-observability.js.map +1 -0
- package/dist/src/workflows/search.js +21 -0
- package/dist/src/workflows/search.js.map +1 -0
- package/package.json +11 -12
- package/public/dist/assets/{app-BsVpXeLC.js → app-CLrfEHAk.js} +4 -4
- package/public/dist/assets/bgtask-badge-4OjtCvDq.js +1 -0
- package/public/dist/assets/{bgtask-badge-DqMU3pM3.js → bgtask-badge-xWbw-l-0.js} +1 -1
- package/public/dist/assets/{employees-BhkR2-xi.js → employees-C5GPj3d3.js} +1 -1
- package/public/dist/assets/manager-Ceg2x8D0.js +13 -0
- package/public/dist/assets/{manager-U147AWWu.css → manager-CwAlpgV7.css} +1 -1
- package/public/dist/assets/memory-B1beDKbo.js +1 -0
- package/public/dist/assets/{memory-DERWDVjI.js → memory-CcnjBuo-.js} +1 -1
- package/public/dist/assets/{message-history-CK0ah3pB.js → message-history-BSWJwi__.js} +2 -2
- package/public/dist/assets/message-history-CzaziSe8.js +1 -0
- package/public/dist/assets/{render-CqzsW5KN.js → render-C2g_qvCg.js} +2 -2
- package/public/dist/assets/settings-Dst1mUjn.js +1 -0
- package/public/dist/assets/{settings-DdwmhI5a.js → settings-DxClXVD0.js} +1 -1
- package/public/dist/assets/settings-core-BW5mtFPE.js +1 -0
- package/public/dist/assets/{settings-core-AiF7o3Ns.js → settings-core-CSUV4-QG.js} +1 -1
- package/public/dist/assets/{sidebar-Bhtk2fPc.js → sidebar-CJz_SnMW.js} +3 -3
- package/public/dist/assets/skills-B2io6S_4.js +1 -0
- package/public/dist/assets/{skills-Cs8byPIx.js → skills-PKg2h1N4.js} +1 -1
- package/public/dist/assets/slash-commands-D1IS00Eg.js +1 -0
- package/public/dist/assets/{slash-commands-C5erv0KS.js → slash-commands-FMOOfedZ.js} +1 -1
- package/public/dist/assets/{trace-drawer-CtmD6jwj.js → trace-drawer-BoU1ucw7.js} +1 -1
- package/public/dist/assets/{ui-DaFl446W.js → ui-BX-IfLze.js} +1 -1
- package/public/dist/assets/ui-C-al0etg.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +2 -2
- package/public/js/features/command-info.ts +1 -0
- package/public/js/render/file-links.ts +1 -1
- package/public/js/render/notes-vault-path.ts +1 -1
- package/public/locales/en.json +2 -0
- package/public/locales/ja.json +2 -0
- package/public/locales/ko.json +2 -0
- package/public/locales/zh.json +2 -0
- package/public/manager/src/SidebarRailRouter.tsx +7 -3
- package/public/manager/src/background-tasks/background-task-client.ts +21 -1
- package/public/manager/src/main.tsx +2 -0
- package/public/manager/src/workers/WorkerProgressMonitorPanel.tsx +2 -0
- package/public/manager/src/workers/WorkerRunsPanel.tsx +152 -0
- package/public/manager/src/workers/useWorkerRuns.ts +138 -0
- package/public/manager/src/workers/worker-runs-client.ts +112 -0
- package/public/manager/src/workers/worker-runs.css +208 -0
- package/scripts/bundle-sidecar.sh +2 -64
- package/scripts/check-electron-sidecar-no-jwc.cjs +57 -0
- package/scripts/install-risk-gate.mjs +3 -2
- package/scripts/jwc-no-global-smoke.mjs +19 -21
- package/public/dist/assets/bgtask-badge-YR8SMYrp.js +0 -1
- package/public/dist/assets/manager-ycX0r7uL.js +0 -13
- package/public/dist/assets/memory-CfeG2ViL.js +0 -1
- package/public/dist/assets/message-history-BaI36ciH.js +0 -1
- package/public/dist/assets/settings-VeoQiKpd.js +0 -1
- package/public/dist/assets/settings-core-DlfGtuWD.js +0 -1
- package/public/dist/assets/skills-Z0rMlwnf.js +0 -1
- package/public/dist/assets/slash-commands-CZKlw4A6.js +0 -1
- package/public/dist/assets/ui-WRcA4tUT.js +0 -1
- package/scripts/check-electron-sidecar-jwc.cjs +0 -117
package/README.ko.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
### 나만의 AI 에이전트. 2줄이면 설치 끝. 13개 AI 런타임 표면을 하나의 대시보드에서.
|
|
6
6
|
|
|
7
7
|
[](https://npmjs.com/package/cli-jaw)
|
|
8
|
-
[](https://github.com/lidge-jun/cli-jaw/releases)
|
|
9
9
|
[](https://typescriptlang.org)
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](LICENSE)
|
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
### Your personal AI agent. 2 lines to install. 13 AI runtime surfaces in one dashboard.
|
|
6
6
|
|
|
7
7
|
[](https://npmjs.com/package/cli-jaw)
|
|
8
|
-
[](https://github.com/lidge-jun/cli-jaw/releases)
|
|
9
9
|
[](https://typescriptlang.org)
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](LICENSE)
|
|
@@ -40,6 +40,22 @@ That's it. Open **http://localhost:24576** for the manager dashboard. Per-instan
|
|
|
40
40
|
|
|
41
41
|
> **First time?** The default npm install initializes CLI-JAW and attempts native Claude setup. Other AI CLIs are optional; install them all during npm setup with `CLI_JAW_INSTALL_CLI_TOOLS=1 npm install -g cli-jaw` on macOS/Linux. On Windows, use the WSL install path below.
|
|
42
42
|
|
|
43
|
+
### Optional JWC Runtime
|
|
44
|
+
|
|
45
|
+
JWC is optional and external-only. The default npm install and Electron desktop sidecar do not bundle `jawcode`, `@jawcode-dev`, `@oven`, `bun`, or a `jwc` payload. To use JWC, install the runtime into CLI-JAW's external prefix and opt in with the printed SDK path:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
jaw jwc install
|
|
49
|
+
export JWC_SDK_PATH="/absolute/path/printed/by/jaw-jwc-install/sdk.js"
|
|
50
|
+
jaw jwc doctor
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
To remove the optional external JWC dependencies later:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
jaw jwc clean
|
|
57
|
+
```
|
|
58
|
+
|
|
43
59
|
<details>
|
|
44
60
|
<summary><b>macOS one-click</b> — don't have Node.js? This installs everything</summary>
|
|
45
61
|
|
|
@@ -397,7 +413,7 @@ P (Plan) → A (Audit) → B (Build) → C (Check) → D (Done) → IDLE
|
|
|
397
413
|
| **C — Check** | Type-check (`tsc --noEmit`), docs update, consistency check |
|
|
398
414
|
| **D — Done** | Summary of all changes. Returns to idle |
|
|
399
415
|
|
|
400
|
-
State is database-persisted and survives restarts. Workers cannot modify files — only verify. Activate with `jaw orchestrate`, `/orchestrate`, or `/pabcd`; resume an active worklog explicitly with `/continue`. Workflow helper slash commands are exposed as `/plan`, `/interview`, `/deliberate`, `/planaudit`, and `/goal`; `/plan` is a compatibility guide that explains "this is PABCD P" and points to the right next command instead of creating a second planning mode. Bounded automation is expressed as `/goal run ...`, not a separate top-level `/autopilot`. Durable goals — `/goal <objective>` plus `update`/`done`/`cancel`/`pause`/`resume` — are functional and survive restarts, and a goal resume re-fires the work on every interface (Web/CLI included, not just messaging). `/goal run` (`preflight`/`start`/`stop`/`status`) is a tracking-only preview: it gates on preflight and tracks turn/dispatch budget, with enforcement still to come.
|
|
416
|
+
State is database-persisted and survives restarts. Workers cannot modify files — only verify. Activate with `jaw orchestrate`, `/orchestrate`, or `/pabcd`; resume an active worklog explicitly with `/continue`. Workflow helper slash commands are exposed as `/plan`, `/interview`, `/deliberate`, `/planaudit`, `/review`, `/search`, and `/goal`; `/plan` is a compatibility guide that explains "this is PABCD P" and points to the right next command instead of creating a second planning mode. `/search <query>` routes search intent through the active search skill: classify local vs external lookup, rewrite focused queries, discover candidate URLs, and only then use browser commands such as `browser fetch` for evidence verification. Bounded automation is expressed as `/goal run ...`, not a separate top-level `/autopilot`. Durable goals — `/goal <objective>` plus `update`/`done`/`cancel`/`pause`/`resume` — are functional and survive restarts, and a goal resume re-fires the work on every interface (Web/CLI included, not just messaging). `/goal run` (`preflight`/`start`/`stop`/`status`) is a tracking-only preview: it gates on preflight and tracks turn/dispatch budget, with enforcement still to come.
|
|
401
417
|
|
|
402
418
|
---
|
|
403
419
|
|
|
@@ -464,7 +480,7 @@ Computer Use lets you control any macOS app — Finder, Safari, System Settings,
|
|
|
464
480
|
📱 Telegram ←→ 🦈 CLI-JAW ←→ 🤖 AI Engines
|
|
465
481
|
```
|
|
466
482
|
|
|
467
|
-
Text chat, voice messages (auto-transcribed via STT — speech-to-text), file/photo upload, slash commands (`/cli`, `/model`, `/status`, `/plan`, `/interview`, `/deliberate`, `/planaudit`), scheduled task delivery via `every`/`cron` (recurring schedule) heartbeat jobs.
|
|
483
|
+
Text chat, voice messages (auto-transcribed via STT — speech-to-text), file/photo upload, slash commands (`/cli`, `/model`, `/status`, `/plan`, `/interview`, `/deliberate`, `/planaudit`, `/review`, `/search`), scheduled task delivery via `every`/`cron` (recurring schedule) heartbeat jobs.
|
|
468
484
|
|
|
469
485
|
<details>
|
|
470
486
|
<summary>Setup (3 steps)</summary>
|
|
@@ -548,6 +564,9 @@ jaw browser vision-click "Login" # AI-powered click
|
|
|
548
564
|
jaw browser web-ai status # ChatGPT/Gemini/Grok web-AI session tooling
|
|
549
565
|
jaw browser web-ai code --vendor chatgpt --model thinking --effort heavy --prompt "Build an MVP" --output-zip ./result.zip
|
|
550
566
|
|
|
567
|
+
# Search
|
|
568
|
+
# in chat: /search "npm trusted publishing official docs" # search-skill routing + evidence verification
|
|
569
|
+
|
|
551
570
|
# Dashboard connectors
|
|
552
571
|
jaw dashboard memory search "query" # read-only cross-instance memory search
|
|
553
572
|
jaw dashboard chat search "query" # cross-instance chat search
|
package/README.zh-CN.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
### 你的个人 AI 助手。2 行安装。13 个 AI 运行时入口,一个仪表盘。
|
|
6
6
|
|
|
7
7
|
[](https://npmjs.com/package/cli-jaw)
|
|
8
|
-
[](https://github.com/lidge-jun/cli-jaw/releases)
|
|
9
9
|
[](https://typescriptlang.org)
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](LICENSE)
|
package/dist/bin/cli-jaw.js
CHANGED
|
@@ -34,7 +34,7 @@ const _homeEqArg = process.argv.find(a => a.startsWith('--home='));
|
|
|
34
34
|
if (_homeIdx !== -1 && process.argv[_homeIdx + 1]) {
|
|
35
35
|
const _homeVal = process.argv[_homeIdx + 1];
|
|
36
36
|
// Guard: if the "value" looks like a known subcommand, user forgot the path
|
|
37
|
-
const _knownCmds = ['serve', 'init', 'doctor', 'chat', 'employee', 'reset', 'mcp', 'skill', 'status', 'browser', 'memory', 'launchd', 'clone', 'service', 'dashboard', 'connector', 'reminders', 'orchestrate', 'dispatch', 'worker', 'project', 'goal', 'task', 'bgtask'];
|
|
37
|
+
const _knownCmds = ['serve', 'init', 'doctor', 'chat', 'employee', 'reset', 'mcp', 'skill', 'status', 'browser', 'memory', 'hooks', 'launchd', 'clone', 'service', 'dashboard', 'connector', 'reminders', 'orchestrate', 'dispatch', 'worker', 'project', 'goal', 'task', 'bgtask', 'jwc', 'provider'];
|
|
38
38
|
if (_knownCmds.includes(_homeVal)) {
|
|
39
39
|
console.error(` ❌ --home requires a path argument (got subcommand '${_homeVal}')`);
|
|
40
40
|
console.error(` Usage: jaw --home <path> ${_homeVal}`);
|
|
@@ -134,6 +134,8 @@ ${c.cyan} 🦈 jaw${c.reset} — AI agent orchestration platform ${c.dim}v${pk
|
|
|
134
134
|
${c.bold}Setup & diagnostics:${c.reset}
|
|
135
135
|
init Interactive setup wizard
|
|
136
136
|
doctor [--json] Installation diagnostics
|
|
137
|
+
jwc install|clean|doctor Optional external JWC runtime helper
|
|
138
|
+
provider install|clean|doctor|list On-demand provider runtime helper
|
|
137
139
|
reset [--all|--mcp|--skills|...] Reset configuration
|
|
138
140
|
|
|
139
141
|
${c.bold}Orchestration:${c.reset}
|
|
@@ -149,6 +151,7 @@ ${c.cyan} 🦈 jaw${c.reset} — AI agent orchestration platform ${c.dim}v${pk
|
|
|
149
151
|
${c.bold}Automation:${c.reset}
|
|
150
152
|
browser <sub> Chrome CDP browser control
|
|
151
153
|
memory <search|read|save> Persistent memory store
|
|
154
|
+
hooks inspect [--scope ...] Inspect pre-prompt runtime context
|
|
152
155
|
mcp <install|sync|list> MCP server management
|
|
153
156
|
skill <install|remove|info|list> Skill management
|
|
154
157
|
|
|
@@ -180,6 +183,12 @@ switch (command) {
|
|
|
180
183
|
case 'doctor':
|
|
181
184
|
await import('./commands/doctor.js');
|
|
182
185
|
break;
|
|
186
|
+
case 'jwc':
|
|
187
|
+
await import('./commands/jwc.js');
|
|
188
|
+
break;
|
|
189
|
+
case 'provider':
|
|
190
|
+
await import('./commands/provider.js');
|
|
191
|
+
break;
|
|
183
192
|
case 'chat':
|
|
184
193
|
if (process.argv[3] === 'search') {
|
|
185
194
|
await import('./commands/chat-search.js');
|
|
@@ -210,6 +219,9 @@ switch (command) {
|
|
|
210
219
|
case 'memory':
|
|
211
220
|
await import('./commands/memory.js');
|
|
212
221
|
break;
|
|
222
|
+
case 'hooks':
|
|
223
|
+
await import('./commands/hooks.js');
|
|
224
|
+
break;
|
|
213
225
|
case 'launchd':
|
|
214
226
|
await import('./commands/launchd.js');
|
|
215
227
|
break;
|
package/dist/bin/cli-jaw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-jaw.js","sourceRoot":"","sources":["../../bin/cli-jaw.ts"],"names":[],"mappings":";AACA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAK1D,SAAS,eAAe,CAAC,OAAe;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAY,CAAC;IACpE,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,IAAI,GAAgB,CAAC;AACrB,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACxC,IAAI,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAAC,MAAM,CAAC;IACL,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClD,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AACnE,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAE,CAAC;IAC7C,4EAA4E;IAC5E,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-jaw.js","sourceRoot":"","sources":["../../bin/cli-jaw.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,7 +40,8 @@ function flagValue(flag) {
|
|
|
40
40
|
function printTask(task) {
|
|
41
41
|
const spec = (task['spec'] ?? {});
|
|
42
42
|
const completion = (spec['completion'] ?? {});
|
|
43
|
-
|
|
43
|
+
const category = task['statusCategory'] ? `/${task['statusCategory']}` : '';
|
|
44
|
+
console.log(`${task['id']} [${task['status']}${category}${task['runnerActive'] ? ' • runner active' : ''}] kind=${task['kind']} completion=${completion['type'] ?? '?'}`);
|
|
44
45
|
if (task['createdAt'])
|
|
45
46
|
console.log(` created: ${task['createdAt']}${task['completedAt'] ? ` completed: ${task['completedAt']}` : ''}`);
|
|
46
47
|
if (task['notifiedAt'])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bgtask.js","sourceRoot":"","sources":["../../../bin/commands/bgtask.ts"],"names":[],"mappings":";AACA,kEAAkE;AAClE,0EAA0E;AAC1E,2EAA2E;AAC3E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElE,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;IAAE,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;CAoB9C,CAAC,CAAC;AAEH,YAAY,EAAE,CAAC;AACf,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AAE9C,SAAS,SAAS,CAAC,IAAY;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACxD,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,IAA6B;IAC5C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAA4B,CAAC;IAC7D,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAA4B,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,MAAM,CAAC,gBAAgB,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"bgtask.js","sourceRoot":"","sources":["../../../bin/commands/bgtask.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
function compact(value, max = 240) {
|
|
2
|
+
const text = String(value || '').replace(/\s+/g, ' ').trim();
|
|
3
|
+
if (!text)
|
|
4
|
+
return '';
|
|
5
|
+
return text.length > max ? `${text.slice(0, max - 1)}…` : text;
|
|
6
|
+
}
|
|
7
|
+
function byteLabel(value) {
|
|
8
|
+
if (!value)
|
|
9
|
+
return '';
|
|
10
|
+
if (value < 1024)
|
|
11
|
+
return `${value} B`;
|
|
12
|
+
if (value < 1024 * 1024)
|
|
13
|
+
return `${Math.round(value / 1024)} KB`;
|
|
14
|
+
return `${(value / 1024 / 1024).toFixed(1)} MB`;
|
|
15
|
+
}
|
|
16
|
+
export function printBatchDispatchSummary(results) {
|
|
17
|
+
let exitCode = 0;
|
|
18
|
+
for (const result of results) {
|
|
19
|
+
const statusIcon = result.ok ? '✅' : '❌';
|
|
20
|
+
console.log(`\n${statusIcon} ${result.agent}`);
|
|
21
|
+
console.log(` status: ${result.status || (result.ok ? 'done' : 'error')}`);
|
|
22
|
+
if (result.runId)
|
|
23
|
+
console.log(` runId: ${result.runId}`);
|
|
24
|
+
const preview = compact(result.preview || result.error);
|
|
25
|
+
if (preview)
|
|
26
|
+
console.log(` ${result.ok ? 'preview' : 'error'}: ${preview}`);
|
|
27
|
+
const bytes = byteLabel(result.outputBytes);
|
|
28
|
+
if (bytes)
|
|
29
|
+
console.log(` outputBytes: ${bytes}`);
|
|
30
|
+
const recovery = result.recoveryCommand || (result.runId ? `cli-jaw worker read ${result.runId} --tail 120` : '');
|
|
31
|
+
if (recovery)
|
|
32
|
+
console.log(` output: ${recovery}`);
|
|
33
|
+
if (!result.ok)
|
|
34
|
+
exitCode = 1;
|
|
35
|
+
}
|
|
36
|
+
return exitCode;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=dispatch-batch-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch-batch-summary.js","sourceRoot":"","sources":["../../../bin/commands/dispatch-batch-summary.ts"],"names":[],"mappings":"AAWA,SAAS,OAAO,CAAC,KAAc,EAAE,GAAG,GAAG,GAAG;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACjE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAqC;IAC3E,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClH,IAAI,QAAQ;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,QAAQ,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC"}
|
|
@@ -6,12 +6,13 @@ import { cliFetch, getCliAuthToken } from '../../src/cli/api-auth.js';
|
|
|
6
6
|
import { shouldShowHelp, printAndExit } from '../helpers/help.js';
|
|
7
7
|
import { errString, isConnRefused } from '../_http-client.js';
|
|
8
8
|
import { unwrapEmployeeSummaries } from './dispatch-helpers.js';
|
|
9
|
+
import { printBatchDispatchSummary } from './dispatch-batch-summary.js';
|
|
9
10
|
import { displayShellCommand, displayShellCommandDetail, } from '../../src/shared/shell-command-display.js';
|
|
10
11
|
if (shouldShowHelp(process.argv))
|
|
11
12
|
printAndExit(`
|
|
12
13
|
jaw dispatch — send task to an employee agent
|
|
13
14
|
|
|
14
|
-
Usage: jaw dispatch --agent "Name" --task "instruction" [--watch]
|
|
15
|
+
Usage: jaw dispatch --agent "Name" --task "instruction" [--watch] [--quiet]
|
|
15
16
|
jaw dispatch --virtual "security" --task "audit this change" [--role "security"]
|
|
16
17
|
jaw dispatch --batch --agents '<JSON array>'
|
|
17
18
|
Options:
|
|
@@ -23,8 +24,9 @@ if (shouldShowHelp(process.argv))
|
|
|
23
24
|
--task <text> Task instruction to send
|
|
24
25
|
--mutable Allow employee to write/modify files (default: read-only)
|
|
25
26
|
--scope <path> Restrict writes to a subdirectory (optional, requires --mutable)
|
|
26
|
-
--watch Print live sanitized employee progress until completion
|
|
27
|
-
--
|
|
27
|
+
--watch Print live sanitized employee progress until completion (default for human output)
|
|
28
|
+
--quiet Suppress live progress summaries
|
|
29
|
+
--json JSON output; suppresses human progress lines
|
|
28
30
|
Batch mode:
|
|
29
31
|
--batch Enable batch parallel dispatch
|
|
30
32
|
--agents <json> JSON array of {agent|virtual, task, role?, cli?, model?, parallel?, mutable?, scope?, affected_files?}
|
|
@@ -65,7 +67,8 @@ const model = getFlag('--model');
|
|
|
65
67
|
const task = getFlag('--task');
|
|
66
68
|
const mutable = process.argv.includes('--mutable');
|
|
67
69
|
const scope = getFlag('--scope');
|
|
68
|
-
const
|
|
70
|
+
const quiet = process.argv.includes('--quiet');
|
|
71
|
+
const json = process.argv.includes('--json');
|
|
69
72
|
const isBatch = process.argv.includes('--batch');
|
|
70
73
|
const batchAgentsRaw = getFlag('--agents');
|
|
71
74
|
if (isBatch) {
|
|
@@ -85,7 +88,8 @@ if (isBatch) {
|
|
|
85
88
|
}
|
|
86
89
|
const BASE = getServerUrl();
|
|
87
90
|
await getCliAuthToken();
|
|
88
|
-
|
|
91
|
+
if (!json && !quiet)
|
|
92
|
+
console.log(`🚀 Batch dispatching ${batchAgents.length} agents...`);
|
|
89
93
|
try {
|
|
90
94
|
const res = await cliFetch(`${BASE}/api/orchestrate/dispatch/batch`, {
|
|
91
95
|
method: 'POST',
|
|
@@ -97,18 +101,13 @@ if (isBatch) {
|
|
|
97
101
|
console.error(`❌ ${body.error || `Failed: ${res.status}`}`);
|
|
98
102
|
process.exit(1);
|
|
99
103
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
console.log(`\n${status} ${r.agent}`);
|
|
104
|
-
if (r.text)
|
|
105
|
-
console.log(r.text);
|
|
106
|
-
if (r.error) {
|
|
107
|
-
console.error(` Error: ${r.error}`);
|
|
108
|
-
exitCode = 1;
|
|
109
|
-
}
|
|
104
|
+
if (json) {
|
|
105
|
+
console.log(JSON.stringify(body));
|
|
106
|
+
process.exit((body.results || []).every(r => r.ok) ? 0 : 1);
|
|
110
107
|
}
|
|
111
|
-
|
|
108
|
+
if (quiet)
|
|
109
|
+
process.exit((body.results || []).every(r => r.ok) ? 0 : 1);
|
|
110
|
+
process.exit(printBatchDispatchSummary(body.results || []));
|
|
112
111
|
}
|
|
113
112
|
catch (e) {
|
|
114
113
|
console.error(`❌ Error: ${errString(e)}`);
|
|
@@ -165,17 +164,19 @@ async function resolveAgentId(name) {
|
|
|
165
164
|
class DispatchPollError extends Error {
|
|
166
165
|
agentId;
|
|
167
166
|
agentName;
|
|
168
|
-
|
|
167
|
+
runId;
|
|
168
|
+
constructor(message, agentId, agentName, runId) {
|
|
169
169
|
super(message);
|
|
170
170
|
this.agentId = agentId;
|
|
171
171
|
this.agentName = agentName;
|
|
172
|
+
this.runId = runId;
|
|
172
173
|
this.name = 'DispatchPollError';
|
|
173
174
|
}
|
|
174
175
|
}
|
|
175
176
|
// A single transient fetch failure (ECONNRESET, brief event-loop stall) used
|
|
176
177
|
// to kill a 10-minute poll loop on its first throw (devlog 260613 doc 08).
|
|
177
178
|
const POLL_RETRY_DELAYS_MS = [500, 1000, 2000];
|
|
178
|
-
async function pollFetch(url, agentId, agentName, label) {
|
|
179
|
+
async function pollFetch(url, agentId, agentName, label, runId) {
|
|
179
180
|
let lastErr;
|
|
180
181
|
for (let attempt = 0; attempt <= POLL_RETRY_DELAYS_MS.length; attempt++) {
|
|
181
182
|
try {
|
|
@@ -187,34 +188,40 @@ async function pollFetch(url, agentId, agentName, label) {
|
|
|
187
188
|
await sleep(POLL_RETRY_DELAYS_MS[attempt]);
|
|
188
189
|
}
|
|
189
190
|
}
|
|
190
|
-
throw new DispatchPollError(`${label}: ${errString(lastErr)}`, agentId, agentName);
|
|
191
|
+
throw new DispatchPollError(`${label}: ${errString(lastErr)}`, agentId, agentName, runId);
|
|
192
|
+
}
|
|
193
|
+
function runIdFromBody(body) {
|
|
194
|
+
return body.runId || body.worker?.runId || body.existing?.runId || progressRun(body.progress)?.runId || undefined;
|
|
191
195
|
}
|
|
192
|
-
async function pollWorkerResult(agentId, agentName = '') {
|
|
196
|
+
async function pollWorkerResult(agentId, agentName = '', runId) {
|
|
193
197
|
const deadline = Date.now() + 600_000;
|
|
194
198
|
let lastState = 'unknown';
|
|
199
|
+
let knownRunId = runId;
|
|
195
200
|
while (Date.now() < deadline) {
|
|
196
|
-
const res = await pollFetch(`${BASE}/api/orchestrate/worker/${encodeURIComponent(agentId)}/result`, agentId, agentName, 'dispatch poll failed');
|
|
201
|
+
const res = await pollFetch(`${BASE}/api/orchestrate/worker/${encodeURIComponent(agentId)}/result`, agentId, agentName, 'dispatch poll failed', knownRunId);
|
|
197
202
|
const { body, nonJsonError } = await readJsonResponse(res, 'worker result endpoint');
|
|
203
|
+
knownRunId = runIdFromBody(body) || knownRunId;
|
|
198
204
|
if (nonJsonError)
|
|
199
|
-
throw new DispatchPollError(nonJsonError, agentId, agentName);
|
|
205
|
+
throw new DispatchPollError(nonJsonError, agentId, agentName, knownRunId);
|
|
200
206
|
if (!res.ok)
|
|
201
|
-
throw new DispatchPollError(body.error || `poll failed: ${res.status}`, agentId, agentName);
|
|
207
|
+
throw new DispatchPollError(body.error || `poll failed: ${res.status}`, agentId, agentName, knownRunId);
|
|
202
208
|
lastState = body.state || 'unknown';
|
|
203
209
|
if (body.state !== 'running')
|
|
204
210
|
return body;
|
|
205
211
|
await sleep(2_000);
|
|
206
212
|
}
|
|
207
|
-
throw new DispatchPollError(`timed out after 10 minutes (last state: ${lastState})`, agentId, agentName);
|
|
213
|
+
throw new DispatchPollError(`timed out after 10 minutes (last state: ${lastState})`, agentId, agentName, knownRunId);
|
|
208
214
|
}
|
|
209
|
-
async function fetchWorkerProgress(agentId, agentName = '') {
|
|
210
|
-
const res = await pollFetch(`${BASE}/api/orchestrate/worker-progress/${encodeURIComponent(agentId)}`, agentId, agentName, 'worker progress fetch failed');
|
|
215
|
+
async function fetchWorkerProgress(agentId, agentName = '', runId) {
|
|
216
|
+
const res = await pollFetch(`${BASE}/api/orchestrate/worker-progress/${encodeURIComponent(agentId)}`, agentId, agentName, 'worker progress fetch failed', runId);
|
|
211
217
|
const { body, nonJsonError } = await readJsonResponse(res, 'worker progress endpoint');
|
|
218
|
+
const bodyRunId = body.progress ? progressRun(body.progress)?.runId : undefined;
|
|
212
219
|
if (nonJsonError)
|
|
213
|
-
throw new DispatchPollError(nonJsonError, agentId, agentName);
|
|
220
|
+
throw new DispatchPollError(nonJsonError, agentId, agentName, bodyRunId || runId);
|
|
214
221
|
if (res.status === 404)
|
|
215
222
|
return null;
|
|
216
223
|
if (!res.ok)
|
|
217
|
-
throw new DispatchPollError(body.error || `progress fetch failed: ${res.status}`, agentId, agentName);
|
|
224
|
+
throw new DispatchPollError(body.error || `progress fetch failed: ${res.status}`, agentId, agentName, bodyRunId || runId);
|
|
218
225
|
return body.progress || null;
|
|
219
226
|
}
|
|
220
227
|
function resultStatus(body) {
|
|
@@ -295,29 +302,33 @@ function printProgressSnapshot(progress, printed) {
|
|
|
295
302
|
console.log(formatToolLine(tool, index + 1));
|
|
296
303
|
});
|
|
297
304
|
}
|
|
298
|
-
async function pollAndPrintWorker(agentId, agentName) {
|
|
305
|
+
async function pollAndPrintWorker(agentId, agentName, runId) {
|
|
299
306
|
const deadline = Date.now() + 600_000;
|
|
300
307
|
const printed = new Set();
|
|
301
308
|
let lastState = 'unknown';
|
|
309
|
+
let knownRunId = runId;
|
|
302
310
|
while (Date.now() < deadline) {
|
|
303
|
-
const progress = await fetchWorkerProgress(agentId, agentName);
|
|
311
|
+
const progress = await fetchWorkerProgress(agentId, agentName, knownRunId);
|
|
312
|
+
knownRunId = progressRun(progress)?.runId || knownRunId;
|
|
304
313
|
printProgressSnapshot(progress, printed);
|
|
305
|
-
const body = await pollWorkerResultOnce(agentId, agentName);
|
|
314
|
+
const body = await pollWorkerResultOnce(agentId, agentName, knownRunId);
|
|
315
|
+
knownRunId = runIdFromBody(body) || knownRunId;
|
|
306
316
|
lastState = body.state || lastState;
|
|
307
317
|
printProgressSnapshot(body.progress, printed);
|
|
308
318
|
if (body.state !== 'running')
|
|
309
319
|
return body;
|
|
310
320
|
await sleep(2_000);
|
|
311
321
|
}
|
|
312
|
-
throw new DispatchPollError(`timed out after 10 minutes (last state: ${lastState})`, agentId, agentName);
|
|
322
|
+
throw new DispatchPollError(`timed out after 10 minutes (last state: ${lastState})`, agentId, agentName, knownRunId);
|
|
313
323
|
}
|
|
314
|
-
async function pollWorkerResultOnce(agentId, agentName = '') {
|
|
315
|
-
const res = await pollFetch(`${BASE}/api/orchestrate/worker/${encodeURIComponent(agentId)}/result`, agentId, agentName, 'dispatch poll failed');
|
|
324
|
+
async function pollWorkerResultOnce(agentId, agentName = '', runId) {
|
|
325
|
+
const res = await pollFetch(`${BASE}/api/orchestrate/worker/${encodeURIComponent(agentId)}/result`, agentId, agentName, 'dispatch poll failed', runId);
|
|
316
326
|
const { body, nonJsonError } = await readJsonResponse(res, 'worker result endpoint');
|
|
327
|
+
const knownRunId = runIdFromBody(body) || runId;
|
|
317
328
|
if (nonJsonError)
|
|
318
|
-
throw new DispatchPollError(nonJsonError, agentId, agentName);
|
|
329
|
+
throw new DispatchPollError(nonJsonError, agentId, agentName, knownRunId);
|
|
319
330
|
if (!res.ok)
|
|
320
|
-
throw new DispatchPollError(body.error || `poll failed: ${res.status}`, agentId, agentName);
|
|
331
|
+
throw new DispatchPollError(body.error || `poll failed: ${res.status}`, agentId, agentName, knownRunId);
|
|
321
332
|
return body;
|
|
322
333
|
}
|
|
323
334
|
function printDispatchResult(agentName, body, opts = {}) {
|
|
@@ -338,6 +349,12 @@ function printDispatchResult(agentName, body, opts = {}) {
|
|
|
338
349
|
console.log(`\nOrchestration verdict: ${verdict} ${persisted}`);
|
|
339
350
|
}
|
|
340
351
|
}
|
|
352
|
+
function printJsonResult(body) {
|
|
353
|
+
console.log(JSON.stringify(body, null, 2));
|
|
354
|
+
}
|
|
355
|
+
function shouldPrintLiveProgress() {
|
|
356
|
+
return !json && !quiet;
|
|
357
|
+
}
|
|
341
358
|
function printFetchErrorWithRecovery(message) {
|
|
342
359
|
console.error(`❌ Error: ${message}`);
|
|
343
360
|
if (!message.includes('fetch failed'))
|
|
@@ -345,9 +362,24 @@ function printFetchErrorWithRecovery(message) {
|
|
|
345
362
|
console.error(` status: cli-jaw worker status`);
|
|
346
363
|
console.error(` target: cli-jaw worker status "${targetName}"`);
|
|
347
364
|
}
|
|
365
|
+
function printPollErrorWithRecovery(e) {
|
|
366
|
+
console.error(`❌ ${e.message}`);
|
|
367
|
+
console.error(` agentId: ${e.agentId}`);
|
|
368
|
+
if (e.runId)
|
|
369
|
+
console.error(` runId: ${e.runId}`);
|
|
370
|
+
console.error(` agent: ${e.agentName || targetName}`);
|
|
371
|
+
if (e.runId) {
|
|
372
|
+
console.error(` status: cli-jaw worker status ${e.runId}`);
|
|
373
|
+
console.error(` output: cli-jaw worker read ${e.runId} --tail 80`);
|
|
374
|
+
}
|
|
375
|
+
else
|
|
376
|
+
console.error(` status: cli-jaw worker status "${e.agentName || targetName}"`);
|
|
377
|
+
console.error(` poll: curl -s ${BASE}/api/orchestrate/worker/${encodeURIComponent(e.agentId)}/result`);
|
|
378
|
+
}
|
|
348
379
|
await getCliAuthToken(PORT);
|
|
349
380
|
try {
|
|
350
|
-
|
|
381
|
+
if (!json && !quiet)
|
|
382
|
+
console.log(`🚀 Dispatching to ${targetName}...`);
|
|
351
383
|
let res;
|
|
352
384
|
let lastError;
|
|
353
385
|
for (let attempt = 0; attempt <= STARTUP_RETRY_DELAYS_MS.length; attempt++) {
|
|
@@ -406,10 +438,13 @@ try {
|
|
|
406
438
|
console.error('❌ dispatch started but worker id was not returned');
|
|
407
439
|
process.exit(1);
|
|
408
440
|
}
|
|
409
|
-
const
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
441
|
+
const pollRunId = body?.worker?.runId;
|
|
442
|
+
const liveProgress = shouldPrintLiveProgress();
|
|
443
|
+
const polled = liveProgress ? await pollAndPrintWorker(pollAgentId, targetName, pollRunId) : await pollWorkerResult(pollAgentId, targetName, pollRunId);
|
|
444
|
+
if (json)
|
|
445
|
+
printJsonResult(polled);
|
|
446
|
+
else
|
|
447
|
+
printDispatchResult(targetName, polled, liveProgress ? { skipProcess: true } : {});
|
|
413
448
|
process.exit(dispatchExitCode(polled));
|
|
414
449
|
}
|
|
415
450
|
if (!res.ok) {
|
|
@@ -419,26 +454,30 @@ try {
|
|
|
419
454
|
console.error(`❌ ${body.error || `Failed: ${res.status}`}`);
|
|
420
455
|
process.exit(1);
|
|
421
456
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
457
|
+
const pollRunId = body?.worker?.runId || body?.existing?.runId;
|
|
458
|
+
if (!json && !quiet) {
|
|
459
|
+
console.error(`⏳ ${targetName} is already running (agentId: ${pollAgentId}${pollRunId ? `, runId: ${pollRunId}` : ''}), polling worker result...`);
|
|
460
|
+
}
|
|
461
|
+
const liveProgress = shouldPrintLiveProgress();
|
|
462
|
+
const polled = liveProgress ? await pollAndPrintWorker(pollAgentId, targetName, pollRunId) : await pollWorkerResult(pollAgentId, targetName, pollRunId);
|
|
463
|
+
if (json)
|
|
464
|
+
printJsonResult(polled);
|
|
465
|
+
else
|
|
466
|
+
printDispatchResult(targetName, polled, liveProgress ? { skipProcess: true } : {});
|
|
427
467
|
process.exit(dispatchExitCode(polled));
|
|
428
468
|
}
|
|
429
469
|
console.error(`❌ ${body.error || `Failed: ${res.status}`}`);
|
|
430
470
|
process.exit(1);
|
|
431
471
|
}
|
|
432
|
-
|
|
472
|
+
if (json)
|
|
473
|
+
printJsonResult(body);
|
|
474
|
+
else
|
|
475
|
+
printDispatchResult(targetName, body);
|
|
433
476
|
process.exit(dispatchExitCode(body));
|
|
434
477
|
}
|
|
435
478
|
catch (e) {
|
|
436
479
|
if (e instanceof DispatchPollError) {
|
|
437
|
-
|
|
438
|
-
console.error(` agentId: ${e.agentId}`);
|
|
439
|
-
console.error(` agent: ${e.agentName || targetName}`);
|
|
440
|
-
console.error(` recover: cli-jaw dispatch ${agent ? '--agent' : '--virtual'} "${e.agentName || targetName}" --task "(resume polling)"`);
|
|
441
|
-
console.error(` poll: curl -s ${BASE}/api/orchestrate/worker/${encodeURIComponent(e.agentId)}/result`);
|
|
480
|
+
printPollErrorWithRecovery(e);
|
|
442
481
|
}
|
|
443
482
|
else {
|
|
444
483
|
printFetchErrorWithRecovery(errString(e));
|