@iowarp/clio-coder 0.3.4 → 0.3.6
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/CHANGELOG.md +37 -2
- package/CONTRIBUTING.md +6 -6
- package/README.md +2 -2
- package/dist/{acp-S5R4RR5B.js → acp-2BEHC4DL.js} +4 -4
- package/dist/{agents-P6DMMVZY.js → agents-LNNFTM53.js} +13 -11
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-2XCZLPKS.js → auth-KXXFI2VS.js} +6 -6
- package/dist/{chunk-YCWGATWI.js → chunk-24I7BN55.js} +2 -2
- package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
- package/dist/chunk-3BPUFZDL.js +37 -0
- package/dist/{chunk-WPQLXFOZ.js → chunk-43AOLP7E.js} +2 -2
- package/dist/{chunk-N4CZJQRK.js → chunk-5JGRAMKL.js} +4 -4
- package/dist/{chunk-BRXQQJFP.js → chunk-6US73PDB.js} +568 -47
- package/dist/{chunk-K6WL7QZT.js → chunk-6XXKFVSN.js} +2 -2
- package/dist/{chunk-QQK64KLB.js → chunk-CJUB2JJ2.js} +138 -20
- package/dist/{chunk-HV5X7OR2.js → chunk-CKXWIANG.js} +12 -12
- package/dist/{chunk-UZHIZC5S.js → chunk-CYQKWTG3.js} +61 -76
- package/dist/{chunk-QWU7ZBO7.js → chunk-DJVECN66.js} +204 -45
- package/dist/{chunk-ZWMF7253.js → chunk-E2ER4LJF.js} +304 -9
- package/dist/{chunk-7RXG6QRZ.js → chunk-EKY57CSP.js} +2 -75
- package/dist/{chunk-EDRHSCIE.js → chunk-EYPA3EGJ.js} +10 -2
- package/dist/{chunk-TTNYS3EA.js → chunk-G7MUEIGA.js} +1 -1
- package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
- package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
- package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
- package/dist/chunk-HWUFFB6L.js +83 -0
- package/dist/{chunk-35MKKU5R.js → chunk-K7T3E2SR.js} +15 -8
- package/dist/{chunk-VAWWTKDP.js → chunk-KHSFENX2.js} +2 -2
- package/dist/chunk-LCGCVYZ4.js +57 -0
- package/dist/{chunk-X6COSD2O.js → chunk-LYF7OHWH.js} +41 -14
- package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
- package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
- package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
- package/dist/{chunk-3JLKSKD7.js → chunk-OH3TOQTB.js} +5 -1
- package/dist/{chunk-MEQ45TQ4.js → chunk-PBTHKCPN.js} +18 -4
- package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
- package/dist/{chunk-QQL5RT5M.js → chunk-QM3F2GKX.js} +94 -36
- package/dist/{chunk-A2GZF7DC.js → chunk-QNQHSOLF.js} +4 -4
- package/dist/{chunk-KRPY7NTG.js → chunk-R46L2BIR.js} +3 -3
- package/dist/{chunk-BP4OYD6A.js → chunk-RY3LY4J5.js} +20 -2
- package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
- package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
- package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
- package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
- package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
- package/dist/{chunk-HXG4IURW.js → chunk-XE2VEJHX.js} +2 -2
- package/dist/{chunk-3HZ5RWN2.js → chunk-XF5N4U5A.js} +7 -6
- package/dist/{chunk-ZYKPLLNQ.js → chunk-XXQNGV4M.js} +590 -32
- package/dist/{chunk-4JUF2NNX.js → chunk-XYDYPRZI.js} +4 -4
- package/dist/{chunk-VMNQ6OZA.js → chunk-ZRGEBJ4T.js} +971 -794
- package/dist/{chunk-2LZI5CAG.js → chunk-ZXF4XRKW.js} +75 -33
- package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
- package/dist/cli/index.js +31 -31
- package/dist/{clio-J5JIOIDS.js → clio-M2KGYUFZ.js} +2 -2
- package/dist/{code-nav-AXCXSBHX.js → code-nav-GQNL7XA6.js} +5 -5
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/{components-KELWS457.js → components-5TTYYX6G.js} +3 -3
- package/dist/{config-OEBMIN2U.js → config-XUUYQIWO.js} +27 -25
- package/dist/{configure-PUQOSIXQ.js → configure-IHJ7YOMV.js} +7 -7
- package/dist/{context-URSXPBCK.js → context-74JLXAWD.js} +12 -12
- package/dist/{context-MGSE4Z2T.js → context-75MIWW3U.js} +24 -22
- package/dist/{context-EKDCKUUZ.js → context-ZQ7SIFJV.js} +8 -7
- package/dist/{context-clear-KDAJRNUK.js → context-clear-GYKWNUML.js} +24 -22
- package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
- package/dist/{context-working-set-SBKMPPI2.js → context-working-set-UX5KEP4J.js} +11 -10
- package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-GIJBHNFL.js} +21 -20
- package/dist/{docs-2C2LTVT2.js → docs-6FZSCG5B.js} +3 -3
- package/dist/{doctor-7BSE27PJ.js → doctor-SVJ5BZCW.js} +4 -4
- package/dist/{eval-IZGDOO4H.js → eval-CG6LLBLD.js} +47 -232
- package/dist/{evidence-SR7WXB5B.js → evidence-ZYFIEN42.js} +19 -18
- package/dist/{evolve-K7VE2CBX.js → evolve-QGEXEMDW.js} +19 -18
- package/dist/{extensions-QVDOHDGJ.js → extensions-ADGNCJJD.js} +3 -3
- package/dist/{fleet-7XMJNQNF.js → fleet-S5R4ZOQY.js} +49 -30
- package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
- package/dist/{init-JGNPAYXT.js → init-5DRU55YR.js} +31 -29
- package/dist/memory-7YKKR6UC.js +467 -0
- package/dist/{models-ZMMLFJNN.js → models-ZPOLRU2C.js} +10 -10
- package/dist/{monitor-2F3T5KHP.js → monitor-US5F5YGZ.js} +33 -18
- package/dist/{orchestrator-ORHT43JB.js → orchestrator-E2AL4T5N.js} +1092 -659
- package/dist/{paths-UXLN5YYZ.js → paths-E7KYAQWE.js} +3 -3
- package/dist/{reset-NXGTYNUO.js → reset-KZ652EK6.js} +3 -3
- package/dist/{run-RF4WJGMT.js → run-SRNBKDWD.js} +52 -40
- package/dist/{share-UT3W6E4M.js → share-CGZE33UP.js} +3 -3
- package/dist/{skills-PSACKC5Q.js → skills-S2X4DLY5.js} +4 -4
- package/dist/{skills-eval-WJSI55RZ.js → skills-eval-W2GGIC4R.js} +19 -18
- package/dist/{targets-PIIRAOYS.js → targets-54SWINWB.js} +14 -12
- package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-SAIF2OGY.js} +5 -4
- package/dist/{uninstall-FZCQCDKC.js → uninstall-BVLWXKBT.js} +3 -3
- package/dist/{upgrade-346TZ6AV.js → upgrade-JKAR27XC.js} +8 -8
- package/dist/{usage-6KKXR32N.js → usage-MSAWCLX4.js} +60 -27
- package/dist/{verifiers-4UUM6TEE.js → verifiers-NCBTHHN2.js} +60 -54
- package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-GUSOQ6ZP.js} +30 -28
- package/dist/worker/entry.js +69 -58
- package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
- package/docs/README.md +3 -3
- package/docs/acp.md +1 -1
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-placement.md +1 -2
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +9 -7
- package/docs/configuration-and-targets.md +12 -1
- package/docs/context-engine.md +4 -2
- package/docs/context-working-set.md +4 -4
- package/docs/development-pipeline.md +1 -1
- package/docs/documentation-coverage.md +3 -3
- package/docs/documentation-guide.md +2 -2
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +4 -45
- package/docs/evidence-and-memory.md +67 -7
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +2 -2
- package/docs/fleet-dispatch.md +28 -2
- package/docs/installation-and-lifecycle.md +2 -2
- package/docs/middleware-and-components.md +19 -2
- package/docs/model-catalog.md +1 -1
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +26 -16
- package/docs/prompt-envelope-and-tools.md +4 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +38 -35
- package/docs/safety-model.md +29 -7
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +2 -2
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +38 -4
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +7 -4
- package/src/cli/agents.ts +2 -3
- package/src/cli/argv.ts +14 -1
- package/src/cli/fleet.ts +15 -0
- package/src/cli/index.ts +1 -1
- package/src/cli/memory.ts +272 -10
- package/src/cli/modes/json-stream.ts +2 -2
- package/src/cli/modes/print.ts +12 -1
- package/src/cli/run.ts +22 -2
- package/src/cli/targets.ts +12 -3
- package/src/cli/usage.ts +55 -7
- package/src/core/bus-events.ts +3 -0
- package/src/core/response-model-id.ts +134 -0
- package/src/core/toml.ts +62 -0
- package/src/core/workspace-files.ts +0 -1
- package/src/domains/agents/builtins/architect.md +1 -1
- package/src/domains/agents/catalog.ts +5 -4
- package/src/domains/agents/recipe.ts +54 -14
- package/src/domains/agents/result-contract.ts +7 -4
- package/src/domains/context/bootstrap.ts +36 -27
- package/src/domains/context/project-metadata.ts +19 -63
- package/src/domains/context/prompt-context.ts +8 -0
- package/src/domains/context/working-set/policies/index.ts +3 -4
- package/src/domains/dispatch/budget-envelope.ts +396 -0
- package/src/domains/dispatch/contract.ts +2 -0
- package/src/domains/dispatch/extension.ts +81 -27
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-integrity.ts +4 -0
- package/src/domains/dispatch/state.ts +1 -0
- package/src/domains/dispatch/types.ts +10 -3
- package/src/domains/dispatch/validation.ts +14 -0
- package/src/domains/dispatch/worker-spawn.ts +14 -3
- package/src/domains/eval/metrics/evidence.ts +0 -116
- package/src/domains/eval/metrics/invariants.ts +1 -1
- package/src/domains/eval/runners/clio-run.ts +1 -10
- package/src/domains/eval/runners/external-command.ts +2 -29
- package/src/domains/eval/schema/suite.ts +0 -7
- package/src/domains/eval/suites/run.ts +1 -7
- package/src/domains/memory/index.ts +22 -0
- package/src/domains/memory/operations.ts +58 -1
- package/src/domains/memory/promotion.ts +281 -0
- package/src/domains/memory/prompt-section.ts +25 -5
- package/src/domains/memory/proposal.ts +51 -7
- package/src/domains/memory/task-bank.ts +3 -2
- package/src/domains/memory/task-memory-handoff.ts +181 -24
- package/src/domains/memory/task-memory-policy.ts +3 -1
- package/src/domains/memory/types.ts +37 -0
- package/src/domains/memory/validate.ts +178 -0
- package/src/domains/middleware/memory-intervention.ts +35 -25
- package/src/domains/middleware/runtime.ts +6 -0
- package/src/domains/middleware/skills-reminder.ts +19 -4
- package/src/domains/middleware/stalled-turn.ts +43 -1
- package/src/domains/middleware/types.ts +10 -0
- package/src/domains/observability/contract.ts +6 -1
- package/src/domains/observability/cost.ts +20 -4
- package/src/domains/observability/extension.ts +2 -2
- package/src/domains/providers/index.ts +3 -0
- package/src/domains/providers/model-discovery.ts +9 -0
- package/src/domains/providers/runtime-resolution.ts +38 -1
- package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
- package/src/domains/providers/types/context-window-slots.ts +18 -0
- package/src/domains/providers/types/runtime-descriptor.ts +3 -1
- package/src/domains/safety/call-target.ts +211 -14
- package/src/domains/safety/decision-presentation.ts +268 -0
- package/src/domains/safety/redaction.ts +73 -0
- package/src/domains/session/context-ledger.ts +10 -1
- package/src/domains/session/decision-board.ts +4 -0
- package/src/domains/session/entries.ts +3 -0
- package/src/domains/session/history.ts +68 -19
- package/src/domains/session/usage.ts +24 -7
- package/src/engine/acp/event-mapper.ts +7 -0
- package/src/engine/acp/server.ts +29 -2
- package/src/engine/apis/lmstudio.ts +25 -4
- package/src/engine/apis/openai-completions.ts +147 -22
- package/src/engine/claude/sdk-runtime.ts +8 -2
- package/src/engine/claude/tool-safety.ts +13 -0
- package/src/engine/loop-guard.ts +27 -3
- package/src/engine/worker-events.ts +4 -3
- package/src/engine/worker-runtime.ts +59 -54
- package/src/entry/orchestrator.ts +18 -1
- package/src/interactive/chat-loop-messages.ts +22 -0
- package/src/interactive/chat-loop.ts +13 -0
- package/src/interactive/chat-renderer.ts +19 -3
- package/src/interactive/clio-editor.ts +44 -7
- package/src/interactive/context-overlay.ts +43 -5
- package/src/interactive/cost-overlay.ts +39 -8
- package/src/interactive/dispatch-board.ts +212 -35
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +6 -1
- package/src/interactive/interactive-input-runtime.ts +11 -1
- package/src/interactive/interactive-presentation.ts +11 -1
- package/src/interactive/memory-overlay.ts +89 -4
- package/src/interactive/overlay-ask-user-lifecycle.ts +1 -1
- package/src/interactive/overlay-frame.ts +5 -2
- package/src/interactive/overlay-general-openers.ts +40 -1
- package/src/interactive/overlay-key-routing.ts +41 -1
- package/src/interactive/overlay-lifecycle.ts +11 -4
- package/src/interactive/overlay-permission-lifecycle.ts +23 -8
- package/src/interactive/overlay-transitions.ts +11 -0
- package/src/interactive/overlays/ask-user.ts +74 -30
- package/src/interactive/overlays/decisions.ts +3 -1
- package/src/interactive/permission-hint.ts +35 -0
- package/src/interactive/permission-overlay.ts +95 -45
- package/src/interactive/renderers/tool-execution.ts +19 -49
- package/src/interactive/session-last-turn.ts +8 -1
- package/src/interactive/session-usage-reseed.ts +36 -10
- package/src/interactive/slash-commands.ts +2 -2
- package/src/interactive/status/summary.ts +5 -0
- package/src/interactive/status/types.ts +5 -0
- package/src/interactive/terminal-lease.ts +1 -0
- package/src/interactive/turn-context.ts +96 -23
- package/src/interactive/turn-middleware.ts +1 -0
- package/src/interactive/turn-runtime.ts +37 -8
- package/src/interactive/turn-state.ts +3 -0
- package/src/interactive/worker-progress.ts +440 -0
- package/src/interactive/worker-stream.ts +51 -110
- package/src/tools/agent-tools.ts +28 -3
- package/src/tools/ask-user.ts +21 -1
- package/src/tools/context/index.ts +2 -2
- package/src/tools/dispatch-arguments.ts +8 -0
- package/src/tools/dispatch-event-text.ts +19 -0
- package/src/tools/dispatch.ts +24 -1
- package/src/tools/monitor.ts +15 -0
- package/src/tools/registry.ts +15 -5
- package/src/tools/result-disposition.ts +156 -0
- package/src/tools/result-shaping.ts +59 -1
- package/src/tools/verify/authoring.ts +55 -54
- package/src/tools/worker-evidence.ts +19 -0
- package/src/worker/spec-contract.ts +43 -3
- package/dist/chunk-EFADSJET.js +0 -18
- package/dist/memory-4ALKDJ4Q.js +0 -246
- package/src/domains/eval/metrics/chaos-stream.ts +0 -93
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# v0.3.
|
|
1
|
+
# v0.3.6 Release-Cut Checklist
|
|
2
2
|
|
|
3
|
-
The ordered steps that turn the prepared `v0.3.
|
|
3
|
+
The ordered steps that turn the prepared `v0.3.6` branch into a published
|
|
4
4
|
release. Everything above the line marked **AUTHORIZATION BOUNDARY** is
|
|
5
5
|
repeatable and reversible and is run locally before the cut. Everything below
|
|
6
6
|
it is external or irreversible and needs an explicit decision from the
|
|
@@ -11,13 +11,14 @@ state of every step.
|
|
|
11
11
|
|
|
12
12
|
| Item | State |
|
|
13
13
|
| --- | --- |
|
|
14
|
-
| Branch | `v0.3.
|
|
15
|
-
| `package.json` version | `0.3.
|
|
16
|
-
| `main` | `
|
|
17
|
-
| `origin/main` | `
|
|
18
|
-
| Tags | none for 0.3.
|
|
19
|
-
| GitHub Release | none for 0.3.
|
|
20
|
-
| npm registry | `@iowarp/clio-coder@0.3.
|
|
14
|
+
| Branch | `v0.3.6`, local only; pushed with the explicit refspec `refs/heads/v0.3.6` when the operator decides, never as a bare name that a tag could shadow |
|
|
15
|
+
| `package.json` version | `0.3.6`; the top `CHANGELOG.md` heading is `## 0.3.6 - 2026-08-23` |
|
|
16
|
+
| `main` | `590fda7d`, which already carries the v0.3.5 content and the CI diet; it is an ancestor of `v0.3.6` and moves only at Part 4. |
|
|
17
|
+
| `origin/main` | `590fda7d`, matching `main` with the v0.3.5 content and the CI diet |
|
|
18
|
+
| Tags | none for 0.3.6, local or remote |
|
|
19
|
+
| GitHub Release | none for 0.3.6 |
|
|
20
|
+
| npm registry | `@iowarp/clio-coder@0.3.6` absent; `latest` is `0.3.4` |
|
|
21
|
+
| npm history | `@iowarp/clio-coder` has published versions 0.3.0 through 0.3.4, with `latest` at 0.3.4. Version 0.3.5 was published and withdrawn, so `@iowarp/clio-coder@0.3.5` can never be reused. |
|
|
21
22
|
| Commit provenance identity | Post-release maintainer follow-up, not a gate: verifying `clio-coder@iowarp.ai` on IOWarp-controlled GitHub and GitLab identities (such as `clio-coder-bot` or `iowarp-clio`, with `assets/clio-coder-avatar-512.png` as the avatar) only changes how those platforms render the trailers. |
|
|
22
23
|
|
|
23
24
|
---
|
|
@@ -38,8 +39,9 @@ Run against the exact final candidate with `NO_COLOR` unset and
|
|
|
38
39
|
integrity, version coherence between `package.json` and the top
|
|
39
40
|
`CHANGELOG.md` heading, the forbidden-file list, the required runtime
|
|
40
41
|
resources, and the tarball and unpacked size budgets)
|
|
41
|
-
9.
|
|
42
|
-
|
|
42
|
+
9. Optional: step 8 again under Node 24. Hosted CI gates on Node 22 alone,
|
|
43
|
+
the `engines` floor; the weekly `flake-hunt` workflow carries Node 24.
|
|
44
|
+
Repeat locally only when the cut touches runtime-sensitive code.
|
|
43
45
|
10. `npm run live:smoke -- --target <id>` for one real headless turn through
|
|
44
46
|
the built binary against a configured target, which is the one release
|
|
45
47
|
check a deterministic suite cannot give. The packaged-install lifecycle
|
|
@@ -58,22 +60,22 @@ Run against the exact final candidate with `NO_COLOR` unset and
|
|
|
58
60
|
## Part 2: version and notes (repeatable)
|
|
59
61
|
|
|
60
62
|
13. Files carrying a version reference, to update together if the number
|
|
61
|
-
changes: `package.json` and `package-lock.json`, the `## 0.3.
|
|
62
|
-
heading in `CHANGELOG.md`, the `(Version: 0.3.
|
|
63
|
-
the `Blueprint (v0.3.
|
|
63
|
+
changes: `package.json` and `package-lock.json`, the `## 0.3.6 - <date>`
|
|
64
|
+
heading in `CHANGELOG.md`, the `(Version: 0.3.6)` markers in `docs/*.md`,
|
|
65
|
+
the `Blueprint (v0.3.6)` titles in `docs/html/*.html`, the `--branch`
|
|
64
66
|
pin in the README install block (the hygiene lint checks it), and the
|
|
65
67
|
measured-at figures in `scripts/check-release.mjs` if the package size
|
|
66
68
|
moved materially.
|
|
67
|
-
14. Confirm the `## 0.3.
|
|
69
|
+
14. Confirm the `## 0.3.6` section of `CHANGELOG.md` describes every
|
|
68
70
|
user-visible behavior change, including the ones that alter existing
|
|
69
71
|
behavior, and carries no Workbench release narrative. The release workflow
|
|
70
72
|
uses this section verbatim as the GitHub Release body.
|
|
71
73
|
15. Re-run `npm run ci:release` after any version edit and commit as one
|
|
72
|
-
commit on `v0.3.
|
|
74
|
+
commit on `v0.3.6`.
|
|
73
75
|
|
|
74
76
|
## Part 3: present the gate
|
|
75
77
|
|
|
76
|
-
16. Report to the operator before touching `main`: the exact final `v0.3.
|
|
78
|
+
16. Report to the operator before touching `main`: the exact final `v0.3.6`
|
|
77
79
|
SHA and clean status, the commits added since the handoff SHA, the gate
|
|
78
80
|
commands with pass/fail totals for both Node majors, the package version
|
|
79
81
|
and changelog heading, the tarball audit, the clean-install results and any
|
|
@@ -92,35 +94,36 @@ confirming the exact SHA and the commands.
|
|
|
92
94
|
## Part 4: fast-forward `main`
|
|
93
95
|
|
|
94
96
|
17. `git fetch origin` immediately before integrating; require `origin/main`
|
|
95
|
-
to be an ancestor of the reviewed `v0.3.
|
|
97
|
+
to be an ancestor of the reviewed `v0.3.6` tip and confirm no other
|
|
96
98
|
worktree has `main` checked out.
|
|
97
|
-
18. `git checkout main && git merge --ff-only v0.3.
|
|
99
|
+
18. `git checkout main && git merge --ff-only v0.3.6`. No merge commit, no
|
|
98
100
|
rebase, no reset. Verify `main` equals the reviewed SHA and is clean.
|
|
99
101
|
19. `git fetch origin` once more; stop on any unexpected remote movement. Then
|
|
100
102
|
`git push origin main`. Never `--force` or `--force-with-lease`.
|
|
101
103
|
|
|
102
104
|
## Part 5: exact-SHA CI, tag, GitHub Release
|
|
103
105
|
|
|
104
|
-
20.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
`git
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
`package.json`,
|
|
114
|
-
section of `CHANGELOG.md` as the release body, and
|
|
106
|
+
20. The `main` push triggers the `ci` workflow. It is a useful signal but no
|
|
107
|
+
longer a gate on tagging, because `release.yml` runs the same gate on the
|
|
108
|
+
tagged tree itself. A red run still blocks the cut; investigate it rather
|
|
109
|
+
than tagging around it, and never silence a flake with an unrelated
|
|
110
|
+
change.
|
|
111
|
+
21. Reconfirm that tag `v0.3.6` and the GitHub Release do not exist, then
|
|
112
|
+
`git tag -a v0.3.6 -m "Clio Coder 0.3.6"` on the green SHA and
|
|
113
|
+
`git push origin refs/tags/v0.3.6`.
|
|
114
|
+
22. The tag push triggers `.github/workflows/release.yml`, which verifies the
|
|
115
|
+
tag matches `package.json`, runs `npm run ci:release` on the tagged tree,
|
|
116
|
+
extracts the `## 0.3.6` section of `CHANGELOG.md` as the release body, and
|
|
117
|
+
attaches the tarball.
|
|
115
118
|
Do not create a release by hand. Verify the run's SHA, the notes, the
|
|
116
119
|
attached tarball, and the URL.
|
|
117
120
|
|
|
118
121
|
## Part 6: npm publication (irreversible)
|
|
119
122
|
|
|
120
123
|
23. `npm whoami` and confirm the registry and account; reconfirm
|
|
121
|
-
`@iowarp/clio-coder@0.3.
|
|
124
|
+
`@iowarp/clio-coder@0.3.6` is still absent.
|
|
122
125
|
24. Obtain the operator's explicit dist-tag decision. `latest` makes this the
|
|
123
|
-
default install for every user; `--tag next` keeps `0.3.
|
|
126
|
+
default install for every user; `--tag next` keeps `0.3.4` as the default.
|
|
124
127
|
25. Run `npm publish` (or `npm publish --tag next`) once. `prepublishOnly`
|
|
125
128
|
re-runs `ci:release` as a safety net; it is not a substitute for Part 1.
|
|
126
129
|
26. A published version cannot be replaced. `npm unpublish` is restricted and
|
|
@@ -128,13 +131,13 @@ confirming the exact SHA and the commands.
|
|
|
128
131
|
|
|
129
132
|
## Part 7: post-publish verification and follow-ups
|
|
130
133
|
|
|
131
|
-
27. `npm view @iowarp/clio-coder@0.3.
|
|
134
|
+
27. `npm view @iowarp/clio-coder@0.3.6` and the selected dist-tag.
|
|
132
135
|
28. On a clean machine, `npm install -g @iowarp/clio-coder` from the registry
|
|
133
136
|
rather than from a local tarball, then repeat step 12 against it, plus
|
|
134
137
|
`configure` to a real target and one real turn when one is authorized.
|
|
135
138
|
This is the only step that tests what users actually receive.
|
|
136
|
-
29. From an installation of 0.3.
|
|
137
|
-
applies 0.3.
|
|
139
|
+
29. From an installation of 0.3.4, verify `clio-coder upgrade` finds and
|
|
140
|
+
applies 0.3.6.
|
|
138
141
|
30. Record the SHA, CI URL, tag, GitHub Release URL, npm version and dist-tag,
|
|
139
142
|
tarball evidence, and the post-publish verification in the release report.
|
|
140
143
|
31. Maintainer follow-up, independent of the release: verify the commit
|
package/docs/safety-model.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Clio Coder Safety Model
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive dashboard is located at [docs/html/safety_blueprint.html](html/safety_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive dashboard is located at [docs/html/safety_blueprint.html](html/safety_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
Clio Coder's safety posture is code-enforced, not prompt-only. As the orchestrator coding agent in the [IOWarp](https://iowarp.ai) ecosystem developed by the [Gnosis Research Center](https://grc.iit.edu) at Illinois Tech under NSF Award [#2411318](https://www.nsf.gov/awardsearch/showAward?AWD_ID=2411318), Clio gates execution by target capabilities, the tool registry, the safety policy engine, project policies, protected-artifact checks, and audit receipts.
|
|
7
7
|
|
|
@@ -13,7 +13,7 @@ Source of truth: `src/domains/safety/**`, `src/tools/registry.ts`, `src/tools/bo
|
|
|
13
13
|
|
|
14
14
|
The `autonomy` setting (`read-only` | `suggest` | `auto-edit` | `full-auto`) is an enforced dial. It controls exactly one thing: which action classes run immediately, which park for operator approval, and which are auto-denied. The safety net (damage-control rules, path policy, protected artifacts, loop guard, dispatch scope admission) is independent of the dial and identical at every level. When a `[safety-net]` notice appears at full-auto, that is the always-on net working as designed, not a contradiction of the level.
|
|
15
15
|
|
|
16
|
-
In Clio Coder v0.3.
|
|
16
|
+
In Clio Coder v0.3.6, effective autonomy resolution is strictly centralized in `src/entry/orchestrator.ts` through `resolveEffectiveAutonomy` and `resolveBaselineAutonomy`. Every admission surface (tool registry admission, dispatch plan provenance, and ACP session snapshots) delegates to this pair of functions so that fallback paths cannot diverge across execution contexts. `resolveBaselineAutonomy` evaluates dispatch settings overrides, headless CLI options, and configuration settings before applying the default `auto-edit` level. `resolveEffectiveAutonomy` combines any active ACP session autonomy level with the baseline resolution.
|
|
17
17
|
|
|
18
18
|
### Autonomy levels
|
|
19
19
|
|
|
@@ -40,6 +40,27 @@ The `system_modify` confirm is level-invariant, so it is enforced and attributed
|
|
|
40
40
|
|
|
41
41
|
The level is persisted as `autonomy` in `settings.yaml`, hot-reloads, and is edited in the `/settings` Autonomy & Safety section.
|
|
42
42
|
|
|
43
|
+
### Consequence tier is presentation, not authority
|
|
44
|
+
|
|
45
|
+
Every operator decision also receives one closed consequence tier. The tier explains what the already-required decision can affect. It never decides whether a call runs, never changes the autonomy level, and never overrides a safety-net verdict. Registry admission still follows the enforcement path below before any presentation is built.
|
|
46
|
+
|
|
47
|
+
| Consequence tier | Trusted facts that select it | Operator-facing meaning |
|
|
48
|
+
| --- | --- | --- |
|
|
49
|
+
| Conversational answer | A local `ask_user` question that records an answer | Records an answer without granting tool authority. |
|
|
50
|
+
| Workspace authority | A main-agent one-shot approval whose bounded scope is the workspace | Authorizes only the presented call. Workspace changes can be reviewed and reverted when the action class supports that. |
|
|
51
|
+
| Outward consequence | Typed `exposure: outward` | The answer concerns a step that can reach people or systems outside the workspace. The interview itself does not publish or send anything. |
|
|
52
|
+
| Safety-net confirmation | An always-on confirm rail | The safety net requires a one-shot operator decision independently of the autonomy level. |
|
|
53
|
+
| System change | `system_modify`, destructive, unknown, or otherwise system-scoped consequences | The effect reaches outside the workspace or cannot be safely bounded, and reversibility is unknown. |
|
|
54
|
+
| Worker escalation | An authenticated dispatched-worker origin | The parked decision belongs to the named worker run and returns only to that exact request. |
|
|
55
|
+
|
|
56
|
+
The classifier reads the request kind, the enforced safety or autonomy axis, normalized local or outward exposure, derived reversibility and scope, authenticated main-agent or worker origin, and whether the surface records an answer or grants one-shot authority. Model-authored questions, reasons, summaries, option labels, titles, and color names do not enter the classifier. Worker and system facts take conservative precedence, and an unknown action class uses the system tier. An interview that has reached outward exposure keeps that tier for later rounds and durable replay, so a later local declaration cannot visually lower it.
|
|
57
|
+
|
|
58
|
+
These three concepts answer different questions:
|
|
59
|
+
|
|
60
|
+
- The autonomy level decides when the registry allows, parks, or denies an action class.
|
|
61
|
+
- The safety-net axis identifies an always-on rule that can block or require confirmation at every autonomy level.
|
|
62
|
+
- The consequence tier explains the scope, reversibility, requester, and effect of a decision that the enforced axes have already produced.
|
|
63
|
+
|
|
43
64
|
---
|
|
44
65
|
|
|
45
66
|
## Enforcement path
|
|
@@ -237,7 +258,7 @@ Prefer typed tools over Bash:
|
|
|
237
258
|
|
|
238
259
|
A package-script check and the frontend validator are in the no-prompt set at `auto-edit`: both are bounded by the verification-script family and a fixed argv shape. A project-catalog check is not. The engine resolves the check id against `.clio-coder/verifiers.yaml` on every call and treats the declared argv exactly like a bash command string: the damage-control rules and the zero-access read guard scan it, and it is tagged unrecognized, so `auto-edit` parks it for one confirmation that shows the argv and `full-auto` runs it. `.clio-coder/verifiers.yaml` and `.clio-coder/safety.yaml` are read-only to the model's `write`, `edit`, and bash redirect paths through the default path policy: both files are operator authority, and a model that could author either one could widen its own permissions in two tool calls.
|
|
239
260
|
|
|
240
|
-
The project verifier catalog is an executable authority supplied by the repository, not by model prose. Its schema rejects unknown fields, shell strings
|
|
261
|
+
The project verifier catalog is an executable authority supplied by the repository, not by model prose. Its schema rejects unknown fields, shell strings, invalid or duplicate IDs, oversized values, absolute or escaping working directories, unsupported versions, and collisions with package-provider IDs. It also refuses the common shell executables (`sh`, `bash`, `zsh`, and the like) as argv[0], which is a tripwire against the obvious mistake rather than a sandbox: `python3 -c`, `node -e`, and `env bash -c` pass the schema, so the authority boundary is the fact that the catalog file is operator-owned and read-only to the model, and that every catalog check is scanned by the damage-control rules and parked at `auto-edit`. A catalog entry fixes argv, repository-relative cwd, and timeout. Tool-call `args`, `cwd`, timeout, output-cap, or environment-shaped fields cannot widen it. Safe-exec uses `spawn` without a shell, filters the child environment to the Clio allowlist, honors cancellation, and reports exact argv and termination evidence.
|
|
241
262
|
|
|
242
263
|
`clio-coder verifiers discover` and `clio-coder verifiers author` do not grant authority during inspection. They read only declared package, Cargo, CMake preset, Python runner, Go module, and YAML validation-command signals and render exact argv vectors with provenance. The preview names the catalog path, cwd, timeout, tags, and authority consequence for every check. Toolchain conventions are labeled separately from literal project declarations. Ambiguous validation prose and directory-only hints are rejected with a JSON argv manual-entry path.
|
|
243
264
|
|
|
@@ -286,7 +307,7 @@ Evidence raises a warn-level external-bypass finding for bypassed runs and an in
|
|
|
286
307
|
|
|
287
308
|
## Approvals
|
|
288
309
|
|
|
289
|
-
An `ask` can come from either axis: a safety-net confirm rail (damage-control `ask` rule, project `requireConfirmation`, `system_modify`) or the autonomy mapping. The permission overlay names the asking axis on its `
|
|
310
|
+
An `ask` can come from either axis: a safety-net confirm rail (damage-control `ask` rule, project `requireConfirmation`, `system_modify`) or the autonomy mapping. The permission overlay names the authenticated requester and asking axis on its `Requested by:` lines, and the transcript carries an `[approval]` notice for every parked call.
|
|
290
311
|
|
|
291
312
|
Every approvable ask has one canonical identity: a `requestId` minted at the approvals plane. The `PermissionRequested` and `PermissionResolved` bus payloads and the audit permission rows all carry it, along with `origin` (who asked), `axis` (which rail or level), and `decidedBy` (who or what answered), so a request joins its resolution on one key across the bus, the ledger, and receipts, and every request resolves exactly once. Worker escalations forward their full decision provenance (reasons, reason code, rule id, policy source), so the overlay names the real asking rail for a worker exactly as it does for the main agent.
|
|
292
313
|
|
|
@@ -294,9 +315,10 @@ How an ask resolves depends on the context:
|
|
|
294
315
|
|
|
295
316
|
### Interactive TUI Behavior
|
|
296
317
|
|
|
297
|
-
In interactive mode, a permission request opens a queued overlay prompt immediately in the TUI.
|
|
298
|
-
- **Queued Overlays:** If multiple tools or worker dispatches require permission during a single turn, the TUI queues the requests. Closing one overlay automatically pops the next permission overlay in the queue.
|
|
299
|
-
- **Operator Options:**
|
|
318
|
+
In interactive mode, a permission request opens a queued overlay prompt immediately in the TUI, and the composer rail switches to `CONFIRM` with the same keys for as long as the prompt owns the keyboard.
|
|
319
|
+
- **Queued Overlays:** If multiple tools or worker dispatches require permission during a single turn, the TUI queues the requests. Closing one overlay automatically pops the next permission overlay in the queue. Each queued request retains its consequence tier and authenticated requester. A request that arrives while a different overlay (a picker, `/context`, the fleet board) holds the screen is announced with an `[approval]` notice and re-presented the moment that overlay closes.
|
|
320
|
+
- **Operator Options:** `Enter` grants permission once, which resumes only the parked tool call without changing the overall operating posture; the one-shot grant is scoped to the presented request's `requestId`. `Esc` denies only the presented request and advances the queue; the next parked call re-presents. `s` denies it and ends the turn. Cancel-all is reserved for shutdown, an aborted turn, headless runs, and transport failure, where no operator can answer.
|
|
321
|
+
- **Enter never doubles as send:** `Enter` allows only from an empty composer. While the composer holds a draft, `Enter` does nothing, both surfaces say `[Backspace] clear draft` in its place, and only deletion keys reach the editor. An operator who typed a message and pressed the habitual send key cannot approve a parked call by accident; on a safety rail the ambiguous key resolves away from allow.
|
|
300
322
|
|
|
301
323
|
### Deterministic Headless Behavior
|
|
302
324
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Clio Coder Scientific Validation Contracts
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive numerical tolerance calculator and HPC queue execution simulator is located at [docs/html/validation_blueprint.html](html/validation_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive numerical tolerance calculator and HPC queue execution simulator is located at [docs/html/validation_blueprint.html](html/validation_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
Scientific software development cannot treat simple file presence as proof of correctness. A simulation script that crashes on rank 48, or writes out NetCDF arrays filled with `NaN`s, may still successfully write a file to the disk.
|
|
7
7
|
|
|
8
|
-
Clio Coder recognizes **scientific validation contract files** as an opt-in signal for a higher evidence bar. In v0.3.
|
|
8
|
+
Clio Coder recognizes **scientific validation contract files** as an opt-in signal for a higher evidence bar. In v0.3.6, the session rigor resolver does not parse or enforce a scientific contract schema. The presence of `.clio-coder/validation.yaml`, `.clio-coder/validation.yml`, `validation.yaml`, `validation.yml`, or `VALIDATION.md` at the workspace root raises the default rigor level to `high`; the file contents are advisory material for developers, project agents, and external validators.
|
|
9
9
|
|
|
10
10
|
This advisory convention is separate from the executable project verifier catalog at `.clio-coder/verifiers.yaml`. The verifier catalog has a strict version-1 schema and admits exact argv vectors to the `verify` tool. Scientific validation contracts and handbook expectations do not grant command authority: prose such as `validators: ["python tools/check_grid.py"]` remains guidance until the project owner confirms the equivalent argv, cwd, timeout, and tags in `verifiers.yaml`. The executable catalog does not interpret numerical tolerances or artifact expectations; it only runs the explicitly declared process vector through safe-exec.
|
|
11
11
|
|
|
@@ -95,7 +95,7 @@ Comparing floating-point values in scientific computations must accommodate roun
|
|
|
95
95
|
|
|
96
96
|
## Common Scientific Artifact Families
|
|
97
97
|
|
|
98
|
-
The following labels are useful project conventions for validation contracts and reports. They are not a closed, core-enforced enum in v0.3.
|
|
98
|
+
The following labels are useful project conventions for validation contracts and reports. They are not a closed, core-enforced enum in v0.3.6:
|
|
99
99
|
|
|
100
100
|
- **`HDF5` / `NetCDF` / `Zarr`:** Multi-dimensional scientific array files.
|
|
101
101
|
- **`FITS`:** Flexible Image Transport System (used in astrophysics).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Session Lifecycle
|
|
2
2
|
|
|
3
|
-
This document is the authoritative specification for Clio Coder interactive and headless session lifecycles, on-disk ledger structures, tree-based conversation branching, checkpoints, and recovery protocols in `v0.3.
|
|
3
|
+
This document is the authoritative specification for Clio Coder interactive and headless session lifecycles, on-disk ledger structures, tree-based conversation branching, checkpoints, and recovery protocols in `v0.3.6`.
|
|
4
4
|
|
|
5
5
|
Source implementations: `src/engine/session.ts` and `src/domains/session/`.
|
|
6
6
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Skills Marketplace
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive dashboard is located at [docs/html/skills_blueprint.html](html/skills_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive dashboard is located at [docs/html/skills_blueprint.html](html/skills_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
The Skills Hub (`/skill`) shows project skills, user skills, and the marketplace. Every marketplace row comes from the same local lookup that `clio-coder skills install <name>` and `/skill <name>` resolve through, so the hub lists nothing it cannot install.
|
|
7
7
|
|
package/docs/tool-usage.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Tool Usage Reference
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive seven-plane tool atlas and observation envelope truncation/offload calculator is located at [docs/html/tool_usage_blueprint.html](html/tool_usage_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive seven-plane tool atlas and observation envelope truncation/offload calculator is located at [docs/html/tool_usage_blueprint.html](html/tool_usage_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
This is the deep usage reference behind the deliberately terse tool descriptions in the prompt envelope. Toolkit v2 keeps rich guidance out of tool descriptions and puts it here, where `context(scope="docs", query=...)` retrieves it section by section. Each tool below has its own self-contained `##` section covering the argument surface, defaults, truncation and continuation behavior, and concrete calls. Source of truth is `src/tools/`.
|
|
7
7
|
|
|
8
|
-
In Clio Coder v0.3.
|
|
8
|
+
In Clio Coder v0.3.6, `src/tools/agent-tools.ts` serves as the single agent-tool adapter across both orchestrator and worker runtimes. Both surfaces resolve their executable tools through the exact same `effectiveToolNames` narrowing, ensuring that attested tool schemas never drift from the tools available at runtime. Tools are keyed strictly by the `ToolName` union with no alias table. Argument leniency for weak-model callers is provided exclusively by per-tool `prepareArguments` normalizers declared on `ToolSpec`.
|
|
9
9
|
|
|
10
10
|
## Observation envelope: truncation notices, offload, next hints, and the turn budget
|
|
11
11
|
|
package/docs/trace-store.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Trace store contract
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive trace database viewer, schema inspector, and SQL query validator simulator is located at [docs/html/trace_blueprint.html](html/trace_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive trace database viewer, schema inspector, and SQL query validator simulator is located at [docs/html/trace_blueprint.html](html/trace_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
Clio's trace database is a rebuildable, queryable mirror. Receipts, session
|
|
7
7
|
ledgers, gate artifacts, and evidence remain the source of truth. Removing
|
package/docs/troubleshooting.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Troubleshooting & Error Remediation
|
|
2
2
|
|
|
3
|
-
This guide provides concrete, actionable remediation procedures for operational errors, permission denials, target connection failures, and system diagnostics in Clio Coder `v0.3.
|
|
3
|
+
This guide provides concrete, actionable remediation procedures for operational errors, permission denials, target connection failures, and system diagnostics in Clio Coder `v0.3.6`.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
package/docs/tui-design.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Clio TUI Design System
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive color/glyph token laboratory and terminal transcript preview renderer is located at [docs/html/tui_design_blueprint.html](html/tui_design_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive color/glyph token laboratory and terminal transcript preview renderer is located at [docs/html/tui_design_blueprint.html](html/tui_design_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
This document is the reference specification for the Clio Coder TUI visual layout, styling, and behavior. It describes color semantics, the glyph vocabulary, structural recipes, and state choreography for all surfaces under [src/interactive/](../src/interactive/).
|
|
7
7
|
|
|
@@ -36,7 +36,7 @@ All color styling is defined in [src/interactive/theme/tokens.ts](../src/interac
|
|
|
36
36
|
- Color is used functionally to indicate state. If removing a color does not lose information, the text is colored using `dim`, `muted`, or left unstyled.
|
|
37
37
|
- `warning` amber is reserved for true warnings. Costs and neutral telemetry numbers use `muted`.
|
|
38
38
|
- `accentDeep` is used only in section tags. Metric values (such as TTFT, tokens-per-second, and autonomy status) use `muted`.
|
|
39
|
-
- `action` neon orange remains scarce and strictly disciplined: only while Clio is acting
|
|
39
|
+
- `action` neon orange remains scarce and strictly disciplined: only while Clio is acting, for workspace-authority and worker-escalation decision frames, or in `STEER` mode. It is never used for idle decoration or settled telemetry, and never appears on more than one element per screen region. Outward, safety-net, and system decision frames use `warning`; conversational answers use `accent`.
|
|
40
40
|
- Per-surface color budgets limit noise: chip strips use at most one non-neutral token per chip, and framed cards use at most one status token alongside neutral colors.
|
|
41
41
|
|
|
42
42
|
---
|
|
@@ -118,6 +118,8 @@ Overlay frames share the island's top border rules and include keyboard shortcut
|
|
|
118
118
|
└─ [Tab] mode · [Esc] close ─────────────────┘
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
Fleet run cards add two bounded budget rows when native dispatch admission supplies an envelope. The `policy` row shows the recipe default or exact pin, its optional maximum, and the invocation request. The `budget` row shows the effective phase, the operator lifetime cap, and the clamp or retry/revision escalation reason. Historical or external-agent rows without this provenance omit both rows.
|
|
122
|
+
|
|
121
123
|
### 4.3 Section Headers
|
|
122
124
|
|
|
123
125
|
- **Panel Section Tag**: Bold CAPS in `accentDeep`.
|
|
@@ -144,6 +146,21 @@ All TUI overlays and cards support compact widths down to 40 columns:
|
|
|
144
146
|
- Keybinding hints, cards, and markdown detail text wrap fluidly without horizontal clipping.
|
|
145
147
|
- Settings provides a dedicated drill-down stack below 72 columns.
|
|
146
148
|
|
|
149
|
+
### 4.7 Decision Consequence Frames
|
|
150
|
+
|
|
151
|
+
Permission confirmation and `ask_user` use one pure consequence presentation classifier while keeping separate input and execution protocols. The classifier supplies the tier title, semantic frame token, consequence and reversibility copy, requester attribution, and display actions. Permission keeps allow-once, deny, and stop behavior. `ask_user` keeps selection, free-text, cancellation, and its compact, panel, or interview layout chosen from question shape.
|
|
152
|
+
|
|
153
|
+
| Tier | Title | Token | Plain-text identity |
|
|
154
|
+
| --- | --- | --- | --- |
|
|
155
|
+
| Conversation | `Answer a question` | `accent` | `Conversational answer` |
|
|
156
|
+
| Workspace | `Approve workspace action` | `action` | `Workspace authority` |
|
|
157
|
+
| Outward | `Confirm outward consequence` | `warning` | `Outward consequence` |
|
|
158
|
+
| Safety net | `Safety-net confirmation` | `warning` | `Safety-net confirmation` |
|
|
159
|
+
| System | `Approve system change` | `warning` | `System change` |
|
|
160
|
+
| Worker | `Worker needs approval` | `action` | `Worker escalation` |
|
|
161
|
+
|
|
162
|
+
The words carry the meaning when color is disabled. Permission copy states the exact one-shot authority, whether effects are reversible, the authenticated requester and axis, and what deny and stop do. The classifier never consumes question, reason, summary, option-label, or requested-title prose, so those strings cannot select or lower a tier.
|
|
163
|
+
|
|
147
164
|
---
|
|
148
165
|
|
|
149
166
|
## 5. Screen Surfaces & State Choreography
|
|
@@ -230,6 +247,7 @@ The collapsed form is one composed ledger line:
|
|
|
230
247
|
- Expanded calls show the primary argument in the signature and every secondary argument as a typed field list. Multiline argument bodies become line and byte facts, nested objects retain structured rendering, and safety-sensitive values remain redacted.
|
|
231
248
|
- Running calls label `live output` and replace the cumulative partial result in place. Settled calls label `output` and show available exit status, result or observation counts, line count, displayed and total byte sizes, truncation, timeout, tool-token usage, dynamically added tools, context exclusion, and the full-output path. A blocked or aborted admission instead labels its `decision` and does not claim that the tool ran.
|
|
232
249
|
- A call parked for one-shot approval replaces its running timer with `awaiting approval` and shows the already-sanitized action class, asking safety axis, and target below the row. These facts are transient UI state: approval, denial, abort, or settlement clears them, and they are never reconstructed from the session ledger.
|
|
250
|
+
- The live permission frame derives its consequence tier from those typed facts and the authenticated origin. It anchors at bottom center with five rows reserved for the composer and footer, and it recomputes that anchor on resize. Each queued frame retains its own tier and requester.
|
|
233
251
|
- Text and image tool results keep their text while rendering images as MIME and byte-size placeholders; base64 image data is never written to the terminal.
|
|
234
252
|
- Successful `edit` and `write` calls render the bounded diff produced by the tool result. Live regular-screen and fullscreen rows color removed and added lines with the `error` and `success` tokens and emphasize changed words; `/resume` replay and `/export` keep the same numbered diff as plain text.
|
|
235
253
|
- Operator `!` and `!!` bash commands use the same running and settled block as model-initiated bash. The block appears before the process starts, streams the throttled cumulative stdout/stderr tail, and settles in place while the existing `bashExecution` session entry remains the durable record. `!!` continues to exclude that record from model context and says so in the block.
|
|
@@ -294,13 +312,22 @@ The `/settings` overlay is a full-screen transactional control center:
|
|
|
294
312
|
- **Scoped Models Checklist**: Settings → `Models` provides a provider-backed checklist subview with target-level and target/model items, checked current selections, `Space` to toggle, and capability details in the inspector. Unresolved model references are preserved under an `Unavailable` group.
|
|
295
313
|
- **Narrow Terminal Drill-Down Navigation**: Below 72 columns, Settings transitions from a split view to a modal drill-down stack (section list → section rows → detail drawer) with a breadcrumb and `Esc` moving up one level before closing. Includes `/` filtering across label, path, and description, narrowing per keystroke like `/model` and `/resume`. Below 60 columns, side margins are removed for full-width presentation.
|
|
296
314
|
|
|
297
|
-
### 7.2
|
|
315
|
+
### 7.2 Fleet Runs Board
|
|
316
|
+
|
|
317
|
+
The `Alt+W` board renders one card per run. The default list is compact: run id, route, task, status, telemetry, retry, tool names, and proof. `Enter` opens the selected run's worker detail, which adds two rows to that card and nothing to any other:
|
|
318
|
+
|
|
319
|
+
- **`doing`**: the phase (`◐ thinking` in `reason`, `◑ writing` in `accent`, `⚙ tool` in `action`, `◔ waiting` in `info`) followed by the running call as `<tool> <verb> <object>`, or the last finished call as `last <tool> <verb> <object>`. The verb and object come from a descriptor composed at the worker seam; raw arguments never reach the renderer.
|
|
320
|
+
- **`answer`**: the newest rows of the worker's bounded prose on a `│` rail with a hanging indent under the key, then a dim row naming the lines and bytes the bounds refused and the `/view dispatch:<runId>` deep link.
|
|
321
|
+
|
|
322
|
+
Wrapping happens before the row cap, so the block is at most six rows tall at any width and a streaming answer cannot make the card grow under the operator. Detail follows the cursor rather than pinning to a run, and closing the board closes it. Reasoning text is never rendered; the `thinking` phase word is the whole of what the board says about it.
|
|
323
|
+
|
|
324
|
+
### 7.3 Task and Decision Boards
|
|
298
325
|
|
|
299
326
|
- **Composite Tasks Board (`/tasks`, `Alt+B`)**: Presents four sections in one reopenable overlay: the live session board, terminal task history, successful workspace artifacts, and project-scoped operator tasks. Selecting a workspace artifact opens the filtered `/view` path. Operator rows support add, hand, done, and drop actions; refresh is explicit for captured history and artifacts, while lightweight repaint reads the current board snapshot.
|
|
300
327
|
- **Settled Decisions Board (`/decisions`, `Alt+D`)**: Groups completed and cancelled interviews on the active branch, expands source questions and answers, and lets the operator supersede a value or submit a correction. Corrections travel through the ordinary operator-turn path after the durable decision snapshot is updated.
|
|
301
328
|
- **Approved editor overrides**: `Alt+B` and `Alt+D` are deliberate application-input boundary overrides of Pi's editor word-back and word-delete chords. Clio routes them before the editor so the two global boards remain one chord away. They are explicit exceptions to the general rule that Clio app bindings avoid Pi editor reserves, and users may rebind the Clio actions in `settings.yaml`.
|
|
302
329
|
|
|
303
|
-
### 7.
|
|
330
|
+
### 7.4 Slash Autocomplete Command Palette
|
|
304
331
|
- **Grouped Palette**: Typing `/` opens a grouped command palette (ordered by `Run`, `Inspect`, `Configure`, `Sessions`) with compact argument hints and formatted descriptions.
|
|
305
332
|
- **One Canonical Spelling**: Autocomplete, help, and parsing expose the same unique slash-command names; no alias rows compete with canonical commands.
|
|
306
333
|
|
|
@@ -330,3 +357,10 @@ Two shapes, both ending at something the user can act on.
|
|
|
330
357
|
### 8.2 Memory Step Rows
|
|
331
358
|
|
|
332
359
|
`/memory` activity rows read `<trigger> <decision> <reason>`, followed by `<N>w` when the step wrote to the bank and `<N> cited` when it cited entries, then the tier and latency. `describeTaskMemoryActivity` is the one place that builds this string.
|
|
360
|
+
|
|
361
|
+
Knowledge and procedural task-bank rows expose `p` to propose the selected
|
|
362
|
+
entry for the active canonical repository and `g` to propose it globally.
|
|
363
|
+
Global scope requires a second `g` press on the same entry after the warning
|
|
364
|
+
line appears. Status rows are labeled private and neither action can promote
|
|
365
|
+
them. Both actions create unapproved durable proposals, show the resulting
|
|
366
|
+
memory ID, and leave approval to the separate reviewed memory lifecycle.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Worker Dispatch Mechanics
|
|
2
2
|
|
|
3
3
|
> [!TIP]
|
|
4
|
-
> **Interactive Spec Available:** An interactive NDJSON protocol timeline stream and heartbeat watchdog simulator is located at [docs/html/worker_dispatch_blueprint.html](html/worker_dispatch_blueprint.html) (Version: 0.3.
|
|
4
|
+
> **Interactive Spec Available:** An interactive NDJSON protocol timeline stream and heartbeat watchdog simulator is located at [docs/html/worker_dispatch_blueprint.html](html/worker_dispatch_blueprint.html) (Version: 0.3.6).
|
|
5
5
|
|
|
6
6
|
This document describes the design and lifecycle of Clio Coder dispatched workers, focusing on the spawning sequence, execution isolation, the standard input/output NDJSON communication loop, and permission escalation routing.
|
|
7
7
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@iowarp/clio-coder",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Coding agent for HPC and scientific-software developers, part of IOWarp's CLIO ecosystem of agentic science.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -76,7 +76,6 @@
|
|
|
76
76
|
"test:file": "node --import tsx --import ./tests/harness/tmp-root.ts --test",
|
|
77
77
|
"pretest": "test -f dist/assets/codewiki.json && [ -z \"$(find src -newer dist/assets/codewiki.json -type f -print -quit)\" ] || npm run build",
|
|
78
78
|
"test": "node scripts/shard-tests.mjs",
|
|
79
|
-
"test:coverage": "node scripts/test-coverage.mjs --experimental-test-coverage --test-coverage-include='src/**/*.ts' --test-coverage-exclude='src/**/*.d.ts' 'tests/contracts/**/*.test.ts' 'tests/smoke/**/*.test.ts'",
|
|
80
79
|
"test:repeat": "node scripts/repeat-tests.mjs",
|
|
81
80
|
"test:trace-viewer": "npm --prefix apps/trace-viewer test",
|
|
82
81
|
"trace:ui": "node apps/trace-viewer/server.mjs",
|
|
@@ -86,9 +85,12 @@
|
|
|
86
85
|
"prepublishOnly": "npm run ci:release",
|
|
87
86
|
"skills:pin": "node --import tsx scripts/pin-skills.ts",
|
|
88
87
|
"skills:check": "node --import tsx scripts/pin-skills.ts --check",
|
|
88
|
+
"benchmark:typecheck": "tsc -p benchmarks/tsconfig.json",
|
|
89
|
+
"benchmark:check": "npm run benchmark:typecheck && node --import tsx --test benchmarks/internal/tests/*.test.ts",
|
|
90
|
+
"benchmark:campaign": "node --import tsx benchmarks/internal/campaign.ts",
|
|
91
|
+
"benchmark:report": "node --import tsx benchmarks/internal/report.ts",
|
|
89
92
|
"//": "below here: a real model target, chosen with --target <id>; costs money and/or GPU time, never run in CI",
|
|
90
93
|
"live:smoke": "node --import tsx benchmarks/internal/live-smoke.ts",
|
|
91
|
-
"live:recon": "node --import tsx benchmarks/internal/live-recon.ts",
|
|
92
94
|
"live:fleet-dispatch": "node --import tsx benchmarks/internal/live-fleet-dispatch.ts",
|
|
93
95
|
"live:tui": "node --import tsx benchmarks/internal/pty-drive.ts",
|
|
94
96
|
"live:home": "node --import tsx benchmarks/internal/live-home.ts"
|
|
@@ -100,7 +102,8 @@
|
|
|
100
102
|
"@earendil-works/pi-tui": "0.84.0",
|
|
101
103
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
102
104
|
"grok-mermaid": "0.2.2",
|
|
103
|
-
"ollama": "0.6.3"
|
|
105
|
+
"ollama": "0.6.3",
|
|
106
|
+
"smol-toml": "1.8.0"
|
|
104
107
|
},
|
|
105
108
|
"overrides": {
|
|
106
109
|
"@anthropic-ai/sdk": "0.105.0",
|
package/src/cli/agents.ts
CHANGED
|
@@ -53,8 +53,7 @@ export async function runAgentsCommand(args: ReadonlyArray<string>): Promise<num
|
|
|
53
53
|
function renderLine(spec: AgentSpec): void {
|
|
54
54
|
const shape = `${spec.audience}/${spec.category}/${spec.capabilityClass}/${spec.latencyClass}`;
|
|
55
55
|
const skills = spec.skills.length > 0 ? ` skills=${spec.skills.join(",")}` : "";
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
: "operator-default";
|
|
56
|
+
const maximum = spec.budget.maximum ? `..${spec.budget.maximum.toolCalls}/${spec.budget.maximum.readReserve}` : "";
|
|
57
|
+
const budget = `${spec.budget.toolCalls}/${spec.budget.readReserve}${maximum}/${spec.budget.synthesis ? "synthesize" : "stop"}`;
|
|
59
58
|
process.stdout.write(`${spec.id.padEnd(20)} ${shape.padEnd(48)} ${spec.description}${skills} budget=${budget}\n`);
|
|
60
59
|
}
|
package/src/cli/argv.ts
CHANGED
|
@@ -102,6 +102,19 @@ export function globalFlagPositionHint(arg: string, command: string): string | n
|
|
|
102
102
|
* for the command boundary, so `--skill path --api-key SECRET paths` treated
|
|
103
103
|
* SECRET as a subcommand and printed it in an error.
|
|
104
104
|
*/
|
|
105
|
+
/**
|
|
106
|
+
* Sessions are resumed from the interactive picker, not from a flag, and the
|
|
107
|
+
* flag every other agent CLI spells `--resume` or `--continue` fails closed
|
|
108
|
+
* here. The failure names the picker so the habit lands somewhere (#191).
|
|
109
|
+
*/
|
|
110
|
+
function unknownGlobalOptionError(arg: string): string {
|
|
111
|
+
const bare = arg.replace(/=.*$/u, "");
|
|
112
|
+
if (bare === "--resume" || bare === "--continue" || bare === "-r" || bare === "-c") {
|
|
113
|
+
return `unknown global option: ${arg}. Sessions are resumed from inside the app: start clio-coder, then type /resume to pick one.`;
|
|
114
|
+
}
|
|
115
|
+
return `unknown global option: ${arg}`;
|
|
116
|
+
}
|
|
117
|
+
|
|
105
118
|
export function extractGlobalFlags(
|
|
106
119
|
argv: ReadonlyArray<string>,
|
|
107
120
|
isSubcommand: (token: string) => boolean = () => false,
|
|
@@ -156,7 +169,7 @@ export function extractGlobalFlags(
|
|
|
156
169
|
noSkills,
|
|
157
170
|
skillPaths,
|
|
158
171
|
rest,
|
|
159
|
-
error:
|
|
172
|
+
error: unknownGlobalOptionError(arg),
|
|
160
173
|
...(apiKey === undefined ? {} : { apiKey }),
|
|
161
174
|
};
|
|
162
175
|
}
|
package/src/cli/fleet.ts
CHANGED
|
@@ -37,6 +37,13 @@ import {
|
|
|
37
37
|
import type { ConfigContract } from "../domains/config/contract.js";
|
|
38
38
|
import { ConfigDomainModule } from "../domains/config/index.js";
|
|
39
39
|
import { ContextDomainModule } from "../domains/context/runtime.js";
|
|
40
|
+
import {
|
|
41
|
+
formatBudgetPolicy,
|
|
42
|
+
formatBudgetReasons,
|
|
43
|
+
formatBudgetRequest,
|
|
44
|
+
formatEffectiveBudget,
|
|
45
|
+
type RunToolBudgetEnvelope,
|
|
46
|
+
} from "../domains/dispatch/budget-envelope.js";
|
|
40
47
|
import { type CapacityDrain, capacityDrain, setCapacityDraining } from "../domains/dispatch/capacity-lease.js";
|
|
41
48
|
import { runCodeStep } from "../domains/dispatch/code-step.js";
|
|
42
49
|
import { codeStepDir, writeCodeStepRecord } from "../domains/dispatch/code-step-store.js";
|
|
@@ -740,6 +747,7 @@ export function statusSnapshot(): {
|
|
|
740
747
|
return {
|
|
741
748
|
runId: row.id,
|
|
742
749
|
agentId: row.agentId,
|
|
750
|
+
budget: row.budget ?? null,
|
|
743
751
|
runtimeKind: row.runtimeKind,
|
|
744
752
|
outcomePhase: row.status,
|
|
745
753
|
heartbeat: rowHeartbeat(row),
|
|
@@ -798,6 +806,13 @@ function runStatus(args: ReadonlyArray<string>): number {
|
|
|
798
806
|
process.stdout.write(
|
|
799
807
|
` ${row.runId} ${row.agentId} node=${row.node} ${row.heartbeat} attempt=${lineage.attempt} depth=${lineage.depth} ${Math.round((row.elapsedMs as number) / 1000)}s $${(row.costUsd as number).toFixed(4)}\n`,
|
|
800
808
|
);
|
|
809
|
+
const budget = row.budget as RunToolBudgetEnvelope | null;
|
|
810
|
+
if (budget !== null) {
|
|
811
|
+
process.stdout.write(` recipe policy: ${formatBudgetPolicy(budget)}\n`);
|
|
812
|
+
process.stdout.write(` requested envelope: ${formatBudgetRequest(budget)}\n`);
|
|
813
|
+
process.stdout.write(` effective envelope: ${formatEffectiveBudget(budget)}\n`);
|
|
814
|
+
process.stdout.write(` clamp or escalation reason: ${formatBudgetReasons(budget)}\n`);
|
|
815
|
+
}
|
|
801
816
|
}
|
|
802
817
|
}
|
|
803
818
|
if (snapshot.retrying.length === 0) {
|
package/src/cli/index.ts
CHANGED
|
@@ -60,7 +60,7 @@ Usage:
|
|
|
60
60
|
clio-coder fleet list|run|status|drain|resume fleet contracts, status, and admission control
|
|
61
61
|
clio-coder evidence build, list, or inspect evidence artifacts
|
|
62
62
|
clio-coder eval run, report, or compare local eval task files
|
|
63
|
-
clio-coder memory list, propose, approve, reject, or prune memory
|
|
63
|
+
clio-coder memory list, propose, promote, approve, reject, or prune memory
|
|
64
64
|
clio-coder usage report cross-session usage facts and opportunities (experimental)
|
|
65
65
|
clio-coder trace query or view the durable dispatch trace mirror
|
|
66
66
|
clio-coder extensions install, list, enable, disable, or remove extension packages
|