@iowarp/clio-coder 0.3.3 → 0.3.4

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 (244) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/README.md +3 -3
  4. package/dist/{acp-P2AQILE2.js → acp-S5R4RR5B.js} +7 -6
  5. package/dist/{agents-72W3BI7I.js → agents-P6DMMVZY.js} +24 -21
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-5TWEIYDN.js → auth-2XCZLPKS.js} +12 -8
  8. package/dist/{chunk-GGXXDWE4.js → chunk-22NAGB7X.js} +2 -2
  9. package/dist/{chunk-2DJ2KNFG.js → chunk-2LZI5CAG.js} +133 -13
  10. package/dist/{chunk-OAO4GE4M.js → chunk-2TZWSW76.js} +2 -2
  11. package/dist/{chunk-OOJYHWRB.js → chunk-34475P3I.js} +2 -2
  12. package/dist/{chunk-4XUGQOHA.js → chunk-35MKKU5R.js} +4 -4
  13. package/dist/{chunk-LM5TQCJZ.js → chunk-3HZ5RWN2.js} +5 -5
  14. package/dist/{chunk-AGYYIBLL.js → chunk-3JLKSKD7.js} +2 -2
  15. package/dist/{chunk-KZWTDYJF.js → chunk-4JUF2NNX.js} +7 -7
  16. package/dist/{chunk-ZDOOVTXZ.js → chunk-4OC57DA6.js} +27 -4
  17. package/dist/chunk-5M54SPOL.js +926 -0
  18. package/dist/{chunk-STBPMHSX.js → chunk-7RXG6QRZ.js} +51 -11
  19. package/dist/{chunk-X6IAEBZR.js → chunk-A2GZF7DC.js} +5 -5
  20. package/dist/{chunk-A3CYT5EX.js → chunk-AD2SYQYC.js} +55 -2
  21. package/dist/chunk-AOCYTWAV.js +449 -0
  22. package/dist/chunk-BEY543CS.js +258 -0
  23. package/dist/{chunk-6N5PTWMY.js → chunk-BP4OYD6A.js} +32 -13
  24. package/dist/chunk-BPGS2WCQ.js +612 -0
  25. package/dist/{chunk-V6RTAOC2.js → chunk-BRXQQJFP.js} +8 -8
  26. package/dist/chunk-CFGTUFWB.js +67 -0
  27. package/dist/{chunk-CBCAPZAA.js → chunk-E25LMLRW.js} +2 -2
  28. package/dist/{chunk-DUYJ5IO6.js → chunk-EDRHSCIE.js} +4 -4
  29. package/dist/{chunk-XBXAASKX.js → chunk-EFADSJET.js} +2 -2
  30. package/dist/{chunk-M6SHUN7Q.js → chunk-FO5ZOVUY.js} +2 -2
  31. package/dist/chunk-FYYLNIL5.js +313 -0
  32. package/dist/{chunk-FNTMWMX5.js → chunk-HV5X7OR2.js} +14 -12
  33. package/dist/{chunk-TZTZS7QK.js → chunk-HXG4IURW.js} +5 -3
  34. package/dist/{chunk-5UFT4SUX.js → chunk-K6WL7QZT.js} +3 -3
  35. package/dist/chunk-K7VKOLQQ.js +15 -0
  36. package/dist/{chunk-BMEMKKIT.js → chunk-KOHPCX4K.js} +2 -2
  37. package/dist/{chunk-OC7FIQPC.js → chunk-KRPY7NTG.js} +10 -7
  38. package/dist/chunk-LL4KHSZI.js +22 -0
  39. package/dist/{chunk-DSELYM6W.js → chunk-MEQ45TQ4.js} +15 -9
  40. package/dist/{chunk-5UUP6MWO.js → chunk-MV3K5QF2.js} +5 -436
  41. package/dist/{chunk-6SGHMWE3.js → chunk-N4CZJQRK.js} +5 -5
  42. package/dist/{chunk-TZK7PACC.js → chunk-NILBFAPG.js} +14 -8
  43. package/dist/chunk-OZNBF4L3.js +23 -0
  44. package/dist/{verify-375KUB3Y.js → chunk-PCZJO5TI.js} +127 -42
  45. package/dist/chunk-QQK64KLB.js +1360 -0
  46. package/dist/{chunk-SRDMMSEP.js → chunk-QQL5RT5M.js} +979 -1619
  47. package/dist/{chunk-LZSJBIVT.js → chunk-QWU7ZBO7.js} +70 -720
  48. package/dist/{chunk-2TLUCQVG.js → chunk-RD5U66HV.js} +3 -3
  49. package/dist/{chunk-OKGUZO2U.js → chunk-SPULKLCF.js} +4 -3
  50. package/dist/{chunk-OQ33BKR3.js → chunk-TTNYS3EA.js} +3 -60
  51. package/dist/chunk-TW3WDMVS.js +677 -0
  52. package/dist/chunk-TZSKNMZG.js +434 -0
  53. package/dist/{chunk-7MNJORFF.js → chunk-UL3WSD3F.js} +6 -1
  54. package/dist/{chunk-PIWWS5BL.js → chunk-UZHIZC5S.js} +7 -7
  55. package/dist/{chunk-UFIIWP2H.js → chunk-VAWWTKDP.js} +8 -8
  56. package/dist/{chunk-COU2UHX6.js → chunk-VEZEGCGW.js} +170 -2
  57. package/dist/{chunk-LW6DSM3M.js → chunk-VMNQ6OZA.js} +98 -202
  58. package/dist/chunk-VSNATDE6.js +122 -0
  59. package/dist/chunk-W6GROXXM.js +69 -0
  60. package/dist/chunk-WPQLXFOZ.js +375 -0
  61. package/dist/{chunk-ORBHGJC5.js → chunk-WR67VIZY.js} +3 -3
  62. package/dist/{chunk-PAJK6MAQ.js → chunk-X6COSD2O.js} +5 -5
  63. package/dist/chunk-ZGVHUX3M.js +66 -0
  64. package/dist/{chunk-LWLEKMDQ.js → chunk-ZYKPLLNQ.js} +510 -547
  65. package/dist/cli/index.js +27 -23
  66. package/dist/{clio-JOU4FXVA.js → clio-J5JIOIDS.js} +7 -6
  67. package/dist/{code-nav-7AX6FYE6.js → code-nav-AXCXSBHX.js} +5 -3
  68. package/dist/{config-XCDVKR23.js → config-OEBMIN2U.js} +37 -27
  69. package/dist/{configure-4GAP54ZW.js → configure-PUQOSIXQ.js} +16 -13
  70. package/dist/{context-5VKGUVJJ.js → context-EKDCKUUZ.js} +82 -7
  71. package/dist/{context-4UOGGLQ5.js → context-MGSE4Z2T.js} +33 -23
  72. package/dist/{context-77FM5DV5.js → context-URSXPBCK.js} +17 -9
  73. package/dist/{context-clear-XXJRLCJJ.js → context-clear-KDAJRNUK.js} +33 -23
  74. package/dist/context-working-set-SBKMPPI2.js +1552 -0
  75. package/dist/{dispatch-runner-QPRDDBDX.js → dispatch-runner-MSWN72NK.js} +43 -29
  76. package/dist/{doctor-HR46URBJ.js → doctor-7BSE27PJ.js} +10 -10
  77. package/dist/{eval-XSSNATB4.js → eval-IZGDOO4H.js} +9 -8
  78. package/dist/{evidence-6HG2PY2B.js → evidence-SR7WXB5B.js} +51 -23
  79. package/dist/{evolve-K7YU3NCY.js → evolve-K7VE2CBX.js} +30 -20
  80. package/dist/{fleet-VY3HHKN6.js → fleet-7XMJNQNF.js} +48 -38
  81. package/dist/{fleet-preflight-DDN536IT.js → fleet-preflight-AQNAH644.js} +3 -3
  82. package/dist/{init-JYGXI3FK.js → init-JGNPAYXT.js} +41 -31
  83. package/dist/{memory-WFZMGYHX.js → memory-4ALKDJ4Q.js} +32 -22
  84. package/dist/{models-I5QWSEOM.js → models-ZMMLFJNN.js} +22 -19
  85. package/dist/{monitor-GE4ID3IA.js → monitor-2F3T5KHP.js} +55 -43
  86. package/dist/{orchestrator-EM5MC3HM.js → orchestrator-ORHT43JB.js} +572 -388
  87. package/dist/{reset-L2FQEE3E.js → reset-NXGTYNUO.js} +4 -3
  88. package/dist/{run-ZU3QMZPZ.js → run-RF4WJGMT.js} +51 -41
  89. package/dist/{share-S5BZQC5I.js → share-UT3W6E4M.js} +5 -4
  90. package/dist/{skills-X5VXCRNQ.js → skills-PSACKC5Q.js} +2 -2
  91. package/dist/{skills-eval-WKIHWTHR.js → skills-eval-WJSI55RZ.js} +34 -24
  92. package/dist/{targets-SNCPI2NR.js → targets-PIIRAOYS.js} +23 -20
  93. package/dist/{terminal-lease-BNAHVHBS.js → terminal-lease-ULWXWNVY.js} +4 -3
  94. package/dist/{upgrade-JQHHPQ4K.js → upgrade-346TZ6AV.js} +18 -17
  95. package/dist/{usage-OR4O5SMZ.js → usage-6KKXR32N.js} +34 -24
  96. package/dist/verifiers-4UUM6TEE.js +1214 -0
  97. package/dist/verify-X5HDROLA.js +25 -0
  98. package/dist/{wiki-generate-UEXP2ARI.js → wiki-generate-7STOCIFZ.js} +42 -31
  99. package/dist/worker/entry.js +33 -24
  100. package/docs/README.md +7 -6
  101. package/docs/acp.md +1 -1
  102. package/docs/alcf-provider.md +1 -1
  103. package/docs/architecture.md +2 -2
  104. package/docs/artifact-versions.md +1 -1
  105. package/docs/built-in-agents.md +1 -1
  106. package/docs/capacity-and-scheduling.md +1 -1
  107. package/docs/commands-and-modes.md +53 -21
  108. package/docs/config-knobs-audit.md +1 -2
  109. package/docs/configuration-and-targets.md +15 -1
  110. package/docs/context-engine.md +64 -12
  111. package/docs/context-working-set.md +194 -0
  112. package/docs/development-pipeline.md +1 -1
  113. package/docs/documentation-coverage.md +5 -5
  114. package/docs/documentation-guide.md +6 -5
  115. package/docs/environment-variables.md +2 -1
  116. package/docs/eval-runner.md +1 -1
  117. package/docs/evals-internal.md +14 -1
  118. package/docs/evidence-and-memory.md +74 -2
  119. package/docs/evolution.md +1 -1
  120. package/docs/exit-codes-and-output.md +1 -1
  121. package/docs/extensions-and-sharing.md +2 -2
  122. package/docs/fleet-dispatch.md +22 -7
  123. package/docs/glossary.md +21 -1
  124. package/docs/installation-and-lifecycle.md +2 -2
  125. package/docs/middleware-and-components.md +1 -1
  126. package/docs/model-catalog.md +7 -9
  127. package/docs/observability.md +4 -4
  128. package/docs/proactive-memory.md +1 -1
  129. package/docs/prompt-envelope-and-tools.md +4 -4
  130. package/docs/provider-adapter-cookbook.md +1 -1
  131. package/docs/release-cut-checklist.md +31 -31
  132. package/docs/safety-model.md +23 -4
  133. package/docs/scientific-validation.md +21 -3
  134. package/docs/session-lifecycle.md +3 -3
  135. package/docs/skills-marketplace.md +1 -1
  136. package/docs/tool-usage.md +79 -12
  137. package/docs/trace-store.md +1 -1
  138. package/docs/troubleshooting.md +1 -1
  139. package/docs/tui-design.md +1 -1
  140. package/docs/worker-dispatch-mechanics.md +11 -1
  141. package/package.json +8 -11
  142. package/skills/meta/clio-test/SKILL.md +20 -17
  143. package/skills/meta/clio-test/evals.md +3 -3
  144. package/skills/meta/clio-test/references/harness.md +35 -6
  145. package/skills/meta/clio-test/references/test-map.md +20 -10
  146. package/skills/registry.yaml +2 -2
  147. package/skills/skill-marketplace.json +1 -1
  148. package/src/cli/context-working-set.ts +513 -0
  149. package/src/cli/context.ts +8 -0
  150. package/src/cli/evidence.ts +20 -2
  151. package/src/cli/index.ts +4 -0
  152. package/src/cli/verifiers.ts +325 -0
  153. package/src/core/bash-exec.ts +39 -14
  154. package/src/core/bus-events.ts +19 -4
  155. package/src/core/config.ts +54 -0
  156. package/src/core/defaults.ts +50 -3
  157. package/src/core/verification-scripts.ts +6 -0
  158. package/src/domains/agents/builtins/verifier.md +3 -0
  159. package/src/domains/config/classify.ts +1 -0
  160. package/src/domains/context/working-set/contract.ts +161 -0
  161. package/src/domains/context/working-set/defaults.ts +28 -0
  162. package/src/domains/context/working-set/engine.ts +203 -0
  163. package/src/domains/context/working-set/fold.ts +62 -0
  164. package/src/domains/context/working-set/horizon.ts +38 -0
  165. package/src/domains/context/working-set/marker.ts +103 -0
  166. package/src/domains/context/working-set/path-index.ts +436 -0
  167. package/src/domains/context/working-set/payload.ts +152 -0
  168. package/src/domains/context/working-set/policies/age-horizon.ts +55 -0
  169. package/src/domains/context/working-set/policies/index.ts +21 -0
  170. package/src/domains/context/working-set/policies/structural.ts +160 -0
  171. package/src/domains/context/working-set/project.ts +132 -0
  172. package/src/domains/context/working-set/protect.ts +109 -0
  173. package/src/domains/context/working-set/recall.ts +177 -0
  174. package/src/domains/context/working-set/replay/controls.ts +112 -0
  175. package/src/domains/context/working-set/replay/load-clio.ts +199 -0
  176. package/src/domains/context/working-set/replay/metrics.ts +185 -0
  177. package/src/domains/context/working-set/replay/reference-graph.ts +79 -0
  178. package/src/domains/context/working-set/replay/report.ts +139 -0
  179. package/src/domains/context/working-set/replay/runner.ts +325 -0
  180. package/src/domains/context/working-set/replay/synthetic.ts +422 -0
  181. package/src/domains/context/working-set/replay/trace.ts +21 -0
  182. package/src/domains/context/working-set/visible.ts +54 -0
  183. package/src/domains/evidence/build.ts +112 -45
  184. package/src/domains/evidence/eval.ts +24 -7
  185. package/src/domains/evidence/index.ts +53 -0
  186. package/src/domains/evidence/ordering.ts +12 -0
  187. package/src/domains/evidence/run-trust.ts +221 -0
  188. package/src/domains/evidence/store.ts +46 -6
  189. package/src/domains/evidence/trust-status.ts +854 -0
  190. package/src/domains/evidence/types.ts +26 -0
  191. package/src/domains/middleware/memory-intervention.ts +3 -0
  192. package/src/domains/middleware/stalled-turn.ts +165 -4
  193. package/src/domains/safety/autonomy.ts +1 -1
  194. package/src/domains/safety/default-path-policy.ts +8 -0
  195. package/src/domains/safety/finish-contract.ts +4 -3
  196. package/src/domains/safety/policy-engine.ts +48 -6
  197. package/src/domains/session/compaction/compact.ts +23 -1
  198. package/src/domains/session/compaction/cut-point.ts +2 -0
  199. package/src/domains/session/compaction/tokens.ts +16 -1
  200. package/src/domains/session/context-ledger.ts +2 -0
  201. package/src/domains/session/entries.ts +107 -1
  202. package/src/domains/session/manager.ts +9 -2
  203. package/src/domains/session/migrations/index.ts +22 -3
  204. package/src/engine/acp/server.ts +3 -0
  205. package/src/engine/agent.ts +18 -1
  206. package/src/engine/session.ts +9 -3
  207. package/src/entry/orchestrator.ts +16 -4
  208. package/src/interactive/chat-loop-messages.ts +18 -6
  209. package/src/interactive/chat-panel.ts +17 -1
  210. package/src/interactive/chat-renderer.ts +30 -21
  211. package/src/interactive/context-meter.ts +10 -0
  212. package/src/interactive/context-overlay.ts +81 -6
  213. package/src/interactive/context-recall-command.ts +110 -0
  214. package/src/interactive/interactive-slash-runtime.ts +37 -1
  215. package/src/interactive/model-session-replay.ts +21 -0
  216. package/src/interactive/overlay-general-openers.ts +6 -0
  217. package/src/interactive/overlay-session-lifecycle.ts +8 -4
  218. package/src/interactive/renderers/tool-execution.ts +18 -2
  219. package/src/interactive/session-transcript.ts +2 -2
  220. package/src/interactive/slash-commands.ts +29 -2
  221. package/src/interactive/turn-context.ts +238 -88
  222. package/src/interactive/turn-middleware.ts +6 -6
  223. package/src/tools/agent-tools.ts +11 -4
  224. package/src/tools/bash.ts +144 -82
  225. package/src/tools/builtin-tool-catalog.ts +11 -5
  226. package/src/tools/context/index.ts +105 -3
  227. package/src/tools/context/surface.ts +3 -2
  228. package/src/tools/core-bootstrap.ts +21 -0
  229. package/src/tools/dispatch-runner.ts +9 -7
  230. package/src/tools/monitor.ts +28 -20
  231. package/src/tools/registry.ts +59 -7
  232. package/src/tools/result-disposition.ts +550 -0
  233. package/src/tools/result-shaping.ts +262 -19
  234. package/src/tools/safe-exec.ts +2 -0
  235. package/src/tools/verify/authoring.ts +1119 -0
  236. package/src/tools/verify/catalog.ts +346 -0
  237. package/src/tools/verify/index.ts +13 -3
  238. package/src/tools/verify/scripts.ts +135 -37
  239. package/src/tools/verify/surface.ts +9 -5
  240. package/src/tools/worker-evidence.ts +35 -12
  241. package/dist/chunk-J7CWMCQD.js +0 -255
  242. package/dist/chunk-T6YILFSB.js +0 -80
  243. package/dist/chunk-VAKQQHWR.js +0 -434
  244. package/dist/chunk-VPAYEGVX.js +0 -184
@@ -0,0 +1,434 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ filterEntriesToActivePath
4
+ } from "./chunk-W6GROXXM.js";
5
+ import {
6
+ init_esm_shims
7
+ } from "./chunk-3R73A4XB.js";
8
+
9
+ // src/domains/context/working-set/fold.ts
10
+ init_esm_shims();
11
+ function refKey(ref) {
12
+ return ref.entry;
13
+ }
14
+ function parseRefKey(key) {
15
+ const trimmed = key.trim();
16
+ if (trimmed.length === 0 || /\s/.test(trimmed)) return null;
17
+ return { entry: trimmed };
18
+ }
19
+ function foldWorkingSet(entries, activeLeafTurnId) {
20
+ const active = filterEntriesToActivePath(entries, activeLeafTurnId);
21
+ const evicted = /* @__PURE__ */ new Map();
22
+ let evictionEvents = 0;
23
+ let itemsEvicted = 0;
24
+ let recalls = 0;
25
+ let lastPolicyId = null;
26
+ let lastEvictionTurnId = null;
27
+ for (const entry of active) {
28
+ if (entry.kind === "contextEviction") {
29
+ evictionEvents += 1;
30
+ lastPolicyId = entry.policyId;
31
+ lastEvictionTurnId = entry.turnId;
32
+ for (const item of entry.evicted) {
33
+ itemsEvicted += 1;
34
+ evicted.set(refKey(item.ref), {
35
+ reason: item.reason,
36
+ marker: item.marker,
37
+ ...item.by === void 0 ? {} : { by: item.by },
38
+ tokensFreed: item.tokensFreed,
39
+ evictedAtTurnId: entry.turnId,
40
+ policyId: entry.policyId
41
+ });
42
+ }
43
+ continue;
44
+ }
45
+ if (entry.kind === "contextRecall") recalls += 1;
46
+ }
47
+ return { evicted, evictionEvents, itemsEvicted, recalls, lastPolicyId, lastEvictionTurnId };
48
+ }
49
+
50
+ // src/domains/context/working-set/path-index.ts
51
+ init_esm_shims();
52
+ import { basename, isAbsolute, join, normalize, resolve } from "node:path";
53
+
54
+ // src/domains/context/working-set/horizon.ts
55
+ init_esm_shims();
56
+ function isTurnStart(entry) {
57
+ if (entry.kind === "bashExecution" || entry.kind === "branchSummary") return true;
58
+ return entry.kind === "message" && entry.role === "user";
59
+ }
60
+ function protectionCutoffIndex(entries, protectLastTurns) {
61
+ const horizon = Math.max(1, Math.floor(protectLastTurns));
62
+ let seen = 0;
63
+ for (let i = entries.length - 1; i >= 0; i -= 1) {
64
+ const entry = entries[i];
65
+ if (!entry || !isTurnStart(entry)) continue;
66
+ seen += 1;
67
+ if (seen >= horizon) return i;
68
+ }
69
+ return 0;
70
+ }
71
+
72
+ // src/domains/context/working-set/payload.ts
73
+ init_esm_shims();
74
+ function isRecord(value) {
75
+ return !!value && typeof value === "object" && !Array.isArray(value);
76
+ }
77
+ function toolResultPayload(payload) {
78
+ const obj = isRecord(payload) ? payload : { result: payload };
79
+ const result = obj.result ?? obj.output ?? obj.out ?? obj.content ?? payload;
80
+ const toolName = typeof obj.toolName === "string" && obj.toolName || typeof obj.name === "string" && obj.name || typeof obj.tool === "string" && obj.tool || "tool";
81
+ return { obj, result, toolName };
82
+ }
83
+ function textFromContent(content) {
84
+ if (!Array.isArray(content)) return "";
85
+ const parts = [];
86
+ for (const block of content) {
87
+ if (!isRecord(block)) continue;
88
+ if (block.type === "text" && typeof block.text === "string") parts.push(block.text);
89
+ }
90
+ return parts.join("");
91
+ }
92
+ function stringifyBody(value) {
93
+ if (value === void 0 || value === null) return "";
94
+ if (typeof value === "string") return value;
95
+ try {
96
+ return JSON.stringify(value) ?? "";
97
+ } catch {
98
+ return String(value);
99
+ }
100
+ }
101
+ function toolResultText(result) {
102
+ if (typeof result === "string") return result;
103
+ if (!isRecord(result)) return stringifyBody(result);
104
+ const contentText = textFromContent(result.content);
105
+ if (contentText.length > 0) return contentText;
106
+ if (typeof result.text === "string") return result.text;
107
+ if (typeof result.output === "string") return result.output;
108
+ if (typeof result.message === "string") return result.message;
109
+ return stringifyBody(result);
110
+ }
111
+ function toolResultBodyTokens(payload) {
112
+ return Math.ceil(toolResultText(toolResultPayload(payload).result).length / 4);
113
+ }
114
+ function nestedRecord(parent, key) {
115
+ if (parent === null) return null;
116
+ const value = parent[key];
117
+ return isRecord(value) ? value : null;
118
+ }
119
+ function stringField(record, key) {
120
+ if (record === null) return void 0;
121
+ const value = record[key];
122
+ return typeof value === "string" && value.length > 0 ? value : void 0;
123
+ }
124
+ function offloadPathOf(payload) {
125
+ const details = nestedRecord(isRecord(payload.result) ? payload.result : null, "details");
126
+ return stringField(nestedRecord(details, "resultDisposition"), "offloadPath") ?? stringField(nestedRecord(details, "observation"), "offloadPath") ?? stringField(nestedRecord(details, "resultSize"), "offloadPath") ?? stringField(nestedRecord(payload.obj, "resultSummary"), "offloadPath");
127
+ }
128
+ function primaryPathOf(payload) {
129
+ const details = nestedRecord(isRecord(payload.result) ? payload.result : null, "details");
130
+ const paths = details?.paths;
131
+ if (!Array.isArray(paths) || paths.length !== 1) return void 0;
132
+ const first = paths[0];
133
+ return typeof first === "string" && first.length > 0 ? first : void 0;
134
+ }
135
+ function isThinkingBlock(block) {
136
+ return isRecord(block) && block.type === "thinking";
137
+ }
138
+ function hasThinking(payload) {
139
+ const obj = isRecord(payload) ? payload : null;
140
+ if (obj === null) return false;
141
+ if (Array.isArray(obj.content) && obj.content.some(isThinkingBlock)) return true;
142
+ return typeof obj.thinking === "string" && obj.thinking.length > 0;
143
+ }
144
+ function withoutThinkingBlocks(content) {
145
+ if (!Array.isArray(content)) return void 0;
146
+ return content.filter((block) => !isThinkingBlock(block));
147
+ }
148
+ function hasLegacyCompactionMarker(payload) {
149
+ if (!isRecord(payload)) return false;
150
+ if (isRecord(payload.contextCompaction)) return true;
151
+ if (isRecord(nestedRecord(payload, "resultSummary")?.contextCompaction)) return true;
152
+ const result = payload.result ?? payload.output ?? payload.out;
153
+ return isRecord(nestedRecord(isRecord(result) ? result : null, "details")?.contextCompaction);
154
+ }
155
+
156
+ // src/domains/context/working-set/path-index.ts
157
+ function rangeEnd(range) {
158
+ return range.limit === null ? Number.POSITIVE_INFINITY : range.offset + range.limit;
159
+ }
160
+ function isFullRead(range) {
161
+ return range !== null && range.offset === 0 && range.limit === null;
162
+ }
163
+ function covers(later, earlier) {
164
+ if (isFullRead(later)) return true;
165
+ if (later === null || earlier === null) return false;
166
+ return later.offset <= earlier.offset && rangeEnd(later) >= rangeEnd(earlier);
167
+ }
168
+ var LISTING_COMMANDS = /* @__PURE__ */ new Set(["ls", "find", "tree", "fd", "rg", "grep"]);
169
+ var MATCH_LINE_COMMANDS = /* @__PURE__ */ new Set(["rg", "grep"]);
170
+ var TOOL_OPS = /* @__PURE__ */ new Map([
171
+ ["read", "read"],
172
+ ["grep", "grep"],
173
+ ["find", "find"],
174
+ ["ls", "ls"],
175
+ ["code_nav", "code_nav"],
176
+ ["write", "write"],
177
+ ["edit", "edit"],
178
+ ["artifact", "write"],
179
+ ["bash", "bash"],
180
+ ["git", "bash"],
181
+ ["verify", "bash"]
182
+ ]);
183
+ var CODE_NAV_PATH_MODES = /* @__PURE__ */ new Set(["path", "outline", "deps", "dependents"]);
184
+ var LISTING_OPS = /* @__PURE__ */ new Set(["grep", "find", "ls", "bash"]);
185
+ function canonicalize(value, cwd) {
186
+ const trimmed = value.trim();
187
+ if (trimmed.length === 0) return "";
188
+ if (isAbsolute(trimmed)) return normalize(trimmed);
189
+ return cwd === null ? normalize(trimmed) : resolve(cwd, trimmed);
190
+ }
191
+ function usableCwd(options) {
192
+ const cwd = options?.cwd;
193
+ if (typeof cwd !== "string" || cwd.trim().length === 0 || !isAbsolute(cwd)) return null;
194
+ return normalize(cwd);
195
+ }
196
+ function stableStringify(value) {
197
+ if (value === null) return "null";
198
+ if (Array.isArray(value)) return `[${value.map(stableStringify).join(",")}]`;
199
+ if (isRecord(value)) {
200
+ const keys = Object.keys(value).sort();
201
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`).join(",")}}`;
202
+ }
203
+ if (value === void 0) return "null";
204
+ return JSON.stringify(value) ?? "null";
205
+ }
206
+ function callFacts(toolName, args) {
207
+ return { toolName, args, argsKey: args === void 0 ? "" : stableStringify(args) };
208
+ }
209
+ function stringField2(record, ...keys) {
210
+ if (record === null) return null;
211
+ for (const key of keys) {
212
+ const value = record[key];
213
+ if (typeof value === "string" && value.trim().length > 0) return value.trim();
214
+ }
215
+ return null;
216
+ }
217
+ function payloadRecord(payload) {
218
+ return isRecord(payload) ? payload : null;
219
+ }
220
+ function collectToolCalls(entries) {
221
+ const calls = /* @__PURE__ */ new Map();
222
+ for (const entry of entries) {
223
+ if (entry.kind !== "message") continue;
224
+ const obj = payloadRecord(entry.payload);
225
+ if (entry.role === "tool_call" && obj !== null) {
226
+ const id = stringField2(obj, "toolCallId", "tool_call_id", "id") ?? entry.turnId;
227
+ const name = stringField2(obj, "name", "toolName", "tool") ?? "tool";
228
+ calls.set(id, callFacts(name, obj.args ?? obj.arguments ?? obj.input));
229
+ continue;
230
+ }
231
+ if (entry.role !== "assistant" || obj === null || !Array.isArray(obj.content)) continue;
232
+ for (const block of obj.content) {
233
+ if (!isRecord(block) || block.type !== "toolCall") continue;
234
+ const id = stringField2(block, "id", "toolCallId") ?? entry.turnId;
235
+ const name = stringField2(block, "name", "toolName") ?? "tool";
236
+ calls.set(id, callFacts(name, block.arguments ?? block.args ?? block.input));
237
+ }
238
+ }
239
+ return calls;
240
+ }
241
+ function callPathsByToolCallId(entries) {
242
+ const paths = /* @__PURE__ */ new Map();
243
+ for (const [id, call] of collectToolCalls(entries)) {
244
+ const named = stringField2(isRecord(call.args) ? call.args : null, "path", "file_path", "filePath");
245
+ if (named !== null) paths.set(id, named);
246
+ }
247
+ return paths;
248
+ }
249
+ function observedPath(op, args, cwd) {
250
+ if (op === "bash") {
251
+ const explicit = stringField2(args, "cwd");
252
+ return explicit === null ? "" : canonicalize(explicit, cwd);
253
+ }
254
+ if (op === "code_nav") {
255
+ const mode = stringField2(args, "mode");
256
+ if (mode === null || !CODE_NAV_PATH_MODES.has(mode)) return "";
257
+ const query = stringField2(args, "query");
258
+ return query === null ? "" : canonicalize(query, cwd);
259
+ }
260
+ const named = stringField2(args, "path", "file_path", "filePath");
261
+ if (named !== null) return canonicalize(named, cwd);
262
+ if (op === "grep" || op === "find" || op === "ls") return cwd ?? ".";
263
+ return "";
264
+ }
265
+ function readRange(args) {
266
+ if (args === null) return { offset: 0, limit: null };
267
+ const tail = args.tail;
268
+ if (typeof tail === "number" && Number.isFinite(tail) && tail > 0) return null;
269
+ const rawOffset = args.offset;
270
+ const rawLimit = args.limit;
271
+ const offset = typeof rawOffset === "number" && Number.isFinite(rawOffset) && rawOffset > 1 ? Math.floor(rawOffset) - 1 : 0;
272
+ const limit = typeof rawLimit === "number" && Number.isFinite(rawLimit) && rawLimit > 0 ? Math.floor(rawLimit) : null;
273
+ return { offset, limit };
274
+ }
275
+ function looksLikeConcreteFilePath(line) {
276
+ const text = line.trim();
277
+ if (text.length === 0) return false;
278
+ if (text.startsWith("[")) return false;
279
+ if (text.endsWith("/")) return false;
280
+ return !/\s/.test(text);
281
+ }
282
+ function pathFromMatchLine(line) {
283
+ const match = /^([^\s:]+):\d+[:-]/.exec(line.trim());
284
+ return match?.[1] ?? null;
285
+ }
286
+ function surfacedPaths(op, args, text, root, cwd) {
287
+ const lines = text.split("\n");
288
+ const matchLines = op === "grep" || op === "bash" && isMatchLineCommand(args);
289
+ const out = [];
290
+ const seen = /* @__PURE__ */ new Set();
291
+ for (const line of lines) {
292
+ const raw = matchLines ? pathFromMatchLine(line) ?? candidateWholeLine(line) : candidateWholeLine(line);
293
+ if (raw === null) continue;
294
+ const resolved = resolveSurfaced(raw, root, cwd);
295
+ if (resolved.length === 0 || seen.has(resolved)) continue;
296
+ seen.add(resolved);
297
+ out.push(resolved);
298
+ }
299
+ return out;
300
+ }
301
+ function candidateWholeLine(line) {
302
+ return looksLikeConcreteFilePath(line) ? line.trim() : null;
303
+ }
304
+ function isMatchLineCommand(args) {
305
+ const verb = commandVerb(args);
306
+ return verb !== null && MATCH_LINE_COMMANDS.has(verb);
307
+ }
308
+ function commandVerb(args) {
309
+ const command = stringField2(args, "command");
310
+ if (command === null) return null;
311
+ const first = command.trimStart().split(/\s+/)[0];
312
+ return first === void 0 || first.length === 0 ? null : basename(first);
313
+ }
314
+ function resolveSurfaced(value, root, cwd) {
315
+ if (isAbsolute(value)) return normalize(value);
316
+ if (root.length === 0) return canonicalize(value, cwd);
317
+ if (basename(root) === value) return canonicalize(root, cwd);
318
+ return canonicalize(join(root, value), cwd);
319
+ }
320
+ function shouldParseSurfaced(op, args, isError) {
321
+ if (isError || !LISTING_OPS.has(op)) return false;
322
+ if (op !== "bash") return true;
323
+ const verb = commandVerb(args);
324
+ return verb !== null && LISTING_COMMANDS.has(verb);
325
+ }
326
+ function fileEntryOp(operation) {
327
+ if (operation === "read") return "read";
328
+ if (operation === "edit") return "edit";
329
+ return "write";
330
+ }
331
+ function toolResultObservation(entry, context) {
332
+ const obj = payloadRecord(entry.payload);
333
+ const toolCallId = stringField2(obj, "toolCallId", "tool_call_id", "id");
334
+ const call = toolCallId === null ? void 0 : context.calls.get(toolCallId);
335
+ const toolName = stringField2(obj, "toolName", "name", "tool") ?? call?.toolName ?? "tool";
336
+ const op = TOOL_OPS.get(toolName);
337
+ if (op === void 0) return null;
338
+ const args = call !== void 0 && isRecord(call.args) ? call.args : null;
339
+ const isError = obj?.isError === true || obj?.error === true;
340
+ const isBlocked = obj?.outcome === "blocked" || typeof obj?.blockReason === "string";
341
+ const path = observedPath(op, args, context.cwd);
342
+ const surfaced = shouldParseSurfaced(op, args, isError) ? surfacedPaths(op, args, toolResultText(obj?.result ?? entry.payload), path, context.cwd) : [];
343
+ return {
344
+ ref: { entry: entry.turnId },
345
+ toolCallId,
346
+ toolName,
347
+ op,
348
+ path,
349
+ range: op === "read" ? readRange(args) : null,
350
+ surfaced,
351
+ isError,
352
+ isBlocked,
353
+ turnIndex: context.turnIndex,
354
+ entryIndex: context.entryIndex,
355
+ argsKey: call?.argsKey ?? ""
356
+ };
357
+ }
358
+ function buildPathIndex(entries, options) {
359
+ const cwd = usableCwd(options);
360
+ const calls = collectToolCalls(entries);
361
+ const observations = [];
362
+ const byRef = /* @__PURE__ */ new Map();
363
+ const byPath = /* @__PURE__ */ new Map();
364
+ const turnIndexOf = /* @__PURE__ */ new Map();
365
+ let turnIndex = 0;
366
+ for (let entryIndex = 0; entryIndex < entries.length; entryIndex += 1) {
367
+ const entry = entries[entryIndex];
368
+ if (entry === void 0) continue;
369
+ turnIndexOf.set(entry.turnId, turnIndex);
370
+ let observation = null;
371
+ if (entry.kind === "fileEntry") {
372
+ observation = {
373
+ ref: { entry: entry.turnId },
374
+ toolCallId: null,
375
+ toolName: "fileEntry",
376
+ op: fileEntryOp(entry.operation),
377
+ path: canonicalize(entry.path, cwd),
378
+ range: null,
379
+ surfaced: [],
380
+ isError: false,
381
+ isBlocked: false,
382
+ turnIndex,
383
+ entryIndex,
384
+ argsKey: ""
385
+ };
386
+ } else if (entry.kind === "message" && entry.role === "tool_result") {
387
+ observation = toolResultObservation(entry, { entryIndex, turnIndex, cwd, calls });
388
+ }
389
+ if (observation !== null) {
390
+ observations.push(observation);
391
+ byRef.set(observation.ref.entry, observation);
392
+ if (observation.path.length > 0) {
393
+ const bucket = byPath.get(observation.path);
394
+ if (bucket === void 0) byPath.set(observation.path, [observation]);
395
+ else bucket.push(observation);
396
+ }
397
+ }
398
+ if (isTurnStart(entry)) turnIndex += 1;
399
+ }
400
+ return { observations, byRef, byPath, turnIndexOf, turnCount: turnIndex };
401
+ }
402
+
403
+ // src/domains/context/working-set/contract.ts
404
+ init_esm_shims();
405
+ var EMPTY_WORKING_SET_VIEW = Object.freeze({
406
+ evicted: /* @__PURE__ */ new Map(),
407
+ evictionEvents: 0,
408
+ itemsEvicted: 0,
409
+ recalls: 0,
410
+ lastPolicyId: null,
411
+ lastEvictionTurnId: null
412
+ });
413
+
414
+ export {
415
+ refKey,
416
+ parseRefKey,
417
+ foldWorkingSet,
418
+ EMPTY_WORKING_SET_VIEW,
419
+ isTurnStart,
420
+ protectionCutoffIndex,
421
+ isRecord,
422
+ toolResultPayload,
423
+ toolResultText,
424
+ toolResultBodyTokens,
425
+ offloadPathOf,
426
+ primaryPathOf,
427
+ hasThinking,
428
+ withoutThinkingBlocks,
429
+ hasLegacyCompactionMarker,
430
+ covers,
431
+ callPathsByToolCallId,
432
+ buildPathIndex
433
+ };
434
+ //# sourceMappingURL=chunk-TZSKNMZG.js.map
@@ -7,9 +7,13 @@ import {
7
7
  init_esm_shims();
8
8
  var VERIFICATION_SCRIPT_FAMILY_HINT = "test*/lint*/build*/typecheck*/check*/format*/ci*";
9
9
  var VERIFICATION_SCRIPT_PATTERN = /^(?:test|lint|build|typecheck|check|format|ci)(?:[:.-].*)?$/;
10
+ var PROJECT_VERIFIER_CHECK_ID_PATTERN = /^[a-z0-9][a-z0-9._:-]*$/;
10
11
  function isVerificationScriptName(name) {
11
12
  return VERIFICATION_SCRIPT_PATTERN.test(name);
12
13
  }
14
+ function isProjectVerifierCheckId(name) {
15
+ return PROJECT_VERIFIER_CHECK_ID_PATTERN.test(name);
16
+ }
13
17
  function declaredVerificationScripts(scripts) {
14
18
  return Object.keys(scripts).filter((name) => isVerificationScriptName(name)).sort((a, b) => a.localeCompare(b));
15
19
  }
@@ -17,6 +21,7 @@ function declaredVerificationScripts(scripts) {
17
21
  export {
18
22
  VERIFICATION_SCRIPT_FAMILY_HINT,
19
23
  isVerificationScriptName,
24
+ isProjectVerifierCheckId,
20
25
  declaredVerificationScripts
21
26
  };
22
- //# sourceMappingURL=chunk-7MNJORFF.js.map
27
+ //# sourceMappingURL=chunk-UL3WSD3F.js.map
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-5WIGXA4T.js";
5
5
  import {
6
6
  loadMemoryRecordsSync
7
- } from "./chunk-V6RTAOC2.js";
7
+ } from "./chunk-BRXQQJFP.js";
8
8
  import {
9
9
  sha256
10
- } from "./chunk-SRDMMSEP.js";
10
+ } from "./chunk-QQL5RT5M.js";
11
11
  import {
12
12
  WIKI_INDEX,
13
13
  WIKI_PLAN_FILE,
@@ -61,12 +61,12 @@ import {
61
61
  import {
62
62
  enumerateWorkspaceFiles
63
63
  } from "./chunk-EKMEHE4H.js";
64
- import {
65
- ceilChars
66
- } from "./chunk-LZSJBIVT.js";
67
64
  import {
68
65
  INTEROP_AGENT_KINDS
69
66
  } from "./chunk-IHXBNWMM.js";
67
+ import {
68
+ ceilChars
69
+ } from "./chunk-BPGS2WCQ.js";
70
70
  import {
71
71
  require_dist
72
72
  } from "./chunk-APJ265NV.js";
@@ -76,7 +76,7 @@ import {
76
76
  } from "./chunk-BNAZZHFG.js";
77
77
  import {
78
78
  BusChannels
79
- } from "./chunk-OQ33BKR3.js";
79
+ } from "./chunk-TTNYS3EA.js";
80
80
  import {
81
81
  classifyProjectPreload
82
82
  } from "./chunk-JVCV3ICN.js";
@@ -4172,4 +4172,4 @@ export {
4172
4172
  buildWikiPlanPrompt,
4173
4173
  buildWikiPagePrompt
4174
4174
  };
4175
- //# sourceMappingURL=chunk-PIWWS5BL.js.map
4175
+ //# sourceMappingURL=chunk-UZHIZC5S.js.map
@@ -9,24 +9,24 @@ import {
9
9
  detectInteropAgents,
10
10
  fingerprintNativeRuntime,
11
11
  resolveOnPath
12
- } from "./chunk-2TLUCQVG.js";
12
+ } from "./chunk-RD5U66HV.js";
13
13
  import {
14
14
  initializeClioHome
15
- } from "./chunk-BMEMKKIT.js";
15
+ } from "./chunk-KOHPCX4K.js";
16
16
  import {
17
17
  formatSettingsIssues,
18
18
  readSettings,
19
19
  validateSettingsFile
20
- } from "./chunk-A3CYT5EX.js";
20
+ } from "./chunk-AD2SYQYC.js";
21
21
  import {
22
22
  openAuthStorage
23
23
  } from "./chunk-4VP4KH3K.js";
24
- import {
25
- readSessionFileEntries
26
- } from "./chunk-M6SHUN7Q.js";
27
24
  import {
28
25
  interopAgentKind
29
26
  } from "./chunk-IHXBNWMM.js";
27
+ import {
28
+ readSessionFileEntries
29
+ } from "./chunk-FO5ZOVUY.js";
30
30
  import {
31
31
  clioStatePath,
32
32
  resolveClioDirs
@@ -337,7 +337,7 @@ async function runDoctorFleetChecks(projectRoot = process.cwd()) {
337
337
  }
338
338
  const nodes = settings.fleet?.nodes ?? [];
339
339
  if (nodes.length === 0) return [];
340
- const { recordFleetPreflight, runFleetNodePreflight } = await import("./fleet-preflight-DDN536IT.js");
340
+ const { recordFleetPreflight, runFleetNodePreflight } = await import("./fleet-preflight-AQNAH644.js");
341
341
  const targets = (settings.targets ?? []).map((target) => ({
342
342
  id: target.id,
343
343
  runtimeId: target.runtime,
@@ -437,4 +437,4 @@ export {
437
437
  runDoctorInteropChecks,
438
438
  runDoctorRuntimeChecks
439
439
  };
440
- //# sourceMappingURL=chunk-UFIIWP2H.js.map
440
+ //# sourceMappingURL=chunk-VAWWTKDP.js.map