@hassangameryt/freeflow 0.2.0 → 0.4.0

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 (312) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude-plugin/marketplace.json +4 -4
  3. package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +5 -2
  4. package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +8 -9
  5. package/README.md +194 -127
  6. package/assets/feedback-loop.png +0 -0
  7. package/assets/freeflow-plugin-icon.png +0 -0
  8. package/assets/freeflow_workflow_map.png +0 -0
  9. package/assets/workflow.png +0 -0
  10. package/command-surface.json +129 -0
  11. package/hooks/freeflow-runtime-context.mjs +419 -0
  12. package/hooks/tests/check-runtime-context-hook.sh +223 -0
  13. package/package.json +41 -22
  14. package/pi-extension/dist/index.js +269 -0
  15. package/pi-extension/dist/integrations/mcp-config.js +29 -0
  16. package/pi-extension/dist/output-router/host-producer-identification.js +232 -0
  17. package/pi-extension/dist/output-router/native-safety-net.js +216 -0
  18. package/pi-extension/dist/output-router/observed-tool-routing.js +122 -0
  19. package/pi-extension/dist/output-router/renderers.js +1023 -0
  20. package/pi-extension/dist/output-router/router-tools.js +554 -0
  21. package/pi-extension/dist/output-router/schemas.js +383 -0
  22. package/pi-extension/dist/output-router/status.js +744 -0
  23. package/pi-extension/dist/output-router/utils.js +502 -0
  24. package/pi-extension/dist/runtime/runtime-context.js +798 -0
  25. package/pi-extension/dist/settings/settings-tui.js +314 -0
  26. package/pi-extension/dist/settings/settings-ui.js +1487 -0
  27. package/pi-extension/freeflow/index.js +1 -0
  28. package/pi-extension/src/index.ts +295 -0
  29. package/pi-extension/src/integrations/mcp-config.ts +32 -0
  30. package/pi-extension/src/output-router/host-producer-identification.ts +256 -0
  31. package/pi-extension/src/output-router/native-safety-net.ts +248 -0
  32. package/pi-extension/src/output-router/observed-tool-routing.ts +134 -0
  33. package/pi-extension/src/output-router/renderers.ts +1108 -0
  34. package/pi-extension/src/output-router/router-tools.ts +579 -0
  35. package/pi-extension/src/output-router/schemas.ts +387 -0
  36. package/pi-extension/src/output-router/status.ts +791 -0
  37. package/pi-extension/src/output-router/utils.ts +554 -0
  38. package/pi-extension/src/runtime/runtime-context.ts +895 -0
  39. package/pi-extension/src/settings/settings-tui.ts +408 -0
  40. package/pi-extension/src/settings/settings-ui.ts +1730 -0
  41. package/pi-extension/tests/integration/pi-extension.test.js +4018 -0
  42. package/pi-extension/tests/output-router/observed-producers.test.js +132 -0
  43. package/pi-extension/tests/output-router/search.test.js +722 -0
  44. package/pi-extension/tests/settings/settings-tui.test.js +243 -0
  45. package/pi-extension/tsconfig.json +16 -0
  46. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmark-harness.d.ts +16 -13
  47. package/router/dist/benchmarks/benchmark-harness.js +92 -0
  48. package/router/dist/benchmarks/benchmarks.d.ts +109 -0
  49. package/router/dist/benchmarks/benchmarks.js +979 -0
  50. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +95 -0
  51. package/router/dist/benchmarks/codex-qa-benchmarks.js +500 -0
  52. package/router/dist/benchmarks/command-benchmarks.d.ts +143 -0
  53. package/router/dist/benchmarks/command-benchmarks.js +698 -0
  54. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +82 -0
  55. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +773 -0
  56. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +132 -0
  57. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1380 -0
  58. package/router/dist/benchmarks/context-saving-baseline.d.ts +60 -0
  59. package/router/dist/benchmarks/context-saving-baseline.js +470 -0
  60. package/router/dist/benchmarks/index-benchmarks.d.ts +103 -0
  61. package/router/dist/benchmarks/index-benchmarks.js +862 -0
  62. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +101 -0
  63. package/router/dist/benchmarks/storage-policy-benchmarks.js +618 -0
  64. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +56 -0
  65. package/router/dist/benchmarks/vault-index-benchmarks.js +322 -0
  66. package/router/dist/config/config.d.ts +103 -0
  67. package/router/dist/config/config.js +632 -0
  68. package/{plugins/freeflow/router/dist → router/dist/config}/router-contract.d.ts +2 -2
  69. package/router/dist/config/router-contract.js +54 -0
  70. package/{plugins/freeflow/router/dist → router/dist/config}/schema.d.ts +19 -10
  71. package/router/dist/config/schema.js +648 -0
  72. package/router/dist/config/types.d.ts +573 -0
  73. package/router/dist/config/types.js +41 -0
  74. package/router/dist/evidence/bounded-evidence.d.ts +40 -0
  75. package/router/dist/evidence/bounded-evidence.js +323 -0
  76. package/router/dist/evidence/evidence-range-selector.d.ts +24 -0
  77. package/router/dist/evidence/evidence-range-selector.js +232 -0
  78. package/router/dist/evidence/evidence-search.d.ts +27 -0
  79. package/router/dist/evidence/evidence-search.js +490 -0
  80. package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence.d.ts +18 -18
  81. package/router/dist/evidence/evidence.js +200 -0
  82. package/router/dist/evidence/failure-contracts.d.ts +37 -0
  83. package/router/dist/evidence/failure-contracts.js +166 -0
  84. package/router/dist/evidence/line-ranges.d.ts +24 -0
  85. package/router/dist/evidence/line-ranges.js +22 -0
  86. package/router/dist/experiments/local-index.d.ts +64 -0
  87. package/router/dist/experiments/local-index.js +581 -0
  88. package/router/dist/index.d.ts +30 -0
  89. package/router/dist/index.js +32 -0
  90. package/router/dist/local/local-traversal.d.ts +18 -0
  91. package/router/dist/local/local-traversal.js +334 -0
  92. package/router/dist/processing/engine.d.ts +132 -0
  93. package/router/dist/processing/engine.js +533 -0
  94. package/router/dist/processing/reducers.d.ts +280 -0
  95. package/router/dist/processing/reducers.js +1673 -0
  96. package/router/dist/processing/renderers.d.ts +31 -0
  97. package/router/dist/processing/renderers.js +195 -0
  98. package/router/dist/processing/scripts.d.ts +91 -0
  99. package/router/dist/processing/scripts.js +386 -0
  100. package/{plugins/freeflow/router/dist → router/dist/repo}/repo-traversal.d.ts +9 -9
  101. package/router/dist/repo/repo-traversal.js +245 -0
  102. package/router/dist/routing/observed-reducers.d.ts +41 -0
  103. package/router/dist/routing/observed-reducers.js +661 -0
  104. package/router/dist/routing/observed-routing.d.ts +26 -0
  105. package/router/dist/routing/observed-routing.js +378 -0
  106. package/router/dist/routing/parsers.d.ts +16 -0
  107. package/router/dist/routing/parsers.js +521 -0
  108. package/router/dist/routing/run-filters.d.ts +60 -0
  109. package/router/dist/routing/run-filters.js +238 -0
  110. package/router/dist/routing/run-reducers.d.ts +49 -0
  111. package/router/dist/routing/run-reducers.js +122 -0
  112. package/router/dist/sandbox/adapter-roots.d.ts +46 -0
  113. package/router/dist/sandbox/adapter-roots.js +66 -0
  114. package/router/dist/sandbox/eryx-python-adapter.d.ts +13 -0
  115. package/router/dist/sandbox/eryx-python-adapter.js +868 -0
  116. package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
  117. package/router/dist/sandbox/jq-wasm-adapter.js +429 -0
  118. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +13 -0
  119. package/router/dist/sandbox/quickjs-wasi-adapter.js +384 -0
  120. package/router/dist/sandbox/script-sandbox.d.ts +134 -0
  121. package/router/dist/sandbox/script-sandbox.js +337 -0
  122. package/router/dist/setup/script-transform-adapters.d.ts +32 -0
  123. package/router/dist/setup/script-transform-adapters.js +278 -0
  124. package/router/dist/tools/batch.d.ts +33 -0
  125. package/router/dist/tools/batch.js +586 -0
  126. package/router/dist/tools/run.d.ts +62 -0
  127. package/router/dist/tools/run.js +1304 -0
  128. package/router/dist/tools/search.d.ts +66 -0
  129. package/router/dist/tools/search.js +1364 -0
  130. package/router/dist/transform/engine.d.ts +168 -0
  131. package/router/dist/transform/engine.js +2072 -0
  132. package/router/dist/vault/vault-index.d.ts +125 -0
  133. package/router/dist/vault/vault-index.js +416 -0
  134. package/router/dist/vault/vault.d.ts +138 -0
  135. package/router/dist/vault/vault.js +630 -0
  136. package/runtime/interaction-contract.md +16 -0
  137. package/skills/bypass/SKILL.md +82 -0
  138. package/skills/commit-work/SKILL.md +106 -0
  139. package/skills/commit-work/references/staging-decisions.md +73 -0
  140. package/skills/decision-gate/SKILL.md +48 -0
  141. package/skills/design-for-depth/SKILL.md +106 -0
  142. package/skills/design-for-depth/references/design-pressure-signals.md +314 -0
  143. package/skills/design-for-depth/references/interface-design-loop.md +156 -0
  144. package/skills/design-for-depth/references/software-design-philosophy.md +248 -0
  145. package/skills/diagnose-failure/SKILL.md +105 -0
  146. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +36 -0
  147. package/skills/diagnose-failure/references/flaky-and-performance.md +43 -0
  148. package/skills/discuss/SKILL.md +121 -0
  149. package/skills/discuss/references/checkpoints.md +66 -0
  150. package/skills/evaluate-skill/SKILL.md +105 -0
  151. package/skills/evaluate-skill/references/definition-schema.md +345 -0
  152. package/skills/evaluate-skill/references/evaluation-design.md +86 -0
  153. package/skills/evaluate-skill/references/execution-and-evidence.md +85 -0
  154. package/skills/evaluate-skill/references/review-and-revision.md +51 -0
  155. package/skills/evaluate-skill/scripts/lib/definitions.mjs +296 -0
  156. package/skills/evaluate-skill/scripts/lib/evidence.mjs +46 -0
  157. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +60 -0
  158. package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +148 -0
  159. package/skills/evaluate-skill/scripts/lib/grade-support.mjs +126 -0
  160. package/skills/evaluate-skill/scripts/lib/grade-workspace.mjs +192 -0
  161. package/skills/evaluate-skill/scripts/lib/grade.mjs +56 -0
  162. package/skills/evaluate-skill/scripts/lib/pi.mjs +489 -0
  163. package/skills/evaluate-skill/scripts/lib/process.mjs +79 -0
  164. package/skills/evaluate-skill/scripts/lib/rpc.mjs +444 -0
  165. package/skills/evaluate-skill/scripts/lib/runner.mjs +346 -0
  166. package/skills/evaluate-skill/scripts/lib/sandbox.mjs +409 -0
  167. package/skills/evaluate-skill/scripts/lib/view.mjs +337 -0
  168. package/skills/evaluate-skill/scripts/pi-guard.mjs +164 -0
  169. package/skills/evaluate-skill/scripts/skill-eval.mjs +101 -0
  170. package/skills/execute-work/SKILL.md +99 -0
  171. package/skills/execute-work/references/code-practices.md +78 -0
  172. package/skills/execute-work/references/execution-loop.md +77 -0
  173. package/skills/finish-branch/SKILL.md +117 -0
  174. package/skills/finish-branch/references/integration-options.md +80 -0
  175. package/skills/handoff/SKILL.md +92 -0
  176. package/skills/handoff/references/templates.md +141 -0
  177. package/skills/launch-work/SKILL.md +116 -0
  178. package/skills/launch-work/references/launch-readiness.md +85 -0
  179. package/skills/migration-work/SKILL.md +115 -0
  180. package/skills/migration-work/references/migration-lifecycle.md +82 -0
  181. package/skills/mode-contract/SKILL.md +82 -0
  182. package/skills/output-router/SKILL.md +206 -0
  183. package/skills/output-router/references/safety-policy.md +40 -0
  184. package/skills/release-work/SKILL.md +118 -0
  185. package/skills/release-work/references/release-evidence.md +78 -0
  186. package/skills/review-artifact/SKILL.md +126 -0
  187. package/skills/review-artifact/references/reviewer-prompt.md +148 -0
  188. package/skills/review-work/SKILL.md +126 -0
  189. package/skills/review-work/references/reviewer-prompt.md +134 -0
  190. package/skills/review-work/references/security-risk-lens.md +67 -0
  191. package/skills/setup-freeflow/SKILL.md +98 -0
  192. package/skills/setup-freeflow/references/activation-contract.md +120 -0
  193. package/skills/setup-freeflow/references/host-setup.md +72 -0
  194. package/skills/setup-freeflow/references/output-router-setup.md +110 -0
  195. package/skills/simplify-code/SKILL.md +80 -0
  196. package/skills/simplify-code/references/simplification-patterns.md +70 -0
  197. package/skills/tdd/SKILL.md +96 -0
  198. package/skills/tdd/references/test-design.md +96 -0
  199. package/skills/track-work/SKILL.md +84 -0
  200. package/skills/track-work/references/working-record-schema.md +378 -0
  201. package/skills/verify-work/SKILL.md +85 -0
  202. package/skills/verify-work/references/browser-runtime-evidence.md +55 -0
  203. package/skills/verify-work/references/integration-evidence.md +51 -0
  204. package/skills/verify-work/references/performance-evidence.md +57 -0
  205. package/skills/workflow/SKILL.md +91 -0
  206. package/skills/workflow/references/domain-skill-composition.md +57 -0
  207. package/skills/workflow/references/workflow-loop.md +92 -0
  208. package/skills/write-plan/SKILL.md +123 -0
  209. package/skills/write-plan/references/plan-shapes.md +156 -0
  210. package/skills/write-skill/SKILL.md +119 -0
  211. package/skills/write-skill/references/activation-boundaries.md +62 -0
  212. package/skills/write-skill/references/agent-first-instructions.md +87 -0
  213. package/skills/write-skill/references/progressive-disclosure.md +63 -0
  214. package/skills/write-skill/scripts/lib/skill-author.mjs +653 -0
  215. package/skills/write-skill/scripts/skill-author.mjs +104 -0
  216. package/skills/write-spec/SKILL.md +104 -0
  217. package/skills/write-spec/references/artifact-standards.md +86 -0
  218. package/skills/write-spec/references/decision-records.md +77 -0
  219. package/skills/write-spec/references/spec-shapes.md +128 -0
  220. package/plugins/freeflow/command-surface.json +0 -77
  221. package/plugins/freeflow/docs/README.md +0 -40
  222. package/plugins/freeflow/docs/adr/0001-three-modes.md +0 -27
  223. package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
  224. package/plugins/freeflow/docs/adr/0003-release-boundary.md +0 -21
  225. package/plugins/freeflow/docs/adr/0004-research-replaces-shallow-discovery-skills.md +0 -26
  226. package/plugins/freeflow/docs/adr/README.md +0 -8
  227. package/plugins/freeflow/docs/architecture.md +0 -86
  228. package/plugins/freeflow/docs/output-router.md +0 -212
  229. package/plugins/freeflow/docs/release-evidence.md +0 -69
  230. package/plugins/freeflow/docs/skills.md +0 -43
  231. package/plugins/freeflow/docs/workflow.md +0 -57
  232. package/plugins/freeflow/hooks/freeflow-runtime-context.mjs +0 -257
  233. package/plugins/freeflow/pi-extension/index.js +0 -1176
  234. package/plugins/freeflow/router/dist/benchmark-harness.js +0 -92
  235. package/plugins/freeflow/router/dist/benchmarks.d.ts +0 -102
  236. package/plugins/freeflow/router/dist/benchmarks.js +0 -880
  237. package/plugins/freeflow/router/dist/bounded-evidence.d.ts +0 -40
  238. package/plugins/freeflow/router/dist/bounded-evidence.js +0 -310
  239. package/plugins/freeflow/router/dist/codex-qa-benchmarks.d.ts +0 -91
  240. package/plugins/freeflow/router/dist/codex-qa-benchmarks.js +0 -461
  241. package/plugins/freeflow/router/dist/command-benchmarks.d.ts +0 -128
  242. package/plugins/freeflow/router/dist/command-benchmarks.js +0 -652
  243. package/plugins/freeflow/router/dist/config.d.ts +0 -22
  244. package/plugins/freeflow/router/dist/config.js +0 -114
  245. package/plugins/freeflow/router/dist/evidence-range-selector.d.ts +0 -22
  246. package/plugins/freeflow/router/dist/evidence-range-selector.js +0 -180
  247. package/plugins/freeflow/router/dist/evidence-search.d.ts +0 -25
  248. package/plugins/freeflow/router/dist/evidence-search.js +0 -450
  249. package/plugins/freeflow/router/dist/evidence.js +0 -196
  250. package/plugins/freeflow/router/dist/experimental-local-index.d.ts +0 -1
  251. package/plugins/freeflow/router/dist/experimental-local-index.js +0 -1
  252. package/plugins/freeflow/router/dist/experiments/local-index.d.ts +0 -58
  253. package/plugins/freeflow/router/dist/experiments/local-index.js +0 -562
  254. package/plugins/freeflow/router/dist/index-benchmarks.d.ts +0 -84
  255. package/plugins/freeflow/router/dist/index-benchmarks.js +0 -458
  256. package/plugins/freeflow/router/dist/index.d.ts +0 -12
  257. package/plugins/freeflow/router/dist/index.js +0 -12
  258. package/plugins/freeflow/router/dist/line-ranges.d.ts +0 -22
  259. package/plugins/freeflow/router/dist/line-ranges.js +0 -22
  260. package/plugins/freeflow/router/dist/parsers.d.ts +0 -16
  261. package/plugins/freeflow/router/dist/parsers.js +0 -473
  262. package/plugins/freeflow/router/dist/repo-traversal.js +0 -242
  263. package/plugins/freeflow/router/dist/retrieve.d.ts +0 -33
  264. package/plugins/freeflow/router/dist/retrieve.js +0 -855
  265. package/plugins/freeflow/router/dist/router-contract.js +0 -54
  266. package/plugins/freeflow/router/dist/run.d.ts +0 -26
  267. package/plugins/freeflow/router/dist/run.js +0 -356
  268. package/plugins/freeflow/router/dist/schema.js +0 -354
  269. package/plugins/freeflow/router/dist/types.d.ts +0 -234
  270. package/plugins/freeflow/router/dist/types.js +0 -9
  271. package/plugins/freeflow/router/dist/vault.d.ts +0 -80
  272. package/plugins/freeflow/router/dist/vault.js +0 -484
  273. package/plugins/freeflow/skills/bypass/SKILL.md +0 -68
  274. package/plugins/freeflow/skills/commit-work/SKILL.md +0 -98
  275. package/plugins/freeflow/skills/commit-work/references/staging-decisions.md +0 -51
  276. package/plugins/freeflow/skills/diagnose-failure/SKILL.md +0 -95
  277. package/plugins/freeflow/skills/diagnose-failure/references/feedback-loop-catalog.md +0 -25
  278. package/plugins/freeflow/skills/diagnose-failure/references/flaky-and-performance.md +0 -31
  279. package/plugins/freeflow/skills/evaluate-skill/SKILL.md +0 -96
  280. package/plugins/freeflow/skills/evaluate-skill/references/eval-patterns.md +0 -41
  281. package/plugins/freeflow/skills/evaluate-skill/references/grading-priority.md +0 -33
  282. package/plugins/freeflow/skills/execute-plan/SKILL.md +0 -132
  283. package/plugins/freeflow/skills/execute-plan/references/execution-map.md +0 -122
  284. package/plugins/freeflow/skills/handoff/SKILL.md +0 -66
  285. package/plugins/freeflow/skills/handoff/references/templates.md +0 -64
  286. package/plugins/freeflow/skills/interview-gate/SKILL.md +0 -90
  287. package/plugins/freeflow/skills/mode-contract/SKILL.md +0 -79
  288. package/plugins/freeflow/skills/output-router/SKILL.md +0 -69
  289. package/plugins/freeflow/skills/output-router/references/safety-policy.md +0 -33
  290. package/plugins/freeflow/skills/research/ARTIFACT-DESTINATIONS.md +0 -58
  291. package/plugins/freeflow/skills/research/CHECKPOINTS.md +0 -74
  292. package/plugins/freeflow/skills/research/LANGUAGE.md +0 -61
  293. package/plugins/freeflow/skills/research/SKILL.md +0 -128
  294. package/plugins/freeflow/skills/review-artifact/SKILL.md +0 -115
  295. package/plugins/freeflow/skills/review-artifact/references/reviewer-prompt.md +0 -56
  296. package/plugins/freeflow/skills/review-work/SKILL.md +0 -96
  297. package/plugins/freeflow/skills/review-work/references/reviewer-prompt.md +0 -97
  298. package/plugins/freeflow/skills/setup-freeflow/SKILL.md +0 -94
  299. package/plugins/freeflow/skills/setup-freeflow/references/activation-contract.md +0 -99
  300. package/plugins/freeflow/skills/setup-freeflow/references/host-setup.md +0 -35
  301. package/plugins/freeflow/skills/setup-freeflow/references/output-router-setup.md +0 -52
  302. package/plugins/freeflow/skills/verify-work/SKILL.md +0 -62
  303. package/plugins/freeflow/skills/workflow/SKILL.md +0 -95
  304. package/plugins/freeflow/skills/workflow/references/workflow-map.md +0 -102
  305. package/plugins/freeflow/skills/write-plan/SKILL.md +0 -88
  306. package/plugins/freeflow/skills/write-plan/references/plan-shapes.md +0 -70
  307. package/plugins/freeflow/skills/write-skill/SKILL.md +0 -88
  308. package/plugins/freeflow/skills/write-spec/SKILL.md +0 -90
  309. package/plugins/freeflow/skills/write-spec/references/artifact-standards.md +0 -67
  310. package/plugins/freeflow/skills/write-spec/references/spec-shapes.md +0 -69
  311. /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
  312. /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
@@ -1,354 +0,0 @@
1
- import { EXECUTION_STATUSES, EVIDENCE_WINDOWS, OUTPUT_STREAMS, PRESERVE_MODES, RETRIEVAL_ACTIONS, ROUTE_KINDS, ROUTING_STATUSES, TOOL_STATUSES, } from "./types.js";
2
- import { isValidPostToolRoutingMode, validateNormalizedRouterHints, validatePositiveIntegerThreshold, validateVaultRetentionPolicy, } from "./router-contract.js";
3
- function isRecord(value) {
4
- return typeof value === "object" && value !== null && !Array.isArray(value);
5
- }
6
- function success(value) {
7
- return { ok: true, value };
8
- }
9
- function failure(issues) {
10
- return { ok: false, issues };
11
- }
12
- function isOneOf(value, allowed) {
13
- return typeof value === "string" && allowed.includes(value);
14
- }
15
- function requireString(record, key, path, issues) {
16
- if (typeof record[key] !== "string" || record[key] === "") {
17
- issues.push({ path: `${path}.${key}`, message: "Expected a non-empty string." });
18
- }
19
- }
20
- function requireBoolean(record, key, path, issues) {
21
- if (typeof record[key] !== "boolean") {
22
- issues.push({ path: `${path}.${key}`, message: "Expected a boolean." });
23
- }
24
- }
25
- function requireNonNegativeNumber(record, key, path, issues) {
26
- if (typeof record[key] !== "number" || !Number.isFinite(record[key]) || record[key] < 0) {
27
- issues.push({ path: `${path}.${key}`, message: "Expected a non-negative finite number." });
28
- }
29
- }
30
- function requireInteger(record, key, path, issues) {
31
- if (!Number.isInteger(record[key])) {
32
- issues.push({ path: `${path}.${key}`, message: "Expected an integer." });
33
- }
34
- }
35
- function requireNullableInteger(record, key, path, issues) {
36
- if (record[key] !== null && !Number.isInteger(record[key])) {
37
- issues.push({ path: `${path}.${key}`, message: "Expected an integer or null." });
38
- }
39
- }
40
- function validateSourceRef(value, path, issues) {
41
- if (!isRecord(value)) {
42
- issues.push({ path, message: "Expected a source object." });
43
- return;
44
- }
45
- if (value.kind === "repo") {
46
- requireString(value, "path", path, issues);
47
- return;
48
- }
49
- if (value.kind === "vault") {
50
- requireString(value, "outputId", path, issues);
51
- if (value.stream !== undefined && !isOneOf(value.stream, OUTPUT_STREAMS)) {
52
- issues.push({ path: `${path}.stream`, message: "Expected a known output stream." });
53
- }
54
- return;
55
- }
56
- if (value.kind === "native") {
57
- requireString(value, "tool", path, issues);
58
- requireString(value, "outputId", path, issues);
59
- return;
60
- }
61
- issues.push({ path: `${path}.kind`, message: "Expected source kind repo, vault, or native." });
62
- }
63
- function validateParserMetadata(value, path, issues) {
64
- if (value === undefined) {
65
- return;
66
- }
67
- if (!isRecord(value)) {
68
- issues.push({ path, message: "Expected parser metadata object." });
69
- return;
70
- }
71
- requireString(value, "name", path, issues);
72
- if (typeof value.confidence !== "number" || !Number.isFinite(value.confidence) || value.confidence < 0 || value.confidence > 1) {
73
- issues.push({ path: `${path}.confidence`, message: "Expected confidence between 0 and 1." });
74
- }
75
- if (value.fidelity !== "exact" && value.fidelity !== "lossy") {
76
- issues.push({ path: `${path}.fidelity`, message: "Expected parser fidelity exact or lossy." });
77
- }
78
- requireBoolean(value, "compressed", path, issues);
79
- if (value.counts !== undefined) {
80
- if (!isRecord(value.counts)) {
81
- issues.push({ path: `${path}.counts`, message: "Expected parser counts object." });
82
- }
83
- else {
84
- for (const [key, count] of Object.entries(value.counts)) {
85
- if (typeof count !== "number" || !Number.isFinite(count)) {
86
- issues.push({ path: `${path}.counts.${key}`, message: "Expected finite numeric parser count." });
87
- }
88
- }
89
- }
90
- }
91
- if (value.references !== undefined) {
92
- if (!Array.isArray(value.references)) {
93
- issues.push({ path: `${path}.references`, message: "Expected parser references array." });
94
- }
95
- else {
96
- value.references.forEach((reference, index) => validateParserReference(reference, `${path}.references[${index}]`, issues));
97
- }
98
- }
99
- }
100
- function validateParserReference(value, path, issues) {
101
- if (!isRecord(value)) {
102
- issues.push({ path, message: "Expected parser reference object." });
103
- return;
104
- }
105
- requireString(value, "path", path, issues);
106
- requireString(value, "message", path, issues);
107
- if (value.line !== undefined) {
108
- if (typeof value.line !== "number" || !Number.isInteger(value.line) || value.line <= 0) {
109
- issues.push({ path: `${path}.line`, message: "Expected a positive integer line." });
110
- }
111
- }
112
- if (value.column !== undefined) {
113
- if (typeof value.column !== "number" || !Number.isInteger(value.column) || value.column <= 0) {
114
- issues.push({ path: `${path}.column`, message: "Expected a positive integer column." });
115
- }
116
- }
117
- if (value.code !== undefined && typeof value.code !== "string") {
118
- issues.push({ path: `${path}.code`, message: "Expected parser reference code string." });
119
- }
120
- if (value.severity !== undefined && value.severity !== "error" && value.severity !== "warning" && value.severity !== "info") {
121
- issues.push({ path: `${path}.severity`, message: "Expected parser reference severity error, warning, or info." });
122
- }
123
- }
124
- function validateImportantLines(value, path, issues) {
125
- if (value === undefined) {
126
- return;
127
- }
128
- if (!Array.isArray(value)) {
129
- issues.push({ path, message: "Expected importantLines array." });
130
- return;
131
- }
132
- value.forEach((line, index) => validateImportantLine(line, `${path}[${index}]`, issues));
133
- }
134
- function validateImportantLine(value, path, issues) {
135
- if (!isRecord(value)) {
136
- issues.push({ path, message: "Expected important line object." });
137
- return;
138
- }
139
- if (!isOneOf(value.stream, OUTPUT_STREAMS) || value.stream === "raw") {
140
- issues.push({ path: `${path}.stream`, message: "Expected stdout, stderr, or combined stream." });
141
- }
142
- if (typeof value.lines !== "string" || !validLineRange(value.lines)) {
143
- issues.push({ path: `${path}.lines`, message: "Expected line range in start-end form." });
144
- }
145
- if (typeof value.excerpt !== "string") {
146
- issues.push({ path: `${path}.excerpt`, message: "Expected excerpt string." });
147
- }
148
- }
149
- function validLineRange(value) {
150
- const match = /^(\d+)-(\d+)$/.exec(value);
151
- if (!match?.[1] || !match[2]) {
152
- return false;
153
- }
154
- const start = Number(match[1]);
155
- const end = Number(match[2]);
156
- return Number.isInteger(start) && Number.isInteger(end) && start > 0 && end >= start;
157
- }
158
- function validateEvidenceArray(value, path, issues) {
159
- if (value === undefined) {
160
- return;
161
- }
162
- if (!Array.isArray(value)) {
163
- issues.push({ path, message: "Expected an evidence array." });
164
- return;
165
- }
166
- value.forEach((packet, index) => {
167
- const result = validateEvidencePacket(packet);
168
- if (!result.ok) {
169
- for (const issue of result.issues) {
170
- issues.push({ path: `${path}[${index}]${issue.path.slice(1)}`, message: issue.message });
171
- }
172
- }
173
- });
174
- }
175
- export function validatePreserveMode(value) {
176
- if (!isOneOf(value, PRESERVE_MODES)) {
177
- return failure([{ path: "$", message: "Expected preserve mode summary, important, or full." }]);
178
- }
179
- return success(value);
180
- }
181
- export function validateRetrievalAction(value) {
182
- if (!isOneOf(value, RETRIEVAL_ACTIONS)) {
183
- return failure([{ path: "$", message: "Expected retrieval action query, locate, retrieve, expand, or explain." }]);
184
- }
185
- return success(value);
186
- }
187
- export function validateEvidencePacket(value) {
188
- const issues = [];
189
- if (!isRecord(value)) {
190
- return failure([{ path: "$", message: "Expected an evidence packet object." }]);
191
- }
192
- requireString(value, "id", "$", issues);
193
- validateSourceRef(value.source, "$.source", issues);
194
- requireString(value, "excerpt", "$", issues);
195
- requireString(value, "why", "$", issues);
196
- requireBoolean(value, "expandable", "$", issues);
197
- if (!isOneOf(value.window, EVIDENCE_WINDOWS)) {
198
- issues.push({ path: "$.window", message: "Expected a known evidence window." });
199
- }
200
- if (value.path !== undefined && typeof value.path !== "string") {
201
- issues.push({ path: "$.path", message: "Expected a string when present." });
202
- }
203
- if (value.lines !== undefined && typeof value.lines !== "string") {
204
- issues.push({ path: "$.lines", message: "Expected a string when present." });
205
- }
206
- return issues.length === 0 ? success(value) : failure(issues);
207
- }
208
- export function validateRoutedResult(value) {
209
- const issues = [];
210
- if (!isRecord(value)) {
211
- return failure([{ path: "$", message: "Expected a routed result object." }]);
212
- }
213
- if ("status" in value) {
214
- issues.push({
215
- path: "$.status",
216
- message: "Do not use ambiguous top-level status; use toolStatus, execution.status, and routing.status.",
217
- });
218
- }
219
- if (!isOneOf(value.toolStatus, TOOL_STATUSES)) {
220
- issues.push({ path: "$.toolStatus", message: "Expected toolStatus ok or error." });
221
- }
222
- requireString(value, "decisionId", "$", issues);
223
- if (!isOneOf(value.preserve, PRESERVE_MODES)) {
224
- issues.push({ path: "$.preserve", message: "Expected preserve mode summary, important, or full." });
225
- }
226
- if (!isRecord(value.routing)) {
227
- issues.push({ path: "$.routing", message: "Expected routing object." });
228
- }
229
- else {
230
- if (!isOneOf(value.routing.status, ROUTING_STATUSES)) {
231
- issues.push({ path: "$.routing.status", message: "Expected a known routing status." });
232
- }
233
- if (!isOneOf(value.routing.route, ROUTE_KINDS)) {
234
- issues.push({ path: "$.routing.route", message: "Expected a known route kind." });
235
- }
236
- requireString(value.routing, "reason", "$.routing", issues);
237
- }
238
- if (value.recovery !== undefined) {
239
- if (!isRecord(value.recovery)) {
240
- issues.push({ path: "$.recovery", message: "Expected recovery object." });
241
- }
242
- else {
243
- requireString(value.recovery, "how", "$.recovery", issues);
244
- }
245
- }
246
- validateEvidenceArray(value.evidence, "$.evidence", issues);
247
- if (value.execution !== undefined) {
248
- if (!isRecord(value.execution)) {
249
- issues.push({ path: "$.execution", message: "Expected execution object." });
250
- }
251
- else {
252
- if (!isOneOf(value.execution.status, EXECUTION_STATUSES)) {
253
- issues.push({ path: "$.execution.status", message: "Expected a known execution status." });
254
- }
255
- requireNullableInteger(value.execution, "exitCode", "$.execution", issues);
256
- if (value.execution.durationMs !== undefined) {
257
- requireNonNegativeNumber(value.execution, "durationMs", "$.execution", issues);
258
- }
259
- }
260
- }
261
- if (value.outputId !== undefined && typeof value.outputId !== "string") {
262
- issues.push({ path: "$.outputId", message: "Expected output id string when present." });
263
- }
264
- validateImportantLines(value.importantLines, "$.importantLines", issues);
265
- validateParserMetadata(value.parser, "$.parser", issues);
266
- return issues.length === 0 ? success(value) : failure(issues);
267
- }
268
- export function validateRouterConfig(value) {
269
- const issues = [];
270
- if (!isRecord(value)) {
271
- return failure([{ path: "$", message: "Expected a router config object." }]);
272
- }
273
- if (!isValidPostToolRoutingMode(value.postToolRouting)) {
274
- issues.push({ path: "$.postToolRouting", message: "Expected postToolRouting off, safety-net, or strict." });
275
- }
276
- if (!isRecord(value.thresholds)) {
277
- issues.push({ path: "$.thresholds", message: "Expected thresholds object." });
278
- }
279
- else {
280
- issues.push(...validatePositiveIntegerThreshold(value.thresholds.largeOutputBytes, "$.thresholds.largeOutputBytes"));
281
- issues.push(...validatePositiveIntegerThreshold(value.thresholds.largeOutputLines, "$.thresholds.largeOutputLines"));
282
- }
283
- if (!isRecord(value.vault)) {
284
- issues.push({ path: "$.vault", message: "Expected vault config object." });
285
- }
286
- else {
287
- requireString(value.vault, "root", "$.vault", issues);
288
- if (value.vault.retention !== undefined) {
289
- issues.push(...validateVaultRetentionPolicy(value.vault.retention, "$.vault.retention"));
290
- }
291
- }
292
- issues.push(...validateNormalizedRouterHints(value.hints, "$.hints"));
293
- return issues.length === 0 ? success(value) : failure(issues);
294
- }
295
- export function validateCommandOutputRecord(value) {
296
- const issues = [];
297
- if (!isRecord(value)) {
298
- return failure([{ path: "$", message: "Expected a command output record object." }]);
299
- }
300
- if ("status" in value) {
301
- issues.push({
302
- path: "$.status",
303
- message: "Do not use ambiguous command record status; use executionStatus.",
304
- });
305
- }
306
- if (value.kind !== "command") {
307
- issues.push({ path: "$.kind", message: "Expected kind command." });
308
- }
309
- requireString(value, "outputId", "$", issues);
310
- requireString(value, "objectId", "$", issues);
311
- requireString(value, "createdAt", "$", issues);
312
- requireString(value, "contentHashSha256", "$", issues);
313
- const commandIsValid = typeof value.command === "string" ||
314
- (Array.isArray(value.command) && value.command.every((part) => typeof part === "string"));
315
- if (!commandIsValid) {
316
- issues.push({ path: "$.command", message: "Expected command string or string array." });
317
- }
318
- if (!isOneOf(value.executionStatus, EXECUTION_STATUSES)) {
319
- issues.push({ path: "$.executionStatus", message: "Expected a known execution status." });
320
- }
321
- requireNullableInteger(value, "exitCode", "$", issues);
322
- if (!isRecord(value.paths)) {
323
- issues.push({ path: "$.paths", message: "Expected command output paths object." });
324
- }
325
- else {
326
- requireString(value.paths, "meta", "$.paths", issues);
327
- requireString(value.paths, "stdout", "$.paths", issues);
328
- requireString(value.paths, "stderr", "$.paths", issues);
329
- requireString(value.paths, "combined", "$.paths", issues);
330
- }
331
- if (!isRecord(value.lineCounts)) {
332
- issues.push({ path: "$.lineCounts", message: "Expected lineCounts object." });
333
- }
334
- else {
335
- requireInteger(value.lineCounts, "stdout", "$.lineCounts", issues);
336
- requireInteger(value.lineCounts, "stderr", "$.lineCounts", issues);
337
- requireInteger(value.lineCounts, "combined", "$.lineCounts", issues);
338
- }
339
- if (!isRecord(value.byteCounts)) {
340
- issues.push({ path: "$.byteCounts", message: "Expected byteCounts object." });
341
- }
342
- else {
343
- requireInteger(value.byteCounts, "stdout", "$.byteCounts", issues);
344
- requireInteger(value.byteCounts, "stderr", "$.byteCounts", issues);
345
- requireInteger(value.byteCounts, "combined", "$.byteCounts", issues);
346
- }
347
- if (!isRecord(value.hashes)) {
348
- issues.push({ path: "$.hashes", message: "Expected hashes object." });
349
- }
350
- if (!Array.isArray(value.decisionIds) || !value.decisionIds.every((item) => typeof item === "string")) {
351
- issues.push({ path: "$.decisionIds", message: "Expected decision id string array." });
352
- }
353
- return issues.length === 0 ? success(value) : failure(issues);
354
- }
@@ -1,234 +0,0 @@
1
- export declare const PRESERVE_MODES: readonly ["summary", "important", "full"];
2
- export type PreserveMode = (typeof PRESERVE_MODES)[number];
3
- export declare const RETRIEVAL_ACTIONS: readonly ["query", "locate", "retrieve", "expand", "explain"];
4
- export type RetrievalAction = (typeof RETRIEVAL_ACTIONS)[number];
5
- export declare const TOOL_STATUSES: readonly ["ok", "error"];
6
- export type ToolStatus = (typeof TOOL_STATUSES)[number];
7
- export declare const EXECUTION_STATUSES: readonly ["success", "failed", "timed_out", "cancelled"];
8
- export type ExecutionStatus = (typeof EXECUTION_STATUSES)[number];
9
- export declare const ROUTING_STATUSES: readonly ["routed", "passed_through", "partial", "failed"];
10
- export type RoutingStatus = (typeof ROUTING_STATUSES)[number];
11
- export declare const ROUTE_KINDS: readonly ["retrieve", "run", "safety-net", "pass-through"];
12
- export type RouteKind = (typeof ROUTE_KINDS)[number];
13
- export declare const EVIDENCE_WINDOWS: readonly ["exact", "small", "lines_30", "lines_80", "section", "full"];
14
- export type EvidenceWindow = (typeof EVIDENCE_WINDOWS)[number];
15
- export declare const OUTPUT_STREAMS: readonly ["stdout", "stderr", "combined", "raw"];
16
- export type OutputStream = (typeof OUTPUT_STREAMS)[number];
17
- export declare const POST_TOOL_ROUTING_MODES: readonly ["off", "safety-net", "strict"];
18
- export type PostToolRoutingMode = (typeof POST_TOOL_ROUTING_MODES)[number];
19
- export interface RepoSourceRef {
20
- kind: "repo";
21
- path: string;
22
- }
23
- export interface VaultSourceRef {
24
- kind: "vault";
25
- outputId: string;
26
- stream?: OutputStream;
27
- }
28
- export interface NativeToolSourceRef {
29
- kind: "native";
30
- tool: string;
31
- outputId: string;
32
- }
33
- export type SourceRef = RepoSourceRef | VaultSourceRef | NativeToolSourceRef;
34
- export interface EvidencePacket {
35
- id: string;
36
- source: SourceRef;
37
- excerpt: string;
38
- why: string;
39
- window: EvidenceWindow;
40
- expandable: boolean;
41
- path?: string;
42
- lines?: string;
43
- }
44
- export interface RecoveryHint {
45
- how: string;
46
- outputId?: string;
47
- evidenceId?: string;
48
- }
49
- export interface RoutingDecision {
50
- status: RoutingStatus;
51
- route: RouteKind;
52
- reason: string;
53
- }
54
- export interface CommandExecution {
55
- status: ExecutionStatus;
56
- exitCode: number | null;
57
- durationMs?: number;
58
- }
59
- export interface ImportantLine {
60
- stream: Exclude<OutputStream, "raw">;
61
- lines: string;
62
- excerpt: string;
63
- }
64
- export interface CommandParserReference {
65
- path: string;
66
- line?: number;
67
- column?: number;
68
- code?: string;
69
- severity?: "error" | "warning" | "info";
70
- message: string;
71
- }
72
- export interface CommandParserMetadata {
73
- name: string;
74
- confidence: number;
75
- fidelity: "exact" | "lossy";
76
- compressed: boolean;
77
- counts?: Record<string, number>;
78
- references?: CommandParserReference[];
79
- }
80
- export interface RoutedResultBase {
81
- toolStatus: ToolStatus;
82
- decisionId: string;
83
- preserve: PreserveMode;
84
- routing: RoutingDecision;
85
- recovery?: RecoveryHint;
86
- evidence?: EvidencePacket[];
87
- }
88
- export interface RetrievalRoutedResult extends RoutedResultBase {
89
- source?: SourceRef;
90
- }
91
- export interface CommandRoutedResult extends RoutedResultBase {
92
- outputId: string;
93
- execution: CommandExecution;
94
- summary?: string;
95
- importantLines?: ImportantLine[];
96
- parser?: CommandParserMetadata;
97
- }
98
- export type RoutedResult = RetrievalRoutedResult | CommandRoutedResult;
99
- export interface LineByteCounts {
100
- lines: number;
101
- bytes: number;
102
- }
103
- export interface CommandOutputPaths {
104
- meta: string;
105
- stdout: string;
106
- stderr: string;
107
- combined: string;
108
- }
109
- export interface OutputFingerprints {
110
- exactSha256: string;
111
- normalizedSha256: string;
112
- commandFingerprintSha256?: string;
113
- }
114
- export interface VaultRecordBase {
115
- outputId: string;
116
- objectId: string;
117
- createdAt: string;
118
- paths: {
119
- meta: string;
120
- };
121
- decisionIds: string[];
122
- contentHashSha256: string;
123
- fingerprints?: OutputFingerprints;
124
- retention?: VaultRetentionPolicy;
125
- expiresAt?: string;
126
- }
127
- export interface CommandOutputRecord extends VaultRecordBase {
128
- kind: "command";
129
- command: string | readonly string[];
130
- executionStatus: ExecutionStatus;
131
- exitCode: number | null;
132
- paths: CommandOutputPaths;
133
- lineCounts: {
134
- stdout: number;
135
- stderr: number;
136
- combined: number;
137
- };
138
- byteCounts: {
139
- stdout: number;
140
- stderr: number;
141
- combined: number;
142
- };
143
- hashes: {
144
- stdoutSha256?: string;
145
- stderrSha256?: string;
146
- combinedSha256?: string;
147
- };
148
- fingerprints: OutputFingerprints & {
149
- commandFingerprintSha256: string;
150
- };
151
- cwd?: string;
152
- durationMs?: number;
153
- }
154
- export interface TextOutputRecord extends VaultRecordBase {
155
- kind: "text";
156
- sourceKind: "native" | "mcp" | "fetch" | "other";
157
- paths: {
158
- meta: string;
159
- raw: string;
160
- };
161
- lineCounts: {
162
- raw: number;
163
- };
164
- byteCounts: {
165
- raw: number;
166
- };
167
- hashes: {
168
- rawSha256?: string;
169
- };
170
- fingerprints: OutputFingerprints;
171
- }
172
- export interface RepoFileReferenceRecord extends VaultRecordBase {
173
- kind: "repo-file";
174
- path: string;
175
- paths: {
176
- meta: string;
177
- };
178
- hashSha256?: string;
179
- }
180
- export type VaultRecord = CommandOutputRecord | TextOutputRecord | RepoFileReferenceRecord;
181
- export interface SessionIndexEntry {
182
- outputId: string;
183
- objectId: string;
184
- kind: VaultRecord["kind"];
185
- createdAt: string;
186
- executionStatus?: ExecutionStatus;
187
- fingerprints?: OutputFingerprints;
188
- }
189
- export interface VaultSessionIndex {
190
- version: 1;
191
- sessionId: string;
192
- createdAt: string;
193
- updatedAt: string;
194
- outputs: string[];
195
- records: Record<string, SessionIndexEntry>;
196
- successful: string[];
197
- failed: string[];
198
- timedOut: string[];
199
- cancelled: string[];
200
- }
201
- export interface DecisionRecord {
202
- decisionId: string;
203
- createdAt: string;
204
- route: RouteKind;
205
- preserve: PreserveMode;
206
- reason: string;
207
- source?: SourceRef;
208
- outputId?: string;
209
- evidenceIds?: string[];
210
- }
211
- export interface RouterThresholds {
212
- largeOutputBytes: number;
213
- largeOutputLines: number;
214
- }
215
- export type VaultRetentionPolicy = {
216
- strategy: "ttl";
217
- ttlDays: number;
218
- } | {
219
- strategy: "manual";
220
- };
221
- export interface RouterVaultConfig {
222
- root: string;
223
- retention?: VaultRetentionPolicy;
224
- }
225
- export interface RouterHints {
226
- generatedPathGlobs?: string[];
227
- noisyCommandPatterns?: string[];
228
- }
229
- export interface RouterConfig {
230
- postToolRouting: PostToolRoutingMode;
231
- thresholds: RouterThresholds;
232
- vault: RouterVaultConfig;
233
- hints?: RouterHints;
234
- }
@@ -1,9 +0,0 @@
1
- export const PRESERVE_MODES = ["summary", "important", "full"];
2
- export const RETRIEVAL_ACTIONS = ["query", "locate", "retrieve", "expand", "explain"];
3
- export const TOOL_STATUSES = ["ok", "error"];
4
- export const EXECUTION_STATUSES = ["success", "failed", "timed_out", "cancelled"];
5
- export const ROUTING_STATUSES = ["routed", "passed_through", "partial", "failed"];
6
- export const ROUTE_KINDS = ["retrieve", "run", "safety-net", "pass-through"];
7
- export const EVIDENCE_WINDOWS = ["exact", "small", "lines_30", "lines_80", "section", "full"];
8
- export const OUTPUT_STREAMS = ["stdout", "stderr", "combined", "raw"];
9
- export const POST_TOOL_ROUTING_MODES = ["off", "safety-net", "strict"];
@@ -1,80 +0,0 @@
1
- import type { CommandOutputRecord, ExecutionStatus, OutputFingerprints, OutputStream, RepoFileReferenceRecord, RouterVaultConfig, SessionIndexEntry, TextOutputRecord, VaultRecord, VaultRetentionPolicy, VaultSessionIndex } from "./types.js";
2
- export interface VaultHandle {
3
- root: string;
4
- retention: VaultRetentionPolicy;
5
- }
6
- export interface CreateVaultOptions extends Partial<RouterVaultConfig> {
7
- }
8
- export interface StoreCommandOutputOptions {
9
- sessionId: string;
10
- command: string | readonly string[];
11
- stdout: string;
12
- stderr: string;
13
- executionStatus: ExecutionStatus;
14
- exitCode: number | null;
15
- combined?: string;
16
- cwd?: string;
17
- durationMs?: number;
18
- decisionIds?: string[];
19
- createdAt?: string;
20
- }
21
- export interface StoreTextOutputOptions {
22
- sessionId: string;
23
- raw: string;
24
- sourceKind: TextOutputRecord["sourceKind"];
25
- decisionIds?: string[];
26
- createdAt?: string;
27
- }
28
- export interface StoreRepoFileReferenceOptions {
29
- sessionId: string;
30
- path: string;
31
- hashSha256?: string;
32
- decisionIds?: string[];
33
- createdAt?: string;
34
- }
35
- export interface ReadOutputLinesOptions {
36
- sessionId: string;
37
- outputId: string;
38
- stream: OutputStream;
39
- startLine: number;
40
- endLine: number;
41
- }
42
- export interface CommandOutputFingerprintOptions {
43
- command: string | readonly string[];
44
- stdout: string;
45
- stderr: string;
46
- executionStatus: ExecutionStatus;
47
- exitCode: number | null;
48
- combined?: string;
49
- cwd?: string;
50
- }
51
- export interface TextOutputFingerprintOptions {
52
- raw: string;
53
- }
54
- export interface FindExactDuplicateCommandOutputOptions {
55
- sessionId: string;
56
- fingerprints: OutputFingerprints & {
57
- commandFingerprintSha256: string;
58
- };
59
- excludeOutputId?: string;
60
- }
61
- export interface FindExactDuplicateTextOutputOptions {
62
- sessionId: string;
63
- fingerprints: OutputFingerprints;
64
- excludeOutputId?: string;
65
- }
66
- export declare function createVault(options?: CreateVaultOptions): VaultHandle;
67
- export declare function resolveVaultRoot(root: string): string;
68
- export declare function commandOutputFingerprints(options: CommandOutputFingerprintOptions): OutputFingerprints & {
69
- commandFingerprintSha256: string;
70
- };
71
- export declare function textOutputFingerprints(options: TextOutputFingerprintOptions): OutputFingerprints;
72
- export declare function findExactDuplicateCommandOutput(vault: VaultHandle, options: FindExactDuplicateCommandOutputOptions): Promise<SessionIndexEntry | undefined>;
73
- export declare function findExactDuplicateTextOutput(vault: VaultHandle, options: FindExactDuplicateTextOutputOptions): Promise<SessionIndexEntry | undefined>;
74
- export declare function storeCommandOutput(vault: VaultHandle, options: StoreCommandOutputOptions): Promise<CommandOutputRecord>;
75
- export declare function storeTextOutput(vault: VaultHandle, options: StoreTextOutputOptions): Promise<TextOutputRecord>;
76
- export declare function storeRepoFileReference(vault: VaultHandle, options: StoreRepoFileReferenceOptions): Promise<RepoFileReferenceRecord>;
77
- export declare function readVaultRecord(vault: VaultHandle, sessionId: string, outputId: string): Promise<VaultRecord>;
78
- export declare function readOutputText(vault: VaultHandle, sessionId: string, outputId: string, stream: OutputStream): Promise<string>;
79
- export declare function readOutputLines(vault: VaultHandle, options: ReadOutputLinesOptions): Promise<string>;
80
- export declare function readSessionIndex(vault: VaultHandle, sessionId: string): Promise<VaultSessionIndex>;