@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,378 +0,0 @@
1
- "use strict";
2
- /**
3
- * @fileoverview Session Manager - tracks multiple Claude Code sessions in SQLite
4
- * @module mobile/session-manager
5
- * @version 1.5.0
6
- *
7
- * Manages session lifecycle including creation, tracking, and termination.
8
- * Sessions are persisted to SQLite for durability across server restarts.
9
- *
10
- * @example
11
- * import { SessionManager } from './session-manager';
12
- * const manager = new SessionManager();
13
- * await manager.initDB();
14
- * const { sessionId, daemon } = await manager.createSession('/path/to/project');
15
- */
16
- var __importDefault = (this && this.__importDefault) || function (mod) {
17
- return (mod && mod.__esModule) ? mod : { "default": mod };
18
- };
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.SessionManager = exports.CREATE_SESSIONS_TABLE = exports.DEFAULT_DB_PATH = void 0;
21
- const path_1 = __importDefault(require("path"));
22
- const os_1 = __importDefault(require("os"));
23
- const daemon_js_1 = require("./daemon.js");
24
- /**
25
- * Default database path
26
- */
27
- exports.DEFAULT_DB_PATH = process.env.MAMA_DB_PATH || path_1.default.join(os_1.default.homedir(), '.claude', 'mama-memory.db');
28
- /**
29
- * Sessions table creation SQL
30
- */
31
- exports.CREATE_SESSIONS_TABLE = `
32
- CREATE TABLE IF NOT EXISTS sessions (
33
- id TEXT PRIMARY KEY,
34
- project_path TEXT,
35
- created_at TEXT DEFAULT (datetime('now')),
36
- last_active TEXT DEFAULT (datetime('now')),
37
- status TEXT DEFAULT 'active',
38
- pid INTEGER,
39
- client_id TEXT
40
- )
41
- `;
42
- /**
43
- * Create index for status queries
44
- */
45
- const CREATE_STATUS_INDEX = `
46
- CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status)
47
- `;
48
- /**
49
- * SessionManager class - manages Claude Code sessions
50
- */
51
- class SessionManager {
52
- dbPath;
53
- sessions;
54
- db;
55
- initialized;
56
- cleanupPromise;
57
- cleanupHandlersRegistered;
58
- handleProcessExit;
59
- /**
60
- * Create a new SessionManager instance
61
- * @param dbPath - Path to SQLite database
62
- */
63
- constructor(dbPath = exports.DEFAULT_DB_PATH) {
64
- this.dbPath = dbPath;
65
- this.sessions = new Map();
66
- this.db = null;
67
- this.initialized = false;
68
- this.cleanupPromise = null;
69
- this.cleanupHandlersRegistered = false;
70
- this.handleProcessExit = null;
71
- }
72
- /**
73
- * Initialize the SQLite database and create sessions table
74
- */
75
- async initDB() {
76
- if (this.initialized) {
77
- return;
78
- }
79
- try {
80
- // eslint-disable-next-line @typescript-eslint/no-require-imports
81
- const { DatabaseSync } = require('node:sqlite');
82
- this.db = new DatabaseSync(this.dbPath);
83
- // Create sessions table if not exists
84
- this.db.exec(exports.CREATE_SESSIONS_TABLE);
85
- this.db.exec(CREATE_STATUS_INDEX);
86
- // Add missing columns for older databases
87
- for (const col of [
88
- 'pid INTEGER',
89
- 'client_id TEXT',
90
- "status TEXT DEFAULT 'active'",
91
- 'last_active TEXT',
92
- 'created_at TEXT',
93
- ]) {
94
- try {
95
- this.db.exec(`ALTER TABLE sessions ADD COLUMN ${col}`);
96
- }
97
- catch {
98
- // Column already exists
99
- }
100
- }
101
- // Mark any orphaned 'active' sessions as 'terminated'
102
- // (from previous server crashes)
103
- this.db
104
- .prepare(`
105
- UPDATE sessions
106
- SET status = 'terminated', last_active = datetime('now')
107
- WHERE status = 'active'
108
- `)
109
- .run();
110
- this.initialized = true;
111
- console.error(`[SessionManager] Database initialized at ${this.dbPath}`);
112
- // Setup cleanup on process exit
113
- this._setupProcessCleanup();
114
- }
115
- catch (err) {
116
- const message = err instanceof Error ? err.message : String(err);
117
- console.error('[SessionManager] Failed to initialize database:', message);
118
- throw err;
119
- }
120
- }
121
- /**
122
- * Create a new Claude Code session
123
- * @param projectDir - Working directory for the session
124
- * @returns Session ID and daemon
125
- */
126
- async createSession(projectDir) {
127
- if (!this.initialized) {
128
- await this.initDB();
129
- }
130
- // Generate unique session ID
131
- const sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
132
- // Create daemon instance
133
- const daemon = new daemon_js_1.ClaudeDaemon(projectDir, sessionId);
134
- try {
135
- // Spawn the daemon
136
- await daemon.spawn();
137
- // Insert into database
138
- const stmt = this.db.prepare(`
139
- INSERT INTO sessions (id, project_path, status, pid)
140
- VALUES (?, ?, 'active', ?)
141
- `);
142
- stmt.run(sessionId, projectDir, daemon.getPid());
143
- // Store in memory map
144
- this.sessions.set(sessionId, {
145
- daemon,
146
- clientId: null,
147
- projectDir,
148
- createdAt: new Date().toISOString(),
149
- });
150
- // Setup daemon event handlers
151
- this._setupDaemonHandlers(sessionId, daemon);
152
- console.error(`[SessionManager] Session ${sessionId} created for ${projectDir}`);
153
- return { sessionId, daemon };
154
- }
155
- catch (err) {
156
- const message = err instanceof Error ? err.message : String(err);
157
- console.error(`[SessionManager] Failed to create session:`, message);
158
- // Cleanup on failure
159
- daemon.kill();
160
- throw err;
161
- }
162
- }
163
- /**
164
- * Get all active sessions
165
- * @returns Array of active session info
166
- */
167
- async getActiveSessions() {
168
- if (!this.initialized) {
169
- await this.initDB();
170
- }
171
- const stmt = this.db.prepare(`
172
- SELECT id, project_path, created_at, last_active, status, pid, client_id
173
- FROM sessions
174
- WHERE status = 'active'
175
- ORDER BY created_at DESC
176
- `);
177
- const rows = stmt.all();
178
- // Enrich with in-memory data
179
- return rows.map((row) => {
180
- const memSession = this.sessions.get(row.id);
181
- return {
182
- id: row.id,
183
- projectDir: row.project_path ?? '',
184
- createdAt: row.created_at,
185
- lastActive: row.last_active,
186
- status: row.status,
187
- pid: row.pid,
188
- clientId: row.client_id,
189
- isAlive: memSession?.daemon?.isActive() || false,
190
- };
191
- });
192
- }
193
- /**
194
- * Terminate a session by ID
195
- * @param sessionId - Session to terminate
196
- * @returns True if session was terminated
197
- */
198
- async terminateSession(sessionId) {
199
- if (!this.initialized) {
200
- await this.initDB();
201
- }
202
- const session = this.sessions.get(sessionId);
203
- if (session) {
204
- // Kill the daemon
205
- if (session.daemon) {
206
- session.daemon.kill();
207
- }
208
- // Remove from memory
209
- this.sessions.delete(sessionId);
210
- }
211
- // Update database
212
- const stmt = this.db.prepare(`
213
- UPDATE sessions
214
- SET status = 'terminated', last_active = datetime('now')
215
- WHERE id = ?
216
- `);
217
- const result = stmt.run(sessionId);
218
- console.error(`[SessionManager] Session ${sessionId} terminated`);
219
- return result.changes > 0;
220
- }
221
- /**
222
- * Get a session by ID
223
- * @param sessionId - Session ID to look up
224
- * @returns Session data or undefined
225
- */
226
- getSession(sessionId) {
227
- return this.sessions.get(sessionId);
228
- }
229
- /**
230
- * Update session's last active timestamp
231
- * @param sessionId - Session ID
232
- */
233
- touchSession(sessionId) {
234
- if (!this.db || !this.initialized) {
235
- return;
236
- }
237
- const stmt = this.db.prepare(`
238
- UPDATE sessions
239
- SET last_active = datetime('now')
240
- WHERE id = ?
241
- `);
242
- stmt.run(sessionId);
243
- }
244
- /**
245
- * Assign a client to a session
246
- * @param sessionId - Session ID
247
- * @param clientId - Client ID
248
- */
249
- assignClient(sessionId, clientId) {
250
- const session = this.sessions.get(sessionId);
251
- if (session) {
252
- session.clientId = clientId;
253
- }
254
- if (this.db && this.initialized) {
255
- const stmt = this.db.prepare(`
256
- UPDATE sessions
257
- SET client_id = ?
258
- WHERE id = ?
259
- `);
260
- stmt.run(clientId, sessionId);
261
- }
262
- }
263
- /**
264
- * Remove client assignment from a session
265
- * @param sessionId - Session ID
266
- */
267
- unassignClient(sessionId) {
268
- const session = this.sessions.get(sessionId);
269
- if (session) {
270
- session.clientId = null;
271
- }
272
- if (this.db && this.initialized) {
273
- const stmt = this.db.prepare(`
274
- UPDATE sessions
275
- SET client_id = NULL
276
- WHERE id = ?
277
- `);
278
- stmt.run(sessionId);
279
- }
280
- }
281
- /**
282
- * Get session count
283
- * @returns Number of active sessions
284
- */
285
- getSessionCount() {
286
- return this.sessions.size;
287
- }
288
- /**
289
- * Terminate all active sessions
290
- * @returns Number of sessions terminated
291
- */
292
- async terminateAll() {
293
- const sessionIds = Array.from(this.sessions.keys());
294
- let count = 0;
295
- for (const sessionId of sessionIds) {
296
- if (await this.terminateSession(sessionId)) {
297
- count++;
298
- }
299
- }
300
- return count;
301
- }
302
- /**
303
- * Setup daemon event handlers
304
- * @private
305
- */
306
- _setupDaemonHandlers(sessionId, daemon) {
307
- daemon.on('exit', () => {
308
- // Update database on daemon exit
309
- if (this.db && this.initialized) {
310
- const stmt = this.db.prepare(`
311
- UPDATE sessions
312
- SET status = 'terminated', last_active = datetime('now')
313
- WHERE id = ?
314
- `);
315
- stmt.run(sessionId);
316
- }
317
- // Remove from memory
318
- this.sessions.delete(sessionId);
319
- console.error(`[SessionManager] Session ${sessionId} daemon exited, cleaned up`);
320
- });
321
- daemon.on('error', (err) => {
322
- console.error(`[SessionManager] Session ${sessionId} daemon error:`, err.error);
323
- });
324
- }
325
- /**
326
- * Setup process cleanup handlers
327
- * @private
328
- */
329
- _setupProcessCleanup() {
330
- if (this.cleanupHandlersRegistered) {
331
- return;
332
- }
333
- const cleanup = () => {
334
- if (this.cleanupPromise) {
335
- return;
336
- }
337
- if (this.handleProcessExit) {
338
- process.off('exit', this.handleProcessExit);
339
- }
340
- this.cleanupPromise = Promise.resolve();
341
- console.error('[SessionManager] Process exiting, cleaning up sessions...');
342
- if (this.db && this.initialized) {
343
- for (const [sessionId, session] of this.sessions.entries()) {
344
- try {
345
- session.daemon.kill();
346
- }
347
- catch {
348
- // Best effort - process is already exiting.
349
- }
350
- this.sessions.delete(sessionId);
351
- const stmt = this.db.prepare(`
352
- UPDATE sessions
353
- SET status = 'terminated', last_active = datetime('now')
354
- WHERE id = ?
355
- `);
356
- stmt.run(sessionId);
357
- }
358
- }
359
- this.close();
360
- };
361
- this.handleProcessExit = cleanup;
362
- process.on('exit', this.handleProcessExit);
363
- this.cleanupHandlersRegistered = true;
364
- }
365
- /**
366
- * Close the database connection
367
- */
368
- close() {
369
- if (this.db) {
370
- const db = this.db;
371
- this.db = null;
372
- this.initialized = false;
373
- db.close();
374
- }
375
- }
376
- }
377
- exports.SessionManager = SessionManager;
378
- //# sourceMappingURL=session-manager.js.map
@@ -1,137 +0,0 @@
1
- /**
2
- * @fileoverview WebSocket Handler - MessageRouter-based real-time communication
3
- * @module mobile/websocket-handler
4
- * @version 2.0.0
5
- *
6
- * Handles WebSocket connections for mobile clients, using MessageRouter
7
- * for unified message processing (same as Discord/Slack gateways).
8
- *
9
- * @example
10
- * import { createWebSocketHandler } from './websocket-handler';
11
- * const wsHandler = createWebSocketHandler({
12
- * httpServer,
13
- * messageRouter,
14
- * sessionStore,
15
- * authToken: process.env.MAMA_AUTH_TOKEN
16
- * });
17
- */
18
- import { WebSocketServer, WebSocket } from 'ws';
19
- import type { Server as HTTPServer } from 'http';
20
- /**
21
- * Message router interface
22
- */
23
- interface StreamCallbacks {
24
- onDelta?: (text: string) => void;
25
- onToolUse?: (toolName: string, input: Record<string, unknown>) => void;
26
- onToolComplete?: (toolName: string, toolUseId: string, isError: boolean) => void;
27
- onFinal?: (response: unknown) => void;
28
- onError?: (error: Error) => void;
29
- }
30
- interface MessageRouter {
31
- process(message: NormalizedMessage, options?: {
32
- onQueued?: () => void;
33
- onStream?: StreamCallbacks;
34
- }): Promise<RouterResult>;
35
- }
36
- /**
37
- * Session store interface
38
- */
39
- interface SessionStore {
40
- getHistoryByChannel?(source: string, channelId: string): Array<{
41
- user?: string;
42
- bot?: string;
43
- timestamp?: number;
44
- }>;
45
- getHistory?(sessionId: string): Array<{
46
- user?: string;
47
- bot?: string;
48
- timestamp?: number;
49
- }>;
50
- }
51
- /**
52
- * Normalized message for router
53
- */
54
- interface NormalizedMessage {
55
- source: string;
56
- channelId: string;
57
- channelName: string;
58
- userId: string;
59
- text: string;
60
- contentBlocks?: ContentBlock[];
61
- metadata: {
62
- clientId: string;
63
- sessionId?: string;
64
- osAgentMode?: boolean;
65
- timestamp: number;
66
- };
67
- }
68
- /**
69
- * Content block types
70
- */
71
- interface ImageContentBlock {
72
- type: 'image';
73
- source: {
74
- type: 'base64';
75
- media_type: string;
76
- data: string;
77
- };
78
- }
79
- interface TextContentBlock {
80
- type: 'text';
81
- text: string;
82
- }
83
- type ContentBlock = ImageContentBlock | TextContentBlock;
84
- /**
85
- * Router result
86
- */
87
- interface RouterResult {
88
- response: string;
89
- sessionId: string;
90
- duration: number;
91
- }
92
- /**
93
- * Client info stored in clients Map
94
- */
95
- interface ClientInfo {
96
- clientId: string;
97
- userId: string;
98
- ws: WebSocket;
99
- isAlive: boolean;
100
- connectedAt: string;
101
- sessionId?: string;
102
- osAgentMode?: boolean;
103
- language?: string;
104
- }
105
- /**
106
- * WebSocket handler options
107
- */
108
- export interface WebSocketHandlerOptions {
109
- httpServer: HTTPServer;
110
- messageRouter: MessageRouter;
111
- sessionStore: SessionStore;
112
- authToken?: string;
113
- }
114
- /**
115
- * Extended WebSocketServer with helper methods
116
- */
117
- type ExtendedWebSocketServer = WebSocketServer & {
118
- getClients: () => Map<string, ClientInfo>;
119
- getClientCount: () => number;
120
- };
121
- /**
122
- * Create WebSocket handler with MessageRouter integration
123
- */
124
- export declare function createWebSocketHandler({ httpServer, messageRouter, sessionStore, authToken: _authToken, }: WebSocketHandlerOptions): ExtendedWebSocketServer;
125
- /**
126
- * WebSocketHandler class (backwards compatibility)
127
- * @deprecated Use createWebSocketHandler() instead
128
- */
129
- export declare class WebSocketHandler {
130
- private wss;
131
- constructor(httpServer: HTTPServer, options: Partial<WebSocketHandlerOptions>);
132
- getClients(): Map<string, ClientInfo>;
133
- getClientCount(): number;
134
- close(): void;
135
- }
136
- export {};
137
- //# sourceMappingURL=websocket-handler.d.ts.map