@jungjaehoon/mama-core 2.4.0 → 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 (374) 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/068-tool-trace-diagnostics.sql +13 -0
  9. package/db/migrations/069-create-registry-nodes.sql +52 -0
  10. package/db/migrations/070-record-identity.sql +35 -0
  11. package/db/migrations/071-service-operation-origins.sql +187 -0
  12. package/db/migrations/072-observation-versions.sql +29 -0
  13. package/db/migrations/073-registry-corrections.sql +45 -0
  14. package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
  15. package/db/migrations/075-agent-judgments.sql +58 -0
  16. package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
  17. package/db/migrations/077-legacy-record-kind.sql +6 -0
  18. package/db/migrations/078-source-ingest-commands.sql +18 -0
  19. package/db/migrations/079-twin-edge-relations.sql +43 -0
  20. package/db/migrations/080-restore-duration-days.sql +7 -0
  21. package/db/migrations/081-mailbox.sql +61 -0
  22. package/db/migrations/082-commitments-row-id.sql +12 -0
  23. package/db/migrations/083-observation-is-the-evidence.sql +49 -0
  24. package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
  25. package/db/migrations/085-a-migration-has-a-source.sql +37 -0
  26. package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
  27. package/db/migrations/087-mailbox-payload.sql +5 -0
  28. package/db/migrations/088-native-input-journal.sql +14 -0
  29. package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
  30. package/db/migrations/090-model-run-native-inputs.sql +29 -0
  31. package/db/migrations/091-native-turn-results.sql +11 -0
  32. package/db/migrations/092-restore-decision-fts.sql +34 -0
  33. package/db/migrations/093-native-turn-primary-kind.sql +14 -0
  34. package/db/migrations/094-commitment-run-provenance.sql +9 -0
  35. package/db/migrations/095-model-run-native-input-identity.sql +39 -0
  36. package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
  37. package/db/migrations/097-native-input-json-validity.sql +37 -0
  38. package/db/migrations/098-workflow-memory-kind.sql +105 -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 +87 -15
  56. package/dist/db-adapter/node-sqlite-adapter.js +2045 -568
  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 +99 -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/commitments.d.ts +188 -0
  77. package/dist/knowledge/commitments.js +370 -0
  78. package/dist/knowledge/decision-edges.d.ts +70 -0
  79. package/dist/knowledge/decision-edges.js +123 -0
  80. package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
  81. package/dist/knowledge/graph-query.js +1585 -0
  82. package/dist/knowledge/identity.d.ts +16 -0
  83. package/dist/knowledge/identity.js +22 -0
  84. package/dist/knowledge/index.d.ts +47 -0
  85. package/dist/knowledge/index.js +90 -0
  86. package/dist/knowledge/judgments.d.ts +118 -0
  87. package/dist/knowledge/judgments.js +808 -0
  88. package/dist/knowledge/observations.d.ts +160 -0
  89. package/dist/knowledge/observations.js +449 -0
  90. package/dist/knowledge/question-type.d.ts +34 -0
  91. package/dist/knowledge/question-type.js +70 -0
  92. package/dist/{search → knowledge}/ranker-features.js +1 -1
  93. package/dist/{search → knowledge}/search-quality.d.ts +0 -1
  94. package/dist/knowledge/search.d.ts +38 -0
  95. package/dist/knowledge/search.js +91 -0
  96. package/dist/knowledge/source-ingest.d.ts +65 -0
  97. package/dist/knowledge/source-ingest.js +174 -0
  98. package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
  99. package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
  100. package/dist/knowledge/work-dates.d.ts +49 -0
  101. package/dist/knowledge/work-dates.js +120 -0
  102. package/dist/mama-api.d.ts +116 -778
  103. package/dist/mama-api.js +313 -2457
  104. package/dist/memory/api.d.ts +264 -24
  105. package/dist/memory/api.js +1633 -843
  106. package/dist/memory/bootstrap-builder.d.ts +2 -1
  107. package/dist/memory/bootstrap-builder.js +5 -5
  108. package/dist/memory/channel-summary-state-store.d.ts +3 -2
  109. package/dist/memory/channel-summary-state-store.js +53 -51
  110. package/dist/memory/channel-summary-store.d.ts +5 -3
  111. package/dist/memory/channel-summary-store.js +3 -8
  112. package/dist/memory/dashboard-read.d.ts +46 -0
  113. package/dist/memory/dashboard-read.js +94 -0
  114. package/dist/memory/event-store.d.ts +3 -3
  115. package/dist/memory/event-store.js +3 -10
  116. package/dist/memory/finding-store.d.ts +3 -2
  117. package/dist/memory/finding-store.js +2 -7
  118. package/dist/memory/graph-read.d.ts +52 -0
  119. package/dist/memory/graph-read.js +130 -0
  120. package/dist/memory/judgment-types.d.ts +394 -0
  121. package/dist/memory/judgment-types.js +16 -0
  122. package/dist/memory/provenance-audit.d.ts +5 -2
  123. package/dist/memory/provenance-audit.js +8 -14
  124. package/dist/memory/provenance-live.d.ts +141 -0
  125. package/dist/memory/provenance-live.js +409 -0
  126. package/dist/memory/provenance-query.d.ts +5 -4
  127. package/dist/memory/provenance-query.js +21 -29
  128. package/dist/memory/provenance-resolver.d.ts +191 -0
  129. package/dist/memory/provenance-resolver.js +155 -0
  130. package/dist/memory/provenance.d.ts +1 -11
  131. package/dist/memory/provenance.js +2 -33
  132. package/dist/memory/recall-sanitize.d.ts +55 -0
  133. package/dist/memory/recall-sanitize.js +144 -0
  134. package/dist/memory/secret-filter.d.ts +32 -0
  135. package/dist/memory/secret-filter.js +126 -0
  136. package/dist/memory/truth-store.d.ts +2 -1
  137. package/dist/memory/truth-store.js +1 -4
  138. package/dist/memory/types.d.ts +74 -24
  139. package/dist/memory/types.js +75 -5
  140. package/dist/memory/write-adapters.d.ts +98 -0
  141. package/dist/memory/write-adapters.js +242 -0
  142. package/dist/operations/owner-action-effects.d.ts +53 -0
  143. package/dist/operations/owner-action-effects.js +96 -0
  144. package/dist/provenance/source-ref.d.ts +1 -1
  145. package/dist/provenance/source-ref.js +0 -2
  146. package/dist/registry/corrections.d.ts +31 -0
  147. package/dist/registry/corrections.js +332 -0
  148. package/dist/registry/record-identity.d.ts +49 -0
  149. package/dist/registry/record-identity.js +133 -0
  150. package/dist/registry/store.d.ts +101 -0
  151. package/dist/registry/store.js +395 -0
  152. package/dist/registry/types.d.ts +28 -0
  153. package/dist/registry/types.js +5 -0
  154. package/dist/relevance-scorer.js +2 -2
  155. package/dist/runtime/agent-event-bus.d.ts +50 -0
  156. package/dist/runtime/agent-event-bus.js +101 -0
  157. package/dist/runtime/drivers/claude-cli-wrapper.d.ts +155 -0
  158. package/dist/runtime/drivers/claude-cli-wrapper.js +392 -0
  159. package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
  160. package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
  161. package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
  162. package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
  163. package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
  164. package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
  165. package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
  166. package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
  167. package/dist/runtime/drivers/codex-home.d.ts +20 -0
  168. package/dist/runtime/drivers/codex-home.js +674 -0
  169. package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
  170. package/dist/runtime/drivers/codex-thread-registry.js +433 -0
  171. package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
  172. package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
  173. package/dist/runtime/drivers/persistent-cli-process.d.ts +424 -0
  174. package/dist/runtime/drivers/persistent-cli-process.js +1543 -0
  175. package/dist/runtime/drivers/types.d.ts +456 -0
  176. package/dist/runtime/drivers/types.js +110 -0
  177. package/dist/runtime/mailbox.d.ts +223 -0
  178. package/dist/runtime/mailbox.js +582 -0
  179. package/dist/runtime/model-run-store.d.ts +28 -0
  180. package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
  181. package/dist/runtime/model-run-types.d.ts +132 -0
  182. package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
  183. package/dist/runtime/native-effect-observer.d.ts +22 -0
  184. package/dist/runtime/native-effect-observer.js +103 -0
  185. package/dist/runtime/native-input-journal.d.ts +46 -0
  186. package/dist/runtime/native-input-journal.js +308 -0
  187. package/dist/runtime/native-prompt.d.ts +118 -0
  188. package/dist/runtime/native-prompt.js +496 -0
  189. package/dist/runtime/native-session.d.ts +10 -0
  190. package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
  191. package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
  192. package/dist/runtime/native-tool-trace-observer.js +65 -0
  193. package/dist/runtime/native-turn.d.ts +272 -0
  194. package/dist/runtime/native-turn.js +1041 -0
  195. package/dist/runtime/operations.d.ts +236 -0
  196. package/dist/runtime/operations.js +565 -0
  197. package/dist/runtime/post-tool-handler.d.ts +74 -0
  198. package/dist/runtime/post-tool-handler.js +137 -0
  199. package/dist/runtime/prompt-layers.d.ts +126 -0
  200. package/dist/runtime/prompt-layers.js +239 -0
  201. package/dist/runtime/runtime-process.d.ts +102 -0
  202. package/dist/runtime/runtime-process.js +206 -0
  203. package/dist/runtime/runtime.d.ts +278 -0
  204. package/dist/runtime/runtime.js +563 -0
  205. package/dist/runtime/session-pool.d.ts +176 -0
  206. package/dist/runtime/session-pool.js +369 -0
  207. package/dist/runtime/stimulus-payload.d.ts +5 -0
  208. package/dist/runtime/stimulus-payload.js +50 -0
  209. package/dist/runtime/subagent-bridge.d.ts +24 -0
  210. package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
  211. package/dist/runtime/text-completion.d.ts +22 -0
  212. package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
  213. package/dist/runtime/token-estimator.d.ts +25 -0
  214. package/dist/runtime/token-estimator.js +75 -0
  215. package/dist/runtime/tool-trace-store.d.ts +22 -0
  216. package/dist/runtime/tool-trace-store.js +242 -0
  217. package/dist/runtime/trace-summary.d.ts +5 -0
  218. package/dist/runtime/trace-summary.js +74 -0
  219. package/dist/runtime/turn-text.d.ts +23 -0
  220. package/dist/runtime/turn-text.js +41 -0
  221. package/dist/storage/database.d.ts +67 -0
  222. package/dist/storage/database.js +158 -0
  223. package/package.json +20 -34
  224. package/dist/agent-graph/alias-write.d.ts +0 -3
  225. package/dist/agent-graph/alias-write.js +0 -234
  226. package/dist/agent-graph/entity-resolve.d.ts +0 -3
  227. package/dist/agent-graph/entity-resolve.js +0 -271
  228. package/dist/agent-graph/errors.d.ts +0 -4
  229. package/dist/agent-graph/errors.js +0 -11
  230. package/dist/agent-graph/graph-query.d.ts +0 -5
  231. package/dist/agent-graph/graph-query.js +0 -360
  232. package/dist/agent-graph/index.d.ts +0 -6
  233. package/dist/agent-situation/builder.d.ts +0 -8
  234. package/dist/agent-situation/builder.js +0 -239
  235. package/dist/agent-situation/cache-key.d.ts +0 -4
  236. package/dist/agent-situation/cache-key.js +0 -64
  237. package/dist/agent-situation/index.d.ts +0 -7
  238. package/dist/agent-situation/index.js +0 -28
  239. package/dist/agent-situation/packet-store.d.ts +0 -27
  240. package/dist/agent-situation/packet-store.js +0 -228
  241. package/dist/agent-situation/ranking-policy.d.ts +0 -18
  242. package/dist/agent-situation/ranking-policy.js +0 -75
  243. package/dist/agent-situation/source-readers.d.ts +0 -52
  244. package/dist/agent-situation/source-readers.js +0 -300
  245. package/dist/agent-situation/types.d.ts +0 -195
  246. package/dist/cases/wiki-page-index.d.ts +0 -37
  247. package/dist/cases/wiki-page-index.js +0 -201
  248. package/dist/config-loader.d.ts +0 -68
  249. package/dist/config-loader.js +0 -239
  250. package/dist/connectors/event-index.d.ts +0 -24
  251. package/dist/connectors/event-index.js +0 -245
  252. package/dist/connectors/raw-query.d.ts +0 -40
  253. package/dist/connectors/raw-query.js +0 -412
  254. package/dist/connectors/types.d.ts +0 -117
  255. package/dist/connectors/types.js +0 -3
  256. package/dist/context-compile/boundary-defaults.d.ts +0 -12
  257. package/dist/context-compile/boundary-defaults.js +0 -105
  258. package/dist/context-compile/channel-grant.js +0 -66
  259. package/dist/context-compile/compiler-policy.d.ts +0 -39
  260. package/dist/context-compile/compiler-policy.js +0 -147
  261. package/dist/context-compile/compiler.d.ts +0 -18
  262. package/dist/context-compile/compiler.js +0 -404
  263. package/dist/context-compile/index.d.ts +0 -10
  264. package/dist/context-compile/index.js +0 -26
  265. package/dist/context-compile/packet-store.d.ts +0 -8
  266. package/dist/context-compile/packet-store.js +0 -239
  267. package/dist/context-compile/ref.d.ts +0 -7
  268. package/dist/context-compile/ref.js +0 -102
  269. package/dist/context-compile/source-readers.d.ts +0 -70
  270. package/dist/context-compile/source-readers.js +0 -840
  271. package/dist/context-compile/types.d.ts +0 -155
  272. package/dist/context-compile/types.js +0 -11
  273. package/dist/context-compile/visibility.d.ts +0 -21
  274. package/dist/context-compile/visibility.js +0 -224
  275. package/dist/decision-tracker.d.ts +0 -206
  276. package/dist/decision-tracker.js +0 -481
  277. package/dist/edges/ref-validation.d.ts +0 -7
  278. package/dist/edges/ref-validation.js +0 -321
  279. package/dist/edges/store.d.ts +0 -8
  280. package/dist/edges/store.js +0 -129
  281. package/dist/embedding-client.d.ts +0 -28
  282. package/dist/embedding-client.js +0 -53
  283. package/dist/embedding-server/index.d.ts +0 -67
  284. package/dist/embedding-server/index.js +0 -405
  285. package/dist/embedding-server/mobile/auth.d.ts +0 -44
  286. package/dist/embedding-server/mobile/auth.js +0 -150
  287. package/dist/embedding-server/mobile/daemon.d.ts +0 -129
  288. package/dist/embedding-server/mobile/daemon.js +0 -313
  289. package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
  290. package/dist/embedding-server/mobile/output-parser.js +0 -241
  291. package/dist/embedding-server/mobile/session-api.d.ts +0 -57
  292. package/dist/embedding-server/mobile/session-api.js +0 -261
  293. package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
  294. package/dist/embedding-server/mobile/session-manager.js +0 -378
  295. package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
  296. package/dist/embedding-server/mobile/websocket-handler.js +0 -486
  297. package/dist/embeddings.d.ts +0 -68
  298. package/dist/embeddings.js +0 -244
  299. package/dist/entities/audit-metrics.d.ts +0 -68
  300. package/dist/entities/audit-metrics.js +0 -124
  301. package/dist/entities/candidate-generator.d.ts +0 -8
  302. package/dist/entities/candidate-generator.js +0 -24
  303. package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
  304. package/dist/entities/entity-linked-decision-counts.js +0 -29
  305. package/dist/entities/entity-list.d.ts +0 -22
  306. package/dist/entities/entity-list.js +0 -3
  307. package/dist/entities/entity-orphan-list.d.ts +0 -17
  308. package/dist/entities/entity-orphan-list.js +0 -3
  309. package/dist/entities/entity-search.d.ts +0 -20
  310. package/dist/entities/entity-search.js +0 -3
  311. package/dist/entities/errors.d.ts +0 -55
  312. package/dist/entities/errors.js +0 -100
  313. package/dist/entities/lineage-store.d.ts +0 -28
  314. package/dist/entities/lineage-store.js +0 -204
  315. package/dist/entities/normalization.d.ts +0 -14
  316. package/dist/entities/normalization.js +0 -63
  317. package/dist/entities/policy-store.d.ts +0 -8
  318. package/dist/entities/policy-store.js +0 -75
  319. package/dist/entities/policy-types.d.ts +0 -72
  320. package/dist/entities/policy-types.js +0 -59
  321. package/dist/entities/projection.d.ts +0 -8
  322. package/dist/entities/projection.js +0 -82
  323. package/dist/entities/provenance-query.d.ts +0 -32
  324. package/dist/entities/provenance-query.js +0 -3
  325. package/dist/entities/read-identity.d.ts +0 -31
  326. package/dist/entities/read-identity.js +0 -264
  327. package/dist/entities/recall-bridge.d.ts +0 -5
  328. package/dist/entities/recall-bridge.js +0 -171
  329. package/dist/entities/resolution-engine.d.ts +0 -8
  330. package/dist/entities/resolution-engine.js +0 -3
  331. package/dist/entities/rollback-preview.d.ts +0 -35
  332. package/dist/entities/rollback-preview.js +0 -3
  333. package/dist/entities/source-locator.d.ts +0 -3
  334. package/dist/entities/source-locator.js +0 -32
  335. package/dist/entities/store.d.ts +0 -69
  336. package/dist/entities/store.js +0 -544
  337. package/dist/entities/types.d.ts +0 -166
  338. package/dist/entities/types.js +0 -30
  339. package/dist/memory/extraction-prompt.d.ts +0 -4
  340. package/dist/memory/extraction-prompt.js +0 -89
  341. package/dist/memory/scope-backfill.d.ts +0 -14
  342. package/dist/memory/scope-backfill.js +0 -3
  343. package/dist/memory/scope-store.d.ts +0 -4
  344. package/dist/memory/scope-store.js +0 -9
  345. package/dist/memory-store.d.ts +0 -87
  346. package/dist/memory-store.js +0 -78
  347. package/dist/model-runs/store.d.ts +0 -13
  348. package/dist/model-runs/tool-trace-store.d.ts +0 -4
  349. package/dist/model-runs/tool-trace-store.js +0 -118
  350. package/dist/model-runs/types.d.ts +0 -72
  351. package/dist/notification-manager.d.ts +0 -7
  352. package/dist/notification-manager.js +0 -12
  353. package/dist/outcome-tracker.d.ts +0 -151
  354. package/dist/outcome-tracker.js +0 -271
  355. package/dist/query-intent.d.ts +0 -23
  356. package/dist/query-intent.js +0 -114
  357. package/dist/runtime/trusted-provenance.d.ts +0 -3
  358. package/dist/runtime/trusted-provenance.js +0 -6
  359. package/dist/search/question-type.d.ts +0 -5
  360. package/dist/search/question-type.js +0 -41
  361. package/dist/test-utils.d.ts +0 -80
  362. package/dist/test-utils.js +0 -218
  363. package/dist/tier-validator.d.ts +0 -43
  364. package/dist/tier-validator.js +0 -159
  365. package/dist/time-formatter.d.ts +0 -25
  366. package/dist/time-formatter.js +0 -93
  367. /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
  368. /package/dist/{search → knowledge}/feedback-store.js +0 -0
  369. /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
  370. /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
  371. /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
  372. /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
  373. /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
  374. /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