@jungjaehoon/mama-core 2.4.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (371) hide show
  1. package/README.md +76 -239
  2. package/db/migrations/030-case-first-memory-substrate.sql +13 -98
  3. package/db/migrations/034-add-connector-event-scope-columns.sql +9 -13
  4. package/db/migrations/039-add-connector-event-operator-ingest-seq.sql +9 -95
  5. package/db/migrations/062-refresh-connector-event-sequences.sql +9 -113
  6. package/db/migrations/063-refresh-legacy-connector-event-updates.sql +9 -32
  7. package/db/migrations/067-add-connector-event-source-entity-id.sql +9 -13
  8. package/db/migrations/069-create-registry-nodes.sql +52 -0
  9. package/db/migrations/070-record-identity.sql +35 -0
  10. package/db/migrations/071-service-operation-origins.sql +187 -0
  11. package/db/migrations/072-observation-versions.sql +29 -0
  12. package/db/migrations/073-registry-corrections.sql +45 -0
  13. package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
  14. package/db/migrations/075-agent-judgments.sql +58 -0
  15. package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
  16. package/db/migrations/077-legacy-record-kind.sql +6 -0
  17. package/db/migrations/078-source-ingest-commands.sql +18 -0
  18. package/db/migrations/079-twin-edge-relations.sql +43 -0
  19. package/db/migrations/080-restore-duration-days.sql +7 -0
  20. package/db/migrations/081-mailbox.sql +61 -0
  21. package/db/migrations/082-commitments-row-id.sql +12 -0
  22. package/db/migrations/083-observation-is-the-evidence.sql +49 -0
  23. package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
  24. package/db/migrations/085-a-migration-has-a-source.sql +37 -0
  25. package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
  26. package/db/migrations/087-mailbox-payload.sql +5 -0
  27. package/db/migrations/088-native-input-journal.sql +14 -0
  28. package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
  29. package/db/migrations/090-model-run-native-inputs.sql +29 -0
  30. package/db/migrations/091-native-turn-results.sql +11 -0
  31. package/db/migrations/092-restore-decision-fts.sql +34 -0
  32. package/db/migrations/093-native-turn-primary-kind.sql +14 -0
  33. package/db/migrations/094-commitment-run-provenance.sql +9 -0
  34. package/db/migrations/095-model-run-native-input-identity.sql +39 -0
  35. package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
  36. package/db/migrations/097-native-input-json-validity.sql +37 -0
  37. package/db/migrations/098-workflow-memory-kind.sql +105 -0
  38. package/dist/action-contracts.d.ts +212 -0
  39. package/dist/action-contracts.js +10 -0
  40. package/dist/api/catalog.d.ts +118 -0
  41. package/dist/api/catalog.js +1756 -0
  42. package/dist/api/dispatch.d.ts +76 -0
  43. package/dist/api/dispatch.js +372 -0
  44. package/dist/canonicalize.d.ts +2 -2
  45. package/dist/canonicalize.js +3 -3
  46. package/dist/client/client.d.ts +33 -0
  47. package/dist/client/client.js +123 -0
  48. package/dist/client/ipc.d.ts +81 -0
  49. package/dist/client/ipc.js +314 -0
  50. package/dist/db-adapter/base-adapter.d.ts +6 -66
  51. package/dist/db-adapter/base-adapter.js +6 -6
  52. package/dist/db-adapter/index.d.ts +5 -5
  53. package/dist/db-adapter/index.js +2 -5
  54. package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
  55. package/dist/db-adapter/node-sqlite-adapter.js +1968 -570
  56. package/dist/db-manager.d.ts +53 -97
  57. package/dist/db-manager.js +121 -603
  58. package/dist/embedding/embedder.d.ts +132 -0
  59. package/dist/embedding/embedder.js +299 -0
  60. package/dist/identity/principal-repository.d.ts +2 -2
  61. package/dist/index.d.ts +43 -58
  62. package/dist/index.js +97 -145
  63. package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
  64. package/dist/knowledge/access.js +663 -0
  65. package/dist/knowledge/case-errors.d.ts +31 -0
  66. package/dist/knowledge/case-errors.js +40 -0
  67. package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
  68. package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
  69. package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
  70. package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
  71. package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
  72. package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
  73. package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
  74. package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
  75. package/dist/knowledge/commitments.d.ts +188 -0
  76. package/dist/knowledge/commitments.js +370 -0
  77. package/dist/knowledge/decision-edges.d.ts +70 -0
  78. package/dist/knowledge/decision-edges.js +123 -0
  79. package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
  80. package/dist/knowledge/graph-query.js +1585 -0
  81. package/dist/knowledge/identity.d.ts +16 -0
  82. package/dist/knowledge/identity.js +22 -0
  83. package/dist/knowledge/index.d.ts +47 -0
  84. package/dist/knowledge/index.js +90 -0
  85. package/dist/knowledge/judgments.d.ts +118 -0
  86. package/dist/knowledge/judgments.js +808 -0
  87. package/dist/knowledge/observations.d.ts +160 -0
  88. package/dist/knowledge/observations.js +449 -0
  89. package/dist/knowledge/question-type.d.ts +34 -0
  90. package/dist/knowledge/question-type.js +70 -0
  91. package/dist/{search → knowledge}/ranker-features.js +1 -1
  92. package/dist/{search → knowledge}/search-quality.d.ts +0 -1
  93. package/dist/knowledge/search.d.ts +38 -0
  94. package/dist/knowledge/search.js +91 -0
  95. package/dist/knowledge/source-ingest.d.ts +65 -0
  96. package/dist/knowledge/source-ingest.js +174 -0
  97. package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
  98. package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
  99. package/dist/knowledge/work-dates.d.ts +49 -0
  100. package/dist/knowledge/work-dates.js +120 -0
  101. package/dist/mama-api.d.ts +114 -778
  102. package/dist/mama-api.js +313 -2461
  103. package/dist/memory/api.d.ts +264 -24
  104. package/dist/memory/api.js +1633 -843
  105. package/dist/memory/bootstrap-builder.d.ts +2 -1
  106. package/dist/memory/bootstrap-builder.js +5 -5
  107. package/dist/memory/channel-summary-state-store.d.ts +3 -2
  108. package/dist/memory/channel-summary-state-store.js +53 -51
  109. package/dist/memory/channel-summary-store.d.ts +5 -3
  110. package/dist/memory/channel-summary-store.js +3 -8
  111. package/dist/memory/dashboard-read.d.ts +46 -0
  112. package/dist/memory/dashboard-read.js +94 -0
  113. package/dist/memory/event-store.d.ts +3 -3
  114. package/dist/memory/event-store.js +3 -10
  115. package/dist/memory/finding-store.d.ts +3 -2
  116. package/dist/memory/finding-store.js +2 -7
  117. package/dist/memory/graph-read.d.ts +52 -0
  118. package/dist/memory/graph-read.js +130 -0
  119. package/dist/memory/judgment-types.d.ts +394 -0
  120. package/dist/memory/judgment-types.js +16 -0
  121. package/dist/memory/provenance-audit.d.ts +5 -2
  122. package/dist/memory/provenance-audit.js +8 -14
  123. package/dist/memory/provenance-live.d.ts +141 -0
  124. package/dist/memory/provenance-live.js +409 -0
  125. package/dist/memory/provenance-query.d.ts +5 -4
  126. package/dist/memory/provenance-query.js +21 -29
  127. package/dist/memory/provenance-resolver.d.ts +191 -0
  128. package/dist/memory/provenance-resolver.js +155 -0
  129. package/dist/memory/provenance.d.ts +1 -11
  130. package/dist/memory/provenance.js +2 -33
  131. package/dist/memory/recall-sanitize.d.ts +55 -0
  132. package/dist/memory/recall-sanitize.js +144 -0
  133. package/dist/memory/secret-filter.d.ts +32 -0
  134. package/dist/memory/secret-filter.js +126 -0
  135. package/dist/memory/truth-store.d.ts +2 -1
  136. package/dist/memory/truth-store.js +1 -4
  137. package/dist/memory/types.d.ts +74 -24
  138. package/dist/memory/types.js +75 -5
  139. package/dist/memory/write-adapters.d.ts +98 -0
  140. package/dist/memory/write-adapters.js +242 -0
  141. package/dist/operations/owner-action-effects.d.ts +53 -0
  142. package/dist/operations/owner-action-effects.js +96 -0
  143. package/dist/provenance/source-ref.d.ts +1 -1
  144. package/dist/provenance/source-ref.js +0 -2
  145. package/dist/registry/corrections.d.ts +31 -0
  146. package/dist/registry/corrections.js +332 -0
  147. package/dist/registry/record-identity.d.ts +49 -0
  148. package/dist/registry/record-identity.js +133 -0
  149. package/dist/registry/store.d.ts +101 -0
  150. package/dist/registry/store.js +395 -0
  151. package/dist/registry/types.d.ts +28 -0
  152. package/dist/registry/types.js +5 -0
  153. package/dist/relevance-scorer.js +2 -2
  154. package/dist/runtime/agent-event-bus.d.ts +50 -0
  155. package/dist/runtime/agent-event-bus.js +101 -0
  156. package/dist/runtime/drivers/claude-cli-wrapper.d.ts +155 -0
  157. package/dist/runtime/drivers/claude-cli-wrapper.js +392 -0
  158. package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
  159. package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
  160. package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
  161. package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
  162. package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
  163. package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
  164. package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
  165. package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
  166. package/dist/runtime/drivers/codex-home.d.ts +20 -0
  167. package/dist/runtime/drivers/codex-home.js +674 -0
  168. package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
  169. package/dist/runtime/drivers/codex-thread-registry.js +433 -0
  170. package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
  171. package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
  172. package/dist/runtime/drivers/persistent-cli-process.d.ts +424 -0
  173. package/dist/runtime/drivers/persistent-cli-process.js +1543 -0
  174. package/dist/runtime/drivers/types.d.ts +456 -0
  175. package/dist/runtime/drivers/types.js +110 -0
  176. package/dist/runtime/mailbox.d.ts +223 -0
  177. package/dist/runtime/mailbox.js +582 -0
  178. package/dist/runtime/model-run-store.d.ts +28 -0
  179. package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
  180. package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
  181. package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
  182. package/dist/runtime/native-effect-observer.d.ts +22 -0
  183. package/dist/runtime/native-effect-observer.js +103 -0
  184. package/dist/runtime/native-input-journal.d.ts +46 -0
  185. package/dist/runtime/native-input-journal.js +308 -0
  186. package/dist/runtime/native-prompt.d.ts +118 -0
  187. package/dist/runtime/native-prompt.js +496 -0
  188. package/dist/runtime/native-session.d.ts +10 -0
  189. package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
  190. package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
  191. package/dist/runtime/native-tool-trace-observer.js +65 -0
  192. package/dist/runtime/native-turn.d.ts +272 -0
  193. package/dist/runtime/native-turn.js +1041 -0
  194. package/dist/runtime/operations.d.ts +236 -0
  195. package/dist/runtime/operations.js +565 -0
  196. package/dist/runtime/post-tool-handler.d.ts +74 -0
  197. package/dist/runtime/post-tool-handler.js +137 -0
  198. package/dist/runtime/prompt-layers.d.ts +126 -0
  199. package/dist/runtime/prompt-layers.js +239 -0
  200. package/dist/runtime/runtime-process.d.ts +102 -0
  201. package/dist/runtime/runtime-process.js +206 -0
  202. package/dist/runtime/runtime.d.ts +278 -0
  203. package/dist/runtime/runtime.js +563 -0
  204. package/dist/runtime/session-pool.d.ts +176 -0
  205. package/dist/runtime/session-pool.js +369 -0
  206. package/dist/runtime/stimulus-payload.d.ts +5 -0
  207. package/dist/runtime/stimulus-payload.js +50 -0
  208. package/dist/runtime/subagent-bridge.d.ts +24 -0
  209. package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
  210. package/dist/runtime/text-completion.d.ts +22 -0
  211. package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
  212. package/dist/runtime/token-estimator.d.ts +25 -0
  213. package/dist/runtime/token-estimator.js +75 -0
  214. package/dist/runtime/tool-trace-store.d.ts +22 -0
  215. package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
  216. package/dist/runtime/trace-summary.d.ts +5 -0
  217. package/dist/runtime/trace-summary.js +74 -0
  218. package/dist/runtime/turn-text.d.ts +23 -0
  219. package/dist/runtime/turn-text.js +41 -0
  220. package/dist/storage/database.d.ts +67 -0
  221. package/dist/storage/database.js +158 -0
  222. package/package.json +20 -34
  223. package/dist/agent-graph/alias-write.d.ts +0 -3
  224. package/dist/agent-graph/alias-write.js +0 -234
  225. package/dist/agent-graph/entity-resolve.d.ts +0 -3
  226. package/dist/agent-graph/entity-resolve.js +0 -271
  227. package/dist/agent-graph/errors.d.ts +0 -4
  228. package/dist/agent-graph/errors.js +0 -11
  229. package/dist/agent-graph/graph-query.d.ts +0 -5
  230. package/dist/agent-graph/graph-query.js +0 -360
  231. package/dist/agent-graph/index.d.ts +0 -6
  232. package/dist/agent-situation/builder.d.ts +0 -8
  233. package/dist/agent-situation/builder.js +0 -239
  234. package/dist/agent-situation/cache-key.d.ts +0 -4
  235. package/dist/agent-situation/cache-key.js +0 -64
  236. package/dist/agent-situation/index.d.ts +0 -7
  237. package/dist/agent-situation/index.js +0 -28
  238. package/dist/agent-situation/packet-store.d.ts +0 -27
  239. package/dist/agent-situation/packet-store.js +0 -228
  240. package/dist/agent-situation/ranking-policy.d.ts +0 -18
  241. package/dist/agent-situation/ranking-policy.js +0 -75
  242. package/dist/agent-situation/source-readers.d.ts +0 -52
  243. package/dist/agent-situation/source-readers.js +0 -300
  244. package/dist/agent-situation/types.d.ts +0 -195
  245. package/dist/cases/wiki-page-index.d.ts +0 -37
  246. package/dist/cases/wiki-page-index.js +0 -201
  247. package/dist/config-loader.d.ts +0 -68
  248. package/dist/config-loader.js +0 -239
  249. package/dist/connectors/event-index.d.ts +0 -24
  250. package/dist/connectors/event-index.js +0 -245
  251. package/dist/connectors/raw-query.d.ts +0 -40
  252. package/dist/connectors/raw-query.js +0 -412
  253. package/dist/connectors/types.d.ts +0 -117
  254. package/dist/connectors/types.js +0 -3
  255. package/dist/context-compile/boundary-defaults.d.ts +0 -12
  256. package/dist/context-compile/boundary-defaults.js +0 -105
  257. package/dist/context-compile/channel-grant.js +0 -66
  258. package/dist/context-compile/compiler-policy.d.ts +0 -39
  259. package/dist/context-compile/compiler-policy.js +0 -147
  260. package/dist/context-compile/compiler.d.ts +0 -18
  261. package/dist/context-compile/compiler.js +0 -404
  262. package/dist/context-compile/index.d.ts +0 -10
  263. package/dist/context-compile/index.js +0 -26
  264. package/dist/context-compile/packet-store.d.ts +0 -8
  265. package/dist/context-compile/packet-store.js +0 -239
  266. package/dist/context-compile/ref.d.ts +0 -7
  267. package/dist/context-compile/ref.js +0 -102
  268. package/dist/context-compile/source-readers.d.ts +0 -70
  269. package/dist/context-compile/source-readers.js +0 -840
  270. package/dist/context-compile/types.d.ts +0 -155
  271. package/dist/context-compile/types.js +0 -11
  272. package/dist/context-compile/visibility.d.ts +0 -21
  273. package/dist/context-compile/visibility.js +0 -224
  274. package/dist/decision-tracker.d.ts +0 -206
  275. package/dist/decision-tracker.js +0 -481
  276. package/dist/edges/ref-validation.d.ts +0 -7
  277. package/dist/edges/ref-validation.js +0 -321
  278. package/dist/edges/store.d.ts +0 -8
  279. package/dist/edges/store.js +0 -129
  280. package/dist/embedding-client.d.ts +0 -28
  281. package/dist/embedding-client.js +0 -53
  282. package/dist/embedding-server/index.d.ts +0 -67
  283. package/dist/embedding-server/index.js +0 -405
  284. package/dist/embedding-server/mobile/auth.d.ts +0 -44
  285. package/dist/embedding-server/mobile/auth.js +0 -150
  286. package/dist/embedding-server/mobile/daemon.d.ts +0 -129
  287. package/dist/embedding-server/mobile/daemon.js +0 -313
  288. package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
  289. package/dist/embedding-server/mobile/output-parser.js +0 -241
  290. package/dist/embedding-server/mobile/session-api.d.ts +0 -57
  291. package/dist/embedding-server/mobile/session-api.js +0 -261
  292. package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
  293. package/dist/embedding-server/mobile/session-manager.js +0 -378
  294. package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
  295. package/dist/embedding-server/mobile/websocket-handler.js +0 -486
  296. package/dist/embeddings.d.ts +0 -68
  297. package/dist/embeddings.js +0 -244
  298. package/dist/entities/audit-metrics.d.ts +0 -68
  299. package/dist/entities/audit-metrics.js +0 -124
  300. package/dist/entities/candidate-generator.d.ts +0 -8
  301. package/dist/entities/candidate-generator.js +0 -24
  302. package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
  303. package/dist/entities/entity-linked-decision-counts.js +0 -29
  304. package/dist/entities/entity-list.d.ts +0 -22
  305. package/dist/entities/entity-list.js +0 -3
  306. package/dist/entities/entity-orphan-list.d.ts +0 -17
  307. package/dist/entities/entity-orphan-list.js +0 -3
  308. package/dist/entities/entity-search.d.ts +0 -20
  309. package/dist/entities/entity-search.js +0 -3
  310. package/dist/entities/errors.d.ts +0 -55
  311. package/dist/entities/errors.js +0 -100
  312. package/dist/entities/lineage-store.d.ts +0 -28
  313. package/dist/entities/lineage-store.js +0 -204
  314. package/dist/entities/normalization.d.ts +0 -14
  315. package/dist/entities/normalization.js +0 -63
  316. package/dist/entities/policy-store.d.ts +0 -8
  317. package/dist/entities/policy-store.js +0 -75
  318. package/dist/entities/policy-types.d.ts +0 -72
  319. package/dist/entities/policy-types.js +0 -59
  320. package/dist/entities/projection.d.ts +0 -8
  321. package/dist/entities/projection.js +0 -82
  322. package/dist/entities/provenance-query.d.ts +0 -32
  323. package/dist/entities/provenance-query.js +0 -3
  324. package/dist/entities/read-identity.d.ts +0 -31
  325. package/dist/entities/read-identity.js +0 -264
  326. package/dist/entities/recall-bridge.d.ts +0 -5
  327. package/dist/entities/recall-bridge.js +0 -171
  328. package/dist/entities/resolution-engine.d.ts +0 -8
  329. package/dist/entities/resolution-engine.js +0 -3
  330. package/dist/entities/rollback-preview.d.ts +0 -35
  331. package/dist/entities/rollback-preview.js +0 -3
  332. package/dist/entities/source-locator.d.ts +0 -3
  333. package/dist/entities/source-locator.js +0 -32
  334. package/dist/entities/store.d.ts +0 -69
  335. package/dist/entities/store.js +0 -544
  336. package/dist/entities/types.d.ts +0 -166
  337. package/dist/entities/types.js +0 -30
  338. package/dist/memory/extraction-prompt.d.ts +0 -4
  339. package/dist/memory/extraction-prompt.js +0 -89
  340. package/dist/memory/scope-backfill.d.ts +0 -14
  341. package/dist/memory/scope-backfill.js +0 -3
  342. package/dist/memory/scope-store.d.ts +0 -4
  343. package/dist/memory/scope-store.js +0 -9
  344. package/dist/memory-store.d.ts +0 -87
  345. package/dist/memory-store.js +0 -78
  346. package/dist/model-runs/store.d.ts +0 -13
  347. package/dist/model-runs/tool-trace-store.d.ts +0 -8
  348. package/dist/notification-manager.d.ts +0 -7
  349. package/dist/notification-manager.js +0 -12
  350. package/dist/outcome-tracker.d.ts +0 -151
  351. package/dist/outcome-tracker.js +0 -271
  352. package/dist/query-intent.d.ts +0 -23
  353. package/dist/query-intent.js +0 -114
  354. package/dist/runtime/trusted-provenance.d.ts +0 -3
  355. package/dist/runtime/trusted-provenance.js +0 -6
  356. package/dist/search/question-type.d.ts +0 -5
  357. package/dist/search/question-type.js +0 -41
  358. package/dist/test-utils.d.ts +0 -80
  359. package/dist/test-utils.js +0 -218
  360. package/dist/tier-validator.d.ts +0 -43
  361. package/dist/tier-validator.js +0 -159
  362. package/dist/time-formatter.d.ts +0 -25
  363. package/dist/time-formatter.js +0 -93
  364. /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
  365. /package/dist/{search → knowledge}/feedback-store.js +0 -0
  366. /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
  367. /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
  368. /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
  369. /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
  370. /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
  371. /package/dist/{search → knowledge}/search-quality.js +0 -0
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ /**
3
+ * After a tool runs, turn what it wrote into memory records, bounded and deduplicated,
4
+ * and fire-and-forget.
5
+ *
6
+ * What is here is the mechanism: notice that an editing tool ran, find the file it
7
+ * touched and the content it produced, ask for candidate records, keep at most a
8
+ * stated number of them, skip the ones already stored, and write the rest. What a
9
+ * candidate *is* is not here. A candidate is vocabulary, and vocabulary belongs to
10
+ * the caller: it supplies the source, and it names the two tools this handler calls.
11
+ *
12
+ * With no source, the handler is inert. That is the intended resting state once the
13
+ * caller's own extractor is gone.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PostToolHandler = void 0;
17
+ const DEFAULT_SAVE_LIMIT = 20;
18
+ class PostToolHandler {
19
+ executeTool;
20
+ enabled;
21
+ editTools;
22
+ searchTool;
23
+ saveTool;
24
+ saveLimit;
25
+ source;
26
+ constructor(executeTool, config, source = null) {
27
+ this.executeTool = executeTool;
28
+ this.enabled = config.enabled;
29
+ this.editTools = config.editTools;
30
+ this.searchTool = config.searchTool;
31
+ this.saveTool = config.saveTool;
32
+ this.saveLimit = config.saveLimit ?? DEFAULT_SAVE_LIMIT;
33
+ this.source = source;
34
+ }
35
+ /**
36
+ * Called from the tool-result path. MUST NOT be async, MUST NOT return a promise
37
+ * and MUST NOT throw: a memory write is not allowed to decide whether a turn
38
+ * continues. The task is registered so the turn can still wait for it.
39
+ */
40
+ processInBackground(toolName, input, result, executionContext) {
41
+ if (!this.enabled || !this.source) {
42
+ return;
43
+ }
44
+ const task = this.processAsync(toolName, input, result, executionContext);
45
+ executionContext?.backgroundTasks?.register(task);
46
+ void task.catch(() => { });
47
+ }
48
+ async processAsync(toolName, input, result, executionContext) {
49
+ if (!this.enabled || !this.source) {
50
+ return;
51
+ }
52
+ if (!this.isEditTool(toolName)) {
53
+ return;
54
+ }
55
+ const filePath = this.extractFilePath(input);
56
+ if (!filePath) {
57
+ return;
58
+ }
59
+ const content = this.extractContent(result);
60
+ if (!content) {
61
+ return;
62
+ }
63
+ const candidates = this.source.candidates(content, filePath);
64
+ if (candidates.length === 0) {
65
+ return;
66
+ }
67
+ for (const candidate of candidates.slice(0, this.saveLimit)) {
68
+ const isDupe = await this.isDuplicate(candidate, executionContext);
69
+ if (isDupe) {
70
+ continue;
71
+ }
72
+ await this.save(candidate, executionContext);
73
+ }
74
+ }
75
+ isEditTool(toolName) {
76
+ return this.editTools.some((tool) => toolName.includes(tool));
77
+ }
78
+ extractFilePath(input) {
79
+ if (!input || typeof input !== 'object') {
80
+ return undefined;
81
+ }
82
+ const obj = input;
83
+ const raw = obj['path'] ?? obj['file_path'] ?? obj['filePath'];
84
+ return typeof raw === 'string' ? raw : undefined;
85
+ }
86
+ extractContent(result) {
87
+ if (typeof result === 'string') {
88
+ return result.length > 0 ? result : undefined;
89
+ }
90
+ if (result && typeof result === 'object') {
91
+ const obj = result;
92
+ if (typeof obj['content'] === 'string' && obj['content'].length > 0) {
93
+ return obj['content'];
94
+ }
95
+ const serialized = JSON.stringify(result);
96
+ return serialized.length > 2 ? serialized : undefined;
97
+ }
98
+ return undefined;
99
+ }
100
+ async isDuplicate(candidate, executionContext) {
101
+ try {
102
+ const input = { query: candidate.topic, type: 'decision', limit: 3 };
103
+ const response = (await (executionContext
104
+ ? this.executeTool(this.searchTool, input, executionContext)
105
+ : this.executeTool(this.searchTool, input)));
106
+ if (!response?.results || response.results.length === 0) {
107
+ return false;
108
+ }
109
+ return response.results.some((item) => item.topic === candidate.topic && item.decision === candidate.decision);
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ async save(candidate, executionContext) {
116
+ try {
117
+ const input = {
118
+ type: 'decision',
119
+ topic: candidate.topic,
120
+ decision: candidate.decision,
121
+ reasoning: candidate.reasoning,
122
+ confidence: candidate.confidence,
123
+ };
124
+ if (executionContext) {
125
+ await this.executeTool(this.saveTool, input, executionContext);
126
+ }
127
+ else {
128
+ await this.executeTool(this.saveTool, input);
129
+ }
130
+ }
131
+ catch {
132
+ // A memory write that fails must not fail the turn that produced it.
133
+ }
134
+ }
135
+ }
136
+ exports.PostToolHandler = PostToolHandler;
137
+ //# sourceMappingURL=post-tool-handler.js.map
@@ -0,0 +1,126 @@
1
+ /**
2
+ * A system prompt as LAYERS, and what it costs to send them.
3
+ *
4
+ * A caller states the layers - what the agent is, what it may call, what it is
5
+ * recovering - and this joins them under a token budget, dropping or trimming the
6
+ * expendable ones first. The caller never joins or trims: doing that on the consumer
7
+ * side is how a prompt becomes a concatenation nobody owns.
8
+ *
9
+ * Uses js-tiktoken for accurate token counting (STORY-007).
10
+ */
11
+ /** The three thresholds a caller may state. Defaults are the ones MAMA shipped with. */
12
+ export interface PromptBudget {
13
+ /** Warn beyond this many tokens. */
14
+ warnTokens?: number;
15
+ /** Begin truncating beyond this many tokens. */
16
+ truncateTokens?: number;
17
+ /** Anything beyond this is force-truncated. */
18
+ hardLimitTokens?: number;
19
+ }
20
+ /**
21
+ * State the budget once, at wiring time. The thresholds are a consumer's setting;
22
+ * the arithmetic is not.
23
+ */
24
+ export declare function setPromptBudget(next: PromptBudget): void;
25
+ /**
26
+ * A named layer of the system prompt with a priority level.
27
+ *
28
+ * Priority levels:
29
+ * - 1: CLAUDE.md (NEVER truncate)
30
+ * - 2: Gateway Tools (extreme truncation only)
31
+ * - 3: Context Prompt (regeneratable)
32
+ * - 4: AGENTS.md (can re-read from file)
33
+ * - 5: Rules (can read file on demand)
34
+ * - 6: Keyword Instructions (ephemeral, safe to drop)
35
+ */
36
+ export interface PromptLayer {
37
+ /** Layer identifier for diagnostics */
38
+ name: string;
39
+ /** Layer content */
40
+ content: string;
41
+ /**
42
+ * Priority level (1 = highest / never truncate, 6 = lowest / drop first).
43
+ *
44
+ * 1 = CLAUDE.md (NEVER truncate)
45
+ * 2 = Gateway Tools (extreme only)
46
+ * 3 = Context Prompt (regeneratable)
47
+ * 4 = AGENTS.md (can re-read)
48
+ * 5 = Rules (can read file)
49
+ * 6 = Keyword Instructions (ephemeral)
50
+ */
51
+ priority: number;
52
+ /** Host-authored opening marker paired atomically with protectedSuffix. */
53
+ protectedPrefix?: string;
54
+ /** Host-authored closing marker that must survive partial truncation. */
55
+ protectedSuffix?: string;
56
+ }
57
+ /**
58
+ * Result of a prompt size check or enforcement pass.
59
+ */
60
+ export interface MonitorResult {
61
+ /** Total character count across all layers */
62
+ totalChars: number;
63
+ /** @deprecated Use totalTokens instead. This uses chars/4 heuristic. */
64
+ estimatedTokens: number;
65
+ /** Actual token count via tiktoken (or byte-length fallback) */
66
+ totalTokens: number;
67
+ /** Whether total is within the truncation threshold */
68
+ withinBudget: boolean;
69
+ /** Warning message if approaching or exceeding limits, null otherwise */
70
+ warning: string | null;
71
+ /** Names of layers that were truncated or removed */
72
+ truncatedLayers: string[];
73
+ }
74
+ /**
75
+ * Monitors and enforces system prompt size limits using token counting.
76
+ *
77
+ * Uses a priority-based truncation strategy: layers with higher priority
78
+ * numbers (lower importance) are truncated first. Priority 1 layers are
79
+ * never truncated. Within the same priority, larger layers are truncated first.
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * const monitor = new PromptSizeMonitor();
84
+ * const result = monitor.check(layers);
85
+ * if (!result.withinBudget) {
86
+ * const { layers: trimmed } = monitor.enforce(layers);
87
+ * }
88
+ * ```
89
+ */
90
+ export declare class PromptSizeMonitor {
91
+ /**
92
+ * Check prompt layers for size and return diagnostic info without modifying them.
93
+ *
94
+ * @param layers - Prompt layers to analyze
95
+ * @returns Monitor result with size metrics and warnings
96
+ */
97
+ check(layers: PromptLayer[]): MonitorResult;
98
+ /**
99
+ * Enforce size limits by truncating layers in priority order.
100
+ *
101
+ * Layers with higher priority numbers (lower importance) are removed first.
102
+ * Within the same priority level, larger layers are removed first.
103
+ * Priority 1 layers are never truncated.
104
+ *
105
+ * @param layers - Prompt layers to enforce limits on
106
+ * @param maxTokens - Maximum allowed tokens (defaults to TRUNCATE_TOKENS)
107
+ * @returns Object with truncated layers array and updated monitor result
108
+ */
109
+ enforce(layers: PromptLayer[], maxTokens?: number): {
110
+ layers: PromptLayer[];
111
+ result: MonitorResult;
112
+ };
113
+ /**
114
+ * @deprecated Use countTokens() from token-estimator instead.
115
+ * Estimate token count from character count using chars/4 heuristic.
116
+ */
117
+ estimateTokens(chars: number): number;
118
+ }
119
+ /** How joined layers are separated. One separator, stated once. */
120
+ export declare const PROMPT_LAYER_SEPARATOR = "\n\n---\n\n";
121
+ /**
122
+ * Join the stated layers into one prompt, trimming the expendable ones if the budget
123
+ * says so. Empty layers never reach the model, and an empty list is an empty prompt.
124
+ */
125
+ export declare function composeLayers(layers: readonly PromptLayer[], onDiagnostic?: (message: string) => void): string;
126
+ //# sourceMappingURL=prompt-layers.d.ts.map
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ /**
3
+ * A system prompt as LAYERS, and what it costs to send them.
4
+ *
5
+ * A caller states the layers - what the agent is, what it may call, what it is
6
+ * recovering - and this joins them under a token budget, dropping or trimming the
7
+ * expendable ones first. The caller never joins or trims: doing that on the consumer
8
+ * side is how a prompt becomes a concatenation nobody owns.
9
+ *
10
+ * Uses js-tiktoken for accurate token counting (STORY-007).
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.PROMPT_LAYER_SEPARATOR = exports.PromptSizeMonitor = void 0;
14
+ exports.setPromptBudget = setPromptBudget;
15
+ exports.composeLayers = composeLayers;
16
+ const token_estimator_js_1 = require("./token-estimator.js");
17
+ let budget = {
18
+ warnTokens: 3_750,
19
+ truncateTokens: 6_250,
20
+ hardLimitTokens: 10_000,
21
+ };
22
+ /**
23
+ * State the budget once, at wiring time. The thresholds are a consumer's setting;
24
+ * the arithmetic is not.
25
+ */
26
+ function setPromptBudget(next) {
27
+ budget = {
28
+ warnTokens: next.warnTokens ?? budget.warnTokens,
29
+ truncateTokens: next.truncateTokens ?? budget.truncateTokens,
30
+ hardLimitTokens: next.hardLimitTokens ?? budget.hardLimitTokens,
31
+ };
32
+ }
33
+ /** Token count at which a warning is emitted */
34
+ const WARN_TOKENS = () => budget.warnTokens;
35
+ /** Token count at which truncation begins */
36
+ const TRUNCATE_TOKENS = () => budget.truncateTokens;
37
+ /** Absolute maximum - anything beyond is force-truncated */
38
+ const HARD_LIMIT_TOKENS = () => budget.hardLimitTokens;
39
+ /**
40
+ * Monitors and enforces system prompt size limits using token counting.
41
+ *
42
+ * Uses a priority-based truncation strategy: layers with higher priority
43
+ * numbers (lower importance) are truncated first. Priority 1 layers are
44
+ * never truncated. Within the same priority, larger layers are truncated first.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const monitor = new PromptSizeMonitor();
49
+ * const result = monitor.check(layers);
50
+ * if (!result.withinBudget) {
51
+ * const { layers: trimmed } = monitor.enforce(layers);
52
+ * }
53
+ * ```
54
+ */
55
+ class PromptSizeMonitor {
56
+ /**
57
+ * Check prompt layers for size and return diagnostic info without modifying them.
58
+ *
59
+ * @param layers - Prompt layers to analyze
60
+ * @returns Monitor result with size metrics and warnings
61
+ */
62
+ check(layers) {
63
+ const totalChars = layers.reduce((sum, layer) => sum + layer.content.length, 0);
64
+ const combined = layers.map((l) => l.content).join('');
65
+ const totalTokens = (0, token_estimator_js_1.countTokens)(combined);
66
+ const estimatedTokens = this.estimateTokens(totalChars);
67
+ const truncatedLayers = [];
68
+ let warning = null;
69
+ let withinBudget = true;
70
+ if (totalTokens > HARD_LIMIT_TOKENS()) {
71
+ warning =
72
+ `System prompt exceeds hard limit: ${totalTokens} tokens ` +
73
+ `(${totalChars} chars) > ${HARD_LIMIT_TOKENS()} token limit. ` +
74
+ `Force truncation required.`;
75
+ withinBudget = false;
76
+ }
77
+ else if (totalTokens > TRUNCATE_TOKENS()) {
78
+ warning =
79
+ `System prompt exceeds truncation threshold: ${totalTokens} tokens ` +
80
+ `(${totalChars} chars) > ${TRUNCATE_TOKENS()} token limit. ` +
81
+ `Truncation recommended.`;
82
+ withinBudget = false;
83
+ }
84
+ else if (totalTokens > WARN_TOKENS()) {
85
+ warning =
86
+ `System prompt approaching limit: ${totalTokens} tokens ` +
87
+ `(${totalChars} chars) > ${WARN_TOKENS()} token warning threshold.`;
88
+ withinBudget = true;
89
+ }
90
+ return { totalChars, estimatedTokens, totalTokens, withinBudget, warning, truncatedLayers };
91
+ }
92
+ /**
93
+ * Enforce size limits by truncating layers in priority order.
94
+ *
95
+ * Layers with higher priority numbers (lower importance) are removed first.
96
+ * Within the same priority level, larger layers are removed first.
97
+ * Priority 1 layers are never truncated.
98
+ *
99
+ * @param layers - Prompt layers to enforce limits on
100
+ * @param maxTokens - Maximum allowed tokens (defaults to TRUNCATE_TOKENS)
101
+ * @returns Object with truncated layers array and updated monitor result
102
+ */
103
+ enforce(layers, maxTokens = TRUNCATE_TOKENS()) {
104
+ // Count tokens per layer
105
+ const layerTokens = layers.map((l) => (0, token_estimator_js_1.countTokens)(l.content));
106
+ const totalTokens = layerTokens.reduce((sum, t) => sum + t, 0);
107
+ if (totalTokens <= maxTokens) {
108
+ const checkResult = this.check(layers);
109
+ return {
110
+ layers: [...layers],
111
+ result: { ...checkResult, withinBudget: totalTokens <= maxTokens },
112
+ };
113
+ }
114
+ // Sort candidates for truncation: highest priority number first, then largest first
115
+ const sortedByExpendability = layers
116
+ .map((layer, index) => ({ layer, index, tokens: layerTokens[index] }))
117
+ .filter(({ layer }) => layer.priority > 1)
118
+ .sort((a, b) => {
119
+ if (b.layer.priority !== a.layer.priority) {
120
+ return b.layer.priority - a.layer.priority;
121
+ }
122
+ return b.tokens - a.tokens;
123
+ });
124
+ const truncatedLayers = [];
125
+ const resultLayers = [...layers];
126
+ let currentTokens = totalTokens;
127
+ for (const { layer, index, tokens } of sortedByExpendability) {
128
+ if (currentTokens <= maxTokens) {
129
+ break;
130
+ }
131
+ const excess = currentTokens - maxTokens;
132
+ if (tokens <= excess) {
133
+ // Full removal
134
+ currentTokens -= tokens;
135
+ resultLayers[index] = { ...layer, content: '' };
136
+ truncatedLayers.push(layer.name);
137
+ }
138
+ else {
139
+ // Partial truncation: estimate chars to remove based on layer's token density
140
+ const truncationMarker = `\n\n[... ${layer.name} truncated: ~${excess} tokens removed ...]`;
141
+ const protectedSuffix = layer.protectedSuffix && layer.content.endsWith(layer.protectedSuffix)
142
+ ? `\n${layer.protectedSuffix}`
143
+ : '';
144
+ const protectedTail = `${truncationMarker}${protectedSuffix}`;
145
+ const markerTokens = (0, token_estimator_js_1.countTokens)(protectedTail);
146
+ const protectedPrefix = layer.protectedPrefix && layer.content.startsWith(layer.protectedPrefix)
147
+ ? layer.protectedPrefix
148
+ : '';
149
+ const hasProtectedPair = protectedPrefix.length > 0 && protectedSuffix.length > 0;
150
+ const availableLayerTokens = Math.max(0, maxTokens - (currentTokens - tokens));
151
+ const minimumProtectedContent = `${protectedPrefix}${protectedTail}`;
152
+ if (markerTokens >= excess ||
153
+ (hasProtectedPair && (0, token_estimator_js_1.countTokens)(minimumProtectedContent) > availableLayerTokens)) {
154
+ // The truncation marker or atomic host marker pair cannot fit safely.
155
+ currentTokens -= tokens;
156
+ resultLayers[index] = { ...layer, content: '' };
157
+ truncatedLayers.push(layer.name);
158
+ }
159
+ else {
160
+ const charsPerToken = tokens > 0 ? layer.content.length / tokens : 4;
161
+ const charsToRemove = Math.ceil(excess * charsPerToken);
162
+ const safeKeep = Math.max(0, layer.content.length - charsToRemove - protectedTail.length);
163
+ let newContent = layer.content.slice(0, Math.max(safeKeep, protectedPrefix.length)) + protectedTail;
164
+ if (hasProtectedPair && (0, token_estimator_js_1.countTokens)(newContent) > availableLayerTokens) {
165
+ newContent = minimumProtectedContent;
166
+ }
167
+ const newTokens = (0, token_estimator_js_1.countTokens)(newContent);
168
+ resultLayers[index] = {
169
+ ...layer,
170
+ content: newContent,
171
+ };
172
+ currentTokens = currentTokens - tokens + newTokens;
173
+ truncatedLayers.push(layer.name);
174
+ }
175
+ }
176
+ }
177
+ const finalLayers = resultLayers.filter((layer) => layer.content.length > 0);
178
+ const finalCheck = this.check(finalLayers);
179
+ const withinBudget = finalCheck.totalTokens <= maxTokens;
180
+ let warning = null;
181
+ if (!withinBudget) {
182
+ warning =
183
+ `System prompt still exceeds limit after truncation: ${finalCheck.totalTokens} tokens. ` +
184
+ `Only priority-1 layers remain.`;
185
+ }
186
+ else if (truncatedLayers.length > 0) {
187
+ warning =
188
+ `Truncated ${truncatedLayers.length} layer(s) to fit within ${maxTokens} tokens: ` +
189
+ `${truncatedLayers.join(', ')}.`;
190
+ }
191
+ return {
192
+ layers: finalLayers,
193
+ result: {
194
+ ...finalCheck,
195
+ withinBudget,
196
+ warning,
197
+ truncatedLayers,
198
+ },
199
+ };
200
+ }
201
+ /**
202
+ * @deprecated Use countTokens() from token-estimator instead.
203
+ * Estimate token count from character count using chars/4 heuristic.
204
+ */
205
+ estimateTokens(chars) {
206
+ return Math.ceil(chars / 4);
207
+ }
208
+ }
209
+ exports.PromptSizeMonitor = PromptSizeMonitor;
210
+ /** How joined layers are separated. One separator, stated once. */
211
+ exports.PROMPT_LAYER_SEPARATOR = '\n\n---\n\n';
212
+ /**
213
+ * Join the stated layers into one prompt, trimming the expendable ones if the budget
214
+ * says so. Empty layers never reach the model, and an empty list is an empty prompt.
215
+ */
216
+ function composeLayers(layers, onDiagnostic) {
217
+ const stated = layers.filter((layer) => layer.content.trim().length > 0);
218
+ if (stated.length === 0) {
219
+ return '';
220
+ }
221
+ const monitor = new PromptSizeMonitor();
222
+ const checkResult = monitor.check([...stated]);
223
+ if (checkResult.warning) {
224
+ onDiagnostic?.(checkResult.warning);
225
+ }
226
+ let effective = stated;
227
+ if (!checkResult.withinBudget) {
228
+ const { layers: trimmed, result } = monitor.enforce([...stated]);
229
+ if (result.truncatedLayers.length > 0) {
230
+ onDiagnostic?.(`Truncated layers: ${result.truncatedLayers.join(', ')}`);
231
+ }
232
+ effective = trimmed;
233
+ }
234
+ return effective
235
+ .filter((layer) => layer.content.length > 0)
236
+ .map((layer) => layer.content)
237
+ .join(exports.PROMPT_LAYER_SEPARATOR);
238
+ }
239
+ //# sourceMappingURL=prompt-layers.js.map
@@ -0,0 +1,102 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { SubagentBridge, SubagentBridgeRequest } from './subagent-bridge.js';
3
+ import type { SubagentEvent } from './drivers/codex-app-server-process.js';
4
+ export type { SubagentBridge, SubagentBridgeRequest } from './subagent-bridge.js';
5
+ export type { SubagentEvent } from './drivers/codex-app-server-process.js';
6
+ import type { PromptCallbacks as ClaudePromptCallbacks, PromptResult as ClaudePromptResult } from './drivers/types.js';
7
+ import type { IModelRunner, RunnerMetrics, PromptOptions, SessionPolicyStatus, NativeInputReceipt } from './drivers/types.js';
8
+ import { type CodexAuxiliaryToolPolicy } from './drivers/codex-auxiliary-tools.js';
9
+ export interface AgentRuntimeProcess {
10
+ sendMessage(content: string, callbacks?: ClaudePromptCallbacks): Promise<ClaudePromptResult>;
11
+ isReady(): boolean;
12
+ stop(): void | Promise<void>;
13
+ getSessionId?(): string;
14
+ on(event: 'idle' | 'close' | 'error', listener: (...args: unknown[]) => void): this;
15
+ }
16
+ export interface CodexRuntimeProcessOptions {
17
+ defaultSessionKey?: string;
18
+ model?: string;
19
+ systemPrompt?: string;
20
+ cwd?: string;
21
+ sandbox?: 'read-only' | 'workspace-write' | 'danger-full-access';
22
+ requestTimeout?: number;
23
+ codexHome?: string;
24
+ isolatedHome?: string;
25
+ registryRoot?: string;
26
+ mcpConfigPath?: string;
27
+ command?: string;
28
+ /** Where this consumer's Codex CLI keeps its credential. The driver copies, never finds. */
29
+ authSourcePath?: string;
30
+ /** Managed Codex `model_reasoning_effort`; unset means the built-in default. */
31
+ effort?: string;
32
+ /** Enable the managed workspace shell; disabled unless the consumer opts in. */
33
+ shellTool?: boolean;
34
+ /** Enable live web search; disabled unless the consumer opts in. */
35
+ webSearch?: boolean;
36
+ /** Explicit shell environment overrides supplied by the consumer. */
37
+ shellEnvironment?: Record<string, string>;
38
+ /** Complete backend environment; omitted retains normal process inheritance. */
39
+ processEnv?: NodeJS.ProcessEnv;
40
+ /** Absolute credential paths the native command sandbox must not read. */
41
+ deniedReadPaths?: string[];
42
+ allowLoginShell?: boolean;
43
+ auxiliaryToolPolicy?: CodexAuxiliaryToolPolicy;
44
+ /**
45
+ * Root the driver keeps its files under. The caller names it: a runtime process
46
+ * does not know which product it is running inside.
47
+ */
48
+ hostRootDir: string;
49
+ /**
50
+ * Host factory for a child-scoped authority (own model run, own envelope, own bridge).
51
+ * Forwarded verbatim: a Codex-native child outlives the parent turn and must never
52
+ * inherit the parent's expiring grant.
53
+ */
54
+ createSubagentBridge?: (info: SubagentBridgeRequest) => Promise<SubagentBridge | null>;
55
+ }
56
+ /**
57
+ * Session-persistent Codex wrapper with the same minimal contract used by
58
+ * multi-agent runtime (sendMessage/isReady/stop + idle events).
59
+ *
60
+ * Implements both AgentRuntimeProcess (multi-agent) and IModelRunner (agent-loop).
61
+ * Uses one Codex app-server connection and multiplexes durable threads by
62
+ * session key. Different sessions may run concurrently; turns for the same
63
+ * session are serialized by CodexAppServerProcess.
64
+ */
65
+ export declare class CodexRuntimeProcess extends EventEmitter implements AgentRuntimeProcess, IModelRunner {
66
+ readonly backendType: "codex";
67
+ /** codex app-server spawns native subagents and reports the spawn via onSubagentStart. */
68
+ readonly supportsNativeSubagents = true;
69
+ private readonly options;
70
+ private readonly appServer;
71
+ private readonly auxiliaryToolBridge;
72
+ private defaultSessionKey;
73
+ private systemPrompt;
74
+ private stopped;
75
+ private activeRequests;
76
+ private subagentCompletionAcceptance;
77
+ private subagentCompletionAcceptanceRequired;
78
+ private _requestCount;
79
+ private _failureCount;
80
+ private _totalLatencyMs;
81
+ private _lastRequestAt;
82
+ constructor(options: CodexRuntimeProcessOptions);
83
+ /** Synchronous durable acceptance of child completion, before driver cleanup. */
84
+ registerSubagentCompletionAcceptance(accept: (event: SubagentEvent) => void): () => void;
85
+ prompt(content: string, callbacks?: ClaudePromptCallbacks, options?: PromptOptions): Promise<ClaudePromptResult>;
86
+ steer(content: string, target: NativeInputReceipt, options?: Pick<PromptOptions, 'sessionKey' | 'sessionId'> & {
87
+ beforeSend?: () => void;
88
+ }): Promise<NativeInputReceipt>;
89
+ getSessionPolicyStatus(options: PromptOptions): SessionPolicyStatus;
90
+ resetSession(sessionId?: string, sessionKey?: string): Promise<void>;
91
+ sendMessage(content: string, callbacks?: ClaudePromptCallbacks): Promise<ClaudePromptResult>;
92
+ private execute;
93
+ private notifyError;
94
+ setSessionId(id: string): void;
95
+ setSystemPrompt(prompt: string): void;
96
+ isReady(): boolean;
97
+ isHealthy(): boolean;
98
+ getMetrics(): RunnerMetrics;
99
+ stop(): Promise<void>;
100
+ getSessionId(): string;
101
+ }
102
+ //# sourceMappingURL=runtime-process.d.ts.map