@enderfga/claw-orchestrator 7.11.0 → 7.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/src/kernel/nodes/autoloop.d.ts +3 -1
- package/dist/src/kernel/nodes/autoloop.js +3 -1
- package/dist/src/kernel/nodes/autoloop.js.map +1 -1
- package/dist/src/models.js +10 -2
- package/dist/src/models.js.map +1 -1
- package/dist/src/persistent-grok-session.d.ts +4 -0
- package/dist/src/persistent-grok-session.js +11 -2
- package/dist/src/persistent-grok-session.js.map +1 -1
- package/dist/src/session-manager.js +304 -40
- package/dist/src/session-manager.js.map +1 -1
- package/package.json +2 -2
- package/skills/references/autoloop.md +34 -9
- package/skills/references/claude-cli-tracking.md +3 -1
- package/skills/references/multi-engine.md +8 -6
- package/skills/references/workflow.md +1 -1
|
@@ -90,7 +90,7 @@ failing with "Session not found".
|
|
|
90
90
|
## UX flow
|
|
91
91
|
|
|
92
92
|
```
|
|
93
|
-
1. autoloop_start { run_id, workspace } → Planner session ready (refuses if the workspace Git tree already has tracked, staged, untracked, or submodule changes — including when repository status configuration hides them, `status.showUntrackedFiles=no`, or the porcelain listing is too large to buffer; unexpected `git status` failures also refuse; untracked (`??`) or index-clean worktree modifications (` M`) under `tasks/<id>/` with a regular `tasks/<id>/goal.json` are ignored so a second start can proceed after a committed ledger is appended, including when workspace is a nested repo subdirectory after stripping a verified `show-prefix`; dirt outside the workspace still refuses; ignored paths and non-repo workspaces still start)
|
|
93
|
+
1. autoloop_start { run_id, workspace } → Planner session ready (refuses if the workspace Git tree already has tracked, staged, untracked, or submodule changes — including when repository status configuration hides them, `status.showUntrackedFiles=no`, or the porcelain listing is too large to buffer; unexpected `git status` failures also refuse; untracked (`??`) or index-clean worktree modifications (` M`) under `tasks/<id>/` with a regular `tasks/<id>/goal.json` are ignored so a second start can proceed after a committed ledger is appended, including when workspace is a nested repo subdirectory after stripping a verified `show-prefix`; dirt outside the workspace still refuses; ignored paths and non-repo workspaces still start). On a Git workspace, after that dirty check passes, start creates `tasks/<runId>/.gitignore` with `*` as the first ledger file (accepting an existing exact `*`, `*\n`, or `*\r\n` without overwrite), proves the ledger is ignored via `git check-ignore`, and refuses with one fixed generic error when the ledger is tracked, the ignore file is partial/deceptive, or `tasks`/`tasks/<runId>` is not a real in-workspace directory (e.g. a committed `tasks` symlink). Failed proofs and later start failures retain the run-local dirs/`.gitignore` (never deleted). Does not write `info/exclude` or any repository-wide ignore. The same fresh-start boundary runs on the first boot of a workflow `autoloop` node (`visits === 1`); `autoloopResume` / `workflowResume` and later visits skip it. Non-Git starts are unchanged.
|
|
94
94
|
2. autoloop_chat { run_id, "<your goal>" } → Planner reads workspace,
|
|
95
95
|
drafts plan.md + goal.json,
|
|
96
96
|
asks "ready to spawn?"
|
|
@@ -339,8 +339,9 @@ JSONL, one entry per line, ts-prefixed.
|
|
|
339
339
|
|
|
340
340
|
```
|
|
341
341
|
<workspace>/tasks/<run_id>/
|
|
342
|
-
├──
|
|
343
|
-
├──
|
|
342
|
+
├── .gitignore # run-local `*`; first file on Git start; keeps the ledger out of status/add
|
|
343
|
+
├── plan.md # Planner-authored (workspace-root copies are what iters commit)
|
|
344
|
+
├── goal.json # Planner-authored (workspace-root copies are what iters commit)
|
|
344
345
|
├── push_log.jsonl # every notify_user attempt + channel used
|
|
345
346
|
├── decisions.jsonl # runner / dispatcher audit trail (see above)
|
|
346
347
|
├── chat.jsonl # Planner-pane conversation, replayed by /chat_history
|
|
@@ -360,6 +361,11 @@ JSONL, one entry per line, ts-prefixed.
|
|
|
360
361
|
└── coder_summary.txt
|
|
361
362
|
```
|
|
362
363
|
|
|
364
|
+
On a Git workspace, `autoloop_start` writes `.gitignore` before other ledger
|
|
365
|
+
files and fails closed unless `git check-ignore` confirms the ledger is
|
|
366
|
+
ignored. The run-local ignore is self-contained: it does not rely on
|
|
367
|
+
`.git/info/exclude` or a root `.gitignore` entry for `tasks/`.
|
|
368
|
+
|
|
363
369
|
The orchestrator git-commits each iter automatically. Coder must NOT call
|
|
364
370
|
`git commit` itself — that confuses the diff log. **If `git commit` fails
|
|
365
371
|
inside an iter** (pre-commit hook reject, signing key missing, …) the
|
|
@@ -458,13 +464,27 @@ Resume is explicit. `POST /autoloop/<id>/resume` (or
|
|
|
458
464
|
`SessionManager.autoloopResume()`) restarts a run from its stored spec.
|
|
459
465
|
Custom-engine configs are the one thing the spec does not carry (they can hold
|
|
460
466
|
secrets), so a resume must be given them again. Cancelling a run stops all three
|
|
461
|
-
agents, the same as `autoloop_stop`.
|
|
467
|
+
agents, the same as `autoloop_stop`.
|
|
468
|
+
|
|
469
|
+
On a non-fresh boot (resume / revisit), before any Planner session or
|
|
470
|
+
checkpoint publish, the boot reads the run ledger once and restores typed
|
|
471
|
+
`iter` and `metric_history` from the contiguous valid closed prefix of
|
|
472
|
+
`iter/0..K` (each closed entry needs `directive.json` plus a parsed
|
|
473
|
+
`verdict.json` whose `iter` matches and whose `decision` is a supported
|
|
474
|
+
Reviewer decision). Finite verdict metrics are kept in order, capped at
|
|
475
|
+
`MAX_METRIC_HISTORY` (20). The stored checkpoint's `iter` / `metric_history`
|
|
476
|
+
are never progress authority. A fresh start skips that read. When there is no
|
|
477
|
+
valid closed prefix (including missing or open/malformed `iter/0` with a later
|
|
478
|
+
canonical directory present), the reader returns without restore or refusal —
|
|
479
|
+
same Planner-only resume as before. If the highest committed Coder iteration
|
|
462
480
|
has ledger artifacts and no `verdict.json`, and `HEAD` still names that iter,
|
|
463
|
-
resume starts and sends only the Reviewer: one `review_request` for that
|
|
464
|
-
|
|
465
|
-
resume a Coder session, and a historical
|
|
466
|
-
unchanged. An in-flight send is still not
|
|
467
|
-
outbox.
|
|
481
|
+
resume still starts and sends only the Reviewer: one `review_request` for that
|
|
482
|
+
iteration (with rebuilt `prior_metrics`), and the dispatcher persists
|
|
483
|
+
`verdict.json`. It does not create or resume a Coder session, and a historical
|
|
484
|
+
persisted Coder registry row is left unchanged. An in-flight send is still not
|
|
485
|
+
retried, and there is no message outbox. A gap or malformed closed tail after a
|
|
486
|
+
valid prefix refuses the resume with a fixed generic error before any new
|
|
487
|
+
session or effect; ledger text is never echoed into the error.
|
|
468
488
|
|
|
469
489
|
## Known limitations
|
|
470
490
|
|
|
@@ -483,6 +503,11 @@ outbox.
|
|
|
483
503
|
process until it is resumed, and a send that was in flight is not retried.
|
|
484
504
|
- **Multi-run / same workspace** races on `git index.lock`. Run separate
|
|
485
505
|
workspaces (or git worktrees) for concurrent runs.
|
|
506
|
+
- **Closed-ledger restore does not rebuild streaks or status.** Only `iter` and
|
|
507
|
+
capped `metric_history` are restored from the closed prefix; `rejectStreak`,
|
|
508
|
+
`regressionStreak`, and run `status` fields are not reconstructed. Prefixless
|
|
509
|
+
corruption, path/symlink size hardening, and fresh `autoloop_start` reuse of a
|
|
510
|
+
retained ledger id remain out of scope.
|
|
486
511
|
|
|
487
512
|
## Related
|
|
488
513
|
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
This document tracks which Claude Code CLI version Claw Orchestrator is currently synced to, and which features have been integrated. Recent rows also record the other engines' versions checked in the same sync.
|
|
4
4
|
|
|
5
|
-
## Currently tracked: **Claude Code CLI 2.1.
|
|
5
|
+
## Currently tracked: **Claude Code CLI 2.1.307** (as of 2026-10-22, plugin v7.12.1)
|
|
6
6
|
|
|
7
7
|
## Sync history
|
|
8
8
|
|
|
9
9
|
| Plugin Version | Claude CLI Version | Date | Notable integrations |
|
|
10
10
|
| ------------------- | ------------------ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
11
|
+
| v7.12.1 | 2.1.307 | 2026-10-22 | CC 2.1.302→2.1.307, agy 1.4.0→1.4.4, grok 1.0.62→1.0.67; Codex 0.163.0 and OpenCode 1.19.3 unchanged. No flag the wrappers pass changed. grok 1.0.67 makes `grok-4.7` its default and only model: registered (same prices and 500K window as `grok-4.6`), the `grok` alias moved to it, and a session with no `model` is labelled with the model grok reports. grok read-only re-measured on 1.0.67 (direct and shell writes blocked; the subagent probe hit the free-tier limit). OpenCode 2 still beta-only, still refused. |
|
|
12
|
+
| v7.12.0 | 2.1.302 | 2026-10-17 | CC 2.1.296→2.1.302, Codex 0.162.1→0.163.0, agy 1.3.2→1.4.0, grok 1.0.50→1.0.62, OpenCode 1.19.0→1.19.3. No flag the wrappers pass changed. grok read-only re-measured on 1.0.62 (direct, shell and subagent writes blocked; the failed-sandbox warning unchanged). OpenCode 2 still beta-only, still refused. Codex 0.163.0 turns Daybreak (security programme, not a model) on for eligible accounts; billing follows the model codex reports. |
|
|
11
13
|
| v7.11.0 | 2.1.296 | 2026-10-11 | CC 2.1.295→2.1.296, Codex 0.162.0→0.162.1, OpenCode 1.18.35→1.19.0; agy 1.3.2 and grok 1.0.50 unchanged. No flag the wrappers pass changed. OpenCode 1.19.0 offers `opencode upgrade --major` to OpenCode 2 (beta builds `0.0.0-beta-N`, replaces V1): measured on 0.0.0-beta-17823 it drops `step_finish` and `--variant`, and its free tier answers 403 to a custom agent, so the read-only agent is unverifiable — the OpenCode session now refuses a V2 binary at start. |
|
|
12
14
|
| v7.10.0 | 2.1.295 | 2026-10-09 | CC 2.1.292→2.1.295, Codex 0.160.1→0.162.0, agy 1.3.1→1.3.2, grok 1.0.46→1.0.50; OpenCode 1.18.35 unchanged. No flag the wrappers pass changed. Integrated: Claude Haiku 5.5 registered and the `haiku` alias moved to it (`--model haiku` resolves to `claude-haiku-5-5` in 2.1.295); Sonnet 5.5's cache-hit price corrected to 0.05× input. Integrated: grok 1.0.50's `--sandbox read-only` backs Grok's `sandboxMode: 'read-only'`, measured against direct, shell, subagent, resumed-turn and out-of-project writes; a profile grok cannot apply only warns, so the session kills the process on that warning. |
|
|
13
15
|
| v7.8.0 | 2.1.292 | 2026-10-07 | CC 2.1.291→2.1.292, agy 1.3.0→1.3.1, OpenCode 1.18.34→1.18.35; Codex 0.160.1 and grok 1.0.46 unchanged. No flag surface changed. Integrated: Codex image generation surfaced as `images` on the send result (`codex exec` from `$CODEX_HOME/generated_images/<thread>/`, `codex-app` from the `imageGeneration` item). Read, no change needed: CC 2.1.292 negotiates MCP protocol 2026-07-28 with local stdio servers by default — `clawo-mcp` answers with 2025-11-25 and connects with no delay (measured against `MCP_PROTOCOL_NEGOTIATION=legacy`). |
|
|
@@ -28,7 +28,7 @@ SessionManager
|
|
|
28
28
|
|
|
29
29
|
### Claude Code (`engine: 'claude'`)
|
|
30
30
|
|
|
31
|
-
Default engine. Long-running subprocess with streaming JSON I/O. Tested with Claude Code CLI **2.1.
|
|
31
|
+
Default engine. Long-running subprocess with streaming JSON I/O. Tested with Claude Code CLI **2.1.307**.
|
|
32
32
|
|
|
33
33
|
- Persistent multi-turn conversations
|
|
34
34
|
- Real-time streaming (text, tool_use, tool_result, system events)
|
|
@@ -62,7 +62,7 @@ await manager.startSession({
|
|
|
62
62
|
|
|
63
63
|
### OpenAI Codex (`engine: 'codex'`)
|
|
64
64
|
|
|
65
|
-
Wraps the `codex exec` subcommand. Each `send()` spawns a new process. Tested with `codex` CLI **0.
|
|
65
|
+
Wraps the `codex exec` subcommand. Each `send()` spawns a new process. Tested with `codex` CLI **0.163.0**.
|
|
66
66
|
|
|
67
67
|
- Non-interactive execution via `codex exec --sandbox workspace-write --skip-git-repo-check --json`
|
|
68
68
|
- Real `usage` from the `turn.completed` JSON event (input, output, cached, reasoning tokens). **These are cumulative over the thread, not per turn**, so they replace the session totals rather than being added to them; subtracting consecutive values gives one turn's prompt
|
|
@@ -133,7 +133,7 @@ await manager.startSession({
|
|
|
133
133
|
|
|
134
134
|
Wraps Google's **Antigravity CLI** (`agy`) — the successor to Gemini CLI (consumer
|
|
135
135
|
Gemini CLI tiers stopped serving 2026-06-18). Each `send()` spawns a new process
|
|
136
|
-
in print mode. Tested with `agy` **1.
|
|
136
|
+
in print mode. Tested with `agy` **1.4.4**.
|
|
137
137
|
|
|
138
138
|
- One-shot execution per message (no persistent subprocess)
|
|
139
139
|
- **Structured output and real usage** — `--output-format stream-json` emits an
|
|
@@ -218,12 +218,14 @@ await manager.startSession({
|
|
|
218
218
|
### Grok Build (`engine: 'grok'`)
|
|
219
219
|
|
|
220
220
|
Wraps xAI's **Grok Build** CLI. Each `send()` spawns `grok -p <msg> --output-format json`, which
|
|
221
|
-
prints a single JSON object and exits. Tested with `grok` **1.0.
|
|
221
|
+
prints a single JSON object and exits. Tested with `grok` **1.0.67**.
|
|
222
222
|
|
|
223
223
|
- **Cost comes from the engine, not from the price table.** The result object carries
|
|
224
224
|
`total_cost_usd`, and the wrapper writes it straight into the session's spend, so the run ledger
|
|
225
225
|
and the `maxBudgetUsd` gate both read what xAI charged. Other engines multiply tokens by a rate in
|
|
226
|
-
`models.ts`. `grok-4.
|
|
226
|
+
`models.ts`. `grok-4.7` (grok's default since 1.0.67) and `grok-4.6` are still registered, for
|
|
227
|
+
their context window and an indicative breakdown; with no `model` set, the session is labelled with
|
|
228
|
+
the model grok reports under `modelUsage`.
|
|
227
229
|
- **Real conversation continuity**: the `sessionId` from turn 1 is replayed as `--resume <id>`.
|
|
228
230
|
`--continue` is not used — it means "the most recent session for this cwd", which collides
|
|
229
231
|
between concurrent sessions.
|
|
@@ -263,7 +265,7 @@ prints a single JSON object and exits. Tested with `grok` **1.0.50**.
|
|
|
263
265
|
await manager.startSession({
|
|
264
266
|
name: 'grok-task',
|
|
265
267
|
engine: 'grok',
|
|
266
|
-
model: 'grok-4.
|
|
268
|
+
model: 'grok-4.7',
|
|
267
269
|
cwd: '/project',
|
|
268
270
|
});
|
|
269
271
|
```
|
|
@@ -145,7 +145,7 @@ is unrecoverable and reads back as "not found".
|
|
|
145
145
|
| `human_gate` | Parks the run until a person answers |
|
|
146
146
|
| `router` | Picks the next node from declarative conditions; a backwards route is the loop |
|
|
147
147
|
| `subflow` | Runs another workflow as a step and adopts its verdict |
|
|
148
|
-
| `autoloop` | A long-lived Planner / Coder / Reviewer loop; its executor is injected
|
|
148
|
+
| `autoloop` | A long-lived Planner / Coder / Reviewer loop; its executor is injected. On the node's first visit (`visits === 1`) the shared fresh-start boundary applies (dirty-worktree refusal + run-local `tasks/<config.runId>/.gitignore`); resume and later visits skip it. |
|
|
149
149
|
| `ultraapp_*` | UltraApp's synth and deploy stages; their executors are injected too |
|
|
150
150
|
|
|
151
151
|
Every node takes `retry: { max, backoffMs }`, `timeoutMs`, and
|