@jungjaehoon/mama-core 2.4.1 → 4.0.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 (371) 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/dist/action-contracts.d.ts +212 -0
  39. package/dist/action-contracts.js +10 -0
  40. package/dist/api/catalog.d.ts +118 -0
  41. package/dist/api/catalog.js +1756 -0
  42. package/dist/api/dispatch.d.ts +76 -0
  43. package/dist/api/dispatch.js +372 -0
  44. package/dist/canonicalize.d.ts +2 -2
  45. package/dist/canonicalize.js +3 -3
  46. package/dist/client/client.d.ts +33 -0
  47. package/dist/client/client.js +123 -0
  48. package/dist/client/ipc.d.ts +81 -0
  49. package/dist/client/ipc.js +314 -0
  50. package/dist/db-adapter/base-adapter.d.ts +6 -66
  51. package/dist/db-adapter/base-adapter.js +6 -6
  52. package/dist/db-adapter/index.d.ts +5 -5
  53. package/dist/db-adapter/index.js +2 -5
  54. package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
  55. package/dist/db-adapter/node-sqlite-adapter.js +1968 -570
  56. package/dist/db-manager.d.ts +53 -97
  57. package/dist/db-manager.js +121 -603
  58. package/dist/embedding/embedder.d.ts +132 -0
  59. package/dist/embedding/embedder.js +299 -0
  60. package/dist/identity/principal-repository.d.ts +2 -2
  61. package/dist/index.d.ts +43 -58
  62. package/dist/index.js +97 -145
  63. package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
  64. package/dist/knowledge/access.js +663 -0
  65. package/dist/knowledge/case-errors.d.ts +31 -0
  66. package/dist/knowledge/case-errors.js +40 -0
  67. package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
  68. package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
  69. package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
  70. package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
  71. package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
  72. package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
  73. package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
  74. package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
  75. package/dist/knowledge/commitments.d.ts +188 -0
  76. package/dist/knowledge/commitments.js +370 -0
  77. package/dist/knowledge/decision-edges.d.ts +70 -0
  78. package/dist/knowledge/decision-edges.js +123 -0
  79. package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
  80. package/dist/knowledge/graph-query.js +1585 -0
  81. package/dist/knowledge/identity.d.ts +16 -0
  82. package/dist/knowledge/identity.js +22 -0
  83. package/dist/knowledge/index.d.ts +47 -0
  84. package/dist/knowledge/index.js +90 -0
  85. package/dist/knowledge/judgments.d.ts +118 -0
  86. package/dist/knowledge/judgments.js +808 -0
  87. package/dist/knowledge/observations.d.ts +160 -0
  88. package/dist/knowledge/observations.js +449 -0
  89. package/dist/knowledge/question-type.d.ts +34 -0
  90. package/dist/knowledge/question-type.js +70 -0
  91. package/dist/{search → knowledge}/ranker-features.js +1 -1
  92. package/dist/{search → knowledge}/search-quality.d.ts +0 -1
  93. package/dist/knowledge/search.d.ts +38 -0
  94. package/dist/knowledge/search.js +91 -0
  95. package/dist/knowledge/source-ingest.d.ts +65 -0
  96. package/dist/knowledge/source-ingest.js +174 -0
  97. package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
  98. package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
  99. package/dist/knowledge/work-dates.d.ts +49 -0
  100. package/dist/knowledge/work-dates.js +120 -0
  101. package/dist/mama-api.d.ts +114 -778
  102. package/dist/mama-api.js +313 -2461
  103. package/dist/memory/api.d.ts +264 -24
  104. package/dist/memory/api.js +1633 -843
  105. package/dist/memory/bootstrap-builder.d.ts +2 -1
  106. package/dist/memory/bootstrap-builder.js +5 -5
  107. package/dist/memory/channel-summary-state-store.d.ts +3 -2
  108. package/dist/memory/channel-summary-state-store.js +53 -51
  109. package/dist/memory/channel-summary-store.d.ts +5 -3
  110. package/dist/memory/channel-summary-store.js +3 -8
  111. package/dist/memory/dashboard-read.d.ts +46 -0
  112. package/dist/memory/dashboard-read.js +94 -0
  113. package/dist/memory/event-store.d.ts +3 -3
  114. package/dist/memory/event-store.js +3 -10
  115. package/dist/memory/finding-store.d.ts +3 -2
  116. package/dist/memory/finding-store.js +2 -7
  117. package/dist/memory/graph-read.d.ts +52 -0
  118. package/dist/memory/graph-read.js +130 -0
  119. package/dist/memory/judgment-types.d.ts +394 -0
  120. package/dist/memory/judgment-types.js +16 -0
  121. package/dist/memory/provenance-audit.d.ts +5 -2
  122. package/dist/memory/provenance-audit.js +8 -14
  123. package/dist/memory/provenance-live.d.ts +141 -0
  124. package/dist/memory/provenance-live.js +409 -0
  125. package/dist/memory/provenance-query.d.ts +5 -4
  126. package/dist/memory/provenance-query.js +21 -29
  127. package/dist/memory/provenance-resolver.d.ts +191 -0
  128. package/dist/memory/provenance-resolver.js +155 -0
  129. package/dist/memory/provenance.d.ts +1 -11
  130. package/dist/memory/provenance.js +2 -33
  131. package/dist/memory/recall-sanitize.d.ts +55 -0
  132. package/dist/memory/recall-sanitize.js +144 -0
  133. package/dist/memory/secret-filter.d.ts +32 -0
  134. package/dist/memory/secret-filter.js +126 -0
  135. package/dist/memory/truth-store.d.ts +2 -1
  136. package/dist/memory/truth-store.js +1 -4
  137. package/dist/memory/types.d.ts +74 -24
  138. package/dist/memory/types.js +75 -5
  139. package/dist/memory/write-adapters.d.ts +98 -0
  140. package/dist/memory/write-adapters.js +242 -0
  141. package/dist/operations/owner-action-effects.d.ts +53 -0
  142. package/dist/operations/owner-action-effects.js +96 -0
  143. package/dist/provenance/source-ref.d.ts +1 -1
  144. package/dist/provenance/source-ref.js +0 -2
  145. package/dist/registry/corrections.d.ts +31 -0
  146. package/dist/registry/corrections.js +332 -0
  147. package/dist/registry/record-identity.d.ts +49 -0
  148. package/dist/registry/record-identity.js +133 -0
  149. package/dist/registry/store.d.ts +101 -0
  150. package/dist/registry/store.js +395 -0
  151. package/dist/registry/types.d.ts +28 -0
  152. package/dist/registry/types.js +5 -0
  153. package/dist/relevance-scorer.js +2 -2
  154. package/dist/runtime/agent-event-bus.d.ts +50 -0
  155. package/dist/runtime/agent-event-bus.js +101 -0
  156. package/dist/runtime/drivers/claude-cli-wrapper.d.ts +155 -0
  157. package/dist/runtime/drivers/claude-cli-wrapper.js +392 -0
  158. package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
  159. package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
  160. package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
  161. package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
  162. package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
  163. package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
  164. package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
  165. package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
  166. package/dist/runtime/drivers/codex-home.d.ts +20 -0
  167. package/dist/runtime/drivers/codex-home.js +674 -0
  168. package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
  169. package/dist/runtime/drivers/codex-thread-registry.js +433 -0
  170. package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
  171. package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
  172. package/dist/runtime/drivers/persistent-cli-process.d.ts +424 -0
  173. package/dist/runtime/drivers/persistent-cli-process.js +1543 -0
  174. package/dist/runtime/drivers/types.d.ts +456 -0
  175. package/dist/runtime/drivers/types.js +110 -0
  176. package/dist/runtime/mailbox.d.ts +223 -0
  177. package/dist/runtime/mailbox.js +582 -0
  178. package/dist/runtime/model-run-store.d.ts +28 -0
  179. package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
  180. package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
  181. package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
  182. package/dist/runtime/native-effect-observer.d.ts +22 -0
  183. package/dist/runtime/native-effect-observer.js +103 -0
  184. package/dist/runtime/native-input-journal.d.ts +46 -0
  185. package/dist/runtime/native-input-journal.js +308 -0
  186. package/dist/runtime/native-prompt.d.ts +118 -0
  187. package/dist/runtime/native-prompt.js +496 -0
  188. package/dist/runtime/native-session.d.ts +10 -0
  189. package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
  190. package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
  191. package/dist/runtime/native-tool-trace-observer.js +65 -0
  192. package/dist/runtime/native-turn.d.ts +272 -0
  193. package/dist/runtime/native-turn.js +1041 -0
  194. package/dist/runtime/operations.d.ts +236 -0
  195. package/dist/runtime/operations.js +565 -0
  196. package/dist/runtime/post-tool-handler.d.ts +74 -0
  197. package/dist/runtime/post-tool-handler.js +137 -0
  198. package/dist/runtime/prompt-layers.d.ts +126 -0
  199. package/dist/runtime/prompt-layers.js +239 -0
  200. package/dist/runtime/runtime-process.d.ts +102 -0
  201. package/dist/runtime/runtime-process.js +206 -0
  202. package/dist/runtime/runtime.d.ts +278 -0
  203. package/dist/runtime/runtime.js +563 -0
  204. package/dist/runtime/session-pool.d.ts +176 -0
  205. package/dist/runtime/session-pool.js +369 -0
  206. package/dist/runtime/stimulus-payload.d.ts +5 -0
  207. package/dist/runtime/stimulus-payload.js +50 -0
  208. package/dist/runtime/subagent-bridge.d.ts +24 -0
  209. package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
  210. package/dist/runtime/text-completion.d.ts +22 -0
  211. package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
  212. package/dist/runtime/token-estimator.d.ts +25 -0
  213. package/dist/runtime/token-estimator.js +75 -0
  214. package/dist/runtime/tool-trace-store.d.ts +22 -0
  215. package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
  216. package/dist/runtime/trace-summary.d.ts +5 -0
  217. package/dist/runtime/trace-summary.js +74 -0
  218. package/dist/runtime/turn-text.d.ts +23 -0
  219. package/dist/runtime/turn-text.js +41 -0
  220. package/dist/storage/database.d.ts +67 -0
  221. package/dist/storage/database.js +158 -0
  222. package/package.json +20 -34
  223. package/dist/agent-graph/alias-write.d.ts +0 -3
  224. package/dist/agent-graph/alias-write.js +0 -234
  225. package/dist/agent-graph/entity-resolve.d.ts +0 -3
  226. package/dist/agent-graph/entity-resolve.js +0 -271
  227. package/dist/agent-graph/errors.d.ts +0 -4
  228. package/dist/agent-graph/errors.js +0 -11
  229. package/dist/agent-graph/graph-query.d.ts +0 -5
  230. package/dist/agent-graph/graph-query.js +0 -360
  231. package/dist/agent-graph/index.d.ts +0 -6
  232. package/dist/agent-situation/builder.d.ts +0 -8
  233. package/dist/agent-situation/builder.js +0 -239
  234. package/dist/agent-situation/cache-key.d.ts +0 -4
  235. package/dist/agent-situation/cache-key.js +0 -64
  236. package/dist/agent-situation/index.d.ts +0 -7
  237. package/dist/agent-situation/index.js +0 -28
  238. package/dist/agent-situation/packet-store.d.ts +0 -27
  239. package/dist/agent-situation/packet-store.js +0 -228
  240. package/dist/agent-situation/ranking-policy.d.ts +0 -18
  241. package/dist/agent-situation/ranking-policy.js +0 -75
  242. package/dist/agent-situation/source-readers.d.ts +0 -52
  243. package/dist/agent-situation/source-readers.js +0 -300
  244. package/dist/agent-situation/types.d.ts +0 -195
  245. package/dist/cases/wiki-page-index.d.ts +0 -37
  246. package/dist/cases/wiki-page-index.js +0 -201
  247. package/dist/config-loader.d.ts +0 -68
  248. package/dist/config-loader.js +0 -239
  249. package/dist/connectors/event-index.d.ts +0 -24
  250. package/dist/connectors/event-index.js +0 -245
  251. package/dist/connectors/raw-query.d.ts +0 -40
  252. package/dist/connectors/raw-query.js +0 -412
  253. package/dist/connectors/types.d.ts +0 -117
  254. package/dist/connectors/types.js +0 -3
  255. package/dist/context-compile/boundary-defaults.d.ts +0 -12
  256. package/dist/context-compile/boundary-defaults.js +0 -105
  257. package/dist/context-compile/channel-grant.js +0 -66
  258. package/dist/context-compile/compiler-policy.d.ts +0 -39
  259. package/dist/context-compile/compiler-policy.js +0 -147
  260. package/dist/context-compile/compiler.d.ts +0 -18
  261. package/dist/context-compile/compiler.js +0 -404
  262. package/dist/context-compile/index.d.ts +0 -10
  263. package/dist/context-compile/index.js +0 -26
  264. package/dist/context-compile/packet-store.d.ts +0 -8
  265. package/dist/context-compile/packet-store.js +0 -239
  266. package/dist/context-compile/ref.d.ts +0 -7
  267. package/dist/context-compile/ref.js +0 -102
  268. package/dist/context-compile/source-readers.d.ts +0 -70
  269. package/dist/context-compile/source-readers.js +0 -840
  270. package/dist/context-compile/types.d.ts +0 -155
  271. package/dist/context-compile/types.js +0 -11
  272. package/dist/context-compile/visibility.d.ts +0 -21
  273. package/dist/context-compile/visibility.js +0 -224
  274. package/dist/decision-tracker.d.ts +0 -206
  275. package/dist/decision-tracker.js +0 -481
  276. package/dist/edges/ref-validation.d.ts +0 -7
  277. package/dist/edges/ref-validation.js +0 -321
  278. package/dist/edges/store.d.ts +0 -8
  279. package/dist/edges/store.js +0 -129
  280. package/dist/embedding-client.d.ts +0 -28
  281. package/dist/embedding-client.js +0 -53
  282. package/dist/embedding-server/index.d.ts +0 -67
  283. package/dist/embedding-server/index.js +0 -405
  284. package/dist/embedding-server/mobile/auth.d.ts +0 -44
  285. package/dist/embedding-server/mobile/auth.js +0 -150
  286. package/dist/embedding-server/mobile/daemon.d.ts +0 -129
  287. package/dist/embedding-server/mobile/daemon.js +0 -313
  288. package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
  289. package/dist/embedding-server/mobile/output-parser.js +0 -241
  290. package/dist/embedding-server/mobile/session-api.d.ts +0 -57
  291. package/dist/embedding-server/mobile/session-api.js +0 -261
  292. package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
  293. package/dist/embedding-server/mobile/session-manager.js +0 -378
  294. package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
  295. package/dist/embedding-server/mobile/websocket-handler.js +0 -486
  296. package/dist/embeddings.d.ts +0 -68
  297. package/dist/embeddings.js +0 -244
  298. package/dist/entities/audit-metrics.d.ts +0 -68
  299. package/dist/entities/audit-metrics.js +0 -124
  300. package/dist/entities/candidate-generator.d.ts +0 -8
  301. package/dist/entities/candidate-generator.js +0 -24
  302. package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
  303. package/dist/entities/entity-linked-decision-counts.js +0 -29
  304. package/dist/entities/entity-list.d.ts +0 -22
  305. package/dist/entities/entity-list.js +0 -3
  306. package/dist/entities/entity-orphan-list.d.ts +0 -17
  307. package/dist/entities/entity-orphan-list.js +0 -3
  308. package/dist/entities/entity-search.d.ts +0 -20
  309. package/dist/entities/entity-search.js +0 -3
  310. package/dist/entities/errors.d.ts +0 -55
  311. package/dist/entities/errors.js +0 -100
  312. package/dist/entities/lineage-store.d.ts +0 -28
  313. package/dist/entities/lineage-store.js +0 -204
  314. package/dist/entities/normalization.d.ts +0 -14
  315. package/dist/entities/normalization.js +0 -63
  316. package/dist/entities/policy-store.d.ts +0 -8
  317. package/dist/entities/policy-store.js +0 -75
  318. package/dist/entities/policy-types.d.ts +0 -72
  319. package/dist/entities/policy-types.js +0 -59
  320. package/dist/entities/projection.d.ts +0 -8
  321. package/dist/entities/projection.js +0 -82
  322. package/dist/entities/provenance-query.d.ts +0 -32
  323. package/dist/entities/provenance-query.js +0 -3
  324. package/dist/entities/read-identity.d.ts +0 -31
  325. package/dist/entities/read-identity.js +0 -264
  326. package/dist/entities/recall-bridge.d.ts +0 -5
  327. package/dist/entities/recall-bridge.js +0 -171
  328. package/dist/entities/resolution-engine.d.ts +0 -8
  329. package/dist/entities/resolution-engine.js +0 -3
  330. package/dist/entities/rollback-preview.d.ts +0 -35
  331. package/dist/entities/rollback-preview.js +0 -3
  332. package/dist/entities/source-locator.d.ts +0 -3
  333. package/dist/entities/source-locator.js +0 -32
  334. package/dist/entities/store.d.ts +0 -69
  335. package/dist/entities/store.js +0 -544
  336. package/dist/entities/types.d.ts +0 -166
  337. package/dist/entities/types.js +0 -30
  338. package/dist/memory/extraction-prompt.d.ts +0 -4
  339. package/dist/memory/extraction-prompt.js +0 -89
  340. package/dist/memory/scope-backfill.d.ts +0 -14
  341. package/dist/memory/scope-backfill.js +0 -3
  342. package/dist/memory/scope-store.d.ts +0 -4
  343. package/dist/memory/scope-store.js +0 -9
  344. package/dist/memory-store.d.ts +0 -87
  345. package/dist/memory-store.js +0 -78
  346. package/dist/model-runs/store.d.ts +0 -13
  347. package/dist/model-runs/tool-trace-store.d.ts +0 -8
  348. package/dist/notification-manager.d.ts +0 -7
  349. package/dist/notification-manager.js +0 -12
  350. package/dist/outcome-tracker.d.ts +0 -151
  351. package/dist/outcome-tracker.js +0 -271
  352. package/dist/query-intent.d.ts +0 -23
  353. package/dist/query-intent.js +0 -114
  354. package/dist/runtime/trusted-provenance.d.ts +0 -3
  355. package/dist/runtime/trusted-provenance.js +0 -6
  356. package/dist/search/question-type.d.ts +0 -5
  357. package/dist/search/question-type.js +0 -41
  358. package/dist/test-utils.d.ts +0 -80
  359. package/dist/test-utils.js +0 -218
  360. package/dist/tier-validator.d.ts +0 -43
  361. package/dist/tier-validator.js +0 -159
  362. package/dist/time-formatter.d.ts +0 -25
  363. package/dist/time-formatter.js +0 -93
  364. /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
  365. /package/dist/{search → knowledge}/feedback-store.js +0 -0
  366. /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
  367. /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
  368. /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
  369. /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
  370. /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
  371. /package/dist/{search → knowledge}/search-quality.js +0 -0
@@ -1,481 +0,0 @@
1
- "use strict";
2
- /**
3
- * MAMA (Memory-Augmented MCP Architecture) - Decision Tracker
4
- *
5
- * Learn and store decisions with graph relationships
6
- * Tasks: 3.1-3.9 (Learn decision, ID generation, supersedes edges, refinement, embeddings)
7
- * AC #1: Decision stored with outcome=NULL, confidence from LLM
8
- * AC #2: Supersedes relationship creation
9
- * AC #5: Multi-parent refinement with confidence calculation
10
- *
11
- * Updated for PostgreSQL compatibility via db-manager
12
- *
13
- * @module decision-tracker
14
- * @version 2.0
15
- * @date 2025-11-17
16
- */
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.VALID_EDGE_TYPES = void 0;
19
- exports.generateDecisionId = generateDecisionId;
20
- exports.getPreviousDecision = getPreviousDecision;
21
- exports.createEdge = createEdge;
22
- exports.createSupersedesEdge = createSupersedesEdge;
23
- exports.markSuperseded = markSuperseded;
24
- exports.calculateCombinedConfidence = calculateCombinedConfidence;
25
- exports.detectRefinement = detectRefinement;
26
- exports.parseReasoningForRelationships = parseReasoningForRelationships;
27
- exports.createEdgesFromReasoning = createEdgesFromReasoning;
28
- exports.learnDecision = learnDecision;
29
- exports.updateConfidence = updateConfidence;
30
- const debug_logger_js_1 = require("./debug-logger.js");
31
- const memory_store_js_1 = require("./memory-store.js");
32
- // ════════════════════════════════════════════════════════════════════════════
33
- // Story 2.1: Extended Edge Types
34
- // ════════════════════════════════════════════════════════════════════════════
35
- // Valid relationship types for decision_edges
36
- // Original: supersedes, refines, contradicts
37
- // v1.3 Extension: builds_on, debates, synthesizes
38
- exports.VALID_EDGE_TYPES = [
39
- 'supersedes', // Original: New decision replaces old one
40
- 'refines', // Original: Decision refines another
41
- 'contradicts', // Original: Decision contradicts another
42
- 'builds_on', // v1.3: Extends existing decision with new insights
43
- 'debates', // v1.3: Presents counter-argument with evidence
44
- 'synthesizes', // v1.3: Merges multiple decisions into unified approach
45
- ];
46
- /**
47
- * Generate decision ID
48
- *
49
- * Task 3.2: Generate decision ID: `decision_${topic}_${timestamp}`
50
- *
51
- * @param topic - Decision topic
52
- * @returns Decision ID
53
- */
54
- function generateDecisionId(topic) {
55
- // Sanitize topic: remove spaces, lowercase, max 50 chars
56
- const sanitized = topic
57
- .toLowerCase()
58
- .replace(/\s+/g, '_')
59
- .replace(/[^a-z0-9_]/g, '')
60
- .substring(0, 50);
61
- const timestamp = Date.now();
62
- const random = Math.random().toString(36).substring(2, 6);
63
- return `decision_${sanitized}_${timestamp}_${random}`;
64
- }
65
- /**
66
- * Check for previous decision on same topic
67
- *
68
- * Task 3.3: Query decisions table WHERE topic=? AND superseded_by IS NULL
69
- * AC #2: Find previous decision to create supersedes relationship
70
- *
71
- * @param topic - Decision topic
72
- * @returns Previous decision or null
73
- */
74
- async function getPreviousDecision(topic) {
75
- const adapter = (0, memory_store_js_1.getAdapter)();
76
- try {
77
- const stmt = adapter.prepare(`
78
- SELECT * FROM decisions
79
- WHERE topic = ? AND superseded_by IS NULL
80
- ORDER BY created_at DESC
81
- LIMIT 1
82
- `);
83
- const previous = stmt.get(topic);
84
- return previous || null;
85
- }
86
- catch (error) {
87
- const message = error instanceof Error ? error.message : String(error);
88
- throw new Error(`Failed to query previous decision: ${message}`);
89
- }
90
- }
91
- /**
92
- * Create a decision edge with specified relationship type
93
- *
94
- * Story 2.1: Generic edge creation supporting all relationship types
95
- *
96
- * @param fromId - Source decision ID
97
- * @param toId - Target decision ID
98
- * @param relationship - Edge type (supersedes, builds_on, debates, synthesizes, etc.)
99
- * @param reason - Reason for the relationship
100
- * @returns Success status
101
- */
102
- async function createEdge(fromId, toId, relationship, reason) {
103
- const adapter = (0, memory_store_js_1.getAdapter)();
104
- // Story 2.1: Runtime validation of edge types
105
- if (!exports.VALID_EDGE_TYPES.includes(relationship)) {
106
- throw new Error(`Invalid edge type: "${relationship}". Valid types: ${exports.VALID_EDGE_TYPES.join(', ')}`);
107
- }
108
- try {
109
- // Note: SQLite CHECK constraint only allows supersedes/refines/contradicts
110
- // New types (builds_on, debates, synthesizes) bypass CHECK via runtime validation
111
- // The INSERT will fail for new types due to CHECK constraint
112
- // WORKAROUND: Use PRAGMA ignore_check_constraints or recreate table
113
- // For now, we'll catch the error and handle gracefully
114
- // Story 2.1: LLM auto-detected edges are approved by default (approved_by_user=1)
115
- // This allows them to appear in search results via querySemanticEdges
116
- const stmt = adapter.prepare(`
117
- INSERT OR REPLACE INTO decision_edges (from_id, to_id, relationship, reason, created_at, created_by, approved_by_user)
118
- VALUES (?, ?, ?, ?, ?, 'llm', 1)
119
- `);
120
- stmt.run(fromId, toId, relationship, reason, Date.now());
121
- return true;
122
- }
123
- catch (error) {
124
- const message = error instanceof Error ? error.message : String(error);
125
- // Handle CHECK constraint failure for new edge types
126
- if (message.includes('CHECK constraint failed')) {
127
- (0, debug_logger_js_1.info)(`[decision-tracker] Edge type "${relationship}" not yet supported in schema, skipping edge creation`);
128
- return false;
129
- }
130
- throw new Error(`Failed to create ${relationship} edge: ${message}`);
131
- }
132
- }
133
- /**
134
- * Create supersedes edge
135
- *
136
- * Task 3.5: Create supersedes edge (INSERT INTO decision_edges)
137
- * AC #2: Supersedes relationship creation
138
- *
139
- * @param fromId - New decision ID
140
- * @param toId - Previous decision ID
141
- * @param reason - Reason for superseding
142
- */
143
- async function createSupersedesEdge(fromId, toId, reason) {
144
- return createEdge(fromId, toId, 'supersedes', reason);
145
- }
146
- /**
147
- * Update previous decision's superseded_by field
148
- *
149
- * Task 3.5: Update previous decision's superseded_by field
150
- * AC #2: Previous decision's superseded_by field updated
151
- *
152
- * @param previousId - Previous decision ID
153
- * @param newId - New decision ID
154
- */
155
- async function markSuperseded(previousId, newId) {
156
- const adapter = (0, memory_store_js_1.getAdapter)();
157
- try {
158
- const stmt = adapter.prepare(`
159
- UPDATE decisions
160
- SET superseded_by = ?, updated_at = ?
161
- WHERE id = ?
162
- `);
163
- stmt.run(newId, Date.now(), previousId);
164
- }
165
- catch (error) {
166
- const message = error instanceof Error ? error.message : String(error);
167
- throw new Error(`Failed to mark decision as superseded: ${message}`);
168
- }
169
- }
170
- /**
171
- * Calculate combined confidence (Bayesian update)
172
- *
173
- * Task 3.6: Calculate combined confidence for multi-parent refinement
174
- * AC #5: Confidence score calculated based on history
175
- *
176
- * @param prior - Prior confidence
177
- * @param parents - Parent decisions
178
- * @returns Updated confidence (0.0-1.0)
179
- */
180
- function calculateCombinedConfidence(prior, parents) {
181
- if (!parents || parents.length === 0) {
182
- return prior;
183
- }
184
- // Bayesian update: Average parent confidences + prior
185
- const parentConfidences = parents.map((p) => p.confidence ?? 0.5);
186
- const avgParentConfidence = parentConfidences.reduce((a, b) => a + b, 0) / parentConfidences.length;
187
- // Weighted average: 60% prior, 40% parent history
188
- const combined = prior * 0.6 + avgParentConfidence * 0.4;
189
- // Clamp to [0.0, 1.0]
190
- return Math.max(0, Math.min(1, combined));
191
- }
192
- /**
193
- * Detect multi-parent refinement
194
- *
195
- * Task 3.6: Detect if new decision refines multiple previous decisions
196
- * AC #5: Multi-parent refinement
197
- *
198
- * @param _detection - Decision detection result
199
- * @param _sessionContext - Session context
200
- * @returns Array of parent decision IDs or null
201
- */
202
- function detectRefinement(_detection, _sessionContext) {
203
- // Refinement detection not implemented; currently returns null for single-parent only.
204
- // Multi-parent refinement detection would analyze session context for references
205
- // to multiple decisions (e.g., "combine", "merge", user mentioning multiple topics).
206
- return null;
207
- }
208
- // ════════════════════════════════════════════════════════════════════════════
209
- // Story 2.2: Reasoning Field Parsing
210
- // ════════════════════════════════════════════════════════════════════════════
211
- /**
212
- * Parse reasoning field for relationship references
213
- *
214
- * Story 2.2: Detect patterns like:
215
- * - builds_on: <decision_id>
216
- * - debates: <decision_id>
217
- * - synthesizes: [id1, id2]
218
- *
219
- * @param reasoning - Decision reasoning text
220
- * @returns Detected relationships
221
- */
222
- function parseReasoningForRelationships(reasoning) {
223
- if (!reasoning || typeof reasoning !== 'string') {
224
- return [];
225
- }
226
- const relationships = [];
227
- // Pattern 1: builds_on: <id> (allows optional markdown **bold**)
228
- const buildsOnMatch = reasoning.match(/\*{0,2}builds_on\*{0,2}:\*{0,2}\s*(decision_[a-z0-9_]+)/gi);
229
- if (buildsOnMatch) {
230
- buildsOnMatch.forEach((match) => {
231
- const id = match.replace(/\*{0,2}builds_on\*{0,2}:\*{0,2}\s*/i, '').trim();
232
- if (id) {
233
- relationships.push({ type: 'builds_on', targetIds: [id] });
234
- }
235
- });
236
- }
237
- // Pattern 2: debates: <id> (allows optional markdown **bold**)
238
- const debatesMatch = reasoning.match(/\*{0,2}debates\*{0,2}:\*{0,2}\s*(decision_[a-z0-9_]+)/gi);
239
- if (debatesMatch) {
240
- debatesMatch.forEach((match) => {
241
- const id = match.replace(/\*{0,2}debates\*{0,2}:\*{0,2}\s*/i, '').trim();
242
- if (id) {
243
- relationships.push({ type: 'debates', targetIds: [id] });
244
- }
245
- });
246
- }
247
- // Pattern 3: synthesizes: [id1, id2] (allows optional markdown **bold**)
248
- const synthesizesMatch = reasoning.match(/\*{0,2}synthesizes\*{0,2}:\*{0,2}\s*\[?\s*(decision_[a-z0-9_]+(?:\s*,\s*decision_[a-z0-9_]+)*)\s*\]?/gi);
249
- if (synthesizesMatch) {
250
- synthesizesMatch.forEach((match) => {
251
- const idsStr = match
252
- .replace(/\*{0,2}synthesizes\*{0,2}:\*{0,2}\s*\[?\s*/i, '')
253
- .replace(/\s*\]?\s*$/, '');
254
- const ids = idsStr.split(/\s*,\s*/).filter((id) => id.startsWith('decision_'));
255
- if (ids.length > 0) {
256
- relationships.push({ type: 'synthesizes', targetIds: ids });
257
- }
258
- });
259
- }
260
- return relationships;
261
- }
262
- /**
263
- * Create edges from parsed reasoning relationships
264
- *
265
- * Story 2.2: Auto-create edges when reasoning references other decisions
266
- *
267
- * @param fromId - Source decision ID
268
- * @param reasoning - Decision reasoning text
269
- * @returns Edge creation stats
270
- */
271
- async function createEdgesFromReasoning(fromId, reasoning) {
272
- const relationships = parseReasoningForRelationships(reasoning);
273
- let created = 0;
274
- let failed = 0;
275
- for (const rel of relationships) {
276
- for (const targetId of rel.targetIds) {
277
- try {
278
- // Verify target decision exists
279
- const adapter = (0, memory_store_js_1.getAdapter)();
280
- const stmt = adapter.prepare('SELECT id FROM decisions WHERE id = ?');
281
- const target = stmt.get(targetId);
282
- if (!target) {
283
- (0, debug_logger_js_1.info)(`[decision-tracker] Referenced decision not found: ${targetId}, skipping edge`);
284
- failed++;
285
- continue;
286
- }
287
- // Create the edge
288
- const reason = `Auto-detected from reasoning: ${rel.type} reference`;
289
- const success = await createEdge(fromId, targetId, rel.type, reason);
290
- if (success) {
291
- created++;
292
- (0, debug_logger_js_1.info)(`[decision-tracker] Created ${rel.type} edge: ${fromId} -> ${targetId}`);
293
- }
294
- else {
295
- failed++;
296
- }
297
- }
298
- catch (error) {
299
- const message = error instanceof Error ? error.message : String(error);
300
- (0, debug_logger_js_1.info)(`[decision-tracker] Failed to create edge to ${targetId}: ${message}`);
301
- failed++;
302
- }
303
- }
304
- }
305
- return { created, failed };
306
- }
307
- // ════════════════════════════════════════════════════════════════════════════
308
- // NOTE: Auto-link functions REMOVED in v1.2.0
309
- //
310
- // Removed functions:
311
- // - createRefinesEdge
312
- // - detectConflicts
313
- // - createContradictsEdge
314
- // - findRelatedDecisions
315
- // - isConflicting
316
- //
317
- // Reason: LLM can infer decision evolution from time-ordered search results.
318
- // Auto-links created 366 noise edges (100% cross-topic).
319
- // Only supersedes (same topic) is reliable.
320
- //
321
- // See: CHANGELOG.md v1.2.0 - 2025-11-25
322
- // ════════════════════════════════════════════════════════════════════════════
323
- /**
324
- * Learn Decision Function (Main API)
325
- *
326
- * Task 3.1: Create Learn Decision Function
327
- * Task 3.2: Generate decision ID
328
- * Task 3.3: Check for previous decision on same topic
329
- * Task 3.4: Insert new decision with outcome=NULL, confidence from LLM
330
- * Task 3.5: If previous exists: Create supersedes edge, Update previous superseded_by
331
- * Task 3.6: If multi-parent refinement: Store refined_from, Calculate combined confidence
332
- * Task 3.7: Generate enhanced embedding
333
- * Task 3.8: Store embedding (link via rowid)
334
- *
335
- * AC #1: Decision stored with outcome=NULL, confidence from LLM
336
- * AC #2: Supersedes relationship creation
337
- * AC #5: Multi-parent refinement with confidence calculation
338
- *
339
- * @param detection - Decision detection result
340
- * @param toolExecution - Tool execution data
341
- * @param sessionContext - Session context
342
- * @returns decisionId and notification
343
- */
344
- async function learnDecision(detection, toolExecution, sessionContext) {
345
- try {
346
- // Ensure database is initialized
347
- await (0, memory_store_js_1.initDB)();
348
- // ════════════════════════════════════════════════════════
349
- // Task 3.2: Generate Decision ID
350
- // ════════════════════════════════════════════════════════
351
- const decisionId = generateDecisionId(detection.topic);
352
- // ════════════════════════════════════════════════════════
353
- // Task 3.3: Check for Previous Decision on Same Topic
354
- // ════════════════════════════════════════════════════════
355
- const previous = await getPreviousDecision(detection.topic);
356
- // ════════════════════════════════════════════════════════
357
- // Task 3.6: Detect Multi-Parent Refinement
358
- // ════════════════════════════════════════════════════════
359
- const refinedFrom = detectRefinement(detection, sessionContext);
360
- let finalConfidence = detection.confidence;
361
- if (refinedFrom && refinedFrom.length > 0) {
362
- // AC #5: Multi-parent refinement
363
- // Get parent decisions
364
- const adapter = (0, memory_store_js_1.getAdapter)();
365
- const stmt = adapter.prepare('SELECT * FROM decisions WHERE id = ?');
366
- const parents = refinedFrom.map((parentId) => stmt.get(parentId));
367
- const validParents = parents.filter((p) => p !== undefined && p !== null);
368
- // Calculate combined confidence
369
- finalConfidence = calculateCombinedConfidence(detection.confidence, validParents);
370
- }
371
- // ════════════════════════════════════════════════════════
372
- // Task 3.4: Insert New Decision
373
- // ════════════════════════════════════════════════════════
374
- // ════════════════════════════════════════════════════════
375
- // Story 014.7.6: Set needs_validation for assistant insights
376
- // ════════════════════════════════════════════════════════
377
- const isAssistantInsight = detection.type === 'assistant_insight';
378
- const needsValidation = isAssistantInsight ? 1 : 0;
379
- // AC #1: Decision stored with outcome=NULL, confidence from LLM
380
- const decision = {
381
- id: decisionId,
382
- topic: detection.topic,
383
- decision: detection.decision,
384
- reasoning: detection.reasoning,
385
- outcome: null, // AC #1: outcome=NULL (not yet tracked)
386
- failure_reason: null,
387
- limitation: null,
388
- user_involvement: 'requested', // Inferred from tool execution
389
- session_id: sessionContext.session_id,
390
- supersedes: previous ? previous.id : null,
391
- superseded_by: null,
392
- refined_from: refinedFrom, // AC #5: Multi-parent refinement
393
- confidence: finalConfidence, // AC #1, AC #5: Confidence from LLM
394
- needs_validation: needsValidation, // Story 014.7.6: AC #1 - Validation for assistant insights
395
- validation_attempts: 0, // Story 014.7.6: Track skip count
396
- usage_count: 0, // Story 014.7.6: Track usage for periodic review
397
- created_at: toolExecution.timestamp || Date.now(),
398
- updated_at: Date.now(),
399
- // Story 014.7.10: Add trust_context for Claude-Friendly Context Formatting
400
- trust_context: detection.trust_context ? JSON.stringify(detection.trust_context) : null,
401
- // Story 2.1: 5-layer narrative fields
402
- evidence: detection.evidence
403
- ? Array.isArray(detection.evidence)
404
- ? JSON.stringify(detection.evidence)
405
- : detection.evidence
406
- : null,
407
- alternatives: detection.alternatives
408
- ? Array.isArray(detection.alternatives)
409
- ? JSON.stringify(detection.alternatives)
410
- : detection.alternatives
411
- : null,
412
- risks: detection.risks || null,
413
- };
414
- // Task 3.7, 3.8: Generate enhanced embedding and store in embeddings table
415
- // (Handled by insertDecisionWithEmbedding function)
416
- await (0, memory_store_js_1.insertDecisionWithEmbedding)(decision);
417
- // ════════════════════════════════════════════════════════
418
- // Task 3.5: Create Supersedes Relationship (if previous exists)
419
- // ════════════════════════════════════════════════════════
420
- if (previous) {
421
- // AC #2: Supersedes relationship creation
422
- const reason = `User changed from "${previous.decision}" to "${detection.decision}"`;
423
- // Create edge: new decision → previous decision
424
- await createSupersedesEdge(decisionId, previous.id, reason);
425
- // Update previous decision's superseded_by field
426
- await markSuperseded(previous.id, decisionId);
427
- }
428
- // ════════════════════════════════════════════════════════
429
- // NOTE: Auto-link generation (refines, contradicts) REMOVED
430
- //
431
- // Reason: LLM can infer decision evolution from time-ordered
432
- // search results. Auto-links created 366 noise edges (100%
433
- // cross-topic). Only supersedes (same topic) is reliable.
434
- //
435
- // See: 2025-11-25 discussion on decision tracking algorithm
436
- // ════════════════════════════════════════════════════════
437
- // ════════════════════════════════════════════════════════
438
- // Story 014.7.6: Generate notification if needs validation
439
- // ════════════════════════════════════════════════════════
440
- let notification = null;
441
- if (needsValidation) {
442
- const { notifyInsight } = await import('./notification-manager.js');
443
- // notifyInsight is a stub that returns null
444
- notification = notifyInsight();
445
- }
446
- // ════════════════════════════════════════════════════════
447
- // Task 3.9: Return decision ID (+ notification for Story 014.7.6)
448
- // ════════════════════════════════════════════════════════
449
- return {
450
- decisionId,
451
- notification, // null if no validation needed, notification object otherwise
452
- };
453
- }
454
- catch (error) {
455
- // CLAUDE.md Rule #1: No silent failures
456
- const message = error instanceof Error ? error.message : String(error);
457
- throw new Error(`Failed to learn decision: ${message}`);
458
- }
459
- }
460
- /**
461
- * Update confidence score
462
- *
463
- * Task 6: Confidence evolution (used in outcome tracking)
464
- * AC #5: Confidence score calculated based on history
465
- *
466
- * @param prior - Prior confidence
467
- * @param evidence - Evidence items
468
- * @returns Updated confidence (0.0-1.0)
469
- */
470
- function updateConfidence(prior, evidence) {
471
- if (!evidence || evidence.length === 0) {
472
- return prior;
473
- }
474
- // Calculate total impact
475
- const totalImpact = evidence.reduce((acc, e) => acc + e.impact, 0);
476
- // Update confidence
477
- const updated = prior + totalImpact;
478
- // Clamp to [0.0, 1.0]
479
- return Math.max(0, Math.min(1, updated));
480
- }
481
- //# sourceMappingURL=decision-tracker.js.map
@@ -1,7 +0,0 @@
1
- import type { DatabaseAdapter } from '../db-manager.js';
2
- import type { ListVisibleTwinEdgesOptions, TwinEdgeRecord, TwinRef, TwinVisibility } from './types.js';
3
- type TwinRefVisibilityAdapter = Pick<DatabaseAdapter, 'prepare'>;
4
- export declare function assertTwinRefsVisible(adapter: TwinRefVisibilityAdapter, refs: readonly TwinRef[], visibility?: TwinVisibility): void;
5
- export declare function listVisibleTwinEdgesForRefs(adapter: TwinRefVisibilityAdapter, refs: readonly TwinRef[], options?: ListVisibleTwinEdgesOptions): TwinEdgeRecord[];
6
- export {};
7
- //# sourceMappingURL=ref-validation.d.ts.map