@jungjaehoon/mama-core 2.4.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/README.md +76 -239
  2. package/db/migrations/030-case-first-memory-substrate.sql +13 -98
  3. package/db/migrations/034-add-connector-event-scope-columns.sql +9 -13
  4. package/db/migrations/039-add-connector-event-operator-ingest-seq.sql +9 -95
  5. package/db/migrations/062-refresh-connector-event-sequences.sql +9 -113
  6. package/db/migrations/063-refresh-legacy-connector-event-updates.sql +9 -32
  7. package/db/migrations/067-add-connector-event-source-entity-id.sql +9 -13
  8. package/db/migrations/069-create-registry-nodes.sql +52 -0
  9. package/db/migrations/070-record-identity.sql +35 -0
  10. package/db/migrations/071-service-operation-origins.sql +187 -0
  11. package/db/migrations/072-observation-versions.sql +29 -0
  12. package/db/migrations/073-registry-corrections.sql +45 -0
  13. package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
  14. package/db/migrations/075-agent-judgments.sql +58 -0
  15. package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
  16. package/db/migrations/077-legacy-record-kind.sql +6 -0
  17. package/db/migrations/078-source-ingest-commands.sql +18 -0
  18. package/db/migrations/079-twin-edge-relations.sql +43 -0
  19. package/db/migrations/080-restore-duration-days.sql +7 -0
  20. package/db/migrations/081-mailbox.sql +61 -0
  21. package/db/migrations/082-commitments-row-id.sql +12 -0
  22. package/db/migrations/083-observation-is-the-evidence.sql +49 -0
  23. package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
  24. package/db/migrations/085-a-migration-has-a-source.sql +37 -0
  25. package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
  26. package/db/migrations/087-mailbox-payload.sql +5 -0
  27. package/db/migrations/088-native-input-journal.sql +14 -0
  28. package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
  29. package/db/migrations/090-model-run-native-inputs.sql +29 -0
  30. package/db/migrations/091-native-turn-results.sql +11 -0
  31. package/db/migrations/092-restore-decision-fts.sql +34 -0
  32. package/db/migrations/093-native-turn-primary-kind.sql +14 -0
  33. package/db/migrations/094-commitment-run-provenance.sql +9 -0
  34. package/db/migrations/095-model-run-native-input-identity.sql +39 -0
  35. package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
  36. package/db/migrations/097-native-input-json-validity.sql +37 -0
  37. package/db/migrations/098-workflow-memory-kind.sql +105 -0
  38. package/db/migrations/099-commitment-revision-graph.sql +2 -0
  39. package/dist/action-contracts.d.ts +212 -0
  40. package/dist/action-contracts.js +10 -0
  41. package/dist/api/catalog.d.ts +118 -0
  42. package/dist/api/catalog.js +1756 -0
  43. package/dist/api/dispatch.d.ts +76 -0
  44. package/dist/api/dispatch.js +372 -0
  45. package/dist/canonicalize.d.ts +2 -2
  46. package/dist/canonicalize.js +3 -3
  47. package/dist/client/client.d.ts +33 -0
  48. package/dist/client/client.js +123 -0
  49. package/dist/client/ipc.d.ts +81 -0
  50. package/dist/client/ipc.js +314 -0
  51. package/dist/db-adapter/base-adapter.d.ts +6 -66
  52. package/dist/db-adapter/base-adapter.js +6 -6
  53. package/dist/db-adapter/index.d.ts +5 -5
  54. package/dist/db-adapter/index.js +2 -5
  55. package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
  56. package/dist/db-adapter/node-sqlite-adapter.js +1985 -570
  57. package/dist/db-manager.d.ts +53 -97
  58. package/dist/db-manager.js +121 -603
  59. package/dist/embedding/embedder.d.ts +132 -0
  60. package/dist/embedding/embedder.js +299 -0
  61. package/dist/identity/principal-repository.d.ts +2 -2
  62. package/dist/index.d.ts +43 -58
  63. package/dist/index.js +97 -145
  64. package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
  65. package/dist/knowledge/access.js +663 -0
  66. package/dist/knowledge/case-errors.d.ts +31 -0
  67. package/dist/knowledge/case-errors.js +40 -0
  68. package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
  69. package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
  70. package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
  71. package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
  72. package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
  73. package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
  74. package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
  75. package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
  76. package/dist/knowledge/commitment-revision-migration.d.ts +4 -0
  77. package/dist/knowledge/commitment-revision-migration.js +50 -0
  78. package/dist/knowledge/commitments.d.ts +192 -0
  79. package/dist/knowledge/commitments.js +386 -0
  80. package/dist/knowledge/decision-edges.d.ts +70 -0
  81. package/dist/knowledge/decision-edges.js +123 -0
  82. package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
  83. package/dist/knowledge/graph-query.js +1585 -0
  84. package/dist/knowledge/identity.d.ts +16 -0
  85. package/dist/knowledge/identity.js +22 -0
  86. package/dist/knowledge/index.d.ts +47 -0
  87. package/dist/knowledge/index.js +90 -0
  88. package/dist/knowledge/judgment-edge.d.ts +6 -0
  89. package/dist/knowledge/judgment-edge.js +22 -0
  90. package/dist/knowledge/judgments.d.ts +118 -0
  91. package/dist/knowledge/judgments.js +802 -0
  92. package/dist/knowledge/observations.d.ts +160 -0
  93. package/dist/knowledge/observations.js +449 -0
  94. package/dist/knowledge/question-type.d.ts +34 -0
  95. package/dist/knowledge/question-type.js +70 -0
  96. package/dist/{search → knowledge}/ranker-features.js +1 -1
  97. package/dist/{search → knowledge}/search-quality.d.ts +0 -1
  98. package/dist/knowledge/search.d.ts +38 -0
  99. package/dist/knowledge/search.js +91 -0
  100. package/dist/knowledge/source-ingest.d.ts +65 -0
  101. package/dist/knowledge/source-ingest.js +174 -0
  102. package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
  103. package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
  104. package/dist/knowledge/work-dates.d.ts +49 -0
  105. package/dist/knowledge/work-dates.js +120 -0
  106. package/dist/mama-api.d.ts +114 -778
  107. package/dist/mama-api.js +313 -2461
  108. package/dist/memory/api.d.ts +264 -24
  109. package/dist/memory/api.js +1633 -843
  110. package/dist/memory/bootstrap-builder.d.ts +2 -1
  111. package/dist/memory/bootstrap-builder.js +5 -5
  112. package/dist/memory/channel-summary-state-store.d.ts +3 -2
  113. package/dist/memory/channel-summary-state-store.js +53 -51
  114. package/dist/memory/channel-summary-store.d.ts +5 -3
  115. package/dist/memory/channel-summary-store.js +3 -8
  116. package/dist/memory/dashboard-read.d.ts +46 -0
  117. package/dist/memory/dashboard-read.js +94 -0
  118. package/dist/memory/event-store.d.ts +3 -3
  119. package/dist/memory/event-store.js +3 -10
  120. package/dist/memory/finding-store.d.ts +3 -2
  121. package/dist/memory/finding-store.js +2 -7
  122. package/dist/memory/graph-read.d.ts +52 -0
  123. package/dist/memory/graph-read.js +130 -0
  124. package/dist/memory/judgment-types.d.ts +394 -0
  125. package/dist/memory/judgment-types.js +16 -0
  126. package/dist/memory/provenance-audit.d.ts +5 -2
  127. package/dist/memory/provenance-audit.js +8 -14
  128. package/dist/memory/provenance-live.d.ts +141 -0
  129. package/dist/memory/provenance-live.js +409 -0
  130. package/dist/memory/provenance-query.d.ts +5 -4
  131. package/dist/memory/provenance-query.js +21 -29
  132. package/dist/memory/provenance-resolver.d.ts +191 -0
  133. package/dist/memory/provenance-resolver.js +155 -0
  134. package/dist/memory/provenance.d.ts +1 -11
  135. package/dist/memory/provenance.js +2 -33
  136. package/dist/memory/recall-sanitize.d.ts +55 -0
  137. package/dist/memory/recall-sanitize.js +144 -0
  138. package/dist/memory/secret-filter.d.ts +32 -0
  139. package/dist/memory/secret-filter.js +126 -0
  140. package/dist/memory/truth-store.d.ts +2 -1
  141. package/dist/memory/truth-store.js +1 -4
  142. package/dist/memory/types.d.ts +74 -24
  143. package/dist/memory/types.js +75 -5
  144. package/dist/memory/write-adapters.d.ts +98 -0
  145. package/dist/memory/write-adapters.js +242 -0
  146. package/dist/operations/owner-action-effects.d.ts +53 -0
  147. package/dist/operations/owner-action-effects.js +96 -0
  148. package/dist/provenance/source-ref.d.ts +1 -1
  149. package/dist/provenance/source-ref.js +0 -2
  150. package/dist/registry/corrections.d.ts +31 -0
  151. package/dist/registry/corrections.js +332 -0
  152. package/dist/registry/record-identity.d.ts +49 -0
  153. package/dist/registry/record-identity.js +133 -0
  154. package/dist/registry/store.d.ts +101 -0
  155. package/dist/registry/store.js +395 -0
  156. package/dist/registry/types.d.ts +28 -0
  157. package/dist/registry/types.js +5 -0
  158. package/dist/relevance-scorer.js +2 -2
  159. package/dist/runtime/agent-event-bus.d.ts +50 -0
  160. package/dist/runtime/agent-event-bus.js +101 -0
  161. package/dist/runtime/drivers/claude-cli-wrapper.d.ts +152 -0
  162. package/dist/runtime/drivers/claude-cli-wrapper.js +375 -0
  163. package/dist/runtime/drivers/claude-effort.d.ts +4 -0
  164. package/dist/runtime/drivers/claude-effort.js +16 -0
  165. package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
  166. package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
  167. package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
  168. package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
  169. package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
  170. package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
  171. package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
  172. package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
  173. package/dist/runtime/drivers/codex-home.d.ts +20 -0
  174. package/dist/runtime/drivers/codex-home.js +674 -0
  175. package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
  176. package/dist/runtime/drivers/codex-thread-registry.js +433 -0
  177. package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
  178. package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
  179. package/dist/runtime/drivers/persistent-cli-process.d.ts +425 -0
  180. package/dist/runtime/drivers/persistent-cli-process.js +1529 -0
  181. package/dist/runtime/drivers/types.d.ts +456 -0
  182. package/dist/runtime/drivers/types.js +110 -0
  183. package/dist/runtime/mailbox.d.ts +223 -0
  184. package/dist/runtime/mailbox.js +582 -0
  185. package/dist/runtime/model-run-store.d.ts +28 -0
  186. package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
  187. package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
  188. package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
  189. package/dist/runtime/native-effect-observer.d.ts +22 -0
  190. package/dist/runtime/native-effect-observer.js +103 -0
  191. package/dist/runtime/native-input-journal.d.ts +46 -0
  192. package/dist/runtime/native-input-journal.js +308 -0
  193. package/dist/runtime/native-prompt.d.ts +118 -0
  194. package/dist/runtime/native-prompt.js +496 -0
  195. package/dist/runtime/native-session.d.ts +10 -0
  196. package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
  197. package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
  198. package/dist/runtime/native-tool-trace-observer.js +65 -0
  199. package/dist/runtime/native-turn.d.ts +272 -0
  200. package/dist/runtime/native-turn.js +1041 -0
  201. package/dist/runtime/operations.d.ts +236 -0
  202. package/dist/runtime/operations.js +565 -0
  203. package/dist/runtime/post-tool-handler.d.ts +74 -0
  204. package/dist/runtime/post-tool-handler.js +137 -0
  205. package/dist/runtime/prompt-layers.d.ts +126 -0
  206. package/dist/runtime/prompt-layers.js +239 -0
  207. package/dist/runtime/runtime-process.d.ts +102 -0
  208. package/dist/runtime/runtime-process.js +206 -0
  209. package/dist/runtime/runtime.d.ts +278 -0
  210. package/dist/runtime/runtime.js +563 -0
  211. package/dist/runtime/session-pool.d.ts +176 -0
  212. package/dist/runtime/session-pool.js +369 -0
  213. package/dist/runtime/stimulus-payload.d.ts +5 -0
  214. package/dist/runtime/stimulus-payload.js +50 -0
  215. package/dist/runtime/subagent-bridge.d.ts +24 -0
  216. package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
  217. package/dist/runtime/text-completion.d.ts +22 -0
  218. package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
  219. package/dist/runtime/token-estimator.d.ts +25 -0
  220. package/dist/runtime/token-estimator.js +75 -0
  221. package/dist/runtime/tool-trace-store.d.ts +22 -0
  222. package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
  223. package/dist/runtime/trace-summary.d.ts +5 -0
  224. package/dist/runtime/trace-summary.js +74 -0
  225. package/dist/runtime/turn-text.d.ts +23 -0
  226. package/dist/runtime/turn-text.js +41 -0
  227. package/dist/storage/database.d.ts +67 -0
  228. package/dist/storage/database.js +158 -0
  229. package/package.json +20 -34
  230. package/dist/agent-graph/alias-write.d.ts +0 -3
  231. package/dist/agent-graph/alias-write.js +0 -234
  232. package/dist/agent-graph/entity-resolve.d.ts +0 -3
  233. package/dist/agent-graph/entity-resolve.js +0 -271
  234. package/dist/agent-graph/errors.d.ts +0 -4
  235. package/dist/agent-graph/errors.js +0 -11
  236. package/dist/agent-graph/graph-query.d.ts +0 -5
  237. package/dist/agent-graph/graph-query.js +0 -360
  238. package/dist/agent-graph/index.d.ts +0 -6
  239. package/dist/agent-situation/builder.d.ts +0 -8
  240. package/dist/agent-situation/builder.js +0 -239
  241. package/dist/agent-situation/cache-key.d.ts +0 -4
  242. package/dist/agent-situation/cache-key.js +0 -64
  243. package/dist/agent-situation/index.d.ts +0 -7
  244. package/dist/agent-situation/index.js +0 -28
  245. package/dist/agent-situation/packet-store.d.ts +0 -27
  246. package/dist/agent-situation/packet-store.js +0 -228
  247. package/dist/agent-situation/ranking-policy.d.ts +0 -18
  248. package/dist/agent-situation/ranking-policy.js +0 -75
  249. package/dist/agent-situation/source-readers.d.ts +0 -52
  250. package/dist/agent-situation/source-readers.js +0 -300
  251. package/dist/agent-situation/types.d.ts +0 -195
  252. package/dist/cases/wiki-page-index.d.ts +0 -37
  253. package/dist/cases/wiki-page-index.js +0 -201
  254. package/dist/config-loader.d.ts +0 -68
  255. package/dist/config-loader.js +0 -239
  256. package/dist/connectors/event-index.d.ts +0 -24
  257. package/dist/connectors/event-index.js +0 -245
  258. package/dist/connectors/raw-query.d.ts +0 -40
  259. package/dist/connectors/raw-query.js +0 -412
  260. package/dist/connectors/types.d.ts +0 -117
  261. package/dist/connectors/types.js +0 -3
  262. package/dist/context-compile/boundary-defaults.d.ts +0 -12
  263. package/dist/context-compile/boundary-defaults.js +0 -105
  264. package/dist/context-compile/channel-grant.js +0 -66
  265. package/dist/context-compile/compiler-policy.d.ts +0 -39
  266. package/dist/context-compile/compiler-policy.js +0 -147
  267. package/dist/context-compile/compiler.d.ts +0 -18
  268. package/dist/context-compile/compiler.js +0 -404
  269. package/dist/context-compile/index.d.ts +0 -10
  270. package/dist/context-compile/index.js +0 -26
  271. package/dist/context-compile/packet-store.d.ts +0 -8
  272. package/dist/context-compile/packet-store.js +0 -239
  273. package/dist/context-compile/ref.d.ts +0 -7
  274. package/dist/context-compile/ref.js +0 -102
  275. package/dist/context-compile/source-readers.d.ts +0 -70
  276. package/dist/context-compile/source-readers.js +0 -840
  277. package/dist/context-compile/types.d.ts +0 -155
  278. package/dist/context-compile/types.js +0 -11
  279. package/dist/context-compile/visibility.d.ts +0 -21
  280. package/dist/context-compile/visibility.js +0 -224
  281. package/dist/decision-tracker.d.ts +0 -206
  282. package/dist/decision-tracker.js +0 -481
  283. package/dist/edges/ref-validation.d.ts +0 -7
  284. package/dist/edges/ref-validation.js +0 -321
  285. package/dist/edges/store.d.ts +0 -8
  286. package/dist/edges/store.js +0 -129
  287. package/dist/embedding-client.d.ts +0 -28
  288. package/dist/embedding-client.js +0 -53
  289. package/dist/embedding-server/index.d.ts +0 -67
  290. package/dist/embedding-server/index.js +0 -405
  291. package/dist/embedding-server/mobile/auth.d.ts +0 -44
  292. package/dist/embedding-server/mobile/auth.js +0 -150
  293. package/dist/embedding-server/mobile/daemon.d.ts +0 -129
  294. package/dist/embedding-server/mobile/daemon.js +0 -313
  295. package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
  296. package/dist/embedding-server/mobile/output-parser.js +0 -241
  297. package/dist/embedding-server/mobile/session-api.d.ts +0 -57
  298. package/dist/embedding-server/mobile/session-api.js +0 -261
  299. package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
  300. package/dist/embedding-server/mobile/session-manager.js +0 -378
  301. package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
  302. package/dist/embedding-server/mobile/websocket-handler.js +0 -486
  303. package/dist/embeddings.d.ts +0 -68
  304. package/dist/embeddings.js +0 -244
  305. package/dist/entities/audit-metrics.d.ts +0 -68
  306. package/dist/entities/audit-metrics.js +0 -124
  307. package/dist/entities/candidate-generator.d.ts +0 -8
  308. package/dist/entities/candidate-generator.js +0 -24
  309. package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
  310. package/dist/entities/entity-linked-decision-counts.js +0 -29
  311. package/dist/entities/entity-list.d.ts +0 -22
  312. package/dist/entities/entity-list.js +0 -3
  313. package/dist/entities/entity-orphan-list.d.ts +0 -17
  314. package/dist/entities/entity-orphan-list.js +0 -3
  315. package/dist/entities/entity-search.d.ts +0 -20
  316. package/dist/entities/entity-search.js +0 -3
  317. package/dist/entities/errors.d.ts +0 -55
  318. package/dist/entities/errors.js +0 -100
  319. package/dist/entities/lineage-store.d.ts +0 -28
  320. package/dist/entities/lineage-store.js +0 -204
  321. package/dist/entities/normalization.d.ts +0 -14
  322. package/dist/entities/normalization.js +0 -63
  323. package/dist/entities/policy-store.d.ts +0 -8
  324. package/dist/entities/policy-store.js +0 -75
  325. package/dist/entities/policy-types.d.ts +0 -72
  326. package/dist/entities/policy-types.js +0 -59
  327. package/dist/entities/projection.d.ts +0 -8
  328. package/dist/entities/projection.js +0 -82
  329. package/dist/entities/provenance-query.d.ts +0 -32
  330. package/dist/entities/provenance-query.js +0 -3
  331. package/dist/entities/read-identity.d.ts +0 -31
  332. package/dist/entities/read-identity.js +0 -264
  333. package/dist/entities/recall-bridge.d.ts +0 -5
  334. package/dist/entities/recall-bridge.js +0 -171
  335. package/dist/entities/resolution-engine.d.ts +0 -8
  336. package/dist/entities/resolution-engine.js +0 -3
  337. package/dist/entities/rollback-preview.d.ts +0 -35
  338. package/dist/entities/rollback-preview.js +0 -3
  339. package/dist/entities/source-locator.d.ts +0 -3
  340. package/dist/entities/source-locator.js +0 -32
  341. package/dist/entities/store.d.ts +0 -69
  342. package/dist/entities/store.js +0 -544
  343. package/dist/entities/types.d.ts +0 -166
  344. package/dist/entities/types.js +0 -30
  345. package/dist/memory/extraction-prompt.d.ts +0 -4
  346. package/dist/memory/extraction-prompt.js +0 -89
  347. package/dist/memory/scope-backfill.d.ts +0 -14
  348. package/dist/memory/scope-backfill.js +0 -3
  349. package/dist/memory/scope-store.d.ts +0 -4
  350. package/dist/memory/scope-store.js +0 -9
  351. package/dist/memory-store.d.ts +0 -87
  352. package/dist/memory-store.js +0 -78
  353. package/dist/model-runs/store.d.ts +0 -13
  354. package/dist/model-runs/tool-trace-store.d.ts +0 -8
  355. package/dist/notification-manager.d.ts +0 -7
  356. package/dist/notification-manager.js +0 -12
  357. package/dist/outcome-tracker.d.ts +0 -151
  358. package/dist/outcome-tracker.js +0 -271
  359. package/dist/query-intent.d.ts +0 -23
  360. package/dist/query-intent.js +0 -114
  361. package/dist/runtime/trusted-provenance.d.ts +0 -3
  362. package/dist/runtime/trusted-provenance.js +0 -6
  363. package/dist/search/question-type.d.ts +0 -5
  364. package/dist/search/question-type.js +0 -41
  365. package/dist/test-utils.d.ts +0 -80
  366. package/dist/test-utils.js +0 -218
  367. package/dist/tier-validator.d.ts +0 -43
  368. package/dist/tier-validator.js +0 -159
  369. package/dist/time-formatter.d.ts +0 -25
  370. package/dist/time-formatter.js +0 -93
  371. /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
  372. /package/dist/{search → knowledge}/feedback-store.js +0 -0
  373. /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
  374. /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
  375. /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
  376. /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
  377. /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
  378. /package/dist/{search → knowledge}/search-quality.js +0 -0
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ /**
3
+ * Persistent CLI Adapter - Wraps PersistentClaudeProcess with ClaudeCLIWrapper interface
4
+ *
5
+ * WHY THIS EXISTS:
6
+ * - PersistentClaudeProcess uses stream-json for efficient multi-turn conversations
7
+ * - AgentLoop expects ClaudeCLIWrapper interface (prompt, setSessionId, setSystemPrompt)
8
+ * - This adapter bridges the two, enabling drop-in replacement
9
+ *
10
+ * KEY OPTIMIZATION:
11
+ * - Tool results sent via stdin (tool_result message)
12
+ * - Claude context preserved without re-sending full history
13
+ * - System prompt sent only once at process start
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PersistentCLIAdapter = void 0;
17
+ exports.createPersistentCLIAdapter = createPersistentCLIAdapter;
18
+ const events_1 = require("events");
19
+ const persistent_cli_process_js_1 = require("./persistent-cli-process.js");
20
+ const types_js_1 = require("./types.js");
21
+ /**
22
+ * PersistentCLIAdapter - Drop-in replacement for ClaudeCLIWrapper
23
+ *
24
+ * Implements the same interface but uses persistent CLI processes under the hood.
25
+ * This enables efficient multi-turn conversations without re-sending system prompts.
26
+ */
27
+ class PersistentCLIAdapter extends events_1.EventEmitter {
28
+ backendType = 'claude';
29
+ /**
30
+ * The CLI's own delegation: `Agent` with `run_in_background: true`. The parent stream
31
+ * carries the spawn (`system/task_started` plus the launch tool_result that names the
32
+ * child), the child's tool calls, its final text, and the completion notification, so a
33
+ * spawn IS observable - PersistentClaudeProcess maps them and this adapter re-emits them
34
+ * as `subagent` events with the same shape the Codex runner uses.
35
+ */
36
+ supportsNativeSubagents = true;
37
+ options;
38
+ processPool;
39
+ channelKey;
40
+ currentProcess = null;
41
+ currentProcessChannelKey = null;
42
+ pendingToolResults = new Map();
43
+ lastToolUseBlocks = [];
44
+ /** Processes whose subagent stream events are already wired to this adapter. */
45
+ wiredProcesses = new WeakSet();
46
+ initializedProcesses = new WeakSet();
47
+ // ─── Metrics tracking ───
48
+ _requestCount = 0;
49
+ _failureCount = 0;
50
+ _totalLatencyMs = 0;
51
+ _lastRequestAt = null;
52
+ constructor(options) {
53
+ super();
54
+ this.options = { ...options };
55
+ this.channelKey = options.sessionId || 'default';
56
+ this.processPool = new persistent_cli_process_js_1.PersistentProcessPool({
57
+ workspaceDir: options.workspaceDir,
58
+ model: options.model,
59
+ systemPrompt: options.systemPrompt,
60
+ mcpConfigPath: options.mcpConfigPath,
61
+ dangerouslySkipPermissions: options.dangerouslySkipPermissions,
62
+ permissionMode: options.permissionMode,
63
+ env: options.env,
64
+ processEnv: options.processEnv,
65
+ useGatewayTools: options.useGatewayTools,
66
+ requestTimeout: options.requestTimeout,
67
+ tools: options.tools,
68
+ // Adaptive thinking effort (agent.effort) reaches the CLI as --effort.
69
+ effort: options.effort,
70
+ pluginDir: options.pluginDir,
71
+ allowedTools: options.allowedTools,
72
+ disallowedTools: options.disallowedTools,
73
+ });
74
+ }
75
+ /**
76
+ * Send a prompt to Claude
77
+ *
78
+ * This method:
79
+ * 1. Gets or creates a persistent process for this channel
80
+ * 2. Sends the message via stdin
81
+ * 3. Parses the response from stdout
82
+ * 4. Returns PromptResult compatible with ClaudeCLIWrapper
83
+ */
84
+ async prompt(content, callbacks, options) {
85
+ // Get or create process for this channel
86
+ // NOTE: Do NOT pass sessionId to the process opts. The pool generates fresh randomUUID()
87
+ // for --session-id. Passing the SessionPool UUID would cause Claude CLI to reload disk
88
+ // history on process restart, leading to "Prompt is too long" errors when accumulated
89
+ // context exceeds the window. options.sessionId is the pool ROUTING key only.
90
+ const channelKey = options?.sessionId ?? options?.sessionKey ?? this.channelKey;
91
+ const proc = await this.processPool.getProcess(channelKey, {
92
+ model: options?.model || this.options.model,
93
+ systemPrompt: options?.systemPrompt ?? this.options.systemPrompt,
94
+ dangerouslySkipPermissions: this.options.dangerouslySkipPermissions,
95
+ permissionMode: this.options.permissionMode,
96
+ useGatewayTools: this.options.useGatewayTools,
97
+ allowedTools: options?.allowedTools || this.options.allowedTools,
98
+ disallowedTools: options?.disallowedTools || this.options.disallowedTools,
99
+ // Per-call role projection of the CLI builtin set; '' is a real grant
100
+ // (no builtins), so only nullish falls back to the pool default.
101
+ tools: options?.tools ?? this.options.tools,
102
+ // Coalesce to the adapter default so an absent per-call value never nulls
103
+ // out the pool's construction-time requestTimeout (chat runs keep it).
104
+ requestTimeout: options?.requestTimeout ?? this.options.requestTimeout,
105
+ policyFingerprint: options?.sessionPolicyFingerprint,
106
+ env: { ...this.options.env, MAMA_HOOK_FEATURES: 'rules,agents' },
107
+ });
108
+ // Keep the legacy accessor pointing at the most recent process, but NEVER
109
+ // dereference this.currentProcess inside prompt() - concurrent calls race it.
110
+ this.currentProcess = proc;
111
+ this.currentProcessChannelKey = channelKey;
112
+ this.wireSubagentEvents(proc, channelKey);
113
+ // Pending tool results belong to the legacy single-channel path; only flush
114
+ // them when this call routes to that same channel - flushing them into an
115
+ // arbitrary per-call session would misdeliver them.
116
+ if (channelKey === this.channelKey && this.pendingToolResults.size > 0) {
117
+ // Verify the process is still alive before sending stale tool results
118
+ // If the process was replaced (e.g., crashed and restarted), pending results are invalid
119
+ if (!proc.isAlive()) {
120
+ console.warn(`[PersistentAdapter] Process not alive, discarding ${this.pendingToolResults.size} pending tool results`);
121
+ this.pendingToolResults.clear();
122
+ }
123
+ else {
124
+ // Send tool results before the new message
125
+ for (const [toolUseId, { result, isError }] of this.pendingToolResults) {
126
+ try {
127
+ console.log(`[PersistentAdapter] Sending pending tool_result: ${toolUseId}`);
128
+ await proc.sendToolResult(toolUseId, result, isError);
129
+ }
130
+ catch (err) {
131
+ console.error(`[PersistentAdapter] Failed to send tool_result ${toolUseId}:`, err);
132
+ }
133
+ }
134
+ this.pendingToolResults.clear();
135
+ }
136
+ }
137
+ // Send the user message with metrics tracking
138
+ const startTime = Date.now();
139
+ this._requestCount++;
140
+ this._lastRequestAt = startTime;
141
+ let latencyRecorded = false;
142
+ const recordLatency = () => {
143
+ if (!latencyRecorded) {
144
+ latencyRecorded = true;
145
+ this._totalLatencyMs += Date.now() - startTime;
146
+ }
147
+ };
148
+ try {
149
+ let prompt = content;
150
+ if (options?.preparePrompt) {
151
+ try {
152
+ prompt = await options.preparePrompt({
153
+ sessionId: proc.getSessionId(),
154
+ isNewSession: !this.initializedProcesses.has(proc),
155
+ });
156
+ }
157
+ catch (error) {
158
+ if (!this.initializedProcesses.has(proc))
159
+ this.processPool.retireProcess(channelKey, proc);
160
+ throw error;
161
+ }
162
+ }
163
+ // sendMessage can start a dead process for legacy callers. A prepared turn
164
+ // must instead rebuild its context for the replacement before dispatch.
165
+ if (!proc.isAlive())
166
+ throw new types_js_1.NativeSessionUnavailableError('Claude process died while preparing input');
167
+ const result = await proc.sendMessage(prompt, {
168
+ ...callbacks,
169
+ onAccepted: (receipt) => {
170
+ this.initializedProcesses.add(proc);
171
+ callbacks?.onAccepted?.(receipt);
172
+ },
173
+ }, options?.nativeInputId);
174
+ this.initializedProcesses.add(proc);
175
+ recordLatency();
176
+ // Track tool use blocks for potential tool result sending
177
+ this.lastToolUseBlocks = result.toolUseBlocks || [];
178
+ return result;
179
+ }
180
+ catch (err) {
181
+ this._failureCount++;
182
+ recordLatency();
183
+ if (err instanceof types_js_1.ClaudeToolStreamProtocolError) {
184
+ this.processPool.retireProcess(channelKey, proc);
185
+ }
186
+ throw err;
187
+ }
188
+ }
189
+ // ─── Native background Agent (delegation) observation ────────────────────
190
+ /**
191
+ * Re-emit one process's background-Agent stream events as runner-level events.
192
+ *
193
+ * `subagent` carries the SAME shape the Codex runner emits, so
194
+ * `attachSubagentWake` works unchanged. A completion the CLI answered with its own
195
+ * follow-up turn is emitted as `subagentObserved` instead: that turn IS the owner
196
+ * reacting, and a host wake on top of it would be a second turn for one child.
197
+ */
198
+ wireSubagentEvents(proc, channelKey) {
199
+ if (this.wiredProcesses.has(proc))
200
+ return;
201
+ // Structural test doubles stand in for the pooled process and carry neither the emitter
202
+ // nor the background-agent accessor. Nothing to observe there.
203
+ if (typeof proc.on !== 'function' ||
204
+ typeof proc.hasLiveBackgroundAgents !== 'function') {
205
+ return;
206
+ }
207
+ this.wiredProcesses.add(proc);
208
+ proc.on('subagent', (event) => {
209
+ const translated = {
210
+ kind: event.kind,
211
+ sessionKey: channelKey,
212
+ parentThreadId: proc.getSessionId(),
213
+ agentThreadId: event.agentThreadId,
214
+ agentPath: event.agentPath,
215
+ ...(event.status ? { status: event.status } : {}),
216
+ ...(event.finalText ? { finalText: event.finalText } : {}),
217
+ };
218
+ if (event.kind === 'completed') {
219
+ if (!event.wakeRequired) {
220
+ console.log(`[PersistentAdapter] subagent ${event.agentThreadId} finished; the CLI's own ` +
221
+ 'turn carries the wake');
222
+ this.emit('subagentObserved', translated);
223
+ return;
224
+ }
225
+ }
226
+ this.emit('subagent', translated);
227
+ });
228
+ proc.on('autonomousTurn', (event) => {
229
+ this.emit('autonomousTurn', { ...event, sessionKey: channelKey });
230
+ });
231
+ proc.on('autonomousTurnResult', (event) => {
232
+ this.emit('autonomousTurnResult', { ...event, sessionKey: channelKey });
233
+ });
234
+ }
235
+ /**
236
+ * Send a tool result back to Claude
237
+ *
238
+ * This is a new method not in ClaudeCLIWrapper that enables efficient tool loops.
239
+ * Instead of rebuilding the full history, we send just the tool result.
240
+ */
241
+ async sendToolResult(toolUseId, result, isError = false, callbacks) {
242
+ if (!this.currentProcess || !this.currentProcess.isAlive()) {
243
+ throw new Error('No active process to send tool result to');
244
+ }
245
+ return this.currentProcess.sendToolResult(toolUseId, result, isError, callbacks);
246
+ }
247
+ /**
248
+ * Queue a tool result to be sent with the next message
249
+ *
250
+ * Use this when you want to collect multiple tool results before continuing.
251
+ */
252
+ queueToolResult(toolUseId, result, isError = false) {
253
+ this.pendingToolResults.set(toolUseId, { result, isError });
254
+ }
255
+ /**
256
+ * Check if there are pending tool results
257
+ */
258
+ hasPendingToolResults() {
259
+ return this.pendingToolResults.size > 0;
260
+ }
261
+ /**
262
+ * Get the last tool use blocks from the most recent response
263
+ */
264
+ getLastToolUseBlocks() {
265
+ return this.lastToolUseBlocks;
266
+ }
267
+ /**
268
+ * Get current session ID
269
+ */
270
+ getSessionId() {
271
+ return this.options.sessionId || this.channelKey;
272
+ }
273
+ /**
274
+ * Create a new session (creates new process)
275
+ */
276
+ resetSession(sessionId = this.channelKey) {
277
+ this.processPool.stopProcess(sessionId);
278
+ if (this.currentProcessChannelKey === sessionId) {
279
+ this.currentProcess = null;
280
+ this.currentProcessChannelKey = null;
281
+ this.lastToolUseBlocks = [];
282
+ }
283
+ if (sessionId === this.channelKey) {
284
+ this.pendingToolResults.clear();
285
+ }
286
+ }
287
+ /**
288
+ * Set session ID (for channel-specific conversations)
289
+ *
290
+ * Note: This creates a new channel key, effectively switching channels.
291
+ * The old process is kept alive for potential reuse.
292
+ * Callers should use resetSession() if the old process is no longer needed to avoid orphan processes.
293
+ *
294
+ * @deprecated - per-call sessionId via prompt() options; this mutates shared adapter state
295
+ */
296
+ setSessionId(sessionId) {
297
+ this.options.sessionId = sessionId;
298
+ this.channelKey = sessionId;
299
+ // Don't stop the old process - it might be reused
300
+ this.currentProcess = null;
301
+ this.currentProcessChannelKey = null;
302
+ this.pendingToolResults.clear();
303
+ this.lastToolUseBlocks = [];
304
+ }
305
+ /**
306
+ * Set system prompt
307
+ *
308
+ * IMPORTANT: This only affects new processes. Existing processes keep their prompt.
309
+ * To apply a new system prompt, call resetSession() after setSystemPrompt().
310
+ *
311
+ * @deprecated - mutates shared spawn state; pass systemPrompt per prompt() call
312
+ */
313
+ setSystemPrompt(prompt) {
314
+ this.options.systemPrompt = prompt;
315
+ // Note: Existing process is NOT updated
316
+ // This matches ClaudeCLIWrapper behavior (system prompt is per-process)
317
+ }
318
+ /**
319
+ * Get current options (for debugging)
320
+ */
321
+ getOptions() {
322
+ return { ...this.options };
323
+ }
324
+ getSessionPolicyStatus(options) {
325
+ const channelKey = options.sessionId ?? options.sessionKey ?? this.channelKey;
326
+ return this.processPool.getSessionPolicyStatus(channelKey, options.sessionPolicyFingerprint);
327
+ }
328
+ // ─── IModelRunner implementation ─────────────────────────────────────────
329
+ /**
330
+ * Check if the adapter has a live process ready to accept prompts.
331
+ */
332
+ isHealthy() {
333
+ if (!this.currentProcess)
334
+ return true; // no process yet = can create on demand
335
+ return this.currentProcess.isAlive();
336
+ }
337
+ /**
338
+ * Collect runtime metrics.
339
+ */
340
+ getMetrics() {
341
+ return {
342
+ requestCount: this._requestCount,
343
+ failureCount: this._failureCount,
344
+ avgLatencyMs: this._requestCount > 0 ? Math.round(this._totalLatencyMs / this._requestCount) : 0,
345
+ lastRequestAt: this._lastRequestAt,
346
+ };
347
+ }
348
+ /**
349
+ * Gracefully stop all processes (IModelRunner.stop).
350
+ */
351
+ stop() {
352
+ this.stopAll();
353
+ }
354
+ /**
355
+ * Stop all processes (cleanup) — legacy name, delegates to stop().
356
+ */
357
+ stopAll() {
358
+ this.processPool.stopAll();
359
+ this.currentProcess = null;
360
+ this.currentProcessChannelKey = null;
361
+ this.pendingToolResults.clear();
362
+ this.lastToolUseBlocks = [];
363
+ }
364
+ /**
365
+ * Check if the adapter is in persistent mode (always true for this adapter)
366
+ */
367
+ isPersistent() {
368
+ return true;
369
+ }
370
+ /**
371
+ * Get the current process state
372
+ */
373
+ getProcessState() {
374
+ return this.currentProcess?.getState() || 'no_process';
375
+ }
376
+ /**
377
+ * Get number of active processes in the pool
378
+ */
379
+ getActiveProcessCount() {
380
+ return this.processPool.getActiveCount();
381
+ }
382
+ }
383
+ exports.PersistentCLIAdapter = PersistentCLIAdapter;
384
+ /**
385
+ * Factory function to create a ClaudeCLIWrapper-compatible adapter
386
+ *
387
+ * Usage:
388
+ * const wrapper = createPersistentCLIAdapter({ sessionId: 'discord-channel-123' });
389
+ * const result = await wrapper.prompt('Hello!');
390
+ *
391
+ * Each adapter instance maintains its own process pool. Processes are not shared across adapter instances.
392
+ */
393
+ function createPersistentCLIAdapter(options) {
394
+ return new PersistentCLIAdapter(options);
395
+ }
396
+ //# sourceMappingURL=persistent-cli-adapter.js.map