@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
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ /**
3
+ * Mechanical adapters between the public memory write surfaces and the
4
+ * knowledge command boundary.
5
+ *
6
+ * Every write funnels through `appendJudgment` (or `ingestSource` for raw
7
+ * evidence): the adapter builds exactly one command, derives honest access —
8
+ * never fabricating authority the caller did not present — and maps the receipt
9
+ * back to the legacy result shape.
10
+ */
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.unsignedWriteAccess = unsignedWriteAccess;
16
+ exports.writeAccessForProvenance = writeAccessForProvenance;
17
+ exports.boundScopesOf = boundScopesOf;
18
+ exports.assertRelationshipTargetsVisible = assertRelationshipTargetsVisible;
19
+ exports.relationshipsToCommandFields = relationshipsToCommandFields;
20
+ exports.commandEmbedder = commandEmbedder;
21
+ exports.appendOutcomeAmendment = appendOutcomeAmendment;
22
+ const node_crypto_1 = __importDefault(require("node:crypto"));
23
+ const canonicalize_js_1 = require("../canonicalize.js");
24
+ const db_manager_js_1 = require("../db-manager.js");
25
+ const judgments_js_1 = require("../knowledge/judgments.js");
26
+ /** Principal label for writes that carry no authenticated identity. */
27
+ const UNSIGNED_PRINCIPAL = 'unsigned-local';
28
+ /** Access for a caller with no signed identity: it is admitted to exactly the
29
+ * scopes it declared, nothing more. */
30
+ function unsignedWriteAccess(scopes) {
31
+ return {
32
+ principalId: UNSIGNED_PRINCIPAL,
33
+ agentId: UNSIGNED_PRINCIPAL,
34
+ scopes: [...scopes],
35
+ // Not a principal and not a caller of actions: this access exists for the
36
+ // direct-write path below dispatch. Empty is what it can truthfully claim,
37
+ // and if it ever did reach dispatch every action would be denied.
38
+ actions: [],
39
+ };
40
+ }
41
+ /**
42
+ * Access derived from normalized write provenance — the legacy direct-write
43
+ * path, where the caller is the process itself and declares its own scopes.
44
+ * Unified-action writes do NOT come through here: dispatch passes the real
45
+ * `JudgmentAccess` (the call authority) straight to `appendJudgment`.
46
+ */
47
+ function writeAccessForProvenance(provenance, requestedScopes) {
48
+ const identity = provenance.agent_id ?? provenance.actor;
49
+ return {
50
+ principalId: identity,
51
+ agentId: provenance.agent_id ?? identity,
52
+ scopes: [...requestedScopes],
53
+ // Same as above: provenance names who wrote, not what they may call.
54
+ actions: [],
55
+ };
56
+ }
57
+ /** Scope refs currently bound to a memory row — the partition a write into
58
+ * that row must be admitted to. */
59
+ function boundScopesOf(adapter, memoryId) {
60
+ return adapter
61
+ .prepare(`SELECT ms.kind, ms.external_id
62
+ FROM memory_scope_bindings msb
63
+ JOIN memory_scopes ms ON ms.id = msb.scope_id
64
+ WHERE msb.memory_id = ?
65
+ ORDER BY msb.is_primary DESC`)
66
+ .all(memoryId)
67
+ .map((row) => {
68
+ const record = row;
69
+ return { kind: record.kind, id: record.external_id };
70
+ });
71
+ }
72
+ /**
73
+ * Fail-first visibility check for explicitly authored relationship targets,
74
+ * preserving the legacy error contract.
75
+ *
76
+ * Trusted envelopes check visibility strictly inside admitted scopes (unbound
77
+ * legacy rows are not reachable — same as the pre-boundary envelope check).
78
+ * Unsigned callers keep the legacy existence check for the original error
79
+ * text; scope admission is then enforced by the command boundary itself.
80
+ */
81
+ function assertRelationshipTargetsVisible(adapter, targetIds, admittedScopes, trustedEnvelope) {
82
+ for (const targetId of targetIds) {
83
+ if (trustedEnvelope) {
84
+ const scopeIds = admittedScopes.map((scope) => (0, db_manager_js_1.buildMemoryScopeId)(scope.kind, scope.id));
85
+ const placeholders = scopeIds.map(() => '?').join(', ');
86
+ const visible = scopeIds.length > 0 &&
87
+ adapter
88
+ .prepare(`SELECT 1 FROM decisions d
89
+ JOIN memory_scope_bindings b ON b.memory_id = d.id
90
+ WHERE d.id = ? AND b.scope_id IN (${placeholders}) LIMIT 1`)
91
+ .get(targetId, ...scopeIds) !== undefined;
92
+ if (!visible) {
93
+ const denied = new Error('Relationship target is unavailable');
94
+ denied.code = 'relationship_target_unavailable';
95
+ throw denied;
96
+ }
97
+ continue;
98
+ }
99
+ const target = adapter.prepare('SELECT id FROM decisions WHERE id = ?').get(targetId);
100
+ if (!target) {
101
+ throw new Error(`mama.save() relationship target does not exist: ${targetId}`);
102
+ }
103
+ }
104
+ }
105
+ const LINK_RELATIONS = new Set([
106
+ 'supersedes',
107
+ 'refines',
108
+ 'contradicts',
109
+ 'mentions',
110
+ 'derived_from',
111
+ 'builds_on',
112
+ 'debates',
113
+ 'synthesizes',
114
+ 'blocks',
115
+ 'next_action_for',
116
+ 'case_member',
117
+ ]);
118
+ /**
119
+ * Map deduplicated legacy relationships onto command fields.
120
+ *
121
+ * Trusted envelopes get the authored form: `supersedes` targets become
122
+ * scope-checked `replaces`, and link-able relations also enter the twin edge
123
+ * graph as explicit `links` — both fail closed inside the boundary.
124
+ *
125
+ * Unsigned callers keep the legacy contract: the adapter already checked that
126
+ * each target exists, so relationships are written only as `decision_edges`
127
+ * projection rows and `supersedes` targets are moved out of current truth
128
+ * through the `supersedeTargets` projection — never as scope-checked authored
129
+ * links the caller was not admitted to.
130
+ */
131
+ function relationshipsToCommandFields(relationships, options) {
132
+ const trusted = options?.trusted === true;
133
+ const links = [];
134
+ const replaces = [];
135
+ const supersedeTargets = [];
136
+ const decisionEdges = [];
137
+ const seen = new Set();
138
+ for (const relationship of relationships) {
139
+ const key = `${relationship.type}:${relationship.targetId}`;
140
+ if (seen.has(key))
141
+ continue;
142
+ seen.add(key);
143
+ const reason = `Explicit ${relationship.type} reference in reasoning`;
144
+ decisionEdges.push({
145
+ targetId: relationship.targetId,
146
+ relationship: relationship.type,
147
+ reason,
148
+ weight: 1,
149
+ });
150
+ if (relationship.type === 'supersedes') {
151
+ if (trusted) {
152
+ replaces.push({ id: relationship.targetId, reason });
153
+ }
154
+ else {
155
+ supersedeTargets.push(relationship.targetId);
156
+ }
157
+ continue;
158
+ }
159
+ if (trusted && LINK_RELATIONS.has(relationship.type)) {
160
+ links.push({
161
+ relation: relationship.type,
162
+ target: { kind: 'memory', id: relationship.targetId },
163
+ });
164
+ }
165
+ }
166
+ return { links, replaces, decisionEdges, supersedeTargets };
167
+ }
168
+ /**
169
+ * Embedder for the command boundary that preserves the legacy enhanced
170
+ * embedding input.
171
+ */
172
+ function commandEmbedder(decision) {
173
+ return { embed: () => (0, db_manager_js_1.prepareDecisionEmbedding)(decision) };
174
+ }
175
+ /**
176
+ * Append one judgment record carrying an authored outcome change and apply the
177
+ * maintained `decisions` projection columns on the target in the same
178
+ * transaction. Identical payloads on the same target replay the stored receipt
179
+ * instead of appending a second record.
180
+ */
181
+ async function appendOutcomeAmendment(decisionId, input, options) {
182
+ const adapter = options.adapter;
183
+ const target = adapter.prepare('SELECT id, topic FROM decisions WHERE id = ?').get(decisionId);
184
+ if (!target) {
185
+ throw new Error(`Decision not found: ${decisionId}`);
186
+ }
187
+ const scopes = boundScopesOf(adapter, decisionId);
188
+ const payload = {
189
+ amended: decisionId,
190
+ outcome: input.outcome ?? null,
191
+ failure_reason: input.failureReason ?? null,
192
+ limitation: input.limitation ?? null,
193
+ confidence: input.confidence ?? null,
194
+ duration_days: input.durationDays ?? null,
195
+ ...(input.payload ?? {}),
196
+ };
197
+ const commandId = input.commandId ??
198
+ `outcome:${decisionId}:${node_crypto_1.default
199
+ .createHash('sha256')
200
+ .update((0, canonicalize_js_1.canonicalizeJSON)(payload))
201
+ .digest('hex')
202
+ .slice(0, 16)}`;
203
+ const amendment = { target: { kind: 'memory', id: decisionId } };
204
+ if (input.outcome !== undefined)
205
+ amendment.outcome = input.outcome;
206
+ if (input.failureReason !== undefined)
207
+ amendment.failureReason = input.failureReason;
208
+ if (input.limitation !== undefined)
209
+ amendment.limitation = input.limitation;
210
+ if (input.confidence !== undefined && input.confidence !== null) {
211
+ amendment.confidence = input.confidence;
212
+ }
213
+ if (input.durationDays !== undefined)
214
+ amendment.durationDays = input.durationDays;
215
+ const receipt = await (0, judgments_js_1.appendJudgment)({
216
+ commandId,
217
+ // Audit records point at the amended memory through the 'amends' link
218
+ // rather than sharing its topic, so they never enter the topic's
219
+ // evolution candidate pool or current-truth recall.
220
+ topic: `judgment/${decisionId}`,
221
+ summary: `Outcome ${input.outcome ?? 'update'} recorded for ${decisionId}`,
222
+ ...(input.failureReason || input.limitation
223
+ ? { reasoning: (input.failureReason ?? input.limitation) }
224
+ : {}),
225
+ recordKind: 'judgment',
226
+ payload,
227
+ scopes,
228
+ agentId: null,
229
+ links: [
230
+ {
231
+ relation: 'amends',
232
+ target: { kind: 'memory', id: decisionId },
233
+ },
234
+ ],
235
+ amends: [amendment],
236
+ record: { kind: 'fact', status: 'active', summary: `Outcome ${input.outcome ?? 'update'}` },
237
+ ...(input.recordedAt !== undefined ? { recordedAt: input.recordedAt } : {}),
238
+ event: { reason: input.eventReason ?? `outcome amendment for ${decisionId}` },
239
+ }, unsignedWriteAccess(scopes), { adapter });
240
+ return { recordId: receipt.recordId, commandId: receipt.commandId };
241
+ }
242
+ //# sourceMappingURL=write-adapters.js.map
@@ -0,0 +1,53 @@
1
+ export interface OwnerActionContext {
2
+ ownerScope: string;
3
+ occurrenceKey: string;
4
+ modelRunId?: string;
5
+ operationId?: string;
6
+ envelopeHash: string;
7
+ workOrderAttemptId?: number;
8
+ }
9
+ export interface VerifiedOwnerActionContext {
10
+ ownerScope: string;
11
+ occurrenceKey: string;
12
+ modelRunId: string | null;
13
+ operationId: string | null;
14
+ envelopeHash: string;
15
+ workOrderAttemptId: number | null;
16
+ }
17
+ export type OwnerActionEffectState = 'transmitting' | 'unknown' | 'confirmed';
18
+ export interface OwnerActionPendingEffect {
19
+ actionKey: string;
20
+ effectKind: string;
21
+ state: Exclude<OwnerActionEffectState, 'confirmed'>;
22
+ originModelRunId: string | null;
23
+ originOperationId: string | null;
24
+ }
25
+ export interface OwnerActionPendingPage {
26
+ items: OwnerActionPendingEffect[];
27
+ nextCursor: {
28
+ createdAt: number;
29
+ actionKey: string;
30
+ } | null;
31
+ }
32
+ export interface OwnerActionEffectStoragePort {
33
+ begin(context: OwnerActionContext, actionKey: string, effectKind: string, intent?: Record<string, unknown>): unknown;
34
+ confirm(context: OwnerActionContext, actionKey: string, effectKind: string, result: Record<string, unknown> | null): void;
35
+ markUnknown(context: OwnerActionContext, actionKey: string, effectKind: string, error: string): void;
36
+ releaseUnstarted(context: OwnerActionContext, actionKey: string, effectKind: string): void;
37
+ pending(context: OwnerActionContext, options?: {
38
+ limit?: number;
39
+ cursor?: {
40
+ createdAt: number;
41
+ actionKey: string;
42
+ };
43
+ }): OwnerActionPendingPage;
44
+ }
45
+ export declare function canonicalizeOwnerActionValue(value: unknown, path?: string): unknown;
46
+ export declare function canonicalOwnerActionJson(value: Record<string, unknown>): string;
47
+ export declare function ownerActionIntentSha256(value: Record<string, unknown>): string;
48
+ export declare function verifyOwnerActionContext(context: OwnerActionContext): VerifiedOwnerActionContext;
49
+ export declare function ownerActionOriginMatch(context: VerifiedOwnerActionContext): {
50
+ clause: string;
51
+ params: string[];
52
+ };
53
+ //# sourceMappingURL=owner-action-effects.d.ts.map
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.canonicalizeOwnerActionValue = canonicalizeOwnerActionValue;
4
+ exports.canonicalOwnerActionJson = canonicalOwnerActionJson;
5
+ exports.ownerActionIntentSha256 = ownerActionIntentSha256;
6
+ exports.verifyOwnerActionContext = verifyOwnerActionContext;
7
+ exports.ownerActionOriginMatch = ownerActionOriginMatch;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const IDENTITY_MAX_LENGTH = 512;
10
+ function canonicalizeOwnerActionValue(value, path = '$') {
11
+ if (value === null) {
12
+ return null;
13
+ }
14
+ if (typeof value === 'string' || typeof value === 'boolean') {
15
+ return value;
16
+ }
17
+ if (typeof value === 'number') {
18
+ if (!Number.isFinite(value)) {
19
+ throw new Error(`owner action intent ${path} must be a finite number`);
20
+ }
21
+ return value;
22
+ }
23
+ if (typeof value !== 'object') {
24
+ throw new Error(`owner action intent ${path} is not JSON-representable (${typeof value})`);
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map((item, index) => canonicalizeOwnerActionValue(item, `${path}[${index}]`));
28
+ }
29
+ if (Object.getPrototypeOf(value) !== Object.prototype) {
30
+ throw new Error(`owner action intent ${path} must be a plain JSON object`);
31
+ }
32
+ return Object.fromEntries(Object.keys(value)
33
+ .sort()
34
+ .map((key) => [
35
+ key,
36
+ canonicalizeOwnerActionValue(value[key], `${path}.${key}`),
37
+ ]));
38
+ }
39
+ function canonicalOwnerActionJson(value) {
40
+ if (value === null ||
41
+ typeof value !== 'object' ||
42
+ Array.isArray(value) ||
43
+ Object.getPrototypeOf(value) !== Object.prototype) {
44
+ throw new Error('owner action intent must be a plain JSON object');
45
+ }
46
+ return JSON.stringify(canonicalizeOwnerActionValue(value));
47
+ }
48
+ function ownerActionIntentSha256(value) {
49
+ return (0, node_crypto_1.createHash)('sha256').update(canonicalOwnerActionJson(value)).digest('hex');
50
+ }
51
+ function requireIdentity(value, field) {
52
+ if (typeof value !== 'string') {
53
+ throw new Error(`owner action ${field} must be a non-blank string`);
54
+ }
55
+ const trimmed = value.trim();
56
+ if (!trimmed || trimmed !== value || trimmed.length > IDENTITY_MAX_LENGTH) {
57
+ throw new Error(`owner action ${field} must be a non-blank string without surrounding space and at most ${IDENTITY_MAX_LENGTH} characters`);
58
+ }
59
+ return trimmed;
60
+ }
61
+ function optionalIdentity(value, field) {
62
+ return value === undefined || value === null ? null : requireIdentity(value, field);
63
+ }
64
+ function verifyOwnerActionContext(context) {
65
+ if (context === null || typeof context !== 'object') {
66
+ throw new Error('owner action context is required');
67
+ }
68
+ const workOrderAttemptId = context.workOrderAttemptId;
69
+ if (workOrderAttemptId !== undefined &&
70
+ (!Number.isSafeInteger(workOrderAttemptId) || workOrderAttemptId <= 0)) {
71
+ throw new Error('owner action workOrderAttemptId must be a positive integer when present');
72
+ }
73
+ const modelRunId = optionalIdentity(context.modelRunId, 'modelRunId');
74
+ const operationId = optionalIdentity(context.operationId, 'operationId');
75
+ if (modelRunId === null && operationId === null) {
76
+ throw new Error('owner action context requires a modelRunId or operationId origin');
77
+ }
78
+ return {
79
+ ownerScope: requireIdentity(context.ownerScope, 'ownerScope'),
80
+ occurrenceKey: requireIdentity(context.occurrenceKey, 'occurrenceKey'),
81
+ modelRunId,
82
+ operationId,
83
+ envelopeHash: requireIdentity(context.envelopeHash, 'envelopeHash'),
84
+ workOrderAttemptId: workOrderAttemptId ?? null,
85
+ };
86
+ }
87
+ function ownerActionOriginMatch(context) {
88
+ if (context.operationId !== null) {
89
+ return { clause: 'origin_operation_id = ?', params: [context.operationId] };
90
+ }
91
+ return {
92
+ clause: '(origin_operation_id IS NULL AND origin_model_run_id = ?)',
93
+ params: [context.modelRunId],
94
+ };
95
+ }
96
+ //# sourceMappingURL=owner-action-effects.js.map
@@ -1,4 +1,4 @@
1
- export declare const STRICT_SOURCE_REF_KINDS: readonly ["memory", "raw", "entity", "case", "decision", "os_task", "agent_situation_packet", "report_slot", "context_packet", "model_run", "tool_trace", "wiki_page", "report"];
1
+ export declare const STRICT_SOURCE_REF_KINDS: readonly ["memory", "raw", "case", "decision", "os_task", "report_slot", "context_packet", "model_run", "tool_trace", "wiki_page", "report"];
2
2
  export type StrictSourceRefKind = (typeof STRICT_SOURCE_REF_KINDS)[number];
3
3
  export declare const LEGACY_SOURCE_REF_KINDS: readonly ["message", "conversation", "raw_memory"];
4
4
  export type LegacySourceRefKind = (typeof LEGACY_SOURCE_REF_KINDS)[number];
@@ -5,11 +5,9 @@ exports.serializeSourceRef = serializeSourceRef;
5
5
  exports.STRICT_SOURCE_REF_KINDS = [
6
6
  'memory',
7
7
  'raw',
8
- 'entity',
9
8
  'case',
10
9
  'decision',
11
10
  'os_task',
12
- 'agent_situation_packet',
13
11
  'report_slot',
14
12
  'context_packet',
15
13
  'model_run',
@@ -0,0 +1,31 @@
1
+ import type { DatabaseAdapter } from '../db-manager.js';
2
+ import type { MemoryScopeRef } from '../memory/types.js';
3
+ import type { IdentityCorrection, IdentityCorrectionReceipt } from '../memory/judgment-types.js';
4
+ type Endpoint = 'from' | 'to';
5
+ type Db = DatabaseAdapter;
6
+ export type { IdentityCorrection, IdentityCorrectionAssignment, IdentityCorrectionReceipt, } from '../memory/judgment-types.js';
7
+ export interface TrustedIdentityCorrectionContext {
8
+ principalId: string;
9
+ agentId: string;
10
+ scopes: readonly MemoryScopeRef[];
11
+ connectors: readonly string[];
12
+ channels?: Readonly<Record<string, readonly string[]>>;
13
+ }
14
+ export interface IdentityAssignment {
15
+ edgeId: string;
16
+ endpoint: Endpoint;
17
+ originalRef: {
18
+ kind: string;
19
+ id: string;
20
+ };
21
+ resolvedRef: {
22
+ kind: 'registry';
23
+ id: string;
24
+ } | null;
25
+ identityRevision: number;
26
+ commandId: string;
27
+ }
28
+ export declare function appendIdentityCorrection(adapter: Db, correction: IdentityCorrection, trusted: TrustedIdentityCorrectionContext): IdentityCorrectionReceipt;
29
+ export declare function readIdentityAssignments(adapter: Db, edgeId: string): IdentityAssignment[];
30
+ export declare function newCorrectionCommandId(): string;
31
+ //# sourceMappingURL=corrections.d.ts.map