@iowarp/clio-coder 0.3.4 → 0.3.7

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 (376) hide show
  1. package/CHANGELOG.md +65 -2
  2. package/CONTRIBUTING.md +6 -6
  3. package/README.md +16 -5
  4. package/dist/{acp-S5R4RR5B.js → acp-SK4MD6MM.js} +11 -11
  5. package/dist/{agents-P6DMMVZY.js → agents-2FN2K6ME.js} +33 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-2XCZLPKS.js → auth-QIYZWM5I.js} +15 -15
  8. package/dist/{chunk-EKMEHE4H.js → chunk-33YXPOE3.js} +2 -3
  9. package/dist/{chunk-VAWWTKDP.js → chunk-3HAPLH5M.js} +11 -11
  10. package/dist/{chunk-YCWGATWI.js → chunk-465YSENW.js} +3 -3
  11. package/dist/{chunk-4OC57DA6.js → chunk-4DGYLA73.js} +53 -2
  12. package/dist/{chunk-UZHIZC5S.js → chunk-4DWFMQDR.js} +61 -76
  13. package/dist/{chunk-ZWMF7253.js → chunk-5C3AQNDW.js} +328 -9
  14. package/dist/{chunk-22NAGB7X.js → chunk-5C77SEEY.js} +5 -94
  15. package/dist/{chunk-WPQLXFOZ.js → chunk-5FR74PWO.js} +3 -2
  16. package/dist/{chunk-35MKKU5R.js → chunk-5UJ6ECTS.js} +18 -10
  17. package/dist/{chunk-BRXQQJFP.js → chunk-6M7VS3J3.js} +571 -50
  18. package/dist/{chunk-QQK64KLB.js → chunk-6TUKSZVF.js} +141 -23
  19. package/dist/{chunk-N4CZJQRK.js → chunk-AB4XIIVB.js} +8 -6
  20. package/dist/{chunk-KRPY7NTG.js → chunk-BMWK7ZIZ.js} +14 -20
  21. package/dist/{chunk-4BPJXDWC.js → chunk-C4JBQ5SR.js} +30 -14
  22. package/dist/{chunk-ZYKPLLNQ.js → chunk-CEYBNUGC.js} +821 -83
  23. package/dist/{chunk-VEZEGCGW.js → chunk-D4MDIG46.js} +20 -18
  24. package/dist/chunk-DJNLUABN.js +843 -0
  25. package/dist/{chunk-BP4OYD6A.js → chunk-DMD2AGVS.js} +21 -2
  26. package/dist/{chunk-KOHPCX4K.js → chunk-DOOEX22V.js} +2 -2
  27. package/dist/chunk-DQA7QLMD.js +123 -0
  28. package/dist/chunk-DR52UMZW.js +21 -0
  29. package/dist/{chunk-3HZ5RWN2.js → chunk-EBEFWSGL.js} +9 -7
  30. package/dist/{chunk-EDRHSCIE.js → chunk-EELBMBT6.js} +128 -13
  31. package/dist/{chunk-HV5X7OR2.js → chunk-EOOQZZDE.js} +16 -14
  32. package/dist/{chunk-WR67VIZY.js → chunk-FOT2FX5J.js} +63 -5
  33. package/dist/{chunk-BPGS2WCQ.js → chunk-GEYXPTRF.js} +2 -1
  34. package/dist/{chunk-FYYLNIL5.js → chunk-GH5622CP.js} +2 -2
  35. package/dist/{chunk-BEY543CS.js → chunk-GOXNB3AO.js} +5 -2
  36. package/dist/chunk-GWS3VEIW.js +195 -0
  37. package/dist/{chunk-G4BMMOKF.js → chunk-HVDIIIQW.js} +2 -2
  38. package/dist/chunk-HWUFFB6L.js +83 -0
  39. package/dist/{chunk-X6COSD2O.js → chunk-J7PIKKWC.js} +8 -436
  40. package/dist/{chunk-NILBFAPG.js → chunk-JNXPYBB4.js} +2 -2
  41. package/dist/{chunk-4VP4KH3K.js → chunk-JRIO5UD2.js} +4 -4
  42. package/dist/{chunk-K6WL7QZT.js → chunk-JTSEDYVQ.js} +7 -7
  43. package/dist/{chunk-QKMUKYO7.js → chunk-KCMKRQX4.js} +236 -84
  44. package/dist/chunk-KZ2H5X4G.js +1026 -0
  45. package/dist/{chunk-A2GZF7DC.js → chunk-LADCF22A.js} +13 -13
  46. package/dist/chunk-LCGCVYZ4.js +57 -0
  47. package/dist/chunk-M4AKACEO.js +382 -0
  48. package/dist/{chunk-POHLU5DW.js → chunk-M6L6IDJG.js} +3 -3
  49. package/dist/{chunk-4JUF2NNX.js → chunk-MXI6J5JF.js} +7 -7
  50. package/dist/{chunk-X4RCMKVQ.js → chunk-NDINPTJ4.js} +2 -2
  51. package/dist/{chunk-TTNYS3EA.js → chunk-OB5HIGJY.js} +1 -1
  52. package/dist/{chunk-7RXG6QRZ.js → chunk-OBMAI2DP.js} +61 -840
  53. package/dist/{chunk-5M54SPOL.js → chunk-ODFEOB4F.js} +161 -5
  54. package/dist/chunk-PD3MESLB.js +242 -0
  55. package/dist/{chunk-ED4KHGC3.js → chunk-PPAMZ32Z.js} +9 -2
  56. package/dist/{chunk-VMNQ6OZA.js → chunk-QCTRSGHQ.js} +963 -786
  57. package/dist/chunk-RVG5JXAL.js +41 -0
  58. package/dist/{chunk-RD5U66HV.js → chunk-SROCI7ZU.js} +7 -7
  59. package/dist/{chunk-MFFY33HR.js → chunk-THKY7CD7.js} +466 -205
  60. package/dist/{chunk-34475P3I.js → chunk-TSHXZTOQ.js} +5 -4
  61. package/dist/{chunk-PCZJO5TI.js → chunk-UFQ3F4FW.js} +13 -178
  62. package/dist/{chunk-AD2SYQYC.js → chunk-UHXRNZ2J.js} +121 -3
  63. package/dist/chunk-UND3GU2L.js +103 -0
  64. package/dist/{chunk-QQL5RT5M.js → chunk-UUANF5CR.js} +2323 -2114
  65. package/dist/{chunk-VJWL6YS5.js → chunk-UUVG37B4.js} +2 -2
  66. package/dist/chunk-UVDSQ6LW.js +472 -0
  67. package/dist/{chunk-QWU7ZBO7.js → chunk-VQNODYQ4.js} +215 -56
  68. package/dist/chunk-VREKEFLL.js +37 -0
  69. package/dist/{chunk-2TZWSW76.js → chunk-WHGPSPT5.js} +2 -2
  70. package/dist/{chunk-TW3WDMVS.js → chunk-WHJYKASB.js} +2 -2
  71. package/dist/{chunk-MEQ45TQ4.js → chunk-WJHBC77E.js} +21 -7
  72. package/dist/{chunk-HXG4IURW.js → chunk-X2KV5FXT.js} +2 -2
  73. package/dist/{chunk-YHZX5GEU.js → chunk-XAKHZX5N.js} +2 -2
  74. package/dist/{chunk-2LZI5CAG.js → chunk-XEGB6BCN.js} +228 -36
  75. package/dist/{chunk-E25LMLRW.js → chunk-YD734TPH.js} +2 -2
  76. package/dist/{verifiers-4UUM6TEE.js → chunk-YTYFXUI3.js} +121 -372
  77. package/dist/{chunk-3JLKSKD7.js → chunk-ZGH7FGS5.js} +17 -7
  78. package/dist/{chunk-VSNATDE6.js → chunk-ZZMN5OM4.js} +2 -2
  79. package/dist/cli/index.js +34 -32
  80. package/dist/{clio-J5JIOIDS.js → clio-WBVQEBKO.js} +7 -7
  81. package/dist/{code-nav-AXCXSBHX.js → code-nav-FGGFIE7L.js} +7 -7
  82. package/dist/codewiki/build-worker.js +4 -4
  83. package/dist/{components-KELWS457.js → components-F7OEATSO.js} +5 -5
  84. package/dist/{config-OEBMIN2U.js → config-TRBL3RCF.js} +48 -41
  85. package/dist/{configure-PUQOSIXQ.js → configure-OLCVPHNM.js} +17 -17
  86. package/dist/{context-URSXPBCK.js → context-MJIJ6GOX.js} +12 -12
  87. package/dist/{context-EKDCKUUZ.js → context-WFPKQSM6.js} +26 -9
  88. package/dist/{context-MGSE4Z2T.js → context-XEWE3MOJ.js} +44 -37
  89. package/dist/{context-clear-KDAJRNUK.js → context-clear-KNOS2JPB.js} +44 -37
  90. package/dist/{context-index-BZ4UYMTC.js → context-index-SSR5ECNE.js} +3 -3
  91. package/dist/{context-working-set-SBKMPPI2.js → context-working-set-EUXAZI6N.js} +14 -13
  92. package/dist/{dispatch-runner-MSWN72NK.js → dispatch-runner-B7MTOVKL.js} +321 -60
  93. package/dist/{docs-2C2LTVT2.js → docs-FLJTIDSE.js} +5 -5
  94. package/dist/{doctor-7BSE27PJ.js → doctor-RN4YKO2X.js} +15 -15
  95. package/dist/{eval-IZGDOO4H.js → eval-RUBJVSNQ.js} +52 -236
  96. package/dist/{evidence-SR7WXB5B.js → evidence-JZNBUOQZ.js} +39 -33
  97. package/dist/{evolve-K7VE2CBX.js → evolve-FJVC4KKI.js} +39 -33
  98. package/dist/{extensions-QVDOHDGJ.js → extensions-IQL36S7K.js} +5 -5
  99. package/dist/{fleet-7XMJNQNF.js → fleet-BDKYJFCP.js} +243 -370
  100. package/dist/fleet-commands-ZFIWZSB3.js +70 -0
  101. package/dist/fleet-graph-Y6HPXIVF.js +125 -0
  102. package/dist/fleet-new-RDVJLHHH.js +48 -0
  103. package/dist/{fleet-preflight-AQNAH644.js → fleet-preflight-BHSNPBMH.js} +2 -2
  104. package/dist/fleet-validate-BIYREGIK.js +79 -0
  105. package/dist/{init-JGNPAYXT.js → init-LQUB5COQ.js} +57 -48
  106. package/dist/library-NJAHIGG4.js +217 -0
  107. package/dist/memory-OG6HOYKM.js +472 -0
  108. package/dist/{models-ZMMLFJNN.js → models-5ZG5XY7J.js} +23 -22
  109. package/dist/{monitor-2F3T5KHP.js → monitor-TJ7AMTGB.js} +69 -35
  110. package/dist/{orchestrator-ORHT43JB.js → orchestrator-WZYB54DM.js} +4868 -1189
  111. package/dist/{paths-UXLN5YYZ.js → paths-XUC7GS6E.js} +5 -5
  112. package/dist/{reset-NXGTYNUO.js → reset-PXQT45IY.js} +8 -8
  113. package/dist/{run-RF4WJGMT.js → run-FQ74YF62.js} +82 -62
  114. package/dist/{share-UT3W6E4M.js → share-FW7SVCL3.js} +34 -10
  115. package/dist/{skills-PSACKC5Q.js → skills-7E7IRB3R.js} +25 -9
  116. package/dist/{skills-eval-WJSI55RZ.js → skills-eval-LI75W6OK.js} +43 -35
  117. package/dist/{targets-PIIRAOYS.js → targets-4CIFKCTW.js} +27 -24
  118. package/dist/{terminal-lease-ULWXWNVY.js → terminal-lease-WUZY7ZV5.js} +5 -4
  119. package/dist/{uninstall-FZCQCDKC.js → uninstall-7FV7IP4E.js} +5 -5
  120. package/dist/{upgrade-346TZ6AV.js → upgrade-K2HVIVMQ.js} +21 -20
  121. package/dist/{usage-6KKXR32N.js → usage-GTZELZQX.js} +159 -59
  122. package/dist/verifiers-RLAHT27O.js +336 -0
  123. package/dist/{verify-X5HDROLA.js → verify-BX3BRKH5.js} +7 -6
  124. package/dist/{wiki-generate-7STOCIFZ.js → wiki-generate-ASIFASCN.js} +58 -48
  125. package/dist/worker/entry.js +98 -84
  126. package/dist/{workspace-G4ZWUIPR.js → workspace-ZJ6BFM3Q.js} +4 -4
  127. package/docs/README.md +4 -3
  128. package/docs/acp.md +1 -1
  129. package/docs/alcf-provider.md +1 -1
  130. package/docs/architecture.md +2 -2
  131. package/docs/artifact-placement.md +1 -2
  132. package/docs/artifact-versions.md +10 -6
  133. package/docs/built-in-agents.md +26 -2
  134. package/docs/capacity-and-scheduling.md +1 -1
  135. package/docs/commands-and-modes.md +90 -8
  136. package/docs/configuration-and-targets.md +90 -2
  137. package/docs/context-engine.md +4 -2
  138. package/docs/context-working-set.md +4 -4
  139. package/docs/development-pipeline.md +1 -1
  140. package/docs/dispatch-architecture-rationale.md +1 -1
  141. package/docs/documentation-coverage.md +4 -4
  142. package/docs/documentation-guide.md +4 -4
  143. package/docs/eval-runner.md +1 -1
  144. package/docs/evals-internal.md +4 -45
  145. package/docs/evidence-and-memory.md +70 -10
  146. package/docs/evolution.md +1 -1
  147. package/docs/exit-codes-and-output.md +4 -1
  148. package/docs/extensions-and-sharing.md +6 -2
  149. package/docs/fleet-demo-runbook.md +2 -2
  150. package/docs/fleet-dispatch.md +224 -11
  151. package/docs/git-commit-provenance.md +2 -2
  152. package/docs/glossary.md +1 -1
  153. package/docs/installation-and-lifecycle.md +2 -2
  154. package/docs/middleware-and-components.md +20 -2
  155. package/docs/model-catalog.md +1 -1
  156. package/docs/observability.md +55 -8
  157. package/docs/proactive-memory.md +26 -16
  158. package/docs/prompt-envelope-and-tools.md +4 -2
  159. package/docs/provider-adapter-cookbook.md +1 -1
  160. package/docs/release-cut-checklist.md +83 -65
  161. package/docs/resource-library.md +59 -0
  162. package/docs/safety-model.md +29 -7
  163. package/docs/scientific-validation.md +3 -3
  164. package/docs/session-lifecycle.md +37 -1
  165. package/docs/skills-marketplace.md +16 -3
  166. package/docs/tool-usage.md +14 -7
  167. package/docs/trace-store.md +1 -1
  168. package/docs/troubleshooting.md +1 -1
  169. package/docs/tui-design.md +38 -4
  170. package/docs/worker-dispatch-mechanics.md +3 -3
  171. package/package.json +7 -4
  172. package/src/cli/agents.ts +2 -3
  173. package/src/cli/argv.ts +14 -1
  174. package/src/cli/fleet-commands.ts +37 -0
  175. package/src/cli/fleet-graph.ts +102 -0
  176. package/src/cli/fleet-new.ts +36 -0
  177. package/src/cli/fleet-preflight.ts +121 -0
  178. package/src/cli/fleet-validate.ts +30 -0
  179. package/src/cli/fleet.ts +188 -335
  180. package/src/cli/index.ts +4 -2
  181. package/src/cli/library.ts +190 -0
  182. package/src/cli/memory.ts +272 -10
  183. package/src/cli/modes/json-stream.ts +2 -2
  184. package/src/cli/modes/print.ts +12 -1
  185. package/src/cli/run.ts +22 -2
  186. package/src/cli/share.ts +13 -1
  187. package/src/cli/targets.ts +12 -3
  188. package/src/cli/usage.ts +160 -20
  189. package/src/core/bus-events.ts +7 -0
  190. package/src/core/commit-attribution.ts +4 -4
  191. package/src/core/config.ts +130 -0
  192. package/src/core/defaults.ts +81 -0
  193. package/src/core/response-model-id.ts +134 -0
  194. package/src/core/toml.ts +62 -0
  195. package/src/core/workspace-files.ts +0 -1
  196. package/src/domains/agents/builtins/architect.md +2 -1
  197. package/src/domains/agents/builtins/oracle.md +33 -0
  198. package/src/domains/agents/catalog.ts +18 -5
  199. package/src/domains/agents/fleet-contract.ts +278 -16
  200. package/src/domains/agents/index.ts +14 -0
  201. package/src/domains/agents/recipe.ts +54 -14
  202. package/src/domains/agents/result-contract.ts +242 -5
  203. package/src/domains/config/classify.ts +4 -0
  204. package/src/domains/context/bootstrap.ts +36 -27
  205. package/src/domains/context/project-metadata.ts +19 -63
  206. package/src/domains/context/prompt-context.ts +8 -0
  207. package/src/domains/context/working-set/policies/index.ts +3 -4
  208. package/src/domains/dispatch/active-route-planner.ts +14 -0
  209. package/src/domains/dispatch/backoff.ts +2 -1
  210. package/src/domains/dispatch/budget-envelope.ts +396 -0
  211. package/src/domains/dispatch/capability-match.ts +1 -0
  212. package/src/domains/dispatch/checkout-writer-lease.ts +175 -0
  213. package/src/domains/dispatch/contract.ts +36 -0
  214. package/src/domains/dispatch/delegation-plan.ts +167 -0
  215. package/src/domains/dispatch/execution-plan.ts +76 -5
  216. package/src/domains/dispatch/execution-role.ts +3 -1
  217. package/src/domains/dispatch/execution-scheduler.ts +183 -67
  218. package/src/domains/dispatch/extension.ts +339 -36
  219. package/src/domains/dispatch/fleet-gate.ts +14 -0
  220. package/src/domains/dispatch/fleet-plan.ts +63 -3
  221. package/src/domains/dispatch/fleet-run.ts +737 -0
  222. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  223. package/src/domains/dispatch/host-verification.ts +178 -0
  224. package/src/domains/dispatch/index.ts +38 -0
  225. package/src/domains/dispatch/intent.ts +159 -0
  226. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  227. package/src/domains/dispatch/receipt-integrity.ts +12 -4
  228. package/src/domains/dispatch/state.ts +37 -3
  229. package/src/domains/dispatch/types.ts +61 -9
  230. package/src/domains/dispatch/validation.ts +80 -6
  231. package/src/domains/dispatch/worker-spawn.ts +14 -3
  232. package/src/domains/eval/metrics/evidence.ts +0 -116
  233. package/src/domains/eval/metrics/invariants.ts +1 -1
  234. package/src/domains/eval/runners/clio-run.ts +1 -10
  235. package/src/domains/eval/runners/external-command.ts +2 -29
  236. package/src/domains/eval/schema/suite.ts +0 -7
  237. package/src/domains/eval/suites/run.ts +1 -7
  238. package/src/domains/evidence/trust-status.ts +10 -1
  239. package/src/domains/memory/index.ts +22 -0
  240. package/src/domains/memory/operations.ts +58 -1
  241. package/src/domains/memory/promotion.ts +281 -0
  242. package/src/domains/memory/prompt-section.ts +25 -5
  243. package/src/domains/memory/proposal.ts +51 -7
  244. package/src/domains/memory/task-bank.ts +3 -2
  245. package/src/domains/memory/task-memory-handoff.ts +181 -24
  246. package/src/domains/memory/task-memory-policy.ts +3 -1
  247. package/src/domains/memory/types.ts +37 -0
  248. package/src/domains/memory/validate.ts +178 -0
  249. package/src/domains/middleware/index.ts +15 -0
  250. package/src/domains/middleware/memory-intervention.ts +35 -25
  251. package/src/domains/middleware/runtime.ts +6 -0
  252. package/src/domains/middleware/skills-reminder.ts +19 -4
  253. package/src/domains/middleware/stalled-turn.ts +43 -1
  254. package/src/domains/middleware/types.ts +10 -0
  255. package/src/domains/middleware/watchdog.ts +281 -0
  256. package/src/domains/observability/contract.ts +9 -2
  257. package/src/domains/observability/cost.ts +31 -4
  258. package/src/domains/observability/extension.ts +2 -2
  259. package/src/domains/observability/index.ts +10 -0
  260. package/src/domains/observability/out-of-turn-usage.ts +223 -0
  261. package/src/domains/providers/index.ts +3 -0
  262. package/src/domains/providers/model-discovery.ts +9 -0
  263. package/src/domains/providers/runtime-resolution.ts +38 -1
  264. package/src/domains/providers/runtimes/common/probe-helpers.ts +97 -16
  265. package/src/domains/providers/types/context-window-slots.ts +18 -0
  266. package/src/domains/providers/types/runtime-descriptor.ts +3 -1
  267. package/src/domains/resources/index.ts +20 -0
  268. package/src/domains/resources/library.ts +326 -0
  269. package/src/domains/resources/skills/marketplace.ts +37 -12
  270. package/src/domains/safety/call-target.ts +211 -14
  271. package/src/domains/safety/decision-presentation.ts +268 -0
  272. package/src/domains/safety/redaction.ts +73 -0
  273. package/src/domains/session/context-ledger.ts +10 -1
  274. package/src/domains/session/decision-board.ts +4 -0
  275. package/src/domains/session/entries.ts +3 -0
  276. package/src/domains/session/handoff.ts +629 -0
  277. package/src/domains/session/history.ts +68 -19
  278. package/src/domains/session/usage.ts +24 -7
  279. package/src/domains/share/archive.ts +67 -2
  280. package/src/engine/acp/event-mapper.ts +7 -0
  281. package/src/engine/acp/server.ts +29 -2
  282. package/src/engine/apis/lmstudio.ts +25 -4
  283. package/src/engine/apis/openai-completions.ts +147 -22
  284. package/src/engine/claude/sdk-runtime.ts +8 -2
  285. package/src/engine/claude/tool-safety.ts +13 -0
  286. package/src/engine/loop-guard.ts +27 -3
  287. package/src/engine/worker-events.ts +4 -3
  288. package/src/engine/worker-runtime.ts +59 -54
  289. package/src/entry/orchestrator.ts +55 -1
  290. package/src/interactive/bus-notices.ts +26 -0
  291. package/src/interactive/chat-loop-messages.ts +22 -0
  292. package/src/interactive/chat-loop.ts +248 -1
  293. package/src/interactive/chat-renderer.ts +41 -3
  294. package/src/interactive/clio-editor.ts +44 -7
  295. package/src/interactive/context-overlay.ts +43 -5
  296. package/src/interactive/cost-overlay.ts +70 -11
  297. package/src/interactive/council-dispatch.ts +30 -0
  298. package/src/interactive/council-grid.ts +213 -0
  299. package/src/interactive/council.ts +99 -0
  300. package/src/interactive/dispatch-board.ts +471 -50
  301. package/src/interactive/fleet-run-preview.ts +307 -0
  302. package/src/interactive/footer/notifications.ts +219 -0
  303. package/src/interactive/footer/widgets.ts +13 -0
  304. package/src/interactive/handoff-round.ts +56 -0
  305. package/src/interactive/interactive-application.ts +49 -2
  306. package/src/interactive/interactive-event-projection.ts +9 -1
  307. package/src/interactive/interactive-input-runtime.ts +11 -1
  308. package/src/interactive/interactive-presentation.ts +11 -1
  309. package/src/interactive/interactive-slash-runtime.ts +52 -2
  310. package/src/interactive/interactive-subscriptions.ts +14 -2
  311. package/src/interactive/memory-overlay.ts +89 -4
  312. package/src/interactive/oracle.ts +179 -0
  313. package/src/interactive/overlay-ask-user-lifecycle.ts +7 -1
  314. package/src/interactive/overlay-frame.ts +5 -2
  315. package/src/interactive/overlay-general-openers.ts +230 -2
  316. package/src/interactive/overlay-key-routing.ts +58 -2
  317. package/src/interactive/overlay-lifecycle.ts +52 -5
  318. package/src/interactive/overlay-permission-lifecycle.ts +33 -8
  319. package/src/interactive/overlay-resource-openers.ts +11 -3
  320. package/src/interactive/overlay-session-lifecycle.ts +234 -2
  321. package/src/interactive/overlay-transitions.ts +11 -0
  322. package/src/interactive/overlays/ask-user.ts +74 -30
  323. package/src/interactive/overlays/decisions.ts +3 -1
  324. package/src/interactive/overlays/fleet-run-approval.ts +208 -0
  325. package/src/interactive/overlays/handoff-review.ts +185 -0
  326. package/src/interactive/overlays/library-install-confirm.ts +151 -0
  327. package/src/interactive/overlays/list-overlay.ts +168 -2
  328. package/src/interactive/overlays/settings.ts +101 -4
  329. package/src/interactive/overlays/side-question.ts +139 -0
  330. package/src/interactive/overlays/skills-hub.ts +401 -15
  331. package/src/interactive/permission-hint.ts +35 -0
  332. package/src/interactive/permission-overlay.ts +95 -45
  333. package/src/interactive/renderers/tool-execution.ts +19 -49
  334. package/src/interactive/session-last-turn.ts +8 -1
  335. package/src/interactive/session-usage-reseed.ts +36 -10
  336. package/src/interactive/side-question.ts +171 -0
  337. package/src/interactive/slash-commands.ts +434 -7
  338. package/src/interactive/slash-spec.ts +19 -6
  339. package/src/interactive/status/summary.ts +5 -0
  340. package/src/interactive/status/types.ts +5 -0
  341. package/src/interactive/terminal-lease.ts +1 -0
  342. package/src/interactive/theme/tokens.ts +30 -0
  343. package/src/interactive/turn-context.ts +96 -23
  344. package/src/interactive/turn-middleware.ts +16 -1
  345. package/src/interactive/turn-runtime.ts +37 -8
  346. package/src/interactive/turn-state.ts +3 -0
  347. package/src/interactive/watchdog-run.ts +75 -0
  348. package/src/interactive/worker-progress.ts +440 -0
  349. package/src/interactive/worker-share.ts +56 -1
  350. package/src/interactive/worker-stream.ts +58 -110
  351. package/src/tools/agent-tools.ts +28 -3
  352. package/src/tools/ask-user.ts +21 -1
  353. package/src/tools/bootstrap.ts +3 -0
  354. package/src/tools/compete-worktrees.ts +13 -79
  355. package/src/tools/context/index.ts +2 -2
  356. package/src/tools/dispatch-admission.ts +242 -8
  357. package/src/tools/dispatch-arguments.ts +65 -1
  358. package/src/tools/dispatch-event-text.ts +19 -0
  359. package/src/tools/dispatch-plan.ts +136 -6
  360. package/src/tools/dispatch-runner.ts +319 -13
  361. package/src/tools/dispatch-types.ts +20 -1
  362. package/src/tools/dispatch.ts +96 -3
  363. package/src/tools/monitor.ts +31 -0
  364. package/src/tools/profiles.ts +18 -4
  365. package/src/tools/registry.ts +15 -5
  366. package/src/tools/result-disposition.ts +156 -0
  367. package/src/tools/result-shaping.ts +59 -1
  368. package/src/tools/task-worktree.ts +238 -0
  369. package/src/tools/verify/authoring.ts +116 -55
  370. package/src/tools/verify/scripts.ts +62 -0
  371. package/src/tools/worker-evidence.ts +21 -1
  372. package/src/worker/spec-contract.ts +44 -3
  373. package/dist/chunk-EFADSJET.js +0 -18
  374. package/dist/chunk-HC4CLZ2Y.js +0 -68
  375. package/dist/memory-4ALKDJ4Q.js +0 -246
  376. package/src/domains/eval/metrics/chaos-stream.ts +0 -93
@@ -1,12 +1,23 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ parseAgentRecipeSchema
4
+ } from "./chunk-UVDSQ6LW.js";
5
+ import {
6
+ parseFleetContract,
7
+ parseFrontmatter
8
+ } from "./chunk-KCMKRQX4.js";
9
+ import {
10
+ assertAgentSpecPolicy,
11
+ normalizeAgentSpec
12
+ } from "./chunk-AOCYTWAV.js";
2
13
  import {
3
14
  readSettings,
4
15
  settingsPath,
5
16
  updateSettings
6
- } from "./chunk-AD2SYQYC.js";
17
+ } from "./chunk-UHXRNZ2J.js";
7
18
  import {
8
19
  DEFAULT_SETTINGS
9
- } from "./chunk-4OC57DA6.js";
20
+ } from "./chunk-4DGYLA73.js";
10
21
  import {
11
22
  require_dist
12
23
  } from "./chunk-APJ265NV.js";
@@ -113,11 +124,13 @@ function requestedScopes(scope) {
113
124
  return [scope ?? "project"];
114
125
  }
115
126
  function defaultedIncludes(options) {
116
- const hasExplicitInclude = options.includeContext !== void 0 || options.includePrompts !== void 0 || options.includeSkills !== void 0 || options.includeSettings !== void 0 || options.includeExtensions !== void 0;
127
+ const hasExplicitInclude = options.includeContext !== void 0 || options.includePrompts !== void 0 || options.includeSkills !== void 0 || options.includeAgents !== void 0 || options.includeFleets !== void 0 || options.includeSettings !== void 0 || options.includeExtensions !== void 0;
117
128
  return {
118
129
  includeContext: hasExplicitInclude ? options.includeContext === true : true,
119
130
  includePrompts: hasExplicitInclude ? options.includePrompts === true : true,
120
131
  includeSkills: hasExplicitInclude ? options.includeSkills === true : true,
132
+ includeAgents: hasExplicitInclude ? options.includeAgents === true : true,
133
+ includeFleets: hasExplicitInclude ? options.includeFleets === true : true,
121
134
  includeSettings: hasExplicitInclude ? options.includeSettings === true : true,
122
135
  includeExtensions: hasExplicitInclude ? options.includeExtensions === true : true
123
136
  };
@@ -155,6 +168,18 @@ function createShareArchive(options = {}) {
155
168
  addTree(files, "skill", scope, root, `${scope}/skills`);
156
169
  }
157
170
  }
171
+ if (includes.includeAgents) {
172
+ for (const scope of scopes) {
173
+ const root = scope === "user" ? path.join(clioConfigDir(), "agents") : path.join(cwd, ".clio-coder", "agents");
174
+ addTree(files, "agent", scope, root, `${scope}/agents`);
175
+ }
176
+ }
177
+ if (includes.includeFleets) {
178
+ for (const scope of scopes) {
179
+ const root = scope === "user" ? path.join(clioConfigDir(), "fleets") : path.join(cwd, ".clio-coder", "fleets");
180
+ addTree(files, "fleet", scope, root, `${scope}/fleets`);
181
+ }
182
+ }
158
183
  if (includes.includeExtensions) {
159
184
  for (const scope of scopes) {
160
185
  const root = scope === "user" ? path.join(clioConfigDir(), "extensions") : path.join(cwd, ".clio-coder", "extensions");
@@ -201,8 +226,17 @@ function parseArchive(raw) {
201
226
  throw new Error("share archive manifest is malformed");
202
227
  }
203
228
  const archive = raw;
229
+ const allowedTypes = /* @__PURE__ */ new Set([
230
+ "project-context",
231
+ "prompt",
232
+ "skill",
233
+ "agent",
234
+ "fleet",
235
+ "settings",
236
+ "extension"
237
+ ]);
204
238
  for (const file of archive.files) {
205
- if (!isRecord(file) || typeof file.archivePath !== "string" || typeof file.relativePath !== "string" || typeof file.sha256 !== "string" || file.encoding !== "base64" || typeof file.data !== "string") {
239
+ if (!isRecord(file) || !allowedTypes.has(file.type) || typeof file.archivePath !== "string" || typeof file.relativePath !== "string" || typeof file.sha256 !== "string" || file.encoding !== "base64" || typeof file.data !== "string") {
206
240
  throw new Error("share archive file entry is malformed");
207
241
  }
208
242
  const actual = sha256(decodeArchiveFile(file));
@@ -244,6 +278,10 @@ function targetRootForFile(entry, options) {
244
278
  return scope === "user" ? { root: path.join(config, "prompts"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "prompts"), containmentRoot: cwd, scope };
245
279
  case "skill":
246
280
  return scope === "user" ? { root: path.join(config, "skills"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "skills"), containmentRoot: cwd, scope };
281
+ case "agent":
282
+ return { root: path.join(config, "agents"), containmentRoot: config, scope: "user" };
283
+ case "fleet":
284
+ return { root: path.join(config, "fleets"), containmentRoot: config, scope: "user" };
247
285
  case "extension":
248
286
  return scope === "user" ? { root: path.join(config, "extensions"), containmentRoot: config, scope } : { root: path.join(cwd, ".clio-coder", "extensions"), containmentRoot: cwd, scope };
249
287
  case "settings":
@@ -393,6 +431,26 @@ function prepareShareImport(filePath, options = {}) {
393
431
  }
394
432
  for (const targetInfo of preflight.targets) {
395
433
  const { entry, target, scope, buffer } = targetInfo;
434
+ if (entry.type === "fleet") {
435
+ try {
436
+ parseFleetContract(buffer.toString("utf8"), target);
437
+ } catch (error) {
438
+ diagnostics.push({ type: "error", message: error instanceof Error ? error.message : String(error), path: target });
439
+ continue;
440
+ }
441
+ }
442
+ if (entry.type === "agent") {
443
+ try {
444
+ const parsed = parseFrontmatter(buffer.toString("utf8"), target);
445
+ const id = path.basename(target, ".md");
446
+ assertAgentSpecPolicy(
447
+ normalizeAgentSpec(parseAgentRecipeSchema({ id, source: "user", filepath: target, ...parsed }))
448
+ );
449
+ } catch (error) {
450
+ diagnostics.push({ type: "error", message: error instanceof Error ? error.message : String(error), path: target });
451
+ continue;
452
+ }
453
+ }
396
454
  if (entry.type === "settings") {
397
455
  diagnostics.push(...settingsPlan(buffer, options));
398
456
  actions.push({ action: "settings", type: entry.type, scope, path: target });
@@ -552,4 +610,4 @@ export {
552
610
  importShareArchive,
553
611
  ShareDomainModule
554
612
  };
555
- //# sourceMappingURL=chunk-WR67VIZY.js.map
613
+ //# sourceMappingURL=chunk-FOT2FX5J.js.map
@@ -191,6 +191,7 @@ function buildContextLedger(input) {
191
191
  model: input.model ?? null,
192
192
  contextWindow: window,
193
193
  contextWindowSource: input.contextWindowSource ?? null,
194
+ contextWindowSlots: input.contextWindowSlots ?? null,
194
195
  usedTokens,
195
196
  reserveTokens,
196
197
  freeTokens,
@@ -609,4 +610,4 @@ export {
609
610
  snapshotInputTokens,
610
611
  reconcileSnapshot
611
612
  };
612
- //# sourceMappingURL=chunk-BPGS2WCQ.js.map
613
+ //# sourceMappingURL=chunk-GEYXPTRF.js.map
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  SAFE_EXEC_DEFAULT_TIMEOUT_MS,
7
7
  resolveSafeCwd
8
- } from "./chunk-VEZEGCGW.js";
8
+ } from "./chunk-D4MDIG46.js";
9
9
  import {
10
10
  require_dist
11
11
  } from "./chunk-APJ265NV.js";
@@ -310,4 +310,4 @@ export {
310
310
  parseProjectVerifierCatalogText,
311
311
  packageDeclaredCheck
312
312
  };
313
- //# sourceMappingURL=chunk-FYYLNIL5.js.map
313
+ //# sourceMappingURL=chunk-GH5622CP.js.map
@@ -1,4 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ AUTONOMY_EXPOSURES
4
+ } from "./chunk-HWUFFB6L.js";
2
5
  import {
3
6
  init_esm_shims
4
7
  } from "./chunk-3R73A4XB.js";
@@ -234,7 +237,7 @@ function isSessionEntry(value) {
234
237
  case "taskLedger":
235
238
  return isOptionalString(v.boardId) && Array.isArray(v.goals) && v.goals.every(isTaskLedgerGoal) && Array.isArray(v.subgoals) && v.subgoals.every(isTaskLedgerGoal) && isStringArray(v.activeRunIds) && Array.isArray(v.requiredValidationEvidence) && v.requiredValidationEvidence.every(isTaskLedgerEvidence);
236
239
  case "decisionLedger":
237
- return isString(v.interviewId) && isOneOf(v.interviewStatus, DECISION_INTERVIEW_STATUSES) && isString(v.startedAt) && isString(v.endedAt) && isNumber(v.roundCount) && Number.isInteger(v.roundCount) && v.roundCount >= 0 && isOptionalString(v.summary) && isOptionalString(v.transcriptPath) && Array.isArray(v.decisions) && v.decisions.every(isDecisionRecord);
240
+ return isString(v.interviewId) && isOneOf(v.interviewStatus, DECISION_INTERVIEW_STATUSES) && isString(v.startedAt) && isString(v.endedAt) && isNumber(v.roundCount) && Number.isInteger(v.roundCount) && v.roundCount >= 0 && isOptionalString(v.summary) && isOptionalString(v.transcriptPath) && (v.exposure === void 0 || isOneOf(v.exposure, AUTONOMY_EXPOSURES)) && Array.isArray(v.decisions) && v.decisions.every(isDecisionRecord);
238
241
  case "workerRun":
239
242
  return isString(v.assignmentId) && isString(v.runId) && isOneOf(v.origin, WORKER_RUN_ORIGINS) && isString(v.agentId) && isWorkerRunRuntime(v.runtime) && isOptionalString(v.parentToolCallId);
240
243
  case "contextEviction":
@@ -255,4 +258,4 @@ export {
255
258
  isSessionHeader,
256
259
  isSessionEntry
257
260
  };
258
- //# sourceMappingURL=chunk-BEY543CS.js.map
261
+ //# sourceMappingURL=chunk-GOXNB3AO.js.map
@@ -0,0 +1,195 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ withStateFileLock,
4
+ withStateFileLockSync
5
+ } from "./chunk-IKCO5N3L.js";
6
+ import {
7
+ safeResourceWrite
8
+ } from "./chunk-WEPFGWHJ.js";
9
+ import {
10
+ init_esm_shims
11
+ } from "./chunk-3R73A4XB.js";
12
+
13
+ // src/domains/observability/evidence-index.ts
14
+ init_esm_shims();
15
+ import { readFileSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ var MAX_EVIDENCE_INDEX_ROWS = 1e3;
18
+ var EVIDENCE_INDEX_FILE = "evidence-index.json";
19
+ var evidenceIndexWriteQueue = Promise.resolve();
20
+ function indexPath(stateDir) {
21
+ return join(stateDir, EVIDENCE_INDEX_FILE);
22
+ }
23
+ function isEvidenceIndexRow(value) {
24
+ if (typeof value !== "object" || value === null) return false;
25
+ const row = value;
26
+ return typeof row.runId === "string" && typeof row.evidenceId === "string" && Array.isArray(row.tags) && row.tags.every((tag) => typeof tag === "string") && typeof row.firstPassSuccess === "boolean" && typeof row.findingCount === "number" && typeof row.generatedAt === "string";
27
+ }
28
+ function readEvidenceIndex(stateDir) {
29
+ let raw;
30
+ try {
31
+ raw = readFileSync(indexPath(stateDir), "utf8");
32
+ } catch {
33
+ return [];
34
+ }
35
+ let parsed;
36
+ try {
37
+ parsed = JSON.parse(raw);
38
+ } catch {
39
+ return [];
40
+ }
41
+ if (!Array.isArray(parsed)) return [];
42
+ return parsed.filter(isEvidenceIndexRow);
43
+ }
44
+ async function writeEvidenceIndexRow(stateDir, row) {
45
+ let bounded = [];
46
+ await withStateFileLock(indexPath(stateDir), () => {
47
+ const existing = readEvidenceIndex(stateDir).filter((entry) => entry.runId !== row.runId);
48
+ existing.push(row);
49
+ bounded = existing.length > MAX_EVIDENCE_INDEX_ROWS ? existing.slice(-MAX_EVIDENCE_INDEX_ROWS) : existing;
50
+ safeResourceWrite(indexPath(stateDir), `${JSON.stringify(bounded, null, 2)}
51
+ `, { encoding: "utf8" });
52
+ });
53
+ return bounded;
54
+ }
55
+ async function writeEvidenceIndexRowQueued(stateDir, row) {
56
+ let written = [];
57
+ const write = evidenceIndexWriteQueue.then(async () => {
58
+ written = await writeEvidenceIndexRow(stateDir, row);
59
+ });
60
+ evidenceIndexWriteQueue = write.catch(() => void 0);
61
+ await write;
62
+ return written;
63
+ }
64
+
65
+ // src/domains/observability/out-of-turn-usage.ts
66
+ init_esm_shims();
67
+ import { closeSync, mkdirSync, openSync, readFileSync as readFileSync2, writeSync } from "node:fs";
68
+ import { dirname, join as join2 } from "node:path";
69
+ var OUT_OF_TURN_USAGE_DIR = "usage";
70
+ var OUT_OF_TURN_USAGE_FILE = "out-of-turn.jsonl";
71
+ var MAX_OUT_OF_TURN_USAGE_ROWS = 1e3;
72
+ var BOUND_CHECK_INTERVAL = 64;
73
+ function outOfTurnUsagePath(stateDir) {
74
+ return join2(stateDir, OUT_OF_TURN_USAGE_DIR, OUT_OF_TURN_USAGE_FILE);
75
+ }
76
+ var appendsSinceBoundCheck = BOUND_CHECK_INTERVAL;
77
+ function appendOutOfTurnUsageRow(stateDir, row) {
78
+ const path = outOfTurnUsagePath(stateDir);
79
+ try {
80
+ mkdirSync(dirname(path), { recursive: true });
81
+ const fd = openSync(path, "a");
82
+ try {
83
+ writeSync(fd, `${JSON.stringify(row)}
84
+ `);
85
+ } finally {
86
+ closeSync(fd);
87
+ }
88
+ } catch (error) {
89
+ process.stderr.write(`[clio:usage] out-of-turn usage row not written: ${messageOf(error)}
90
+ `);
91
+ return;
92
+ }
93
+ appendsSinceBoundCheck += 1;
94
+ if (appendsSinceBoundCheck < BOUND_CHECK_INTERVAL) return;
95
+ appendsSinceBoundCheck = 0;
96
+ try {
97
+ boundOutOfTurnUsageFile(path);
98
+ } catch (error) {
99
+ process.stderr.write(`[clio:usage] out-of-turn usage ring not bounded: ${messageOf(error)}
100
+ `);
101
+ }
102
+ }
103
+ function boundOutOfTurnUsageFile(path) {
104
+ withStateFileLockSync(path, () => {
105
+ let raw;
106
+ try {
107
+ raw = readFileSync2(path, "utf8");
108
+ } catch {
109
+ return;
110
+ }
111
+ const lines = raw.split("\n").filter((line) => line.trim().length > 0);
112
+ if (lines.length <= MAX_OUT_OF_TURN_USAGE_ROWS) return;
113
+ const kept = lines.slice(-MAX_OUT_OF_TURN_USAGE_ROWS);
114
+ safeResourceWrite(path, `${kept.join("\n")}
115
+ `, { encoding: "utf8" });
116
+ });
117
+ }
118
+ function readOutOfTurnUsageRows(stateDir) {
119
+ const path = outOfTurnUsagePath(stateDir);
120
+ let raw;
121
+ try {
122
+ raw = readFileSync2(path, "utf8");
123
+ } catch (error) {
124
+ const err = error;
125
+ if (err.code === "ENOENT" || err.code === "ENOTDIR") return { rows: [], errors: [] };
126
+ return { rows: [], errors: [`out-of-turn usage store unreadable: ${messageOf(error)}`] };
127
+ }
128
+ const rows = [];
129
+ const errors = [];
130
+ const lines = raw.split("\n");
131
+ for (let index = 0; index < lines.length; index += 1) {
132
+ const line = lines[index];
133
+ if (line === void 0 || line.trim().length === 0) continue;
134
+ let parsed;
135
+ try {
136
+ parsed = JSON.parse(line);
137
+ } catch (error) {
138
+ errors.push(`${path}:${index + 1}: invalid JSON: ${messageOf(error)}`);
139
+ continue;
140
+ }
141
+ const row = asOutOfTurnUsageRow(parsed);
142
+ if (row === null) {
143
+ errors.push(`${path}:${index + 1}: not an out-of-turn usage row`);
144
+ continue;
145
+ }
146
+ rows.push(row);
147
+ }
148
+ return { rows, errors };
149
+ }
150
+ function asOutOfTurnUsageRow(value) {
151
+ if (!isRecord(value)) return null;
152
+ const label = value.label;
153
+ if (label !== "side-question" && label !== "handoff") return null;
154
+ if (typeof value.timestamp !== "string" || value.timestamp.length === 0) return null;
155
+ if (!isRecord(value.usage)) return null;
156
+ const usage = value.usage;
157
+ return {
158
+ label,
159
+ sessionId: typeof value.sessionId === "string" ? value.sessionId : null,
160
+ repoIdentity: typeof value.repoIdentity === "string" ? value.repoIdentity : null,
161
+ timestamp: value.timestamp,
162
+ target: typeof value.target === "string" && value.target.length > 0 ? value.target : "unknown",
163
+ attributedModelId: typeof value.attributedModelId === "string" && value.attributedModelId.length > 0 ? value.attributedModelId : "unknown",
164
+ usage: {
165
+ input: numberOr0(usage.input),
166
+ output: numberOr0(usage.output),
167
+ cacheRead: numberOr0(usage.cacheRead),
168
+ cacheWrite: numberOr0(usage.cacheWrite),
169
+ reasoning: numberOr0(usage.reasoning),
170
+ totalTokens: numberOr0(usage.totalTokens),
171
+ costUsd: numberOr0(usage.costUsd),
172
+ costProvenance: asCostProvenance(usage.costProvenance)
173
+ }
174
+ };
175
+ }
176
+ function asCostProvenance(value) {
177
+ return value === "known" || value === "known_free" || value === "estimated" ? value : "unknown";
178
+ }
179
+ function numberOr0(value) {
180
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
181
+ }
182
+ function isRecord(value) {
183
+ return typeof value === "object" && value !== null && !Array.isArray(value);
184
+ }
185
+ function messageOf(error) {
186
+ return error instanceof Error ? error.message : String(error);
187
+ }
188
+
189
+ export {
190
+ readEvidenceIndex,
191
+ writeEvidenceIndexRowQueued,
192
+ appendOutOfTurnUsageRow,
193
+ readOutOfTurnUsageRows
194
+ };
195
+ //# sourceMappingURL=chunk-GWS3VEIW.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  detectProjectType
4
- } from "./chunk-YHZX5GEU.js";
4
+ } from "./chunk-XAKHZX5N.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-3R73A4XB.js";
@@ -179,4 +179,4 @@ export {
179
179
  probeWorkspace,
180
180
  probeWorkspaceAsync
181
181
  };
182
- //# sourceMappingURL=chunk-G4BMMOKF.js.map
182
+ //# sourceMappingURL=chunk-HVDIIIQW.js.map
@@ -0,0 +1,83 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-3R73A4XB.js";
5
+
6
+ // src/domains/safety/autonomy.ts
7
+ init_esm_shims();
8
+ var AUTONOMY_LEVELS = ["read-only", "suggest", "auto-edit", "full-auto"];
9
+ var DEFAULT_AUTONOMY_LEVEL = "auto-edit";
10
+ function isAutonomyLevel(value) {
11
+ return typeof value === "string" && AUTONOMY_LEVELS.includes(value);
12
+ }
13
+ var AUTONOMY_EXPOSURES = ["local", "outward"];
14
+ var DEFAULT_AUTONOMY_EXPOSURE = "local";
15
+ function mapAutonomy(level, actionClass, options = {}) {
16
+ if (actionClass === "git_destructive") return "deny";
17
+ if ((level === "auto-edit" || level === "suggest") && options.exposure === "outward") return "ask";
18
+ if (actionClass === "read") return "allow";
19
+ if (level === "read-only") return "deny";
20
+ if (level === "suggest") return "ask";
21
+ switch (actionClass) {
22
+ case "write":
23
+ return "allow";
24
+ case "dispatch":
25
+ if (options.dispatchPlanScale === true && level !== "full-auto") return "ask";
26
+ return "allow";
27
+ case "execute": {
28
+ if (options.executeRecognized !== false) return "allow";
29
+ return level === "full-auto" ? "allow" : "ask";
30
+ }
31
+ case "unknown":
32
+ return "ask";
33
+ default:
34
+ return "ask";
35
+ }
36
+ }
37
+ function autonomyDenyRejection(level, tool, actionClass) {
38
+ return {
39
+ short: `${tool} denied: autonomy level is ${level}`,
40
+ detail: `Clio is at autonomy ${level}: ${actionClass} actions are denied without prompting. Describe the change you would make instead, so the operator can apply it or raise the autonomy level.`,
41
+ hints: ["Propose the exact edit or command as text.", "The operator can change the level in /settings."]
42
+ };
43
+ }
44
+ function autonomyAskRejection(level, tool, actionClass, exposure = DEFAULT_AUTONOMY_EXPOSURE) {
45
+ if (exposure === "outward") {
46
+ return {
47
+ short: `${tool} needs approval: outward-facing gate at autonomy ${level}`,
48
+ detail: `The call declared exposure=outward, so answering it publishes or sends something outside the workspace. Autonomy ${level} auto-answers local gates and parks outward-facing ones for the operator.`,
49
+ hints: [
50
+ "Approving resumes only this call.",
51
+ "Autonomy full-auto answers outward gates too; the safety net still applies there."
52
+ ]
53
+ };
54
+ }
55
+ return {
56
+ short: `${tool} needs approval (${actionClass}) at autonomy ${level}`,
57
+ detail: `Autonomy ${level} routes ${actionClass} actions through operator approval. The call is parked until the operator approves it once or cancels it.`,
58
+ hints: [
59
+ "Approving resumes only this call.",
60
+ "Recognized commands can be added to .clio-coder/safety.yaml.",
61
+ // The sanctioned pivots for a gated shell command: typed verification
62
+ // and read-class observe tools run without approval at this level,
63
+ // and models otherwise stall retrying denied bash for checks or
64
+ // directory listings.
65
+ ...actionClass === "execute" ? [
66
+ 'A declared package or project-catalog check runs without approval through the verify tool: verify(check="<id>").',
67
+ "Read-only inspection runs without approval through the ls, read, grep, and find tools."
68
+ ] : []
69
+ ]
70
+ };
71
+ }
72
+
73
+ export {
74
+ AUTONOMY_LEVELS,
75
+ DEFAULT_AUTONOMY_LEVEL,
76
+ isAutonomyLevel,
77
+ AUTONOMY_EXPOSURES,
78
+ DEFAULT_AUTONOMY_EXPOSURE,
79
+ mapAutonomy,
80
+ autonomyDenyRejection,
81
+ autonomyAskRejection
82
+ };
83
+ //# sourceMappingURL=chunk-HWUFFB6L.js.map