@jungjaehoon/mama-core 2.4.1 → 4.1.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 (378) hide show
  1. package/README.md +76 -239
  2. package/db/migrations/030-case-first-memory-substrate.sql +13 -98
  3. package/db/migrations/034-add-connector-event-scope-columns.sql +9 -13
  4. package/db/migrations/039-add-connector-event-operator-ingest-seq.sql +9 -95
  5. package/db/migrations/062-refresh-connector-event-sequences.sql +9 -113
  6. package/db/migrations/063-refresh-legacy-connector-event-updates.sql +9 -32
  7. package/db/migrations/067-add-connector-event-source-entity-id.sql +9 -13
  8. package/db/migrations/069-create-registry-nodes.sql +52 -0
  9. package/db/migrations/070-record-identity.sql +35 -0
  10. package/db/migrations/071-service-operation-origins.sql +187 -0
  11. package/db/migrations/072-observation-versions.sql +29 -0
  12. package/db/migrations/073-registry-corrections.sql +45 -0
  13. package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
  14. package/db/migrations/075-agent-judgments.sql +58 -0
  15. package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
  16. package/db/migrations/077-legacy-record-kind.sql +6 -0
  17. package/db/migrations/078-source-ingest-commands.sql +18 -0
  18. package/db/migrations/079-twin-edge-relations.sql +43 -0
  19. package/db/migrations/080-restore-duration-days.sql +7 -0
  20. package/db/migrations/081-mailbox.sql +61 -0
  21. package/db/migrations/082-commitments-row-id.sql +12 -0
  22. package/db/migrations/083-observation-is-the-evidence.sql +49 -0
  23. package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
  24. package/db/migrations/085-a-migration-has-a-source.sql +37 -0
  25. package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
  26. package/db/migrations/087-mailbox-payload.sql +5 -0
  27. package/db/migrations/088-native-input-journal.sql +14 -0
  28. package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
  29. package/db/migrations/090-model-run-native-inputs.sql +29 -0
  30. package/db/migrations/091-native-turn-results.sql +11 -0
  31. package/db/migrations/092-restore-decision-fts.sql +34 -0
  32. package/db/migrations/093-native-turn-primary-kind.sql +14 -0
  33. package/db/migrations/094-commitment-run-provenance.sql +9 -0
  34. package/db/migrations/095-model-run-native-input-identity.sql +39 -0
  35. package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
  36. package/db/migrations/097-native-input-json-validity.sql +37 -0
  37. package/db/migrations/098-workflow-memory-kind.sql +105 -0
  38. package/db/migrations/099-commitment-revision-graph.sql +2 -0
  39. package/dist/action-contracts.d.ts +212 -0
  40. package/dist/action-contracts.js +10 -0
  41. package/dist/api/catalog.d.ts +118 -0
  42. package/dist/api/catalog.js +1756 -0
  43. package/dist/api/dispatch.d.ts +76 -0
  44. package/dist/api/dispatch.js +372 -0
  45. package/dist/canonicalize.d.ts +2 -2
  46. package/dist/canonicalize.js +3 -3
  47. package/dist/client/client.d.ts +33 -0
  48. package/dist/client/client.js +123 -0
  49. package/dist/client/ipc.d.ts +81 -0
  50. package/dist/client/ipc.js +314 -0
  51. package/dist/db-adapter/base-adapter.d.ts +6 -66
  52. package/dist/db-adapter/base-adapter.js +6 -6
  53. package/dist/db-adapter/index.d.ts +5 -5
  54. package/dist/db-adapter/index.js +2 -5
  55. package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
  56. package/dist/db-adapter/node-sqlite-adapter.js +1985 -570
  57. package/dist/db-manager.d.ts +53 -97
  58. package/dist/db-manager.js +121 -603
  59. package/dist/embedding/embedder.d.ts +132 -0
  60. package/dist/embedding/embedder.js +299 -0
  61. package/dist/identity/principal-repository.d.ts +2 -2
  62. package/dist/index.d.ts +43 -58
  63. package/dist/index.js +97 -145
  64. package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
  65. package/dist/knowledge/access.js +663 -0
  66. package/dist/knowledge/case-errors.d.ts +31 -0
  67. package/dist/knowledge/case-errors.js +40 -0
  68. package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
  69. package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
  70. package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
  71. package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
  72. package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
  73. package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
  74. package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
  75. package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
  76. package/dist/knowledge/commitment-revision-migration.d.ts +4 -0
  77. package/dist/knowledge/commitment-revision-migration.js +50 -0
  78. package/dist/knowledge/commitments.d.ts +192 -0
  79. package/dist/knowledge/commitments.js +386 -0
  80. package/dist/knowledge/decision-edges.d.ts +70 -0
  81. package/dist/knowledge/decision-edges.js +123 -0
  82. package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
  83. package/dist/knowledge/graph-query.js +1585 -0
  84. package/dist/knowledge/identity.d.ts +16 -0
  85. package/dist/knowledge/identity.js +22 -0
  86. package/dist/knowledge/index.d.ts +47 -0
  87. package/dist/knowledge/index.js +90 -0
  88. package/dist/knowledge/judgment-edge.d.ts +6 -0
  89. package/dist/knowledge/judgment-edge.js +22 -0
  90. package/dist/knowledge/judgments.d.ts +118 -0
  91. package/dist/knowledge/judgments.js +802 -0
  92. package/dist/knowledge/observations.d.ts +160 -0
  93. package/dist/knowledge/observations.js +449 -0
  94. package/dist/knowledge/question-type.d.ts +34 -0
  95. package/dist/knowledge/question-type.js +70 -0
  96. package/dist/{search → knowledge}/ranker-features.js +1 -1
  97. package/dist/{search → knowledge}/search-quality.d.ts +0 -1
  98. package/dist/knowledge/search.d.ts +38 -0
  99. package/dist/knowledge/search.js +91 -0
  100. package/dist/knowledge/source-ingest.d.ts +65 -0
  101. package/dist/knowledge/source-ingest.js +174 -0
  102. package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
  103. package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
  104. package/dist/knowledge/work-dates.d.ts +49 -0
  105. package/dist/knowledge/work-dates.js +120 -0
  106. package/dist/mama-api.d.ts +114 -778
  107. package/dist/mama-api.js +313 -2461
  108. package/dist/memory/api.d.ts +264 -24
  109. package/dist/memory/api.js +1633 -843
  110. package/dist/memory/bootstrap-builder.d.ts +2 -1
  111. package/dist/memory/bootstrap-builder.js +5 -5
  112. package/dist/memory/channel-summary-state-store.d.ts +3 -2
  113. package/dist/memory/channel-summary-state-store.js +53 -51
  114. package/dist/memory/channel-summary-store.d.ts +5 -3
  115. package/dist/memory/channel-summary-store.js +3 -8
  116. package/dist/memory/dashboard-read.d.ts +46 -0
  117. package/dist/memory/dashboard-read.js +94 -0
  118. package/dist/memory/event-store.d.ts +3 -3
  119. package/dist/memory/event-store.js +3 -10
  120. package/dist/memory/finding-store.d.ts +3 -2
  121. package/dist/memory/finding-store.js +2 -7
  122. package/dist/memory/graph-read.d.ts +52 -0
  123. package/dist/memory/graph-read.js +130 -0
  124. package/dist/memory/judgment-types.d.ts +394 -0
  125. package/dist/memory/judgment-types.js +16 -0
  126. package/dist/memory/provenance-audit.d.ts +5 -2
  127. package/dist/memory/provenance-audit.js +8 -14
  128. package/dist/memory/provenance-live.d.ts +141 -0
  129. package/dist/memory/provenance-live.js +409 -0
  130. package/dist/memory/provenance-query.d.ts +5 -4
  131. package/dist/memory/provenance-query.js +21 -29
  132. package/dist/memory/provenance-resolver.d.ts +191 -0
  133. package/dist/memory/provenance-resolver.js +155 -0
  134. package/dist/memory/provenance.d.ts +1 -11
  135. package/dist/memory/provenance.js +2 -33
  136. package/dist/memory/recall-sanitize.d.ts +55 -0
  137. package/dist/memory/recall-sanitize.js +144 -0
  138. package/dist/memory/secret-filter.d.ts +32 -0
  139. package/dist/memory/secret-filter.js +126 -0
  140. package/dist/memory/truth-store.d.ts +2 -1
  141. package/dist/memory/truth-store.js +1 -4
  142. package/dist/memory/types.d.ts +74 -24
  143. package/dist/memory/types.js +75 -5
  144. package/dist/memory/write-adapters.d.ts +98 -0
  145. package/dist/memory/write-adapters.js +242 -0
  146. package/dist/operations/owner-action-effects.d.ts +53 -0
  147. package/dist/operations/owner-action-effects.js +96 -0
  148. package/dist/provenance/source-ref.d.ts +1 -1
  149. package/dist/provenance/source-ref.js +0 -2
  150. package/dist/registry/corrections.d.ts +31 -0
  151. package/dist/registry/corrections.js +332 -0
  152. package/dist/registry/record-identity.d.ts +49 -0
  153. package/dist/registry/record-identity.js +133 -0
  154. package/dist/registry/store.d.ts +101 -0
  155. package/dist/registry/store.js +395 -0
  156. package/dist/registry/types.d.ts +28 -0
  157. package/dist/registry/types.js +5 -0
  158. package/dist/relevance-scorer.js +2 -2
  159. package/dist/runtime/agent-event-bus.d.ts +50 -0
  160. package/dist/runtime/agent-event-bus.js +101 -0
  161. package/dist/runtime/drivers/claude-cli-wrapper.d.ts +152 -0
  162. package/dist/runtime/drivers/claude-cli-wrapper.js +375 -0
  163. package/dist/runtime/drivers/claude-effort.d.ts +4 -0
  164. package/dist/runtime/drivers/claude-effort.js +16 -0
  165. package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
  166. package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
  167. package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
  168. package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
  169. package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
  170. package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
  171. package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
  172. package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
  173. package/dist/runtime/drivers/codex-home.d.ts +20 -0
  174. package/dist/runtime/drivers/codex-home.js +674 -0
  175. package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
  176. package/dist/runtime/drivers/codex-thread-registry.js +433 -0
  177. package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
  178. package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
  179. package/dist/runtime/drivers/persistent-cli-process.d.ts +425 -0
  180. package/dist/runtime/drivers/persistent-cli-process.js +1529 -0
  181. package/dist/runtime/drivers/types.d.ts +456 -0
  182. package/dist/runtime/drivers/types.js +110 -0
  183. package/dist/runtime/mailbox.d.ts +223 -0
  184. package/dist/runtime/mailbox.js +582 -0
  185. package/dist/runtime/model-run-store.d.ts +28 -0
  186. package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
  187. package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
  188. package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
  189. package/dist/runtime/native-effect-observer.d.ts +22 -0
  190. package/dist/runtime/native-effect-observer.js +103 -0
  191. package/dist/runtime/native-input-journal.d.ts +46 -0
  192. package/dist/runtime/native-input-journal.js +308 -0
  193. package/dist/runtime/native-prompt.d.ts +118 -0
  194. package/dist/runtime/native-prompt.js +496 -0
  195. package/dist/runtime/native-session.d.ts +10 -0
  196. package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
  197. package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
  198. package/dist/runtime/native-tool-trace-observer.js +65 -0
  199. package/dist/runtime/native-turn.d.ts +272 -0
  200. package/dist/runtime/native-turn.js +1041 -0
  201. package/dist/runtime/operations.d.ts +236 -0
  202. package/dist/runtime/operations.js +565 -0
  203. package/dist/runtime/post-tool-handler.d.ts +74 -0
  204. package/dist/runtime/post-tool-handler.js +137 -0
  205. package/dist/runtime/prompt-layers.d.ts +126 -0
  206. package/dist/runtime/prompt-layers.js +239 -0
  207. package/dist/runtime/runtime-process.d.ts +102 -0
  208. package/dist/runtime/runtime-process.js +206 -0
  209. package/dist/runtime/runtime.d.ts +278 -0
  210. package/dist/runtime/runtime.js +563 -0
  211. package/dist/runtime/session-pool.d.ts +176 -0
  212. package/dist/runtime/session-pool.js +369 -0
  213. package/dist/runtime/stimulus-payload.d.ts +5 -0
  214. package/dist/runtime/stimulus-payload.js +50 -0
  215. package/dist/runtime/subagent-bridge.d.ts +24 -0
  216. package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
  217. package/dist/runtime/text-completion.d.ts +22 -0
  218. package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
  219. package/dist/runtime/token-estimator.d.ts +25 -0
  220. package/dist/runtime/token-estimator.js +75 -0
  221. package/dist/runtime/tool-trace-store.d.ts +22 -0
  222. package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
  223. package/dist/runtime/trace-summary.d.ts +5 -0
  224. package/dist/runtime/trace-summary.js +74 -0
  225. package/dist/runtime/turn-text.d.ts +23 -0
  226. package/dist/runtime/turn-text.js +41 -0
  227. package/dist/storage/database.d.ts +67 -0
  228. package/dist/storage/database.js +158 -0
  229. package/package.json +20 -34
  230. package/dist/agent-graph/alias-write.d.ts +0 -3
  231. package/dist/agent-graph/alias-write.js +0 -234
  232. package/dist/agent-graph/entity-resolve.d.ts +0 -3
  233. package/dist/agent-graph/entity-resolve.js +0 -271
  234. package/dist/agent-graph/errors.d.ts +0 -4
  235. package/dist/agent-graph/errors.js +0 -11
  236. package/dist/agent-graph/graph-query.d.ts +0 -5
  237. package/dist/agent-graph/graph-query.js +0 -360
  238. package/dist/agent-graph/index.d.ts +0 -6
  239. package/dist/agent-situation/builder.d.ts +0 -8
  240. package/dist/agent-situation/builder.js +0 -239
  241. package/dist/agent-situation/cache-key.d.ts +0 -4
  242. package/dist/agent-situation/cache-key.js +0 -64
  243. package/dist/agent-situation/index.d.ts +0 -7
  244. package/dist/agent-situation/index.js +0 -28
  245. package/dist/agent-situation/packet-store.d.ts +0 -27
  246. package/dist/agent-situation/packet-store.js +0 -228
  247. package/dist/agent-situation/ranking-policy.d.ts +0 -18
  248. package/dist/agent-situation/ranking-policy.js +0 -75
  249. package/dist/agent-situation/source-readers.d.ts +0 -52
  250. package/dist/agent-situation/source-readers.js +0 -300
  251. package/dist/agent-situation/types.d.ts +0 -195
  252. package/dist/cases/wiki-page-index.d.ts +0 -37
  253. package/dist/cases/wiki-page-index.js +0 -201
  254. package/dist/config-loader.d.ts +0 -68
  255. package/dist/config-loader.js +0 -239
  256. package/dist/connectors/event-index.d.ts +0 -24
  257. package/dist/connectors/event-index.js +0 -245
  258. package/dist/connectors/raw-query.d.ts +0 -40
  259. package/dist/connectors/raw-query.js +0 -412
  260. package/dist/connectors/types.d.ts +0 -117
  261. package/dist/connectors/types.js +0 -3
  262. package/dist/context-compile/boundary-defaults.d.ts +0 -12
  263. package/dist/context-compile/boundary-defaults.js +0 -105
  264. package/dist/context-compile/channel-grant.js +0 -66
  265. package/dist/context-compile/compiler-policy.d.ts +0 -39
  266. package/dist/context-compile/compiler-policy.js +0 -147
  267. package/dist/context-compile/compiler.d.ts +0 -18
  268. package/dist/context-compile/compiler.js +0 -404
  269. package/dist/context-compile/index.d.ts +0 -10
  270. package/dist/context-compile/index.js +0 -26
  271. package/dist/context-compile/packet-store.d.ts +0 -8
  272. package/dist/context-compile/packet-store.js +0 -239
  273. package/dist/context-compile/ref.d.ts +0 -7
  274. package/dist/context-compile/ref.js +0 -102
  275. package/dist/context-compile/source-readers.d.ts +0 -70
  276. package/dist/context-compile/source-readers.js +0 -840
  277. package/dist/context-compile/types.d.ts +0 -155
  278. package/dist/context-compile/types.js +0 -11
  279. package/dist/context-compile/visibility.d.ts +0 -21
  280. package/dist/context-compile/visibility.js +0 -224
  281. package/dist/decision-tracker.d.ts +0 -206
  282. package/dist/decision-tracker.js +0 -481
  283. package/dist/edges/ref-validation.d.ts +0 -7
  284. package/dist/edges/ref-validation.js +0 -321
  285. package/dist/edges/store.d.ts +0 -8
  286. package/dist/edges/store.js +0 -129
  287. package/dist/embedding-client.d.ts +0 -28
  288. package/dist/embedding-client.js +0 -53
  289. package/dist/embedding-server/index.d.ts +0 -67
  290. package/dist/embedding-server/index.js +0 -405
  291. package/dist/embedding-server/mobile/auth.d.ts +0 -44
  292. package/dist/embedding-server/mobile/auth.js +0 -150
  293. package/dist/embedding-server/mobile/daemon.d.ts +0 -129
  294. package/dist/embedding-server/mobile/daemon.js +0 -313
  295. package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
  296. package/dist/embedding-server/mobile/output-parser.js +0 -241
  297. package/dist/embedding-server/mobile/session-api.d.ts +0 -57
  298. package/dist/embedding-server/mobile/session-api.js +0 -261
  299. package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
  300. package/dist/embedding-server/mobile/session-manager.js +0 -378
  301. package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
  302. package/dist/embedding-server/mobile/websocket-handler.js +0 -486
  303. package/dist/embeddings.d.ts +0 -68
  304. package/dist/embeddings.js +0 -244
  305. package/dist/entities/audit-metrics.d.ts +0 -68
  306. package/dist/entities/audit-metrics.js +0 -124
  307. package/dist/entities/candidate-generator.d.ts +0 -8
  308. package/dist/entities/candidate-generator.js +0 -24
  309. package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
  310. package/dist/entities/entity-linked-decision-counts.js +0 -29
  311. package/dist/entities/entity-list.d.ts +0 -22
  312. package/dist/entities/entity-list.js +0 -3
  313. package/dist/entities/entity-orphan-list.d.ts +0 -17
  314. package/dist/entities/entity-orphan-list.js +0 -3
  315. package/dist/entities/entity-search.d.ts +0 -20
  316. package/dist/entities/entity-search.js +0 -3
  317. package/dist/entities/errors.d.ts +0 -55
  318. package/dist/entities/errors.js +0 -100
  319. package/dist/entities/lineage-store.d.ts +0 -28
  320. package/dist/entities/lineage-store.js +0 -204
  321. package/dist/entities/normalization.d.ts +0 -14
  322. package/dist/entities/normalization.js +0 -63
  323. package/dist/entities/policy-store.d.ts +0 -8
  324. package/dist/entities/policy-store.js +0 -75
  325. package/dist/entities/policy-types.d.ts +0 -72
  326. package/dist/entities/policy-types.js +0 -59
  327. package/dist/entities/projection.d.ts +0 -8
  328. package/dist/entities/projection.js +0 -82
  329. package/dist/entities/provenance-query.d.ts +0 -32
  330. package/dist/entities/provenance-query.js +0 -3
  331. package/dist/entities/read-identity.d.ts +0 -31
  332. package/dist/entities/read-identity.js +0 -264
  333. package/dist/entities/recall-bridge.d.ts +0 -5
  334. package/dist/entities/recall-bridge.js +0 -171
  335. package/dist/entities/resolution-engine.d.ts +0 -8
  336. package/dist/entities/resolution-engine.js +0 -3
  337. package/dist/entities/rollback-preview.d.ts +0 -35
  338. package/dist/entities/rollback-preview.js +0 -3
  339. package/dist/entities/source-locator.d.ts +0 -3
  340. package/dist/entities/source-locator.js +0 -32
  341. package/dist/entities/store.d.ts +0 -69
  342. package/dist/entities/store.js +0 -544
  343. package/dist/entities/types.d.ts +0 -166
  344. package/dist/entities/types.js +0 -30
  345. package/dist/memory/extraction-prompt.d.ts +0 -4
  346. package/dist/memory/extraction-prompt.js +0 -89
  347. package/dist/memory/scope-backfill.d.ts +0 -14
  348. package/dist/memory/scope-backfill.js +0 -3
  349. package/dist/memory/scope-store.d.ts +0 -4
  350. package/dist/memory/scope-store.js +0 -9
  351. package/dist/memory-store.d.ts +0 -87
  352. package/dist/memory-store.js +0 -78
  353. package/dist/model-runs/store.d.ts +0 -13
  354. package/dist/model-runs/tool-trace-store.d.ts +0 -8
  355. package/dist/notification-manager.d.ts +0 -7
  356. package/dist/notification-manager.js +0 -12
  357. package/dist/outcome-tracker.d.ts +0 -151
  358. package/dist/outcome-tracker.js +0 -271
  359. package/dist/query-intent.d.ts +0 -23
  360. package/dist/query-intent.js +0 -114
  361. package/dist/runtime/trusted-provenance.d.ts +0 -3
  362. package/dist/runtime/trusted-provenance.js +0 -6
  363. package/dist/search/question-type.d.ts +0 -5
  364. package/dist/search/question-type.js +0 -41
  365. package/dist/test-utils.d.ts +0 -80
  366. package/dist/test-utils.js +0 -218
  367. package/dist/tier-validator.d.ts +0 -43
  368. package/dist/tier-validator.js +0 -159
  369. package/dist/time-formatter.d.ts +0 -25
  370. package/dist/time-formatter.js +0 -93
  371. /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
  372. /package/dist/{search → knowledge}/feedback-store.js +0 -0
  373. /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
  374. /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
  375. /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
  376. /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
  377. /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
  378. /package/dist/{search → knowledge}/search-quality.js +0 -0
@@ -1,404 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.compileContext = compileContext;
7
- const node_crypto_1 = __importDefault(require("node:crypto"));
8
- const ref_validation_js_1 = require("../edges/ref-validation.js");
9
- const ref_js_1 = require("./ref.js");
10
- const visibility_js_1 = require("./visibility.js");
11
- const visibility_js_2 = require("./visibility.js");
12
- const boundary_defaults_js_1 = require("./boundary-defaults.js");
13
- const source_readers_js_1 = require("./source-readers.js");
14
- const compiler_policy_js_1 = require("./compiler-policy.js");
15
- const COMPILER_VERSION = 'context-compile-v0';
16
- function packetId() {
17
- return `ctxp_${node_crypto_1.default.randomUUID().replace(/-/g, '')}`;
18
- }
19
- function emptyResult() {
20
- return {
21
- candidates: [],
22
- hidden: { total: 0, by_kind: {}, by_reason: {} },
23
- source_refs: [],
24
- };
25
- }
26
- function mergeHidden(left, right) {
27
- left.total += right.total;
28
- for (const [kind, count] of Object.entries(right.by_kind)) {
29
- const key = kind;
30
- left.by_kind[key] = (left.by_kind[key] ?? 0) + count;
31
- }
32
- for (const [reason, count] of Object.entries(right.by_reason)) {
33
- left.by_reason[reason] = (left.by_reason[reason] ?? 0) + count;
34
- }
35
- }
36
- function assertNotAborted(deps) {
37
- if (deps.signal?.aborted) {
38
- throw new Error('Context compile aborted');
39
- }
40
- }
41
- function isBudgetDeadlineExceeded(deps, now) {
42
- if (typeof deps.deadlineMs === 'number' && now() >= deps.deadlineMs) {
43
- return true;
44
- }
45
- return false;
46
- }
47
- function maxToolCalls(input) {
48
- if (typeof input.max_tool_calls !== 'number' || !Number.isFinite(input.max_tool_calls)) {
49
- return Number.POSITIVE_INFINITY;
50
- }
51
- return Math.max(0, Math.floor(input.max_tool_calls));
52
- }
53
- function parseTimeMs(value, field) {
54
- if (value === null || value === undefined) {
55
- return null;
56
- }
57
- if (typeof value === 'number' && Number.isFinite(value)) {
58
- return Math.floor(value);
59
- }
60
- if (typeof value === 'string') {
61
- const trimmed = value.trim();
62
- if (trimmed.length === 0) {
63
- throw new Error(`Invalid context compile ${field}: ${String(value)}`);
64
- }
65
- const numeric = Number(trimmed);
66
- if (Number.isFinite(numeric)) {
67
- return Math.floor(numeric);
68
- }
69
- const parsed = Date.parse(trimmed);
70
- if (Number.isFinite(parsed)) {
71
- return parsed;
72
- }
73
- }
74
- throw new Error(`Invalid context compile ${field}: ${String(value)}`);
75
- }
76
- function rangeBoundaryMs(value, field) {
77
- if (value === undefined) {
78
- return null;
79
- }
80
- if (typeof value === 'number' && Number.isFinite(value)) {
81
- return Math.floor(value);
82
- }
83
- throw new Error(`Invalid context compile ${field}: ${String(value)}`);
84
- }
85
- function minVisibleMs(input) {
86
- return rangeBoundaryMs(input.range?.start_ms, 'range.start_ms');
87
- }
88
- function maxVisibleMs(input) {
89
- const ends = [
90
- rangeBoundaryMs(input.range?.end_ms, 'range.end_ms'),
91
- parseTimeMs(input.as_of, 'as_of'),
92
- ].filter((value) => typeof value === 'number' && Number.isFinite(value));
93
- return ends.length > 0 ? Math.min(...ends.map((value) => Math.floor(value))) : null;
94
- }
95
- function normalizeContextRange(range) {
96
- if (range === undefined) {
97
- return undefined;
98
- }
99
- if (range === null || typeof range !== 'object') {
100
- throw new Error(`Invalid context compile range: ${String(range)}`);
101
- }
102
- const startMs = rangeBoundaryMs(range.start_ms, 'range.start_ms');
103
- const endMs = rangeBoundaryMs(range.end_ms, 'range.end_ms');
104
- if (startMs !== null && endMs !== null && startMs > endMs) {
105
- throw new Error('Invalid context compile range: range.start_ms must be <= range.end_ms');
106
- }
107
- return {
108
- ...(startMs !== null ? { start_ms: startMs } : {}),
109
- ...(endMs !== null ? { end_ms: endMs } : {}),
110
- };
111
- }
112
- function rawCanonicalRefForRef(adapter, rawId) {
113
- const row = adapter
114
- .prepare(`
115
- SELECT source_connector, source_id, channel
116
- FROM connector_event_index
117
- WHERE event_index_id = ?
118
- LIMIT 1
119
- `)
120
- .get(rawId);
121
- if (typeof row?.source_connector !== 'string') {
122
- return null;
123
- }
124
- const ref = {
125
- kind: 'raw',
126
- connector: row.source_connector,
127
- raw_id: rawId,
128
- };
129
- if (typeof row.source_id === 'string' && row.source_id.length > 0) {
130
- ref.source_id = row.source_id;
131
- }
132
- ref.channel_id = typeof row.channel === 'string' ? row.channel : null;
133
- return ref;
134
- }
135
- function canonicalizeRawSeedRefs(adapter, seedRefs) {
136
- if (!adapter) {
137
- return [...seedRefs];
138
- }
139
- return seedRefs.map((ref) => {
140
- if (ref.kind !== 'raw') {
141
- return ref;
142
- }
143
- return rawCanonicalRefForRef(adapter, ref.raw_id) ?? ref;
144
- });
145
- }
146
- function hasSeedRefVisibilityConstraints(input, boundary) {
147
- return (boundary !== undefined ||
148
- input.scopes !== undefined ||
149
- input.connectors !== undefined ||
150
- input.project_refs !== undefined ||
151
- (input.tenant_id !== undefined && input.tenant_id !== null) ||
152
- input.range !== undefined ||
153
- (input.as_of !== undefined && input.as_of !== null));
154
- }
155
- function assertSeedRefsVisibleToInput(adapter, input, seedRefs, boundary) {
156
- if (seedRefs.length === 0) {
157
- return [];
158
- }
159
- if (Array.isArray(input.scopes) && input.scopes.length === 0) {
160
- throw new Error('Seed refs are outside the empty requested context scope set');
161
- }
162
- if (Array.isArray(input.connectors) &&
163
- input.connectors.length === 0 &&
164
- seedRefs.some((ref) => ref.kind === 'raw')) {
165
- throw new Error('Seed raw refs are outside the empty requested connector set');
166
- }
167
- if (Array.isArray(input.project_refs) &&
168
- input.project_refs.length === 0 &&
169
- seedRefs.some((ref) => ref.kind === 'raw')) {
170
- throw new Error('Seed raw refs are outside the empty requested project ref set');
171
- }
172
- if (!adapter) {
173
- throw new Error('Context seed refs require adapter-backed visibility validation');
174
- }
175
- (0, ref_validation_js_1.assertTwinRefsVisible)(adapter, seedRefs.map(ref_js_1.toTwinRef), {
176
- scopes: input.scopes,
177
- connectors: input.connectors,
178
- projectRefs: input.project_refs,
179
- tenantId: input.tenant_id,
180
- startMs: minVisibleMs(input),
181
- asOfMs: maxVisibleMs(input),
182
- // Without this a caller could seed a raw id from a channel the grant refuses and have
183
- // its identifiers surface in the packet - a citation path reaching past the read path.
184
- ...(boundary?.channels ? { channels: boundary.channels } : {}),
185
- });
186
- for (const ref of seedRefs) {
187
- if (ref.kind !== 'raw') {
188
- continue;
189
- }
190
- const actualRef = rawCanonicalRefForRef(adapter, ref.raw_id);
191
- if (actualRef?.kind !== 'raw' || actualRef.connector !== ref.connector) {
192
- throw new Error(`Seed raw ref connector does not match visible raw record: ${ref.raw_id}`);
193
- }
194
- }
195
- return canonicalizeRawSeedRefs(adapter, seedRefs);
196
- }
197
- function canReadMore(state, input) {
198
- return state.usedToolCalls < maxToolCalls(input);
199
- }
200
- function sourceInput(input, boundary) {
201
- const strictness = normalizeStrictness(input.strictness);
202
- return {
203
- task: input.task,
204
- scopes: input.scopes,
205
- connectors: input.connectors,
206
- project_refs: input.project_refs,
207
- tenant_id: input.tenant_id ?? null,
208
- boundary,
209
- range: input.range,
210
- as_of: input.as_of,
211
- limit: input.limit,
212
- threshold: undefined,
213
- strictness,
214
- };
215
- }
216
- function normalizeStrictness(strictness) {
217
- switch (strictness) {
218
- case 'low':
219
- case 'recall':
220
- return 'recall';
221
- case 'high':
222
- case 'strict':
223
- return 'strict';
224
- case 'medium':
225
- case 'balanced':
226
- case undefined:
227
- return 'balanced';
228
- default: {
229
- const _exhaustive = strictness;
230
- throw new Error(`Unsupported context compile strictness: ${String(_exhaustive)}`);
231
- }
232
- }
233
- }
234
- async function appendResult(state, step, result) {
235
- state.candidates.push(...result.candidates);
236
- state.sourceRefs.push(...result.source_refs);
237
- mergeHidden(state.hidden, result.hidden);
238
- state.expansionTrace.push({
239
- step,
240
- candidates: result.candidates.length,
241
- source_refs: result.source_refs.length,
242
- hidden: result.hidden.total,
243
- });
244
- }
245
- function uniqueRefs(refs) {
246
- const seen = new Set();
247
- const unique = [];
248
- for (const ref of refs) {
249
- const key = (0, ref_js_1.serializeContextRefForProvenance)(ref);
250
- if (seen.has(key)) {
251
- continue;
252
- }
253
- seen.add(key);
254
- unique.push(ref);
255
- }
256
- return unique;
257
- }
258
- async function compileContext(input, deps = {}) {
259
- const now = deps.now ?? Date.now;
260
- const startedAt = now();
261
- const effectiveDeadline = typeof input.max_ms === 'number' && Number.isFinite(input.max_ms)
262
- ? Math.min(deps.deadlineMs ?? Number.POSITIVE_INFINITY, startedAt + Math.max(0, input.max_ms))
263
- : deps.deadlineMs;
264
- const effectiveDeps = { ...deps, deadlineMs: effectiveDeadline };
265
- assertNotAborted(effectiveDeps);
266
- const boundary = deps.boundary;
267
- const seedRefs = (0, visibility_js_1.normalizeSeedRefs)(input.seed_refs);
268
- let canonicalSeedRefs = canonicalizeRawSeedRefs(deps.adapter, seedRefs);
269
- const effectiveInput = (0, boundary_defaults_js_1.applyContextBoundaryReadDefaults)(input, boundary);
270
- const effectiveRange = normalizeContextRange(effectiveInput.range);
271
- effectiveInput.range = effectiveRange;
272
- parseTimeMs(effectiveInput.as_of, 'as_of');
273
- if (boundary) {
274
- (0, visibility_js_2.assertContextBoundaryAllowsInput)({
275
- boundary,
276
- requestedScopes: effectiveInput.scopes,
277
- requestedConnectors: effectiveInput.connectors,
278
- requestedProjectRefs: effectiveInput.project_refs,
279
- requestedTenantId: effectiveInput.tenant_id,
280
- seedRefs,
281
- });
282
- }
283
- if (deps.adapter || hasSeedRefVisibilityConstraints(effectiveInput, boundary)) {
284
- canonicalSeedRefs = assertSeedRefsVisibleToInput(deps.adapter, effectiveInput, seedRefs, boundary);
285
- }
286
- const canonicalScopes = (0, visibility_js_2.canonicalizeContextScopes)(effectiveInput.scopes);
287
- const readInput = sourceInput(effectiveInput, boundary);
288
- const state = {
289
- candidates: [],
290
- sourceRefs: [...canonicalSeedRefs],
291
- hidden: { total: 0, by_kind: {}, by_reason: {} },
292
- expansionTrace: [{ step: 'seed_refs', source_refs: canonicalSeedRefs.length }],
293
- usedToolCalls: 0,
294
- };
295
- let budgetExhausted = isBudgetDeadlineExceeded(effectiveDeps, now);
296
- const skippedOperators = [];
297
- const markBudgetSkipped = (operator) => {
298
- budgetExhausted = true;
299
- skippedOperators.push(operator);
300
- };
301
- if (!canReadMore(state, effectiveInput)) {
302
- markBudgetSkipped('memory_recall');
303
- }
304
- else {
305
- assertNotAborted(effectiveDeps);
306
- if (isBudgetDeadlineExceeded(effectiveDeps, now)) {
307
- markBudgetSkipped('memory_recall');
308
- }
309
- else {
310
- state.usedToolCalls += 1;
311
- const memoryResult = await (deps.readMemoryCandidates?.(readInput) ??
312
- (0, source_readers_js_1.readMemoryCandidates)(readInput, deps.adapter ? { adapter: deps.adapter } : {}));
313
- await appendResult(state, 'memory_recall', memoryResult);
314
- }
315
- }
316
- const shouldReadRaw = (effectiveInput.connectors?.length ?? 0) > 0;
317
- if (shouldReadRaw) {
318
- if (!canReadMore(state, effectiveInput)) {
319
- markBudgetSkipped('raw_window');
320
- }
321
- else {
322
- assertNotAborted(effectiveDeps);
323
- if (isBudgetDeadlineExceeded(effectiveDeps, now)) {
324
- markBudgetSkipped('raw_window');
325
- }
326
- else {
327
- state.usedToolCalls += 1;
328
- const rawResult = await (deps.readRawCandidates?.(readInput) ??
329
- (deps.adapter ? (0, source_readers_js_1.readRawCandidates)(deps.adapter, readInput) : emptyResult()));
330
- await appendResult(state, 'raw_window', rawResult);
331
- }
332
- }
333
- }
334
- const visibleRefsForGraph = uniqueRefs([...state.sourceRefs]);
335
- if (visibleRefsForGraph.length > 0) {
336
- if (!canReadMore(state, effectiveInput)) {
337
- markBudgetSkipped('graph_neighborhood');
338
- }
339
- else {
340
- assertNotAborted(effectiveDeps);
341
- if (isBudgetDeadlineExceeded(effectiveDeps, now)) {
342
- markBudgetSkipped('graph_neighborhood');
343
- }
344
- else {
345
- state.usedToolCalls += 1;
346
- const graphResult = await (deps.readGraphCandidates?.(readInput, visibleRefsForGraph) ??
347
- (deps.adapter
348
- ? (0, source_readers_js_1.readGraphCandidates)(deps.adapter, readInput, visibleRefsForGraph)
349
- : emptyResult()));
350
- await appendResult(state, 'graph_neighborhood', graphResult);
351
- }
352
- }
353
- }
354
- assertNotAborted(effectiveDeps);
355
- if (isBudgetDeadlineExceeded(effectiveDeps, now)) {
356
- budgetExhausted = true;
357
- }
358
- const policy = (0, compiler_policy_js_1.applyContextCompilerPolicy)({
359
- task: effectiveInput.task,
360
- candidates: state.candidates,
361
- hidden: state.hidden,
362
- limit: effectiveInput.limit,
363
- strictness: normalizeStrictness(effectiveInput.strictness),
364
- max_tokens: effectiveInput.max_tokens,
365
- });
366
- const caveats = budgetExhausted ? [...policy.caveats, 'budget_exhausted'] : policy.caveats;
367
- const completedAt = now();
368
- return {
369
- packet_id: deps.packetId?.() ?? packetId(),
370
- mode: 'general',
371
- task: effectiveInput.task,
372
- scopes: canonicalScopes.scopes,
373
- scope_hash: canonicalScopes.scopeHash,
374
- generated_at: new Date(completedAt).toISOString(),
375
- range: effectiveRange ?? null,
376
- as_of: effectiveInput.as_of ?? null,
377
- compiler_version: COMPILER_VERSION,
378
- source_refs: uniqueRefs([...canonicalSeedRefs, ...policy.source_refs]),
379
- selected_evidence: policy.selected_evidence,
380
- evidence_clusters: policy.evidence_clusters,
381
- related_decisions: policy.related_decisions,
382
- rejected_refs: policy.rejected_refs,
383
- rejected_refs_truncated: false,
384
- rejected_summary: policy.rejected_summary,
385
- missing_context: policy.missing_context,
386
- caveats,
387
- expansion_trace: state.expansionTrace,
388
- retrieval_diagnostics: policy.retrieval_diagnostics,
389
- budget: {
390
- max_tool_calls: effectiveInput.max_tool_calls,
391
- used_tool_calls: state.usedToolCalls,
392
- max_ms: effectiveInput.max_ms,
393
- elapsed_ms: Math.max(0, completedAt - startedAt),
394
- max_tokens: effectiveInput.max_tokens,
395
- estimated_tokens: policy.estimated_tokens,
396
- budget_exhausted: budgetExhausted,
397
- },
398
- budget_manifest: {
399
- budget_exhausted: budgetExhausted,
400
- skipped_operators: skippedOperators,
401
- },
402
- };
403
- }
404
- //# sourceMappingURL=compiler.js.map
@@ -1,10 +0,0 @@
1
- export * from './types.js';
2
- export * from './boundary-defaults.js';
3
- export * from './channel-grant.js';
4
- export * from './ref.js';
5
- export * from './visibility.js';
6
- export * from './packet-store.js';
7
- export * from './source-readers.js';
8
- export * from './compiler-policy.js';
9
- export * from './compiler.js';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./types.js"), exports);
18
- __exportStar(require("./boundary-defaults.js"), exports);
19
- __exportStar(require("./channel-grant.js"), exports);
20
- __exportStar(require("./ref.js"), exports);
21
- __exportStar(require("./visibility.js"), exports);
22
- __exportStar(require("./packet-store.js"), exports);
23
- __exportStar(require("./source-readers.js"), exports);
24
- __exportStar(require("./compiler-policy.js"), exports);
25
- __exportStar(require("./compiler.js"), exports);
26
- //# sourceMappingURL=index.js.map
@@ -1,8 +0,0 @@
1
- import type { DatabaseAdapter } from '../db-manager.js';
2
- import type { ContextPacketRecord, TrustedContextPacketLookupInput } from './types.js';
3
- type ContextPacketAdapter = Pick<DatabaseAdapter, 'prepare'>;
4
- export declare function insertContextPacket(adapter: ContextPacketAdapter, packet: ContextPacketRecord): ContextPacketRecord;
5
- export declare function getContextPacket(adapter: ContextPacketAdapter, packetId: string): ContextPacketRecord | null;
6
- export declare function getContextPacketForTrustedUse(adapter: ContextPacketAdapter, input: TrustedContextPacketLookupInput): ContextPacketRecord | null;
7
- export {};
8
- //# sourceMappingURL=packet-store.d.ts.map
@@ -1,239 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.insertContextPacket = insertContextPacket;
4
- exports.getContextPacket = getContextPacket;
5
- exports.getContextPacketForTrustedUse = getContextPacketForTrustedUse;
6
- function parseJson(row, field) {
7
- const value = row[field];
8
- if (typeof value !== 'string') {
9
- throw new Error(`Invalid context packet JSON field ${field}: expected string`);
10
- }
11
- try {
12
- return JSON.parse(value);
13
- }
14
- catch (error) {
15
- const message = error instanceof Error ? error.message : String(error);
16
- throw new Error(`Invalid context packet JSON field ${field}: ${message}`);
17
- }
18
- }
19
- function stringField(row, field) {
20
- const value = row[field];
21
- if (typeof value !== 'string') {
22
- throw new Error(`Invalid context packet field ${field}: expected string`);
23
- }
24
- return value;
25
- }
26
- function numberField(row, field) {
27
- const value = row[field];
28
- if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {
29
- throw new Error(`Invalid context packet field ${field}: expected non-negative finite number`);
30
- }
31
- return Math.floor(value);
32
- }
33
- function mapPacketRow(row) {
34
- return {
35
- packet_id: stringField(row, 'packet_id'),
36
- task: stringField(row, 'task'),
37
- packet_json: stringField(row, 'packet_json'),
38
- packet: parseJson(row, 'packet_json'),
39
- scope_json: stringField(row, 'scope_json'),
40
- scopes: parseJson(row, 'scope_json'),
41
- scope_hash: stringField(row, 'scope_hash'),
42
- envelope_hash: stringField(row, 'envelope_hash'),
43
- model_run_id: stringField(row, 'model_run_id'),
44
- agent_id: stringField(row, 'agent_id'),
45
- input_snapshot_ref: stringField(row, 'input_snapshot_ref'),
46
- source_refs_json: stringField(row, 'source_refs_json'),
47
- source_refs: parseJson(row, 'source_refs_json'),
48
- tenant_id: stringField(row, 'tenant_id'),
49
- project_id: stringField(row, 'project_id'),
50
- memory_scope_kind: stringField(row, 'memory_scope_kind'),
51
- memory_scope_id: stringField(row, 'memory_scope_id'),
52
- created_at: numberField(row, 'created_at'),
53
- };
54
- }
55
- function normalizeJsonInput(value, field) {
56
- try {
57
- if (typeof value === 'string') {
58
- return JSON.stringify(JSON.parse(value));
59
- }
60
- const serialized = JSON.stringify(value);
61
- if (typeof serialized !== 'string') {
62
- throw new Error('value is not JSON serializable');
63
- }
64
- return serialized;
65
- }
66
- catch (error) {
67
- const message = error instanceof Error ? error.message : String(error);
68
- throw new Error(`Invalid context packet JSON field ${field}: ${message}`);
69
- }
70
- }
71
- function normalizePacketCreatedAt(value) {
72
- let createdAt;
73
- if (typeof value === 'number') {
74
- createdAt = value;
75
- }
76
- else if (typeof value === 'string') {
77
- const trimmed = value.trim();
78
- if (trimmed.length === 0) {
79
- throw new Error('Invalid context packet field created_at: expected valid timestamp');
80
- }
81
- const numeric = Number(trimmed);
82
- createdAt = Number.isFinite(numeric) ? numeric : Date.parse(trimmed);
83
- }
84
- else {
85
- throw new Error('Invalid context packet field created_at: expected valid timestamp');
86
- }
87
- if (!Number.isFinite(createdAt) ||
88
- createdAt < 0 ||
89
- !Number.isFinite(new Date(createdAt).getTime())) {
90
- throw new Error('Invalid context packet field created_at: expected valid timestamp');
91
- }
92
- return Math.floor(createdAt);
93
- }
94
- function modelRunsTableExists(adapter) {
95
- const row = adapter
96
- .prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'model_runs'")
97
- .get();
98
- return row?.name === 'model_runs';
99
- }
100
- function modelRunStatus(adapter, modelRunId) {
101
- if (!modelRunsTableExists(adapter)) {
102
- return null;
103
- }
104
- const row = adapter
105
- .prepare('SELECT status FROM model_runs WHERE model_run_id = ?')
106
- .get(modelRunId);
107
- return typeof row?.status === 'string' ? row.status : null;
108
- }
109
- function modelRunLineageNode(adapter, modelRunId) {
110
- if (!modelRunsTableExists(adapter)) {
111
- return null;
112
- }
113
- const row = adapter
114
- .prepare(`
115
- SELECT model_run_id, parent_model_run_id, envelope_hash
116
- FROM model_runs
117
- WHERE model_run_id = ?
118
- `)
119
- .get(modelRunId);
120
- if (typeof row?.model_run_id !== 'string') {
121
- return null;
122
- }
123
- return {
124
- model_run_id: row.model_run_id,
125
- parent_model_run_id: typeof row.parent_model_run_id === 'string' && row.parent_model_run_id.length > 0
126
- ? row.parent_model_run_id
127
- : null,
128
- envelope_hash: typeof row.envelope_hash === 'string' && row.envelope_hash.length > 0
129
- ? row.envelope_hash
130
- : null,
131
- };
132
- }
133
- function modelRunLineage(adapter, modelRunId) {
134
- const lineage = [];
135
- const seen = new Set();
136
- let currentId = modelRunId;
137
- while (currentId && !seen.has(currentId) && lineage.length < 1_000) {
138
- seen.add(currentId);
139
- const node = modelRunLineageNode(adapter, currentId);
140
- if (!node) {
141
- break;
142
- }
143
- lineage.push(node);
144
- currentId = node.parent_model_run_id;
145
- }
146
- return lineage;
147
- }
148
- function sharesTrustedModelRunLineage(adapter, packet, callerModelRunId) {
149
- const packetLineage = modelRunLineage(adapter, packet.model_run_id);
150
- const callerLineage = modelRunLineage(adapter, callerModelRunId);
151
- if (packetLineage.length === 0 || callerLineage.length === 0) {
152
- return false;
153
- }
154
- if (packetLineage.some((node) => node.envelope_hash !== packet.envelope_hash)) {
155
- return false;
156
- }
157
- if (callerLineage.some((node) => node.envelope_hash !== packet.envelope_hash)) {
158
- return false;
159
- }
160
- const callerAncestors = new Set(callerLineage.map((node) => node.model_run_id));
161
- return packetLineage.some((node) => callerAncestors.has(node.model_run_id));
162
- }
163
- function assertTrustedModelRunStatus(adapter, packet, includeFailed) {
164
- if (!modelRunsTableExists(adapter)) {
165
- return;
166
- }
167
- const status = modelRunStatus(adapter, packet.model_run_id);
168
- if (!status) {
169
- throw new Error(`Context packet model run not found: ${packet.model_run_id}`);
170
- }
171
- if (status === 'committed') {
172
- return;
173
- }
174
- if (includeFailed && status === 'failed') {
175
- return;
176
- }
177
- throw new Error(`Context packet model run must be committed before trusted use: ${packet.model_run_id} (${status})`);
178
- }
179
- function assertTrustedModelRunLineage(adapter, packet, callerModelRunId) {
180
- if (!callerModelRunId) {
181
- return;
182
- }
183
- if (packet.model_run_id === callerModelRunId) {
184
- return;
185
- }
186
- if (!modelRunsTableExists(adapter)) {
187
- throw new Error(`Context packet model run lineage cannot be verified: ${packet.model_run_id}`);
188
- }
189
- if (sharesTrustedModelRunLineage(adapter, packet, callerModelRunId)) {
190
- return;
191
- }
192
- throw new Error(`Context packet model run lineage mismatch for ${packet.packet_id}: caller ${callerModelRunId}, packet ${packet.model_run_id}`);
193
- }
194
- function insertContextPacket(adapter, packet) {
195
- const packetToInsert = {
196
- ...packet,
197
- packet_json: normalizeJsonInput(packet.packet_json, 'packet_json'),
198
- scope_json: normalizeJsonInput(packet.scope_json, 'scope_json'),
199
- source_refs_json: normalizeJsonInput(packet.source_refs_json, 'source_refs_json'),
200
- created_at: normalizePacketCreatedAt(packet.created_at),
201
- };
202
- adapter
203
- .prepare(`
204
- INSERT INTO context_packets (
205
- packet_id, task, packet_json, scope_json, scope_hash, envelope_hash, model_run_id,
206
- agent_id, input_snapshot_ref, source_refs_json, tenant_id, project_id,
207
- memory_scope_kind, memory_scope_id, created_at
208
- )
209
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
210
- `)
211
- .run(packetToInsert.packet_id, packetToInsert.task, packetToInsert.packet_json, packetToInsert.scope_json, packetToInsert.scope_hash, packetToInsert.envelope_hash, packetToInsert.model_run_id, packetToInsert.agent_id, packetToInsert.input_snapshot_ref, packetToInsert.source_refs_json, packetToInsert.tenant_id, packetToInsert.project_id, packetToInsert.memory_scope_kind, packetToInsert.memory_scope_id, packetToInsert.created_at);
212
- const inserted = adapter
213
- .prepare('SELECT * FROM context_packets WHERE packet_id = ?')
214
- .get(packetToInsert.packet_id);
215
- if (!inserted) {
216
- throw new Error(`Context packet insert failed: ${packetToInsert.packet_id}`);
217
- }
218
- return mapPacketRow(inserted);
219
- }
220
- function getContextPacket(adapter, packetId) {
221
- const row = adapter.prepare('SELECT * FROM context_packets WHERE packet_id = ?').get(packetId);
222
- return row ? mapPacketRow(row) : null;
223
- }
224
- function getContextPacketForTrustedUse(adapter, input) {
225
- const packet = getContextPacket(adapter, input.packetId);
226
- if (!packet) {
227
- return null;
228
- }
229
- if (packet.envelope_hash !== input.envelopeHash) {
230
- throw new Error(`Context packet envelope mismatch for ${input.packetId}: expected ${input.envelopeHash}, got ${packet.envelope_hash}`);
231
- }
232
- if (input.modelRunId && packet.model_run_id !== input.modelRunId) {
233
- throw new Error(`Context packet model run mismatch for ${input.packetId}: expected ${input.modelRunId}, got ${packet.model_run_id}`);
234
- }
235
- assertTrustedModelRunLineage(adapter, packet, input.callerModelRunId);
236
- assertTrustedModelRunStatus(adapter, packet, input.includeFailed === true);
237
- return packet;
238
- }
239
- //# sourceMappingURL=packet-store.js.map