@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,81 @@
1
+ import type { ActionFailure, ActionSessionFacts, ClientSessionFacts } from '../action-contracts.js';
2
+ import type { ActionCatalog } from '../api/catalog.js';
3
+ import type { ActionDispatcher } from '../api/dispatch.js';
4
+ import type { JudgmentAccess } from '../knowledge/judgments.js';
5
+ /** Frames larger than this are refused rather than buffered. */
6
+ export declare const IPC_MAX_FRAME_BYTES: number;
7
+ export interface IpcRequest {
8
+ /** Wire-level correlation id; distinct from operationId, which is the semantic command id. */
9
+ requestId: string;
10
+ kind: 'call' | 'describe';
11
+ /** Opaque session credential — the server maps it to access; input never grants access. */
12
+ credential?: string;
13
+ /** kind === 'describe': one contract name; absent lists the whole surface. */
14
+ name?: string;
15
+ /** kind === 'call': */
16
+ action?: string;
17
+ input?: unknown;
18
+ operationId?: string;
19
+ session?: ClientSessionFacts;
20
+ }
21
+ export type IpcResponse = {
22
+ requestId: string;
23
+ ok: true;
24
+ result: unknown;
25
+ } | {
26
+ requestId: string;
27
+ ok: false;
28
+ error: ActionFailure;
29
+ };
30
+ /**
31
+ * A transport break. `connect` means the request provably never reached the
32
+ * runtime — the call can be reported `failed`. `exchange` means it may have
33
+ * been delivered — the honest status is `unknown` until operation.get or a
34
+ * same-id resend settles it.
35
+ */
36
+ export declare class IpcTransportError extends Error {
37
+ readonly phase: 'connect' | 'exchange';
38
+ constructor(phase: 'connect' | 'exchange', message: string);
39
+ }
40
+ export declare function encodeFrame(payload: unknown): Buffer;
41
+ /** One request over one connection — matches the short-lived CLI/MCP caller lifecycle. */
42
+ export declare function sendIpcRequest(socketPath: string, request: IpcRequest, options?: {
43
+ timeoutMs?: number;
44
+ }): Promise<IpcResponse>;
45
+ export interface ActionIpcServerOptions {
46
+ socketPath: string;
47
+ catalog: ActionCatalog;
48
+ dispatch: ActionDispatcher;
49
+ /**
50
+ * Maps the wire credential to call authority. A credential that cannot be
51
+ * resolved is denied — the throw never reaches the action.
52
+ */
53
+ resolveAccess: (credential: string | undefined) => JudgmentAccess;
54
+ /**
55
+ * Host-stated call-site facts for calls on this socket — composed from the
56
+ * resolved authority and the request, never from caller input. A fact the
57
+ * socket cannot truthfully state (per-turn run, batch, channel) stays
58
+ * absent.
59
+ */
60
+ sessionFacts?: (access: JudgmentAccess, request: IpcRequest) => ActionSessionFacts | undefined;
61
+ maxFrameBytes?: number;
62
+ /**
63
+ * When the socket path already exists: probe it. A live socket is an error —
64
+ * a dead file left by a crashed process is unlinked and reclaimed.
65
+ */
66
+ reclaimStaleSocket?: boolean;
67
+ }
68
+ /** True when the path exists but nothing answers — a dead file, safe to replace. */
69
+ export declare function staleSocketFile(socketPath: string): Promise<boolean>;
70
+ export interface ActionIpcServer {
71
+ socketPath: string;
72
+ close(): Promise<void>;
73
+ }
74
+ /**
75
+ * The server half of the IPC contract — the piece `runtime.start` mounts when
76
+ * it opens the socket. One connection per caller, frames handled in order.
77
+ */
78
+ export declare function createActionIpcServer(options: ActionIpcServerOptions): Promise<ActionIpcServer>;
79
+ /** Convenience for callers that only need a correlation id for the wire. */
80
+ export declare function newRequestId(): string;
81
+ //# sourceMappingURL=ipc.d.ts.map
@@ -0,0 +1,314 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IpcTransportError = exports.IPC_MAX_FRAME_BYTES = void 0;
4
+ exports.encodeFrame = encodeFrame;
5
+ exports.sendIpcRequest = sendIpcRequest;
6
+ exports.staleSocketFile = staleSocketFile;
7
+ exports.createActionIpcServer = createActionIpcServer;
8
+ exports.newRequestId = newRequestId;
9
+ /**
10
+ * IPC — the private Unix-socket wire between CLI/MCP clients and the runtime.
11
+ *
12
+ * §4.3: the socket carries requestId, action, input and the current session
13
+ * credential. Frames are length-prefixed JSON; partial reads, oversized frames
14
+ * and disconnects are handled explicitly. A lost answer is never an empty
15
+ * result — whether a mutation landed is settled through operation.get, not by
16
+ * guessing from a broken socket.
17
+ */
18
+ const node_crypto_1 = require("node:crypto");
19
+ const node_fs_1 = require("node:fs");
20
+ const node_net_1 = require("node:net");
21
+ /** Frames larger than this are refused rather than buffered. */
22
+ exports.IPC_MAX_FRAME_BYTES = 32 * 1024 * 1024;
23
+ const FRAME_HEADER_BYTES = 4;
24
+ /**
25
+ * A transport break. `connect` means the request provably never reached the
26
+ * runtime — the call can be reported `failed`. `exchange` means it may have
27
+ * been delivered — the honest status is `unknown` until operation.get or a
28
+ * same-id resend settles it.
29
+ */
30
+ class IpcTransportError extends Error {
31
+ phase;
32
+ constructor(phase, message) {
33
+ super(message);
34
+ this.name = 'IpcTransportError';
35
+ this.phase = phase;
36
+ }
37
+ }
38
+ exports.IpcTransportError = IpcTransportError;
39
+ function encodeFrame(payload) {
40
+ const body = Buffer.from(JSON.stringify(payload), 'utf8');
41
+ if (body.length > exports.IPC_MAX_FRAME_BYTES) {
42
+ throw new IpcTransportError('exchange', `frame of ${body.length} bytes exceeds the ${exports.IPC_MAX_FRAME_BYTES}-byte cap`);
43
+ }
44
+ const frame = Buffer.alloc(FRAME_HEADER_BYTES + body.length);
45
+ frame.writeUInt32BE(body.length, 0);
46
+ body.copy(frame, FRAME_HEADER_BYTES);
47
+ return frame;
48
+ }
49
+ /** Reassembles a byte stream into whole frame bodies; partial tails stay buffered. */
50
+ class FrameReader {
51
+ maxFrameBytes;
52
+ buffered = Buffer.alloc(0);
53
+ constructor(maxFrameBytes) {
54
+ this.maxFrameBytes = maxFrameBytes;
55
+ }
56
+ push(chunk) {
57
+ this.buffered = this.buffered.length === 0 ? chunk : Buffer.concat([this.buffered, chunk]);
58
+ const frames = [];
59
+ while (this.buffered.length >= FRAME_HEADER_BYTES) {
60
+ const length = this.buffered.readUInt32BE(0);
61
+ if (length > this.maxFrameBytes) {
62
+ throw new Error(`frame length ${length} exceeds the ${this.maxFrameBytes}-byte cap`);
63
+ }
64
+ if (this.buffered.length < FRAME_HEADER_BYTES + length) {
65
+ return frames;
66
+ }
67
+ frames.push(this.buffered.subarray(FRAME_HEADER_BYTES, FRAME_HEADER_BYTES + length));
68
+ this.buffered = this.buffered.subarray(FRAME_HEADER_BYTES + length);
69
+ }
70
+ return frames;
71
+ }
72
+ }
73
+ /** One request over one connection — matches the short-lived CLI/MCP caller lifecycle. */
74
+ function sendIpcRequest(socketPath, request, options = {}) {
75
+ return new Promise((resolve, reject) => {
76
+ let frame;
77
+ try {
78
+ frame = encodeFrame(request);
79
+ }
80
+ catch (error) {
81
+ reject(new IpcTransportError('connect', `ipc encode failed: ${error instanceof Error ? error.message : String(error)}`));
82
+ return;
83
+ }
84
+ let connected = false;
85
+ let settled = false;
86
+ const socket = (0, node_net_1.createConnection)(socketPath);
87
+ const reader = new FrameReader(exports.IPC_MAX_FRAME_BYTES);
88
+ const settle = (complete) => {
89
+ if (settled) {
90
+ return;
91
+ }
92
+ settled = true;
93
+ clearTimeout(timer);
94
+ socket.destroy();
95
+ complete();
96
+ };
97
+ const timer = options.timeoutMs === undefined
98
+ ? undefined
99
+ : setTimeout(() => {
100
+ settle(() => reject(new IpcTransportError(connected ? 'exchange' : 'connect', `ipc request timed out after ${options.timeoutMs}ms`)));
101
+ }, options.timeoutMs);
102
+ socket.once('connect', () => {
103
+ connected = true;
104
+ socket.write(frame, (error) => {
105
+ if (error) {
106
+ settle(() => reject(new IpcTransportError('exchange', `ipc write failed: ${error.message}`)));
107
+ }
108
+ });
109
+ });
110
+ socket.on('data', (chunk) => {
111
+ let bodies;
112
+ try {
113
+ bodies = reader.push(chunk);
114
+ }
115
+ catch (error) {
116
+ settle(() => reject(new IpcTransportError('exchange', `malformed response stream: ${error instanceof Error ? error.message : String(error)}`)));
117
+ return;
118
+ }
119
+ for (const body of bodies) {
120
+ let response;
121
+ try {
122
+ response = JSON.parse(body.toString('utf8'));
123
+ }
124
+ catch {
125
+ settle(() => reject(new IpcTransportError('exchange', 'response frame is not JSON')));
126
+ return;
127
+ }
128
+ if (response.requestId !== request.requestId) {
129
+ settle(() => reject(new IpcTransportError('exchange', `response requestId ${response.requestId} does not match request ${request.requestId}`)));
130
+ return;
131
+ }
132
+ settle(() => resolve(response));
133
+ return;
134
+ }
135
+ });
136
+ socket.once('error', (error) => {
137
+ settle(() => reject(new IpcTransportError(connected ? 'exchange' : 'connect', `ipc socket error: ${error.message}`)));
138
+ });
139
+ socket.once('close', () => {
140
+ settle(() => reject(new IpcTransportError(connected ? 'exchange' : 'connect', 'ipc socket closed before a complete response frame')));
141
+ });
142
+ });
143
+ }
144
+ /** True when the path exists but nothing answers — a dead file, safe to replace. */
145
+ function staleSocketFile(socketPath) {
146
+ if (!(0, node_fs_1.existsSync)(socketPath)) {
147
+ return Promise.resolve(false);
148
+ }
149
+ return new Promise((resolve) => {
150
+ const probe = (0, node_net_1.createConnection)(socketPath);
151
+ probe.once('connect', () => {
152
+ probe.destroy();
153
+ resolve(false);
154
+ });
155
+ probe.once('error', () => resolve(true));
156
+ });
157
+ }
158
+ async function handleFrame(socket, options, body) {
159
+ let request;
160
+ try {
161
+ request = JSON.parse(body.toString('utf8'));
162
+ }
163
+ catch {
164
+ socket.write(encodeFrame({
165
+ requestId: '',
166
+ ok: false,
167
+ error: {
168
+ kind: 'invalid_input',
169
+ code: 'malformed_frame',
170
+ message: 'request frame is not JSON',
171
+ },
172
+ }));
173
+ return;
174
+ }
175
+ const reply = (response) => {
176
+ socket.write(encodeFrame(response));
177
+ };
178
+ let access;
179
+ try {
180
+ access = options.resolveAccess(request.credential);
181
+ }
182
+ catch (error) {
183
+ reply({
184
+ requestId: request.requestId,
185
+ ok: false,
186
+ error: {
187
+ kind: 'denied',
188
+ code: 'access_denied',
189
+ message: error instanceof Error ? error.message : String(error),
190
+ },
191
+ });
192
+ return;
193
+ }
194
+ try {
195
+ let result;
196
+ if (request.kind === 'describe') {
197
+ result =
198
+ request.name === undefined
199
+ ? options.catalog.list()
200
+ : options.catalog.describe(request.name);
201
+ }
202
+ else if (request.kind === 'call') {
203
+ if (typeof request.action !== 'string' || request.action.length === 0) {
204
+ reply({
205
+ requestId: request.requestId,
206
+ ok: false,
207
+ error: {
208
+ kind: 'invalid_input',
209
+ code: 'missing_action',
210
+ message: 'call request requires action',
211
+ },
212
+ });
213
+ return;
214
+ }
215
+ const session = options.sessionFacts?.(access, request);
216
+ result = await options.dispatch({ action: request.action, input: request.input, operationId: request.operationId }, session === undefined ? { access } : { access, session });
217
+ }
218
+ else {
219
+ reply({
220
+ requestId: request.requestId,
221
+ ok: false,
222
+ error: {
223
+ kind: 'invalid_input',
224
+ code: 'unknown_request_kind',
225
+ message: `unknown request kind ${String(request.kind)}`,
226
+ },
227
+ });
228
+ return;
229
+ }
230
+ reply({ requestId: request.requestId, ok: true, result });
231
+ }
232
+ catch (error) {
233
+ reply({
234
+ requestId: request.requestId,
235
+ ok: false,
236
+ error: {
237
+ kind: 'internal',
238
+ code: error instanceof Error ? error.name : 'internal_error',
239
+ message: error instanceof Error ? error.message : String(error),
240
+ },
241
+ });
242
+ }
243
+ }
244
+ /**
245
+ * The server half of the IPC contract — the piece `runtime.start` mounts when
246
+ * it opens the socket. One connection per caller, frames handled in order.
247
+ */
248
+ function createActionIpcServer(options) {
249
+ const maxFrameBytes = options.maxFrameBytes ?? exports.IPC_MAX_FRAME_BYTES;
250
+ const sockets = new Set();
251
+ const server = (0, node_net_1.createServer)((socket) => {
252
+ sockets.add(socket);
253
+ socket.once('close', () => sockets.delete(socket));
254
+ socket.on('error', () => socket.destroy());
255
+ const reader = new FrameReader(maxFrameBytes);
256
+ socket.on('data', (chunk) => {
257
+ let bodies;
258
+ try {
259
+ bodies = reader.push(chunk);
260
+ }
261
+ catch (error) {
262
+ socket.write(encodeFrame({
263
+ requestId: '',
264
+ ok: false,
265
+ error: {
266
+ kind: 'invalid_input',
267
+ code: 'frame_too_large',
268
+ message: error instanceof Error ? error.message : String(error),
269
+ },
270
+ }));
271
+ socket.end();
272
+ return;
273
+ }
274
+ for (const body of bodies) {
275
+ void handleFrame(socket, options, body);
276
+ }
277
+ });
278
+ });
279
+ return new Promise((resolve, reject) => {
280
+ const handle = {
281
+ socketPath: options.socketPath,
282
+ close: () => new Promise((done) => {
283
+ for (const socket of sockets) {
284
+ socket.destroy();
285
+ }
286
+ server.close(() => {
287
+ (0, node_fs_1.rmSync)(options.socketPath, { force: true });
288
+ done();
289
+ });
290
+ }),
291
+ };
292
+ const listen = () => {
293
+ server.once('error', reject);
294
+ server.listen(options.socketPath, () => resolve(handle));
295
+ };
296
+ if (!options.reclaimStaleSocket || !(0, node_fs_1.existsSync)(options.socketPath)) {
297
+ listen();
298
+ return;
299
+ }
300
+ void staleSocketFile(options.socketPath).then((stale) => {
301
+ if (!stale) {
302
+ reject(new Error(`ipc socket already served by a live runtime: ${options.socketPath}`));
303
+ return;
304
+ }
305
+ (0, node_fs_1.rmSync)(options.socketPath, { force: true });
306
+ listen();
307
+ });
308
+ });
309
+ }
310
+ /** Convenience for callers that only need a correlation id for the wire. */
311
+ function newRequestId() {
312
+ return `req_${(0, node_crypto_1.randomUUID)()}`;
313
+ }
314
+ //# sourceMappingURL=ipc.js.map
@@ -1,6 +1,10 @@
1
1
  /**
2
- * Base Database Adapter Interface
3
- * All adapters must implement these methods
2
+ * Row shapes the SQLite drivers share.
3
+ *
4
+ * There used to be an abstract class here declaring the adapter's methods, which made
5
+ * two definitions of the same port: this one and the DatabaseInstance interface in
6
+ * db-manager. A driver now says which interface it satisfies rather than inheriting a
7
+ * second copy of the contract.
4
8
  */
5
9
  import type { Statement, RunResult } from './statement.js';
6
10
  export type { Statement, RunResult };
@@ -9,68 +13,4 @@ export interface VectorSearchResult {
9
13
  similarity?: number;
10
14
  distance?: number;
11
15
  }
12
- export declare abstract class DatabaseAdapter {
13
- /**
14
- * Connect to database
15
- * @returns Database connection
16
- */
17
- abstract connect(): unknown;
18
- /**
19
- * Disconnect from database
20
- */
21
- abstract disconnect(): void;
22
- /**
23
- * Check if connected
24
- * @returns Connection status
25
- */
26
- abstract isConnected(): boolean;
27
- /**
28
- * Prepare a SQL statement
29
- * @param sql - SQL query
30
- * @returns Prepared statement
31
- */
32
- abstract prepare(sql: string): Statement;
33
- /**
34
- * Execute raw SQL
35
- * @param sql - SQL to execute
36
- */
37
- abstract exec(sql: string): void;
38
- /**
39
- * Execute function in transaction
40
- * @param fn - Function to execute
41
- * @returns Function return value
42
- */
43
- abstract transaction<T>(fn: () => T): T;
44
- /**
45
- * Vector similarity search
46
- * @param embedding - Query embedding (1024-dim)
47
- * @param limit - Max results
48
- * @returns Search results with distance
49
- */
50
- abstract vectorSearch(embedding: Float32Array | number[], limit: number, topicPrefix?: string): VectorSearchResult[] | null;
51
- /**
52
- * Insert vector embedding
53
- * @param rowid - Decision rowid
54
- * @param embedding - Embedding vector
55
- */
56
- abstract insertEmbedding(rowid: number, embedding: Float32Array | number[]): RunResult | null;
57
- /**
58
- * Get last inserted row ID
59
- * @returns Last rowid
60
- */
61
- abstract getLastInsertRowid(): number;
62
- /**
63
- * Run migrations
64
- * @param migrationsDir - Path to migrations directory
65
- */
66
- abstract runMigrations(migrationsDir: string): void;
67
- /**
68
- * Check if vector search is enabled
69
- */
70
- abstract get vectorSearchEnabled(): boolean;
71
- /**
72
- * Get database path
73
- */
74
- abstract getDbPath(): string;
75
- }
76
16
  //# sourceMappingURL=base-adapter.d.ts.map
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
- * Base Database Adapter Interface
4
- * All adapters must implement these methods
3
+ * Row shapes the SQLite drivers share.
4
+ *
5
+ * There used to be an abstract class here declaring the adapter's methods, which made
6
+ * two definitions of the same port: this one and the DatabaseInstance interface in
7
+ * db-manager. A driver now says which interface it satisfies rather than inheriting a
8
+ * second copy of the contract.
5
9
  */
6
10
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.DatabaseAdapter = void 0;
8
- class DatabaseAdapter {
9
- }
10
- exports.DatabaseAdapter = DatabaseAdapter;
11
11
  //# sourceMappingURL=base-adapter.js.map
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * Database Adapter Factory (SQLite-only)
3
3
  *
4
- * MAMA Plugin uses SQLite exclusively for local storage.
5
- * PostgreSQL support is only available in the legacy mcp-server.
4
+ * SQLite only. There is no PostgreSQL adapter here.
6
5
  *
7
6
  * @module db-adapter
8
7
  */
9
8
  import { SQLiteAdapter } from './sqlite-adapter.js';
10
9
  import { NodeSQLiteAdapter } from './node-sqlite-adapter.js';
11
- import { DatabaseAdapter, type VectorSearchResult, type RunResult } from './base-adapter.js';
10
+ import type { VectorSearchResult, RunResult } from './base-adapter.js';
11
+ import type { DatabaseInstance } from '../db-manager.js';
12
12
  import type { Statement } from './statement.js';
13
- export { DatabaseAdapter, SQLiteAdapter, NodeSQLiteAdapter };
13
+ export { SQLiteAdapter, NodeSQLiteAdapter };
14
14
  export type { Statement, VectorSearchResult, RunResult };
15
15
  export interface AdapterConfig {
16
16
  dbPath?: string;
@@ -21,5 +21,5 @@ export interface AdapterConfig {
21
21
  * @param config - Database configuration
22
22
  * @returns Configured SQLite adapter instance
23
23
  */
24
- export declare function createAdapter(config?: AdapterConfig): DatabaseAdapter;
24
+ export declare function createAdapter(config?: AdapterConfig): DatabaseInstance;
25
25
  //# sourceMappingURL=index.d.ts.map
@@ -2,21 +2,18 @@
2
2
  /**
3
3
  * Database Adapter Factory (SQLite-only)
4
4
  *
5
- * MAMA Plugin uses SQLite exclusively for local storage.
6
- * PostgreSQL support is only available in the legacy mcp-server.
5
+ * SQLite only. There is no PostgreSQL adapter here.
7
6
  *
8
7
  * @module db-adapter
9
8
  */
10
9
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.NodeSQLiteAdapter = exports.SQLiteAdapter = exports.DatabaseAdapter = void 0;
10
+ exports.NodeSQLiteAdapter = exports.SQLiteAdapter = void 0;
12
11
  exports.createAdapter = createAdapter;
13
12
  const debug_logger_js_1 = require("../debug-logger.js");
14
13
  const sqlite_adapter_js_1 = require("./sqlite-adapter.js");
15
14
  Object.defineProperty(exports, "SQLiteAdapter", { enumerable: true, get: function () { return sqlite_adapter_js_1.SQLiteAdapter; } });
16
15
  const node_sqlite_adapter_js_1 = require("./node-sqlite-adapter.js");
17
16
  Object.defineProperty(exports, "NodeSQLiteAdapter", { enumerable: true, get: function () { return node_sqlite_adapter_js_1.NodeSQLiteAdapter; } });
18
- const base_adapter_js_1 = require("./base-adapter.js");
19
- Object.defineProperty(exports, "DatabaseAdapter", { enumerable: true, get: function () { return base_adapter_js_1.DatabaseAdapter; } });
20
17
  /**
21
18
  * Create SQLite database adapter
22
19
  *