@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
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Case errors.
4
+ *
5
+ * `CaseMergeChainCycleError` used to live in `entities/errors.ts` and extend
6
+ * that module's `EntityError`. Nothing about a cycle in `case_truth` belongs to
7
+ * the entity substrate; it sat there because the two subsystems were written
8
+ * together. It carries its own shape now.
9
+ *
10
+ * @module cases/errors
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.CaseMergeChainCycleError = void 0;
14
+ class CaseMergeChainCycleError extends Error {
15
+ code = 'case.merge_chain_cycle';
16
+ doc_section = '#case-merge-chain-cycle';
17
+ context;
18
+ hint;
19
+ constructor(context) {
20
+ super(`Case merge chain cycle detected at depth ${context.detected_at_depth} starting from case_id=${context.case_id}. Chain=${context.chain.join(' -> ')}.`);
21
+ this.name = new.target.name;
22
+ this.context = context;
23
+ this.hint = 'Inspect case_truth.canonical_case_id links and remove the cycle before retrying.';
24
+ if (Error.captureStackTrace) {
25
+ Error.captureStackTrace(this, new.target);
26
+ }
27
+ }
28
+ toErrorEnvelope() {
29
+ return {
30
+ error: {
31
+ code: this.code,
32
+ message: this.message,
33
+ hint: this.hint,
34
+ doc_url: `docs/guides/troubleshooting.md${this.doc_section}`,
35
+ },
36
+ };
37
+ }
38
+ }
39
+ exports.CaseMergeChainCycleError = CaseMergeChainCycleError;
40
+ //# sourceMappingURL=case-errors.js.map
@@ -1,5 +1,6 @@
1
- import type { AdapterLike } from './wiki-page-index.js';
2
- import type { SearchHitDiagnostics } from '../search/search-quality.js';
1
+ import type { DatabaseAdapter } from '../db-manager.js';
2
+ type AdapterLike = Pick<DatabaseAdapter, 'prepare' | 'transaction'>;
3
+ import type { SearchHitDiagnostics } from '../knowledge/search-quality.js';
3
4
  export type { AdapterLike };
4
5
  export interface SearchRollupLeafHit {
5
6
  source_type: 'decision' | 'checkpoint' | 'wiki_page' | 'connector_event';
@@ -11,7 +12,7 @@ export interface SearchRollupLeafHit {
11
12
  retrieval_diagnostics?: SearchHitDiagnostics;
12
13
  }
13
14
  export interface SearchRollupResult {
14
- source_type: 'decision' | 'checkpoint' | 'wiki_page' | 'case' | 'standalone_connector_hit';
15
+ source_type: 'decision' | 'checkpoint' | 'wiki_page' | 'case' | 'ungrouped_connector_hit';
15
16
  source_id: string;
16
17
  case_id: string | null;
17
18
  score: number;
@@ -24,4 +25,4 @@ export declare function rollUpSearchHits(input: {
24
25
  fusedHits: SearchRollupLeafHit[];
25
26
  adapter: AdapterLike;
26
27
  }): SearchRollupResult[];
27
- //# sourceMappingURL=search-rollup.d.ts.map
28
+ //# sourceMappingURL=case-search-rollup.d.ts.map
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.rollUpSearchHits = rollUpSearchHits;
4
- const store_js_1 = require("./store.js");
4
+ const case_store_js_1 = require("./case-store.js");
5
5
  function sourceKey(sourceType, sourceId) {
6
6
  return `${sourceType}:${sourceId}`;
7
7
  }
@@ -26,7 +26,6 @@ function searchHitDiagnostics(value) {
26
26
  !(object.vector_similarity === null || typeof object.vector_similarity === 'number') ||
27
27
  typeof object.is_vector_only !== 'boolean' ||
28
28
  typeof object.lexical_support !== 'boolean' ||
29
- typeof object.entity_support !== 'boolean' ||
30
29
  typeof object.scope_support !== 'boolean' ||
31
30
  (object.graph_source !== 'primary' &&
32
31
  object.graph_source !== 'expanded' &&
@@ -50,9 +49,6 @@ function diagnosticsRank(diagnostics) {
50
49
  if (diagnostics.lexical_support) {
51
50
  rank += 20;
52
51
  }
53
- if (diagnostics.entity_support) {
54
- rank += 20;
55
- }
56
52
  if (diagnostics.graph_source === 'primary') {
57
53
  rank += 10;
58
54
  }
@@ -101,7 +97,7 @@ function loadCaseRecord(adapter, caseId) {
101
97
  return row ?? { case_id: caseId };
102
98
  }
103
99
  function canonicalCaseId(adapter, caseId) {
104
- return (0, store_js_1.resolveCanonicalCaseChain)(adapter, caseId).terminal_case_id;
100
+ return (0, case_store_js_1.resolveCanonicalCaseChain)(adapter, caseId).terminal_case_id;
105
101
  }
106
102
  function listActiveMembershipCaseIds(adapter, sourceType, sourceId) {
107
103
  const rows = adapter
@@ -173,7 +169,9 @@ function upsertOrphan(orphans, leaf) {
173
169
  const diagnostics = leafDiagnostics(leaf);
174
170
  const contributingLeafDiagnostics = diagnostics ? { [leaf.source_id]: diagnostics } : undefined;
175
171
  orphans.set(key, {
176
- source_type: leaf.source_type === 'connector_event' ? 'standalone_connector_hit' : leaf.source_type,
172
+ // A connector hit that belongs to no case. Its old name began with the word a
173
+ // product in this repo is called, so it read as one and was counted as one.
174
+ source_type: leaf.source_type === 'connector_event' ? 'ungrouped_connector_hit' : leaf.source_type,
177
175
  source_id: leaf.source_id,
178
176
  case_id: null,
179
177
  score: leaf.fused_rank_score,
@@ -306,4 +304,4 @@ function rollUpSearchHits(input) {
306
304
  ...Array.from(orphans.values()),
307
305
  ].sort(compareResults);
308
306
  }
309
- //# sourceMappingURL=search-rollup.js.map
307
+ //# sourceMappingURL=case-search-rollup.js.map
@@ -1,5 +1,5 @@
1
- import { type DatabaseAdapter } from '../db-manager.js';
2
- import type { CanonicalCaseResolution, CaseAssembly, CaseAssemblyMembership, CaseBlocker, CaseConfidence, CaseCorrectionRecord, CaseMembershipRecord, CaseMembershipSourceType, CasePrimaryActor, CaseProposalKind, CaseProposalQueueRecord, CaseTruthRecord } from './types.js';
1
+ import type { DatabaseAdapter } from '../db-manager.js';
2
+ import type { CanonicalCaseResolution, CaseAssembly, CaseAssemblyMembership, CaseBlocker, CaseConfidence, CaseCorrectionRecord, CaseMembershipRecord, CaseMembershipSourceType, CasePrimaryActor, CaseProposalKind, CaseProposalQueueRecord, CaseTruthRecord } from './case-types.js';
3
3
  type CaseStoreAdapter = Pick<DatabaseAdapter, 'prepare' | 'transaction'>;
4
4
  export interface UpsertCaseTruthSlowFieldsInput {
5
5
  case_id: string;
@@ -43,9 +43,7 @@ export interface AssembleCaseOptions {
43
43
  }
44
44
  export declare function resolveCanonicalCaseChain(adapter: CaseStoreAdapter, caseId: string, maxDepth?: number): CanonicalCaseResolution;
45
45
  export declare function expandCaseChainForAssembly(adapter: Pick<DatabaseAdapter, 'prepare'>, terminalCaseId: string, resolvedChain: string[]): string[];
46
- export declare function upsertCaseTruthSlowFields(input: UpsertCaseTruthSlowFieldsInput): CaseTruthRecord;
47
46
  export declare function upsertCaseTruthSlowFields(adapter: CaseStoreAdapter, input: UpsertCaseTruthSlowFieldsInput): CaseTruthRecord;
48
- export declare function upsertExplicitCaseMemberships(input: UpsertExplicitCaseMembershipsInput): CaseMembershipRecord[];
49
47
  export declare function upsertExplicitCaseMemberships(adapter: CaseStoreAdapter, input: UpsertExplicitCaseMembershipsInput): CaseMembershipRecord[];
50
48
  export declare function listActiveMembershipsForCaseChain(adapter: CaseStoreAdapter, caseIds: string[], limit?: number): CaseAssemblyMembership[];
51
49
  export interface ListActiveCorrectionsForCaseResult {
@@ -64,7 +62,6 @@ export interface ListActiveCorrectionsForCaseResult {
64
62
  export declare function listActiveCorrectionsForCase(adapter: CaseStoreAdapter, caseId: string): ListActiveCorrectionsForCaseResult;
65
63
  export declare function listActiveCorrectionsForCaseChain(adapter: CaseStoreAdapter, caseIds: string[]): CaseCorrectionRecord[];
66
64
  export declare function listUnresolvedCaseProposals(adapter: CaseStoreAdapter, project: string): CaseProposalQueueRecord[];
67
- export declare function assembleCase(caseId: string, options?: AssembleCaseOptions): CaseAssembly;
68
65
  export declare function assembleCase(adapter: CaseStoreAdapter, caseId: string, options?: AssembleCaseOptions): CaseAssembly;
69
66
  export {};
70
- //# sourceMappingURL=store.d.ts.map
67
+ //# sourceMappingURL=case-store.d.ts.map
@@ -9,39 +9,7 @@ exports.listActiveCorrectionsForCase = listActiveCorrectionsForCase;
9
9
  exports.listActiveCorrectionsForCaseChain = listActiveCorrectionsForCaseChain;
10
10
  exports.listUnresolvedCaseProposals = listUnresolvedCaseProposals;
11
11
  exports.assembleCase = assembleCase;
12
- const db_manager_js_1 = require("../db-manager.js");
13
- const errors_js_1 = require("../entities/errors.js");
14
- function isAdapter(value) {
15
- return (typeof value === 'object' &&
16
- value !== null &&
17
- typeof value.prepare === 'function' &&
18
- typeof value.transaction === 'function');
19
- }
20
- function resolveWriteArgs(adapterOrInput, input) {
21
- if (input !== undefined) {
22
- if (!isAdapter(adapterOrInput)) {
23
- throw new Error('First argument must be a database adapter when input is provided.');
24
- }
25
- return { adapter: adapterOrInput, input };
26
- }
27
- if (isAdapter(adapterOrInput)) {
28
- throw new Error('Input is required when first argument is a database adapter.');
29
- }
30
- return { adapter: (0, db_manager_js_1.getAdapter)(), input: adapterOrInput };
31
- }
32
- function resolveAssembleArgs(adapterOrCaseId, caseIdOrOptions, options) {
33
- if (isAdapter(adapterOrCaseId)) {
34
- if (typeof caseIdOrOptions !== 'string') {
35
- throw new Error('caseId is required when first argument is a database adapter.');
36
- }
37
- return { adapter: adapterOrCaseId, caseId: caseIdOrOptions, options };
38
- }
39
- return {
40
- adapter: (0, db_manager_js_1.getAdapter)(),
41
- caseId: adapterOrCaseId,
42
- options: typeof caseIdOrOptions === 'object' ? caseIdOrOptions : undefined,
43
- };
44
- }
12
+ const case_errors_js_1 = require("./case-errors.js");
45
13
  function nowIso() {
46
14
  return new Date().toISOString();
47
15
  }
@@ -277,14 +245,14 @@ function resolveCanonicalCaseChain(adapter, caseId, maxDepth = 64) {
277
245
  const detectedAtDepth = chain.length + 1;
278
246
  const cycleChain = [...chain, current];
279
247
  if (visited.has(current)) {
280
- throw new errors_js_1.CaseMergeChainCycleError({
248
+ throw new case_errors_js_1.CaseMergeChainCycleError({
281
249
  case_id: caseId,
282
250
  chain: cycleChain,
283
251
  detected_at_depth: detectedAtDepth,
284
252
  });
285
253
  }
286
254
  if (detectedAtDepth > maxDepth) {
287
- throw new errors_js_1.CaseMergeChainCycleError({
255
+ throw new case_errors_js_1.CaseMergeChainCycleError({
288
256
  case_id: caseId,
289
257
  chain: cycleChain,
290
258
  detected_at_depth: detectedAtDepth,
@@ -336,8 +304,7 @@ function expandCaseChainForAssembly(adapter, terminalCaseId, resolvedChain) {
336
304
  }
337
305
  return chain;
338
306
  }
339
- function upsertCaseTruthSlowFields(adapterOrInput, maybeInput) {
340
- const { adapter, input } = resolveWriteArgs(adapterOrInput, maybeInput);
307
+ function upsertCaseTruthSlowFields(adapter, input) {
341
308
  const createdAt = nowIso();
342
309
  const updatedAt = createdAt;
343
310
  return adapter.transaction(() => {
@@ -368,8 +335,7 @@ function upsertCaseTruthSlowFields(adapterOrInput, maybeInput) {
368
335
  return saved;
369
336
  });
370
337
  }
371
- function upsertExplicitCaseMemberships(adapterOrInput, maybeInput) {
372
- const { adapter, input } = resolveWriteArgs(adapterOrInput, maybeInput);
338
+ function upsertExplicitCaseMemberships(adapter, input) {
373
339
  const updatedAt = nowIso();
374
340
  return adapter.transaction(() => {
375
341
  // wiki-compiler memberships are hard-coded to status='active' and
@@ -577,8 +543,7 @@ function buildLinkedCases(adapter, chain, terminalCaseId) {
577
543
  }
578
544
  return linked;
579
545
  }
580
- function assembleCase(adapterOrCaseId, caseIdOrOptions, maybeOptions) {
581
- const { adapter, caseId, options } = resolveAssembleArgs(adapterOrCaseId, caseIdOrOptions, maybeOptions);
546
+ function assembleCase(adapter, caseId, options) {
582
547
  const resolution = resolveCanonicalCaseChain(adapter, caseId);
583
548
  const assemblyChain = expandCaseChainForAssembly(adapter, resolution.terminal_case_id, resolution.chain);
584
549
  const caseTruth = loadCaseTruth(adapter, resolution.terminal_case_id);
@@ -747,4 +712,4 @@ function assembleCase(adapterOrCaseId, caseIdOrOptions, maybeOptions) {
747
712
  }
748
713
  return assembly;
749
714
  }
750
- //# sourceMappingURL=store.js.map
715
+ //# sourceMappingURL=case-store.js.map
@@ -1,6 +1,6 @@
1
1
  import type { DatabaseAdapter } from '../db-manager.js';
2
- import type { CaseTimelineRangeInput, CaseTimelineRangeResult } from './types.js';
2
+ import type { CaseTimelineRangeInput, CaseTimelineRangeResult } from './case-types.js';
3
3
  type CaseTimelineRangeAdapter = Pick<DatabaseAdapter, 'prepare' | 'transaction'>;
4
4
  export declare function caseTimelineRange(adapter: CaseTimelineRangeAdapter, input: CaseTimelineRangeInput): CaseTimelineRangeResult;
5
- export type { CaseTimelineRangeInput, CaseTimelineRangeItem, CaseTimelineRangeResult, } from './types.js';
6
- //# sourceMappingURL=timeline-range.d.ts.map
5
+ export type { CaseTimelineRangeInput, CaseTimelineRangeItem, CaseTimelineRangeResult, } from './case-types.js';
6
+ //# sourceMappingURL=case-timeline-range.d.ts.map
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.caseTimelineRange = caseTimelineRange;
4
- const event_index_js_1 = require("../connectors/event-index.js");
5
- const store_js_1 = require("./store.js");
4
+ const case_store_js_1 = require("./case-store.js");
6
5
  function codedError(code, message, context) {
7
6
  const error = new Error(`${code}: ${message}`);
8
7
  error.code = code;
@@ -124,15 +123,16 @@ function connectorEventSnapshot(row) {
124
123
  return null;
125
124
  }
126
125
  return {
127
- event_index_id: row.event_index_id,
128
- source_connector: row.source_connector,
126
+ event_index_id: row.observation_id,
127
+ source_connector: row.source,
129
128
  source_id: row.source_id,
130
129
  source_locator: row.source_locator,
131
130
  artifact_locator: row.artifact_locator,
132
131
  title: row.title,
133
- content: row.content,
134
- event_datetime: row.event_datetime,
132
+ content: row.body,
133
+ event_datetime: row.source_at,
135
134
  event_date: row.event_date,
135
+ observation_ref: row.observation_id,
136
136
  };
137
137
  }
138
138
  function membershipById(memberships, sourceType) {
@@ -229,10 +229,13 @@ function loadObservationItems(adapter, memberships, bounds, includeConnectorEnri
229
229
  const sourceId = String(row.id);
230
230
  const membership = membershipMap.get(sourceId);
231
231
  const eventDatetime = timestampMs(row.timestamp_observed) ?? timestampMs(row.created_at);
232
+ // Same move as the artifact branch: the source detail is the observation's,
233
+ // and reaching for the connector index made a core read depend on a package
234
+ // three of four consumers do not install.
232
235
  const connectorEvent = includeConnectorEnrichments &&
233
236
  typeof row.source_connector === 'string' &&
234
237
  typeof row.source_raw_record_id === 'string'
235
- ? (0, event_index_js_1.getConnectorEventIndexRecord)(adapter, String(row.source_connector), String(row.source_raw_record_id))
238
+ ? loadObservationBySource(adapter, String(row.source_connector), String(row.source_raw_record_id))
236
239
  : null;
237
240
  return {
238
241
  item_type: 'observation',
@@ -253,30 +256,49 @@ function loadObservationItems(adapter, memberships, bounds, includeConnectorEnri
253
256
  })
254
257
  .filter((item) => withinBounds(item.event_datetime, bounds));
255
258
  }
256
- function loadArtifactConnectorEvent(adapter, sourceId) {
259
+ /**
260
+ * The observation an artifact membership points at.
261
+ *
262
+ * This read the connector event index, which is how a core read came to require
263
+ * the connector package to be installed -- a consumer without it got no timeline
264
+ * and, worse, a migration chain that stopped at 072. Every field the caller uses
265
+ * is on the observation, which is the core's own table and the thing a judgment
266
+ * actually rests on.
267
+ */
268
+ /** One observation by the (source, id-within-it) pair that produced it. */
269
+ function loadObservationBySource(adapter, source, sourceId) {
257
270
  const row = adapter
258
271
  .prepare(`
259
- SELECT *
260
- FROM connector_event_index
261
- WHERE event_index_id = ?
272
+ SELECT observation_id, source, source_id, source_type, source_locator, title,
273
+ artifact_locator, artifact_title, body, source_at, observed_at, event_date
274
+ FROM observation_versions
275
+ WHERE source = ? AND source_id = ?
276
+ ORDER BY observed_at DESC, observation_id DESC
277
+ LIMIT 1
278
+ `)
279
+ .get(source, sourceId);
280
+ return row ? row : null;
281
+ }
282
+ function loadArtifactObservation(adapter, sourceId) {
283
+ const row = adapter
284
+ .prepare(`
285
+ SELECT observation_id, source, source_id, source_type, source_locator, title,
286
+ artifact_locator, artifact_title, body, source_at, observed_at, event_date
287
+ FROM observation_versions
288
+ WHERE observation_id = ?
262
289
  OR artifact_locator = ?
263
- ORDER BY event_datetime ASC, event_index_id ASC
290
+ ORDER BY observed_at ASC, observation_id ASC
264
291
  LIMIT 1
265
292
  `)
266
293
  .get(sourceId, sourceId);
267
- if (!row) {
268
- return null;
269
- }
270
- const sourceConnector = String(row.source_connector);
271
- const connectorSourceId = String(row.source_id);
272
- return (0, event_index_js_1.getConnectorEventIndexRecord)(adapter, sourceConnector, connectorSourceId);
294
+ return row ? row : null;
273
295
  }
274
296
  function loadArtifactItems(adapter, memberships, bounds, includeConnectorEnrichments) {
275
297
  const artifactMemberships = memberships.filter((membership) => membership.source_type === 'artifact');
276
298
  return artifactMemberships
277
299
  .map((membership) => {
278
- const connectorEvent = loadArtifactConnectorEvent(adapter, membership.source_id);
279
- const eventDatetime = connectorEvent?.event_datetime ?? null;
300
+ const connectorEvent = loadArtifactObservation(adapter, membership.source_id);
301
+ const eventDatetime = connectorEvent?.source_at ?? null;
280
302
  return {
281
303
  item_type: 'artifact',
282
304
  source_type: 'artifact',
@@ -287,7 +309,7 @@ function loadArtifactItems(adapter, memberships, bounds, includeConnectorEnrichm
287
309
  event_datetime: eventDatetime,
288
310
  event_date: connectorEvent?.event_date ?? eventDateFromMs(eventDatetime),
289
311
  title: connectorEvent?.artifact_title ?? connectorEvent?.title ?? membership.source_id,
290
- summary: connectorEvent?.content ?? null,
312
+ summary: connectorEvent?.body ?? null,
291
313
  role: membership.role,
292
314
  confidence: membership.confidence,
293
315
  membership_reason: membership.reason,
@@ -301,10 +323,10 @@ function loadArtifactItems(adapter, memberships, bounds, includeConnectorEnrichm
301
323
  function caseTimelineRange(adapter, input) {
302
324
  const bounds = parseBounds(input);
303
325
  const limit = normalizeLimit(input.limit);
304
- const resolution = (0, store_js_1.resolveCanonicalCaseChain)(adapter, input.case_id);
305
- const chainResult = (0, store_js_1.listActiveCorrectionsForCase)(adapter, input.case_id);
326
+ const resolution = (0, case_store_js_1.resolveCanonicalCaseChain)(adapter, input.case_id);
327
+ const chainResult = (0, case_store_js_1.listActiveCorrectionsForCase)(adapter, input.case_id);
306
328
  const chain = chainResult.chain;
307
- const memberships = (0, store_js_1.listActiveMembershipsForCaseChain)(adapter, chain);
329
+ const memberships = (0, case_store_js_1.listActiveMembershipsForCaseChain)(adapter, chain);
308
330
  const items = [
309
331
  ...loadDecisionItems(adapter, memberships, bounds),
310
332
  ...loadEventItems(adapter, memberships, bounds),
@@ -319,4 +341,4 @@ function caseTimelineRange(adapter, input) {
319
341
  items: orderedItems.slice(0, limit),
320
342
  };
321
343
  }
322
- //# sourceMappingURL=timeline-range.js.map
344
+ //# sourceMappingURL=case-timeline-range.js.map
@@ -223,6 +223,11 @@ export interface CaseTimelineRangeItem {
223
223
  role: string | null;
224
224
  confidence: number | null;
225
225
  membership_reason: string | null;
226
+ /**
227
+ * The observation this item rests on, when the caller asked for source detail.
228
+ * The field names are the wire shape callers already read; what fills them is
229
+ * the observation, which is the core's own table.
230
+ */
226
231
  connector_event?: {
227
232
  event_index_id: string;
228
233
  source_connector: string;
@@ -230,9 +235,10 @@ export interface CaseTimelineRangeItem {
230
235
  source_locator: string | null;
231
236
  artifact_locator: string | null;
232
237
  title: string | null;
233
- content: string;
238
+ content: string | null;
234
239
  event_datetime: number | null;
235
240
  event_date: string | null;
241
+ observation_ref: string | null;
236
242
  } | null;
237
243
  }
238
244
  export interface CaseTimelineRangeResult {
@@ -241,4 +247,4 @@ export interface CaseTimelineRangeResult {
241
247
  chain: string[];
242
248
  items: CaseTimelineRangeItem[];
243
249
  }
244
- //# sourceMappingURL=types.d.ts.map
250
+ //# sourceMappingURL=case-types.d.ts.map
@@ -44,4 +44,4 @@ exports.CASE_PROPOSAL_KINDS = [
44
44
  ];
45
45
  exports.CASE_PROPOSAL_RESOLUTIONS = ['accepted', 'rejected', 'modified', 'merged'];
46
46
  exports.CASE_CONFIDENCE_LEVELS = ['high', 'medium', 'low'];
47
- //# sourceMappingURL=types.js.map
47
+ //# sourceMappingURL=case-types.js.map
@@ -0,0 +1,4 @@
1
+ import type { DatabaseAdapter } from '../db-manager.js';
2
+ /** Link every stored commitment revision to the revision it follows. */
3
+ export declare function backfillCommitmentRevisionGraph(adapter: DatabaseAdapter): void;
4
+ //# sourceMappingURL=commitment-revision-migration.d.ts.map
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.backfillCommitmentRevisionGraph = backfillCommitmentRevisionGraph;
4
+ const judgment_edge_js_1 = require("./judgment-edge.js");
5
+ /** Link every stored commitment revision to the revision it follows. */
6
+ function backfillCommitmentRevisionGraph(adapter) {
7
+ const assignments = adapter
8
+ .prepare(`SELECT assignment.commitment_id, assignment.revision, assignment.record_id, assignment.operation,
9
+ assignment.agent_id, assignment.model_run_id, assignment.created_at
10
+ FROM commitment_assignments AS assignment
11
+ JOIN commitments AS commitment ON commitment.commitment_id = assignment.commitment_id
12
+ ORDER BY assignment.commitment_id, assignment.revision`)
13
+ .all();
14
+ if (assignments.length === 0)
15
+ return;
16
+ const byCommitment = new Map();
17
+ for (const assignment of assignments) {
18
+ const rows = byCommitment.get(assignment.commitment_id) ?? [];
19
+ rows.push(assignment);
20
+ byCommitment.set(assignment.commitment_id, rows);
21
+ }
22
+ const hasEdge = adapter.prepare(`SELECT 1 FROM twin_edges
23
+ WHERE edge_type = 'builds_on'
24
+ AND subject_kind = 'memory' AND subject_id = ?
25
+ AND object_kind = 'memory' AND object_id = ?`);
26
+ const insertEdge = adapter.prepare(`INSERT OR IGNORE INTO twin_edges (
27
+ edge_id, edge_type, subject_kind, subject_id, object_kind, object_id,
28
+ relation_attrs_json, confidence, source, agent_id, model_run_id, content_hash, created_at
29
+ ) VALUES (?, 'builds_on', 'memory', ?, 'memory', ?, '{}', 1.0, 'code', ?, ?, ?, ?)`);
30
+ for (const [commitmentId, revisions] of byCommitment) {
31
+ for (let index = 0; index < revisions.length; index += 1) {
32
+ const current = revisions[index];
33
+ if (current.operation === 'create')
34
+ continue;
35
+ const previous = revisions[index - 1];
36
+ if (!previous) {
37
+ throw new Error(`Commitment ${commitmentId} revision ${current.revision} has no predecessor`);
38
+ }
39
+ if (hasEdge.get(current.record_id, previous.record_id))
40
+ continue;
41
+ const link = {
42
+ relation: 'builds_on',
43
+ target: { kind: 'memory', id: previous.record_id },
44
+ };
45
+ const id = (0, judgment_edge_js_1.judgmentEdgeId)(`migration:099:${commitmentId}:${current.revision}`, 0, link.relation, link.target);
46
+ insertEdge.run(id, current.record_id, previous.record_id, current.agent_id, current.model_run_id, (0, judgment_edge_js_1.judgmentEdgeContentHash)(id, current.record_id, link), current.created_at);
47
+ }
48
+ }
49
+ }
50
+ //# sourceMappingURL=commitment-revision-migration.js.map