@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.
Files changed (265) hide show
  1. package/CHANGELOG.md +37 -2
  2. package/CONTRIBUTING.md +6 -6
  3. package/README.md +2 -2
  4. package/dist/{acp-S5R4RR5B.js → acp-2BEHC4DL.js} +4 -4
  5. package/dist/{agents-P6DMMVZY.js → agents-LNNFTM53.js} +13 -11
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-2XCZLPKS.js → auth-KXXFI2VS.js} +6 -6
  8. package/dist/{chunk-YCWGATWI.js → chunk-24I7BN55.js} +2 -2
  9. package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
  10. package/dist/chunk-3BPUFZDL.js +37 -0
  11. package/dist/{chunk-WPQLXFOZ.js → chunk-43AOLP7E.js} +2 -2
  12. package/dist/{chunk-N4CZJQRK.js → chunk-5JGRAMKL.js} +4 -4
  13. package/dist/{chunk-BRXQQJFP.js → chunk-6US73PDB.js} +568 -47
  14. package/dist/{chunk-K6WL7QZT.js → chunk-6XXKFVSN.js} +2 -2
  15. package/dist/{chunk-QQK64KLB.js → chunk-CJUB2JJ2.js} +138 -20
  16. package/dist/{chunk-HV5X7OR2.js → chunk-CKXWIANG.js} +12 -12
  17. package/dist/{chunk-UZHIZC5S.js → chunk-CYQKWTG3.js} +61 -76
  18. package/dist/{chunk-QWU7ZBO7.js → chunk-DJVECN66.js} +204 -45
  19. package/dist/{chunk-ZWMF7253.js → chunk-E2ER4LJF.js} +304 -9
  20. package/dist/{chunk-7RXG6QRZ.js → chunk-EKY57CSP.js} +2 -75
  21. package/dist/{chunk-EDRHSCIE.js → chunk-EYPA3EGJ.js} +10 -2
  22. package/dist/{chunk-TTNYS3EA.js → chunk-G7MUEIGA.js} +1 -1
  23. package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
  24. package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
  25. package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
  26. package/dist/chunk-HWUFFB6L.js +83 -0
  27. package/dist/{chunk-35MKKU5R.js → chunk-K7T3E2SR.js} +15 -8
  28. package/dist/{chunk-VAWWTKDP.js → chunk-KHSFENX2.js} +2 -2
  29. package/dist/chunk-LCGCVYZ4.js +57 -0
  30. package/dist/{chunk-X6COSD2O.js → chunk-LYF7OHWH.js} +41 -14
  31. package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
  32. package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
  33. package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
  34. package/dist/{chunk-3JLKSKD7.js → chunk-OH3TOQTB.js} +5 -1
  35. package/dist/{chunk-MEQ45TQ4.js → chunk-PBTHKCPN.js} +18 -4
  36. package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
  37. package/dist/{chunk-QQL5RT5M.js → chunk-QM3F2GKX.js} +94 -36
  38. package/dist/{chunk-A2GZF7DC.js → chunk-QNQHSOLF.js} +4 -4
  39. package/dist/{chunk-KRPY7NTG.js → chunk-R46L2BIR.js} +3 -3
  40. package/dist/{chunk-BP4OYD6A.js → chunk-RY3LY4J5.js} +20 -2
  41. package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
  42. package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
  43. package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
  44. package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
  45. package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
  46. package/dist/{chunk-HXG4IURW.js → chunk-XE2VEJHX.js} +2 -2
  47. package/dist/{chunk-3HZ5RWN2.js → chunk-XF5N4U5A.js} +7 -6
  48. package/dist/{chunk-ZYKPLLNQ.js → chunk-XXQNGV4M.js} +590 -32
  49. package/dist/{chunk-4JUF2NNX.js → chunk-XYDYPRZI.js} +4 -4
  50. package/dist/{chunk-VMNQ6OZA.js → chunk-ZRGEBJ4T.js} +971 -794
  51. package/dist/{chunk-2LZI5CAG.js → chunk-ZXF4XRKW.js} +75 -33
  52. package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
  53. package/dist/cli/index.js +31 -31
  54. package/dist/{clio-J5JIOIDS.js → clio-M2KGYUFZ.js} +2 -2
  55. package/dist/{code-nav-AXCXSBHX.js → code-nav-GQNL7XA6.js} +5 -5
  56. package/dist/codewiki/build-worker.js +4 -4
  57. package/dist/{components-KELWS457.js → components-5TTYYX6G.js} +3 -3
  58. package/dist/{config-OEBMIN2U.js → config-XUUYQIWO.js} +27 -25
  59. package/dist/{configure-PUQOSIXQ.js → configure-IHJ7YOMV.js} +7 -7
  60. package/dist/{context-URSXPBCK.js → context-74JLXAWD.js} +12 -12
  61. package/dist/{context-MGSE4Z2T.js → context-75MIWW3U.js} +24 -22
  62. package/dist/{context-EKDCKUUZ.js → context-ZQ7SIFJV.js} +8 -7
  63. package/dist/{context-clear-KDAJRNUK.js → context-clear-GYKWNUML.js} +24 -22
  64. package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
  65. package/dist/{context-working-set-SBKMPPI2.js → context-working-set-UX5KEP4J.js} +11 -10
  66. package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-GIJBHNFL.js} +21 -20
  67. package/dist/{docs-2C2LTVT2.js → docs-6FZSCG5B.js} +3 -3
  68. package/dist/{doctor-7BSE27PJ.js → doctor-SVJ5BZCW.js} +4 -4
  69. package/dist/{eval-IZGDOO4H.js → eval-CG6LLBLD.js} +47 -232
  70. package/dist/{evidence-SR7WXB5B.js → evidence-ZYFIEN42.js} +19 -18
  71. package/dist/{evolve-K7VE2CBX.js → evolve-QGEXEMDW.js} +19 -18
  72. package/dist/{extensions-QVDOHDGJ.js → extensions-ADGNCJJD.js} +3 -3
  73. package/dist/{fleet-7XMJNQNF.js → fleet-S5R4ZOQY.js} +49 -30
  74. package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
  75. package/dist/{init-JGNPAYXT.js → init-5DRU55YR.js} +31 -29
  76. package/dist/memory-7YKKR6UC.js +467 -0
  77. package/dist/{models-ZMMLFJNN.js → models-ZPOLRU2C.js} +10 -10
  78. package/dist/{monitor-2F3T5KHP.js → monitor-US5F5YGZ.js} +33 -18
  79. package/dist/{orchestrator-ORHT43JB.js → orchestrator-E2AL4T5N.js} +1092 -659
  80. package/dist/{paths-UXLN5YYZ.js → paths-E7KYAQWE.js} +3 -3
  81. package/dist/{reset-NXGTYNUO.js → reset-KZ652EK6.js} +3 -3
  82. package/dist/{run-RF4WJGMT.js → run-SRNBKDWD.js} +52 -40
  83. package/dist/{share-UT3W6E4M.js → share-CGZE33UP.js} +3 -3
  84. package/dist/{skills-PSACKC5Q.js → skills-S2X4DLY5.js} +4 -4
  85. package/dist/{skills-eval-WJSI55RZ.js → skills-eval-W2GGIC4R.js} +19 -18
  86. package/dist/{targets-PIIRAOYS.js → targets-54SWINWB.js} +14 -12
  87. package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-SAIF2OGY.js} +5 -4
  88. package/dist/{uninstall-FZCQCDKC.js → uninstall-BVLWXKBT.js} +3 -3
  89. package/dist/{upgrade-346TZ6AV.js → upgrade-JKAR27XC.js} +8 -8
  90. package/dist/{usage-6KKXR32N.js → usage-MSAWCLX4.js} +60 -27
  91. package/dist/{verifiers-4UUM6TEE.js → verifiers-NCBTHHN2.js} +60 -54
  92. package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-GUSOQ6ZP.js} +30 -28
  93. package/dist/worker/entry.js +69 -58
  94. package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
  95. package/docs/README.md +3 -3
  96. package/docs/acp.md +1 -1
  97. package/docs/alcf-provider.md +1 -1
  98. package/docs/architecture.md +2 -2
  99. package/docs/artifact-placement.md +1 -2
  100. package/docs/artifact-versions.md +1 -1
  101. package/docs/built-in-agents.md +1 -1
  102. package/docs/capacity-and-scheduling.md +1 -1
  103. package/docs/commands-and-modes.md +9 -7
  104. package/docs/configuration-and-targets.md +12 -1
  105. package/docs/context-engine.md +4 -2
  106. package/docs/context-working-set.md +4 -4
  107. package/docs/development-pipeline.md +1 -1
  108. package/docs/documentation-coverage.md +3 -3
  109. package/docs/documentation-guide.md +2 -2
  110. package/docs/eval-runner.md +1 -1
  111. package/docs/evals-internal.md +4 -45
  112. package/docs/evidence-and-memory.md +67 -7
  113. package/docs/evolution.md +1 -1
  114. package/docs/exit-codes-and-output.md +1 -1
  115. package/docs/extensions-and-sharing.md +2 -2
  116. package/docs/fleet-dispatch.md +28 -2
  117. package/docs/installation-and-lifecycle.md +2 -2
  118. package/docs/middleware-and-components.md +19 -2
  119. package/docs/model-catalog.md +1 -1
  120. package/docs/observability.md +3 -3
  121. package/docs/proactive-memory.md +26 -16
  122. package/docs/prompt-envelope-and-tools.md +4 -2
  123. package/docs/provider-adapter-cookbook.md +1 -1
  124. package/docs/release-cut-checklist.md +38 -35
  125. package/docs/safety-model.md +29 -7
  126. package/docs/scientific-validation.md +3 -3
  127. package/docs/session-lifecycle.md +1 -1
  128. package/docs/skills-marketplace.md +1 -1
  129. package/docs/tool-usage.md +2 -2
  130. package/docs/trace-store.md +1 -1
  131. package/docs/troubleshooting.md +1 -1
  132. package/docs/tui-design.md +38 -4
  133. package/docs/worker-dispatch-mechanics.md +1 -1
  134. package/package.json +7 -4
  135. package/src/cli/agents.ts +2 -3
  136. package/src/cli/argv.ts +14 -1
  137. package/src/cli/fleet.ts +15 -0
  138. package/src/cli/index.ts +1 -1
  139. package/src/cli/memory.ts +272 -10
  140. package/src/cli/modes/json-stream.ts +2 -2
  141. package/src/cli/modes/print.ts +12 -1
  142. package/src/cli/run.ts +22 -2
  143. package/src/cli/targets.ts +12 -3
  144. package/src/cli/usage.ts +55 -7
  145. package/src/core/bus-events.ts +3 -0
  146. package/src/core/response-model-id.ts +134 -0
  147. package/src/core/toml.ts +62 -0
  148. package/src/core/workspace-files.ts +0 -1
  149. package/src/domains/agents/builtins/architect.md +1 -1
  150. package/src/domains/agents/catalog.ts +5 -4
  151. package/src/domains/agents/recipe.ts +54 -14
  152. package/src/domains/agents/result-contract.ts +7 -4
  153. package/src/domains/context/bootstrap.ts +36 -27
  154. package/src/domains/context/project-metadata.ts +19 -63
  155. package/src/domains/context/prompt-context.ts +8 -0
  156. package/src/domains/context/working-set/policies/index.ts +3 -4
  157. package/src/domains/dispatch/budget-envelope.ts +396 -0
  158. package/src/domains/dispatch/contract.ts +2 -0
  159. package/src/domains/dispatch/extension.ts +81 -27
  160. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  161. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  162. package/src/domains/dispatch/state.ts +1 -0
  163. package/src/domains/dispatch/types.ts +10 -3
  164. package/src/domains/dispatch/validation.ts +14 -0
  165. package/src/domains/dispatch/worker-spawn.ts +14 -3
  166. package/src/domains/eval/metrics/evidence.ts +0 -116
  167. package/src/domains/eval/metrics/invariants.ts +1 -1
  168. package/src/domains/eval/runners/clio-run.ts +1 -10
  169. package/src/domains/eval/runners/external-command.ts +2 -29
  170. package/src/domains/eval/schema/suite.ts +0 -7
  171. package/src/domains/eval/suites/run.ts +1 -7
  172. package/src/domains/memory/index.ts +22 -0
  173. package/src/domains/memory/operations.ts +58 -1
  174. package/src/domains/memory/promotion.ts +281 -0
  175. package/src/domains/memory/prompt-section.ts +25 -5
  176. package/src/domains/memory/proposal.ts +51 -7
  177. package/src/domains/memory/task-bank.ts +3 -2
  178. package/src/domains/memory/task-memory-handoff.ts +181 -24
  179. package/src/domains/memory/task-memory-policy.ts +3 -1
  180. package/src/domains/memory/types.ts +37 -0
  181. package/src/domains/memory/validate.ts +178 -0
  182. package/src/domains/middleware/memory-intervention.ts +35 -25
  183. package/src/domains/middleware/runtime.ts +6 -0
  184. package/src/domains/middleware/skills-reminder.ts +19 -4
  185. package/src/domains/middleware/stalled-turn.ts +43 -1
  186. package/src/domains/middleware/types.ts +10 -0
  187. package/src/domains/observability/contract.ts +6 -1
  188. package/src/domains/observability/cost.ts +20 -4
  189. package/src/domains/observability/extension.ts +2 -2
  190. package/src/domains/providers/index.ts +3 -0
  191. package/src/domains/providers/model-discovery.ts +9 -0
  192. package/src/domains/providers/runtime-resolution.ts +38 -1
  193. package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
  194. package/src/domains/providers/types/context-window-slots.ts +18 -0
  195. package/src/domains/providers/types/runtime-descriptor.ts +3 -1
  196. package/src/domains/safety/call-target.ts +211 -14
  197. package/src/domains/safety/decision-presentation.ts +268 -0
  198. package/src/domains/safety/redaction.ts +73 -0
  199. package/src/domains/session/context-ledger.ts +10 -1
  200. package/src/domains/session/decision-board.ts +4 -0
  201. package/src/domains/session/entries.ts +3 -0
  202. package/src/domains/session/history.ts +68 -19
  203. package/src/domains/session/usage.ts +24 -7
  204. package/src/engine/acp/event-mapper.ts +7 -0
  205. package/src/engine/acp/server.ts +29 -2
  206. package/src/engine/apis/lmstudio.ts +25 -4
  207. package/src/engine/apis/openai-completions.ts +147 -22
  208. package/src/engine/claude/sdk-runtime.ts +8 -2
  209. package/src/engine/claude/tool-safety.ts +13 -0
  210. package/src/engine/loop-guard.ts +27 -3
  211. package/src/engine/worker-events.ts +4 -3
  212. package/src/engine/worker-runtime.ts +59 -54
  213. package/src/entry/orchestrator.ts +18 -1
  214. package/src/interactive/chat-loop-messages.ts +22 -0
  215. package/src/interactive/chat-loop.ts +13 -0
  216. package/src/interactive/chat-renderer.ts +19 -3
  217. package/src/interactive/clio-editor.ts +44 -7
  218. package/src/interactive/context-overlay.ts +43 -5
  219. package/src/interactive/cost-overlay.ts +39 -8
  220. package/src/interactive/dispatch-board.ts +212 -35
  221. package/src/interactive/footer/widgets.ts +13 -0
  222. package/src/interactive/interactive-application.ts +6 -1
  223. package/src/interactive/interactive-input-runtime.ts +11 -1
  224. package/src/interactive/interactive-presentation.ts +11 -1
  225. package/src/interactive/memory-overlay.ts +89 -4
  226. package/src/interactive/overlay-ask-user-lifecycle.ts +1 -1
  227. package/src/interactive/overlay-frame.ts +5 -2
  228. package/src/interactive/overlay-general-openers.ts +40 -1
  229. package/src/interactive/overlay-key-routing.ts +41 -1
  230. package/src/interactive/overlay-lifecycle.ts +11 -4
  231. package/src/interactive/overlay-permission-lifecycle.ts +23 -8
  232. package/src/interactive/overlay-transitions.ts +11 -0
  233. package/src/interactive/overlays/ask-user.ts +74 -30
  234. package/src/interactive/overlays/decisions.ts +3 -1
  235. package/src/interactive/permission-hint.ts +35 -0
  236. package/src/interactive/permission-overlay.ts +95 -45
  237. package/src/interactive/renderers/tool-execution.ts +19 -49
  238. package/src/interactive/session-last-turn.ts +8 -1
  239. package/src/interactive/session-usage-reseed.ts +36 -10
  240. package/src/interactive/slash-commands.ts +2 -2
  241. package/src/interactive/status/summary.ts +5 -0
  242. package/src/interactive/status/types.ts +5 -0
  243. package/src/interactive/terminal-lease.ts +1 -0
  244. package/src/interactive/turn-context.ts +96 -23
  245. package/src/interactive/turn-middleware.ts +1 -0
  246. package/src/interactive/turn-runtime.ts +37 -8
  247. package/src/interactive/turn-state.ts +3 -0
  248. package/src/interactive/worker-progress.ts +440 -0
  249. package/src/interactive/worker-stream.ts +51 -110
  250. package/src/tools/agent-tools.ts +28 -3
  251. package/src/tools/ask-user.ts +21 -1
  252. package/src/tools/context/index.ts +2 -2
  253. package/src/tools/dispatch-arguments.ts +8 -0
  254. package/src/tools/dispatch-event-text.ts +19 -0
  255. package/src/tools/dispatch.ts +24 -1
  256. package/src/tools/monitor.ts +15 -0
  257. package/src/tools/registry.ts +15 -5
  258. package/src/tools/result-disposition.ts +156 -0
  259. package/src/tools/result-shaping.ts +59 -1
  260. package/src/tools/verify/authoring.ts +55 -54
  261. package/src/tools/worker-evidence.ts +19 -0
  262. package/src/worker/spec-contract.ts +43 -3
  263. package/dist/chunk-EFADSJET.js +0 -18
  264. package/dist/memory-4ALKDJ4Q.js +0 -246
  265. package/src/domains/eval/metrics/chaos-stream.ts +0 -93
package/CHANGELOG.md CHANGED
@@ -2,6 +2,41 @@
2
2
 
3
3
  All notable changes to Clio Coder are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and versions follow Semantic Versioning; pre-1.0 minor releases may include incompatible changes.
4
4
 
5
+ ## 0.3.6 - 2026-08-23
6
+
7
+ 0.3.5 was published by mistake and withdrawn; its content ships here.
8
+
9
+ ### Added
10
+ - `docs/middleware-and-components.md` documents every built-in middleware registration: id, hooks, trigger, and what does not trigger it.
11
+ - Permission and `ask_user` dialogs now derive closed consequence tiers from typed request, scope, reversibility, origin, exposure, and authority facts (#169). Conversational answers, workspace authority, outward consequences, safety-net confirmations, system changes, and worker escalations receive distinct titles and semantic tokens, while caller prose cannot lower a tier or alter the underlying decision protocol.
12
+ - Typed invocation-level dispatch budget envelopes (#175). Recipes keep an exact default unless they author a maximum, dispatch can request a phase and preauthorize a retry, result-contract revision, or review revision ceiling inside both recipe and operator policy, and immutable policy, request, effective, clamp, and escalation facts are sealed into receipts and shown by monitor, fleet status, and the live fleet card. Architect retains its 32-call default and now permits explicitly admitted runs up to its authored maximum.
13
+ - The `Alt+W` Fleet Runs board shows live worker progress on operator request (#168). `Enter` opens the selected run's detail: the phase, the running call as `<tool> <verb> <object>`, and the bounded tail of the worker's own prose with a `/view dispatch:<runId>` link to the rest. The default list stays compact, so a fan-out of scouts costs one card each until an operator opens one.
14
+ - Reviewed task-memory promotion in `/memory` and `clio-coder memory promote` (#176). Selected knowledge and procedural entries can become unapproved durable proposals with explicit validated repo, global, runtime, or agent scope. Promotion redacts before persistence, preserves session and evidence provenance, and keeps private status excluded.
15
+
16
+ ### Changed
17
+ - Python and Cargo project metadata, bootstrap guidance, and verifier discovery now parse TOML through one shared `smol-toml` boundary with an operation-scoped file cache (#153). Parsed structure replaces table-header scanning, and malformed documents fail closed.
18
+ - The Fleet Runs board and the transcript's worker block now read one bounded projection of the dispatch event stream instead of folding it separately, so the two surfaces cannot disagree about what a worker is saying or touching. The projection keeps 40 lines and 4096 bytes of answer tail, 8 distinct tool names, and 4 recent actions, and accepts 16 KB of streamed bytes per 250 ms; what the bounds refuse is counted and named rather than dropped silently.
19
+ - Worker tool activity now carries a redacted action descriptor beside the tool name. The descriptor is composed where the arguments are trusted (the tool registry's admission path, the Claude tool mapper, and the ACP update mapper) from a fixed verb vocabulary and a fixed argument-field allowlist, with credentials scrubbed, escape sequences stripped, and the result bounded to 64 characters. Raw argument objects still never cross the worker stdout seam, and reasoning content is still never displayed.
20
+
21
+ ### Fixed
22
+ - Approval overlays now derive call targets from a per-tool field allowlist. Unlisted arguments are shown only by field name, type, and size, so an unexpected credential or pasted document cannot be copied into the rendered frame (#200).
23
+ - Worker tool starts and finishes now share a call id when their producer has one. The transcript and Fleet Runs pair concurrent calls by that id, while older streams without ids continue to match by tool name (#201).
24
+ - Proactive task memory now reuses deterministic tool-result disposition digests with explicit source provenance (#173). Operation fingerprints remain separate for loop and repeated-failure identity, while redaction and byte caps apply before diagnostics reach the task bank or background policy.
25
+ - The llama.cpp router's `sleeping` state now reads as not resident (#192), and `clio-coder targets` reports `resident: none` while preserving the reported context-slot metadata.
26
+ - Response model-id presence is now an explicit `responseModelIdObservation` state (#193, #202). The short-lived `servedModel` and `servedCalls` names are replaced by requested and attributed model ids plus counts named for each observation state. Pre-#193 ledgers remain readable under the labeled `legacy-difference-only` state, and providers outside the stream tap retain the `responseModel` fallback without implying that presence was observed.
27
+ - The selected live model's capability probe now starts at boot (#195), so the first `/context` view and footer show the probed context window before any model turn.
28
+ - The permission dialog now anchors above the composer (#194) and recomputes that placement when the terminal resizes.
29
+ - Permission dialog clearance now comes from the live editor and footer render heights on every frame instead of a fixed five-row margin. Empty and multiline composers remain unobscured in both terminal modes, including after a resize (#194).
30
+ - Tool-result offload scratch files older than fourteen days are now swept at boot (#196). A resumed transcript now says when the retention sweep removed the file instead of presenting its stale path as a live full-output pointer (#203).
31
+ - A skill suggestion no longer costs the first turn on local models (#184). Every surface that teaches the protocol (the first-turn reminder, the `context(scope="skills")` listing footer, and the operator-gate denial) now says to open with the `Suggested skill:` line and continue the task in the same turn; none instructs the model to wait. A turn that makes the suggestion and stops with only listing calls behind it is continued once with a reminder that only the operator loads a skill.
32
+ - Three envelope noise sources on local targets are gone (#191). An always-on reasoning model printed the thinking clamp three ways (`thinking medium resolved to forced`, `medium was ignored because thinking is always on`, and the combined line); only the combined line prints now, once per target, model, and level change. A workspace with no `CLIO-CODER.md` states `<handbook>none …</handbook>` where the handbook would have been injected, so the model stops spending its first tool call on a read that returns ENOENT. `clio-coder --resume` and `--continue` still fail closed, and the error now says that sessions are resumed from the `/resume` picker inside the app.
33
+ - A turn is attributed to the reported response model id under LM Link peer routing (#185, #202). The response's `model` field is recorded as `responseModel` when it differs from the request. The footer, `/cost`, `clio-coder usage report`, and dispatch receipts use the shared requested model id, attributed model id, and response model id observation vocabulary. The LM Link peer warning is emitted once per distinct fact instead of once per turn.
34
+ - The `/resume` picker previews the operator's first prompt (#188). The first user entry of a session is the composed prompt, with the `<system-reminder>` block and any `[Skill request]` preamble ahead of the operator's words, so every row read `<system-reminder> [Skills] 9 installed…` and the filter matched them all. The preview is now the persisted `operatorText`, the scaffolding-stripped text for older sessions, the next turn when the first carries no operator words, and the first assistant text when none does.
35
+ - The context ledger is populated right after `/resume` (#189). Before the first new turn of a process, `/context` and the footer meter now read the window from the live target resolution (falling back to the window the resumed session recorded) and the token facts from the session's last persisted snapshot, which measured the same messages; the selected model's live capability probe runs at resume so the window is the probed one. `context window unknown · 0 tokens` is reserved for a session with no target and no history.
36
+ - `/context` names the configured working-set policy instead of the last applied one (#190). A fresh session at the shipped default reads `policy structural-v1 · no events yet` rather than `policy none`; `context.workingSet.enabled: false` reads `disabled`; a policy changed after an event shows `(last event by <policy>)`. The eviction trigger stays at `compaction.threshold`: the replay tables price each event by the cold prefix it re-prefills, and batching from the threshold down to the target is what keeps the event count down.
37
+ - A llama.cpp context window is the per-request share, not the server total (#187). `--ctx-size` is split evenly across `--parallel` slots unless `--kv-unified`, so a router started with `--ctx-size 786432 --parallel 4 --no-kv-unified` now resolves to a 196,608-token window instead of 786,432, which is where autocompact was armed at a size the server would never admit. The probe reads the long and short flag spellings and the last kv flag given, `/context` prints `196,608 (786,432 / 4 slots)` with `probed window`, and `clio-coder targets` names the split in its `ctx` note and a probe note.
38
+ - A parked permission request always offers allow, deny, and stop (#186). The composer rail switches to `CONFIRM` and carries the dialog's keys while a prompt owns the keyboard, so the `Enter send` hint can no longer contradict a dialog that sits forty rows away on a tall terminal. `Enter` allows only from an empty composer: with a draft present the habitual send key is inert, both surfaces read `[Backspace] clear draft` in its place, and only deletion keys reach the editor. `Esc` is labeled `deny`, which is what it does. A request that parks while another overlay holds the screen is re-presented as soon as that overlay closes.
39
+
5
40
  ## 0.3.4 - 2026-08-22
6
41
 
7
42
  ### Added
@@ -12,10 +47,10 @@ All notable changes to Clio Coder are documented in this file. The format follow
12
47
  - A six-axis canonical trust status for runs (#154): artifact integrity, validation grounding, independent review, context provenance, autonomy enforcement, and completion evidence, each with explicit `absent`, `unknown`, and `not_applicable` states and a named source and authority. Composition never promotes one axis from another; the no-promotion rules are enforced at the adapters and the evidence composition boundary. Evidence bundles gain `trust-status.json`.
13
48
  - Non-destructive working-set eviction. When context pressure crosses `compaction.threshold`, Clio now records which tool-result bodies and closed-turn thinking blocks leave the model's working set instead of rewriting them out of the session. The bodies stay in the ledger, the transcript keeps showing them, and each one is replaced in model replay by a one-line marker naming the ref, the reason, the size, and the exact call that brings it back.
14
49
  - Exact recall by ref. The model reads an evicted body back with `context(scope="recall", ref="<turnId>")`; the operator reads one into the transcript with `/context recall <ref>`, which never enters model context. A recall does not un-evict: the marker stays byte-identical so the provider prefix cache is untouched, and repeated recalls of one ref are the churn signal.
15
- - Two eviction policies. `structural-v1` is the default: it selects by what the session did since (`stale_after_mutation`, `superseded_read`, `failure_resolved`, `listing_consumed`, `thinking_turn_closed`) and falls back to age only under pressure. `age-horizon` reproduces the previous age-based selection, minus results whose body is below `context.workingSet.minEvictableTokens`. Replayed over the seeded procedural corpora with the summary stage modeled, `structural-v1` cuts the number of lossy summary compactions per 300-turn science trace from 21.5 to 8.8 at a 64k budget and from 8.9 to 3.1 at 128k, retains at or above `age-horizon` at every budget, and beats random eviction on precision by 2.3x or more; the default-policy rule, the cold-prefix cost it pays for finer batching, and the full grid are under `benchmarks/results/context-replay/`.
50
+ - Two eviction policies. `structural-v1` is the default: it selects by what the session did since (`stale_after_mutation`, `superseded_read`, `failure_resolved`, `listing_consumed`, `thinking_turn_closed`) and falls back to age only under pressure. `age-horizon` reproduces the previous age-based selection, minus results whose body is below `context.workingSet.minEvictableTokens`. Replayed over the seeded procedural corpora with the summary stage modeled, `structural-v1` cuts the number of lossy summary compactions per 300-turn science trace from 21.5 to 8.8 at a 64k budget and from 8.9 to 3.1 at 128k, retains at or above `age-horizon` at every budget, and beats random eviction on precision by 2.3x or more.
16
51
  - `/context` reports the working set: policy, evicted items, evicted tokens, events, recalls, and churn. Evicted tool rows carry a dim `evicted · <reason>` tag in the transcript.
17
52
  - Cache-honesty attribution for eviction. An applied event stamps `working_set_evict` on the next assistant entry's `promptCache.expectedColdReasons`, and `/context` reports `last cold turn: working-set eviction (expected)` instead of warning about a cold backend it caused itself.
18
- - `clio-coder context replay --sessions <path>...` replays Clio ledgers, and `--synthetic <ids>` replays seeded procedural science-coding corpora (`science-long`, `refactor`, `exploration`), through the live eviction code with `none`, `random`, and `oracle` controls and reports retention, precision, tokens evicted, recall tokens, cold prefix tokens, saturation, turns to first summary, and summaries per trace under a modeled summary stage; `clio-coder context working-set --session <id|path>` prints one session's working-set fold and path index. The procedural corpora replace the private Claude Code transcripts the first tables were built on, so the committed tables under `benchmarks/results/context-replay/` rebuild byte for byte on any checkout.
53
+ - `clio-coder context replay --sessions <path>...` replays Clio ledgers, and `--synthetic <ids>` replays seeded procedural science-coding corpora (`science-long`, `refactor`, `exploration`), through the live eviction code with `none`, `random`, and `oracle` controls and reports retention, precision, tokens evicted, recall tokens, cold prefix tokens, saturation, turns to first summary, and summaries per trace under a modeled summary stage; `clio-coder context working-set --session <id|path>` prints one session's working-set fold and path index. The procedural corpora replace the private Claude Code transcripts the first tables were built on; generated replay tables are local artifacts rather than versioned benchmark results.
19
54
  - New guide: `docs/context-working-set.md`.
20
55
 
21
56
  ### Changed
package/CONTRIBUTING.md CHANGED
@@ -73,14 +73,14 @@ publish is a manual maintainer step. The ordered procedure for a cut lives in
73
73
  2. Run `npm run ci:release`. It runs the full `ci` gate, then
74
74
  `scripts/check-release.mjs`, which verifies the built `dist/` and audits
75
75
  the exact npm package contents.
76
- 3. Land the release commit on `main` and let the `ci` workflow go green on
77
- that commit.
76
+ 3. Land the release commit on `main`. There is no need to wait on the `ci`
77
+ workflow before tagging: the release workflow runs the same gate itself.
78
78
  4. Tag and push: `git tag -a vX.Y.Z && git push origin vX.Y.Z`. The tag must
79
79
  match `package.json`'s version; the release workflow refuses mismatches.
80
- 5. `.github/workflows/release.yml` requires a successful `ci` run for the
81
- tagged commit, verifies the tag against `package.json`, builds `dist/`,
82
- runs `scripts/check-release.mjs`, and creates the GitHub release with the
83
- tarball attached. It does not publish to npm.
80
+ 5. `.github/workflows/release.yml` verifies the tag against `package.json`,
81
+ runs `npm run ci:release` on the tagged tree, and creates the GitHub
82
+ release with the tarball attached and the version's `CHANGELOG.md` section
83
+ as the body. It does not publish to npm.
84
84
  6. A maintainer publishes from the tagged commit with `npm publish`;
85
85
  `prepublishOnly` runs the same `ci:release` gate first.
86
86
 
package/README.md CHANGED
@@ -263,7 +263,7 @@ dist-tag instead.
263
263
  From source, pinned to this release:
264
264
 
265
265
  ```bash
266
- git clone --branch v0.3.4 https://github.com/iowarp/clio-coder.git
266
+ git clone --branch v0.3.6 https://github.com/iowarp/clio-coder.git
267
267
  cd clio-coder
268
268
  npm run install:local
269
269
  export PATH="$HOME/.local/bin:$PATH"
@@ -289,7 +289,7 @@ Full lifecycle details, including `reset` and the upgrade path, are in
289
289
 
290
290
  ## Status
291
291
 
292
- The current release is **v0.3.4**, installable from npm as
292
+ The current release is **v0.3.6**, installable from npm as
293
293
  [`@iowarp/clio-coder`](https://www.npmjs.com/package/@iowarp/clio-coder) or
294
294
  from source. Clio Coder is still experimental: we ship quickly, interfaces may
295
295
  change between minor versions, and model-specific behavior varies by target, so
@@ -6,14 +6,14 @@ import {
6
6
  } from "./chunk-2VTFPG5O.js";
7
7
  import {
8
8
  runClioCommand
9
- } from "./chunk-4JUF2NNX.js";
9
+ } from "./chunk-XYDYPRZI.js";
10
10
  import "./chunk-E25LMLRW.js";
11
11
  import "./chunk-HKIYEGME.js";
12
12
  import "./chunk-KOHPCX4K.js";
13
- import "./chunk-YCWGATWI.js";
13
+ import "./chunk-24I7BN55.js";
14
14
  import {
15
15
  printError
16
- } from "./chunk-ED4KHGC3.js";
16
+ } from "./chunk-PPAMZ32Z.js";
17
17
  import "./chunk-5TSRNF4G.js";
18
18
  import "./chunk-AD2SYQYC.js";
19
19
  import "./chunk-4OC57DA6.js";
@@ -126,4 +126,4 @@ export {
126
126
  resolveAcpCwd,
127
127
  runAcpCommand
128
128
  };
129
- //# sourceMappingURL=acp-S5R4RR5B.js.map
129
+ //# sourceMappingURL=acp-2BEHC4DL.js.map
@@ -2,15 +2,15 @@ import { createRequire as __clioCreateRequire } from "node:module"; const requir
2
2
  import {
3
3
  AgentsDomainModule,
4
4
  SafetyDomainModule
5
- } from "./chunk-X6COSD2O.js";
6
- import "./chunk-K6WL7QZT.js";
5
+ } from "./chunk-LYF7OHWH.js";
6
+ import "./chunk-6XXKFVSN.js";
7
7
  import {
8
8
  ensureClioState
9
- } from "./chunk-VAWWTKDP.js";
9
+ } from "./chunk-KHSFENX2.js";
10
10
  import {
11
11
  ConfigDomainModule,
12
12
  loadDomains
13
- } from "./chunk-KRPY7NTG.js";
13
+ } from "./chunk-R46L2BIR.js";
14
14
  import "./chunk-E25LMLRW.js";
15
15
  import "./chunk-QKMUKYO7.js";
16
16
  import "./chunk-4BPJXDWC.js";
@@ -18,7 +18,7 @@ import "./chunk-2SFS6XQE.js";
18
18
  import "./chunk-ZWLZP4ZT.js";
19
19
  import "./chunk-IR4CFBFN.js";
20
20
  import "./chunk-UOV2BYIW.js";
21
- import "./chunk-7RXG6QRZ.js";
21
+ import "./chunk-EKY57CSP.js";
22
22
  import {
23
23
  isUserVisibleAgent
24
24
  } from "./chunk-AOCYTWAV.js";
@@ -26,15 +26,16 @@ import "./chunk-MV3K5QF2.js";
26
26
  import "./chunk-FYYLNIL5.js";
27
27
  import "./chunk-UL3WSD3F.js";
28
28
  import "./chunk-ECH6PKUQ.js";
29
+ import "./chunk-HWUFFB6L.js";
29
30
  import "./chunk-5B2AEOW5.js";
30
31
  import "./chunk-CGKSTWHD.js";
31
32
  import "./chunk-XPLRXC72.js";
32
33
  import "./chunk-RD5U66HV.js";
33
34
  import "./chunk-KOHPCX4K.js";
34
- import "./chunk-YCWGATWI.js";
35
+ import "./chunk-24I7BN55.js";
35
36
  import {
36
37
  printError
37
- } from "./chunk-ED4KHGC3.js";
38
+ } from "./chunk-PPAMZ32Z.js";
38
39
  import "./chunk-5TSRNF4G.js";
39
40
  import "./chunk-AD2SYQYC.js";
40
41
  import "./chunk-4OC57DA6.js";
@@ -54,9 +55,9 @@ import "./chunk-YXLYO42X.js";
54
55
  import "./chunk-BNAZZHFG.js";
55
56
  import "./chunk-6EJMN2Y3.js";
56
57
  import "./chunk-WEPFGWHJ.js";
57
- import "./chunk-HXG4IURW.js";
58
+ import "./chunk-XE2VEJHX.js";
58
59
  import "./chunk-ZGVHUX3M.js";
59
- import "./chunk-TTNYS3EA.js";
60
+ import "./chunk-G7MUEIGA.js";
60
61
  import "./chunk-IWHMRKLL.js";
61
62
  import {
62
63
  init_esm_shims
@@ -109,11 +110,12 @@ async function runAgentsCommand(args) {
109
110
  function renderLine(spec) {
110
111
  const shape = `${spec.audience}/${spec.category}/${spec.capabilityClass}/${spec.latencyClass}`;
111
112
  const skills = spec.skills.length > 0 ? ` skills=${spec.skills.join(",")}` : "";
112
- const budget = spec.budget ? `${spec.budget.toolCalls}/${spec.budget.readReserve}/${spec.budget.synthesis ? "synthesize" : "stop"}` : "operator-default";
113
+ const maximum = spec.budget.maximum ? `..${spec.budget.maximum.toolCalls}/${spec.budget.maximum.readReserve}` : "";
114
+ const budget = `${spec.budget.toolCalls}/${spec.budget.readReserve}${maximum}/${spec.budget.synthesis ? "synthesize" : "stop"}`;
113
115
  process.stdout.write(`${spec.id.padEnd(20)} ${shape.padEnd(48)} ${spec.description}${skills} budget=${budget}
114
116
  `);
115
117
  }
116
118
  export {
117
119
  runAgentsCommand
118
120
  };
119
- //# sourceMappingURL=agents-P6DMMVZY.js.map
121
+ //# sourceMappingURL=agents-LNNFTM53.js.map