@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.
- package/README.md +76 -239
- package/db/migrations/030-case-first-memory-substrate.sql +13 -98
- package/db/migrations/034-add-connector-event-scope-columns.sql +9 -13
- package/db/migrations/039-add-connector-event-operator-ingest-seq.sql +9 -95
- package/db/migrations/062-refresh-connector-event-sequences.sql +9 -113
- package/db/migrations/063-refresh-legacy-connector-event-updates.sql +9 -32
- package/db/migrations/067-add-connector-event-source-entity-id.sql +9 -13
- package/db/migrations/069-create-registry-nodes.sql +52 -0
- package/db/migrations/070-record-identity.sql +35 -0
- package/db/migrations/071-service-operation-origins.sql +187 -0
- package/db/migrations/072-observation-versions.sql +29 -0
- package/db/migrations/073-registry-corrections.sql +45 -0
- package/db/migrations/074-work-graph-ref-kinds.sql +39 -0
- package/db/migrations/075-agent-judgments.sql +58 -0
- package/db/migrations/076-scoped-checkpoint-bindings.sql +15 -0
- package/db/migrations/077-legacy-record-kind.sql +6 -0
- package/db/migrations/078-source-ingest-commands.sql +18 -0
- package/db/migrations/079-twin-edge-relations.sql +43 -0
- package/db/migrations/080-restore-duration-days.sql +7 -0
- package/db/migrations/081-mailbox.sql +61 -0
- package/db/migrations/082-commitments-row-id.sql +12 -0
- package/db/migrations/083-observation-is-the-evidence.sql +49 -0
- package/db/migrations/084-scope-kind-is-not-the-cores-to-list.sql +34 -0
- package/db/migrations/085-a-migration-has-a-source.sql +37 -0
- package/db/migrations/086-the-mailbox-is-generic.sql +110 -0
- package/db/migrations/087-mailbox-payload.sql +5 -0
- package/db/migrations/088-native-input-journal.sql +14 -0
- package/db/migrations/089-native-turn-receipt-lookup.sql +3 -0
- package/db/migrations/090-model-run-native-inputs.sql +29 -0
- package/db/migrations/091-native-turn-results.sql +11 -0
- package/db/migrations/092-restore-decision-fts.sql +34 -0
- package/db/migrations/093-native-turn-primary-kind.sql +14 -0
- package/db/migrations/094-commitment-run-provenance.sql +9 -0
- package/db/migrations/095-model-run-native-input-identity.sql +39 -0
- package/db/migrations/096-drop-connector-event-index-fts.sql +9 -0
- package/db/migrations/097-native-input-json-validity.sql +37 -0
- package/db/migrations/098-workflow-memory-kind.sql +105 -0
- package/db/migrations/099-commitment-revision-graph.sql +2 -0
- package/dist/action-contracts.d.ts +212 -0
- package/dist/action-contracts.js +10 -0
- package/dist/api/catalog.d.ts +118 -0
- package/dist/api/catalog.js +1756 -0
- package/dist/api/dispatch.d.ts +76 -0
- package/dist/api/dispatch.js +372 -0
- package/dist/canonicalize.d.ts +2 -2
- package/dist/canonicalize.js +3 -3
- package/dist/client/client.d.ts +33 -0
- package/dist/client/client.js +123 -0
- package/dist/client/ipc.d.ts +81 -0
- package/dist/client/ipc.js +314 -0
- package/dist/db-adapter/base-adapter.d.ts +6 -66
- package/dist/db-adapter/base-adapter.js +6 -6
- package/dist/db-adapter/index.d.ts +5 -5
- package/dist/db-adapter/index.js +2 -5
- package/dist/db-adapter/node-sqlite-adapter.d.ts +85 -15
- package/dist/db-adapter/node-sqlite-adapter.js +1985 -570
- package/dist/db-manager.d.ts +53 -97
- package/dist/db-manager.js +121 -603
- package/dist/embedding/embedder.d.ts +132 -0
- package/dist/embedding/embedder.js +299 -0
- package/dist/identity/principal-repository.d.ts +2 -2
- package/dist/index.d.ts +43 -58
- package/dist/index.js +97 -145
- package/dist/{context-compile/channel-grant.d.ts → knowledge/access.d.ts} +12 -17
- package/dist/knowledge/access.js +663 -0
- package/dist/knowledge/case-errors.d.ts +31 -0
- package/dist/knowledge/case-errors.js +40 -0
- package/dist/{cases/search-rollup.d.ts → knowledge/case-search-rollup.d.ts} +5 -4
- package/dist/{cases/search-rollup.js → knowledge/case-search-rollup.js} +6 -8
- package/dist/{cases/store.d.ts → knowledge/case-store.d.ts} +3 -6
- package/dist/{cases/store.js → knowledge/case-store.js} +7 -42
- package/dist/{cases/timeline-range.d.ts → knowledge/case-timeline-range.d.ts} +3 -3
- package/dist/{cases/timeline-range.js → knowledge/case-timeline-range.js} +47 -25
- package/dist/{cases/types.d.ts → knowledge/case-types.d.ts} +8 -2
- package/dist/{cases/types.js → knowledge/case-types.js} +1 -1
- package/dist/knowledge/commitment-revision-migration.d.ts +4 -0
- package/dist/knowledge/commitment-revision-migration.js +50 -0
- package/dist/knowledge/commitments.d.ts +192 -0
- package/dist/knowledge/commitments.js +386 -0
- package/dist/knowledge/decision-edges.d.ts +70 -0
- package/dist/knowledge/decision-edges.js +123 -0
- package/dist/{agent-graph/types.d.ts → knowledge/graph-query.d.ts} +80 -70
- package/dist/knowledge/graph-query.js +1585 -0
- package/dist/knowledge/identity.d.ts +16 -0
- package/dist/knowledge/identity.js +22 -0
- package/dist/knowledge/index.d.ts +47 -0
- package/dist/knowledge/index.js +90 -0
- package/dist/knowledge/judgment-edge.d.ts +6 -0
- package/dist/knowledge/judgment-edge.js +22 -0
- package/dist/knowledge/judgments.d.ts +118 -0
- package/dist/knowledge/judgments.js +802 -0
- package/dist/knowledge/observations.d.ts +160 -0
- package/dist/knowledge/observations.js +449 -0
- package/dist/knowledge/question-type.d.ts +34 -0
- package/dist/knowledge/question-type.js +70 -0
- package/dist/{search → knowledge}/ranker-features.js +1 -1
- package/dist/{search → knowledge}/search-quality.d.ts +0 -1
- package/dist/knowledge/search.d.ts +38 -0
- package/dist/knowledge/search.js +91 -0
- package/dist/knowledge/source-ingest.d.ts +65 -0
- package/dist/knowledge/source-ingest.js +174 -0
- package/dist/{edges/types.d.ts → knowledge/twin-edge-types.d.ts} +31 -4
- package/dist/{edges/types.js → knowledge/twin-edge-types.js} +13 -2
- package/dist/knowledge/work-dates.d.ts +49 -0
- package/dist/knowledge/work-dates.js +120 -0
- package/dist/mama-api.d.ts +114 -778
- package/dist/mama-api.js +313 -2461
- package/dist/memory/api.d.ts +264 -24
- package/dist/memory/api.js +1633 -843
- package/dist/memory/bootstrap-builder.d.ts +2 -1
- package/dist/memory/bootstrap-builder.js +5 -5
- package/dist/memory/channel-summary-state-store.d.ts +3 -2
- package/dist/memory/channel-summary-state-store.js +53 -51
- package/dist/memory/channel-summary-store.d.ts +5 -3
- package/dist/memory/channel-summary-store.js +3 -8
- package/dist/memory/dashboard-read.d.ts +46 -0
- package/dist/memory/dashboard-read.js +94 -0
- package/dist/memory/event-store.d.ts +3 -3
- package/dist/memory/event-store.js +3 -10
- package/dist/memory/finding-store.d.ts +3 -2
- package/dist/memory/finding-store.js +2 -7
- package/dist/memory/graph-read.d.ts +52 -0
- package/dist/memory/graph-read.js +130 -0
- package/dist/memory/judgment-types.d.ts +394 -0
- package/dist/memory/judgment-types.js +16 -0
- package/dist/memory/provenance-audit.d.ts +5 -2
- package/dist/memory/provenance-audit.js +8 -14
- package/dist/memory/provenance-live.d.ts +141 -0
- package/dist/memory/provenance-live.js +409 -0
- package/dist/memory/provenance-query.d.ts +5 -4
- package/dist/memory/provenance-query.js +21 -29
- package/dist/memory/provenance-resolver.d.ts +191 -0
- package/dist/memory/provenance-resolver.js +155 -0
- package/dist/memory/provenance.d.ts +1 -11
- package/dist/memory/provenance.js +2 -33
- package/dist/memory/recall-sanitize.d.ts +55 -0
- package/dist/memory/recall-sanitize.js +144 -0
- package/dist/memory/secret-filter.d.ts +32 -0
- package/dist/memory/secret-filter.js +126 -0
- package/dist/memory/truth-store.d.ts +2 -1
- package/dist/memory/truth-store.js +1 -4
- package/dist/memory/types.d.ts +74 -24
- package/dist/memory/types.js +75 -5
- package/dist/memory/write-adapters.d.ts +98 -0
- package/dist/memory/write-adapters.js +242 -0
- package/dist/operations/owner-action-effects.d.ts +53 -0
- package/dist/operations/owner-action-effects.js +96 -0
- package/dist/provenance/source-ref.d.ts +1 -1
- package/dist/provenance/source-ref.js +0 -2
- package/dist/registry/corrections.d.ts +31 -0
- package/dist/registry/corrections.js +332 -0
- package/dist/registry/record-identity.d.ts +49 -0
- package/dist/registry/record-identity.js +133 -0
- package/dist/registry/store.d.ts +101 -0
- package/dist/registry/store.js +395 -0
- package/dist/registry/types.d.ts +28 -0
- package/dist/registry/types.js +5 -0
- package/dist/relevance-scorer.js +2 -2
- package/dist/runtime/agent-event-bus.d.ts +50 -0
- package/dist/runtime/agent-event-bus.js +101 -0
- package/dist/runtime/drivers/claude-cli-wrapper.d.ts +152 -0
- package/dist/runtime/drivers/claude-cli-wrapper.js +375 -0
- package/dist/runtime/drivers/claude-effort.d.ts +4 -0
- package/dist/runtime/drivers/claude-effort.js +16 -0
- package/dist/runtime/drivers/cli-arg-redaction.d.ts +2 -0
- package/dist/runtime/drivers/cli-arg-redaction.js +18 -0
- package/dist/runtime/drivers/cli-secret-redaction.d.ts +17 -0
- package/dist/runtime/drivers/cli-secret-redaction.js +126 -0
- package/dist/runtime/drivers/codex-app-server-process.d.ts +277 -0
- package/dist/runtime/drivers/codex-app-server-process.js +2342 -0
- package/dist/runtime/drivers/codex-auxiliary-tools.d.ts +17 -0
- package/dist/runtime/drivers/codex-auxiliary-tools.js +267 -0
- package/dist/runtime/drivers/codex-home.d.ts +20 -0
- package/dist/runtime/drivers/codex-home.js +674 -0
- package/dist/runtime/drivers/codex-thread-registry.d.ts +63 -0
- package/dist/runtime/drivers/codex-thread-registry.js +433 -0
- package/dist/runtime/drivers/persistent-cli-adapter.d.ts +160 -0
- package/dist/runtime/drivers/persistent-cli-adapter.js +396 -0
- package/dist/runtime/drivers/persistent-cli-process.d.ts +425 -0
- package/dist/runtime/drivers/persistent-cli-process.js +1529 -0
- package/dist/runtime/drivers/types.d.ts +456 -0
- package/dist/runtime/drivers/types.js +110 -0
- package/dist/runtime/mailbox.d.ts +223 -0
- package/dist/runtime/mailbox.js +582 -0
- package/dist/runtime/model-run-store.d.ts +28 -0
- package/dist/{model-runs/store.js → runtime/model-run-store.js} +81 -41
- package/dist/{model-runs/types.d.ts → runtime/model-run-types.d.ts} +33 -4
- package/dist/{model-runs/types.js → runtime/model-run-types.js} +1 -1
- package/dist/runtime/native-effect-observer.d.ts +22 -0
- package/dist/runtime/native-effect-observer.js +103 -0
- package/dist/runtime/native-input-journal.d.ts +46 -0
- package/dist/runtime/native-input-journal.js +308 -0
- package/dist/runtime/native-prompt.d.ts +118 -0
- package/dist/runtime/native-prompt.js +496 -0
- package/dist/runtime/native-session.d.ts +10 -0
- package/dist/{agent-graph/index.js → runtime/native-session.js} +9 -6
- package/dist/runtime/native-tool-trace-observer.d.ts +5 -0
- package/dist/runtime/native-tool-trace-observer.js +65 -0
- package/dist/runtime/native-turn.d.ts +272 -0
- package/dist/runtime/native-turn.js +1041 -0
- package/dist/runtime/operations.d.ts +236 -0
- package/dist/runtime/operations.js +565 -0
- package/dist/runtime/post-tool-handler.d.ts +74 -0
- package/dist/runtime/post-tool-handler.js +137 -0
- package/dist/runtime/prompt-layers.d.ts +126 -0
- package/dist/runtime/prompt-layers.js +239 -0
- package/dist/runtime/runtime-process.d.ts +102 -0
- package/dist/runtime/runtime-process.js +206 -0
- package/dist/runtime/runtime.d.ts +278 -0
- package/dist/runtime/runtime.js +563 -0
- package/dist/runtime/session-pool.d.ts +176 -0
- package/dist/runtime/session-pool.js +369 -0
- package/dist/runtime/stimulus-payload.d.ts +5 -0
- package/dist/runtime/stimulus-payload.js +50 -0
- package/dist/runtime/subagent-bridge.d.ts +24 -0
- package/dist/{agent-graph/types.js → runtime/subagent-bridge.js} +1 -1
- package/dist/runtime/text-completion.d.ts +22 -0
- package/dist/{agent-situation/types.js → runtime/text-completion.js} +1 -1
- package/dist/runtime/token-estimator.d.ts +25 -0
- package/dist/runtime/token-estimator.js +75 -0
- package/dist/runtime/tool-trace-store.d.ts +22 -0
- package/dist/{model-runs → runtime}/tool-trace-store.js +46 -27
- package/dist/runtime/trace-summary.d.ts +5 -0
- package/dist/runtime/trace-summary.js +74 -0
- package/dist/runtime/turn-text.d.ts +23 -0
- package/dist/runtime/turn-text.js +41 -0
- package/dist/storage/database.d.ts +67 -0
- package/dist/storage/database.js +158 -0
- package/package.json +20 -34
- package/dist/agent-graph/alias-write.d.ts +0 -3
- package/dist/agent-graph/alias-write.js +0 -234
- package/dist/agent-graph/entity-resolve.d.ts +0 -3
- package/dist/agent-graph/entity-resolve.js +0 -271
- package/dist/agent-graph/errors.d.ts +0 -4
- package/dist/agent-graph/errors.js +0 -11
- package/dist/agent-graph/graph-query.d.ts +0 -5
- package/dist/agent-graph/graph-query.js +0 -360
- package/dist/agent-graph/index.d.ts +0 -6
- package/dist/agent-situation/builder.d.ts +0 -8
- package/dist/agent-situation/builder.js +0 -239
- package/dist/agent-situation/cache-key.d.ts +0 -4
- package/dist/agent-situation/cache-key.js +0 -64
- package/dist/agent-situation/index.d.ts +0 -7
- package/dist/agent-situation/index.js +0 -28
- package/dist/agent-situation/packet-store.d.ts +0 -27
- package/dist/agent-situation/packet-store.js +0 -228
- package/dist/agent-situation/ranking-policy.d.ts +0 -18
- package/dist/agent-situation/ranking-policy.js +0 -75
- package/dist/agent-situation/source-readers.d.ts +0 -52
- package/dist/agent-situation/source-readers.js +0 -300
- package/dist/agent-situation/types.d.ts +0 -195
- package/dist/cases/wiki-page-index.d.ts +0 -37
- package/dist/cases/wiki-page-index.js +0 -201
- package/dist/config-loader.d.ts +0 -68
- package/dist/config-loader.js +0 -239
- package/dist/connectors/event-index.d.ts +0 -24
- package/dist/connectors/event-index.js +0 -245
- package/dist/connectors/raw-query.d.ts +0 -40
- package/dist/connectors/raw-query.js +0 -412
- package/dist/connectors/types.d.ts +0 -117
- package/dist/connectors/types.js +0 -3
- package/dist/context-compile/boundary-defaults.d.ts +0 -12
- package/dist/context-compile/boundary-defaults.js +0 -105
- package/dist/context-compile/channel-grant.js +0 -66
- package/dist/context-compile/compiler-policy.d.ts +0 -39
- package/dist/context-compile/compiler-policy.js +0 -147
- package/dist/context-compile/compiler.d.ts +0 -18
- package/dist/context-compile/compiler.js +0 -404
- package/dist/context-compile/index.d.ts +0 -10
- package/dist/context-compile/index.js +0 -26
- package/dist/context-compile/packet-store.d.ts +0 -8
- package/dist/context-compile/packet-store.js +0 -239
- package/dist/context-compile/ref.d.ts +0 -7
- package/dist/context-compile/ref.js +0 -102
- package/dist/context-compile/source-readers.d.ts +0 -70
- package/dist/context-compile/source-readers.js +0 -840
- package/dist/context-compile/types.d.ts +0 -155
- package/dist/context-compile/types.js +0 -11
- package/dist/context-compile/visibility.d.ts +0 -21
- package/dist/context-compile/visibility.js +0 -224
- package/dist/decision-tracker.d.ts +0 -206
- package/dist/decision-tracker.js +0 -481
- package/dist/edges/ref-validation.d.ts +0 -7
- package/dist/edges/ref-validation.js +0 -321
- package/dist/edges/store.d.ts +0 -8
- package/dist/edges/store.js +0 -129
- package/dist/embedding-client.d.ts +0 -28
- package/dist/embedding-client.js +0 -53
- package/dist/embedding-server/index.d.ts +0 -67
- package/dist/embedding-server/index.js +0 -405
- package/dist/embedding-server/mobile/auth.d.ts +0 -44
- package/dist/embedding-server/mobile/auth.js +0 -150
- package/dist/embedding-server/mobile/daemon.d.ts +0 -129
- package/dist/embedding-server/mobile/daemon.js +0 -313
- package/dist/embedding-server/mobile/output-parser.d.ts +0 -115
- package/dist/embedding-server/mobile/output-parser.js +0 -241
- package/dist/embedding-server/mobile/session-api.d.ts +0 -57
- package/dist/embedding-server/mobile/session-api.js +0 -261
- package/dist/embedding-server/mobile/session-manager.d.ts +0 -138
- package/dist/embedding-server/mobile/session-manager.js +0 -378
- package/dist/embedding-server/mobile/websocket-handler.d.ts +0 -137
- package/dist/embedding-server/mobile/websocket-handler.js +0 -486
- package/dist/embeddings.d.ts +0 -68
- package/dist/embeddings.js +0 -244
- package/dist/entities/audit-metrics.d.ts +0 -68
- package/dist/entities/audit-metrics.js +0 -124
- package/dist/entities/candidate-generator.d.ts +0 -8
- package/dist/entities/candidate-generator.js +0 -24
- package/dist/entities/entity-linked-decision-counts.d.ts +0 -2
- package/dist/entities/entity-linked-decision-counts.js +0 -29
- package/dist/entities/entity-list.d.ts +0 -22
- package/dist/entities/entity-list.js +0 -3
- package/dist/entities/entity-orphan-list.d.ts +0 -17
- package/dist/entities/entity-orphan-list.js +0 -3
- package/dist/entities/entity-search.d.ts +0 -20
- package/dist/entities/entity-search.js +0 -3
- package/dist/entities/errors.d.ts +0 -55
- package/dist/entities/errors.js +0 -100
- package/dist/entities/lineage-store.d.ts +0 -28
- package/dist/entities/lineage-store.js +0 -204
- package/dist/entities/normalization.d.ts +0 -14
- package/dist/entities/normalization.js +0 -63
- package/dist/entities/policy-store.d.ts +0 -8
- package/dist/entities/policy-store.js +0 -75
- package/dist/entities/policy-types.d.ts +0 -72
- package/dist/entities/policy-types.js +0 -59
- package/dist/entities/projection.d.ts +0 -8
- package/dist/entities/projection.js +0 -82
- package/dist/entities/provenance-query.d.ts +0 -32
- package/dist/entities/provenance-query.js +0 -3
- package/dist/entities/read-identity.d.ts +0 -31
- package/dist/entities/read-identity.js +0 -264
- package/dist/entities/recall-bridge.d.ts +0 -5
- package/dist/entities/recall-bridge.js +0 -171
- package/dist/entities/resolution-engine.d.ts +0 -8
- package/dist/entities/resolution-engine.js +0 -3
- package/dist/entities/rollback-preview.d.ts +0 -35
- package/dist/entities/rollback-preview.js +0 -3
- package/dist/entities/source-locator.d.ts +0 -3
- package/dist/entities/source-locator.js +0 -32
- package/dist/entities/store.d.ts +0 -69
- package/dist/entities/store.js +0 -544
- package/dist/entities/types.d.ts +0 -166
- package/dist/entities/types.js +0 -30
- package/dist/memory/extraction-prompt.d.ts +0 -4
- package/dist/memory/extraction-prompt.js +0 -89
- package/dist/memory/scope-backfill.d.ts +0 -14
- package/dist/memory/scope-backfill.js +0 -3
- package/dist/memory/scope-store.d.ts +0 -4
- package/dist/memory/scope-store.js +0 -9
- package/dist/memory-store.d.ts +0 -87
- package/dist/memory-store.js +0 -78
- package/dist/model-runs/store.d.ts +0 -13
- package/dist/model-runs/tool-trace-store.d.ts +0 -8
- package/dist/notification-manager.d.ts +0 -7
- package/dist/notification-manager.js +0 -12
- package/dist/outcome-tracker.d.ts +0 -151
- package/dist/outcome-tracker.js +0 -271
- package/dist/query-intent.d.ts +0 -23
- package/dist/query-intent.js +0 -114
- package/dist/runtime/trusted-provenance.d.ts +0 -3
- package/dist/runtime/trusted-provenance.js +0 -6
- package/dist/search/question-type.d.ts +0 -5
- package/dist/search/question-type.js +0 -41
- package/dist/test-utils.d.ts +0 -80
- package/dist/test-utils.js +0 -218
- package/dist/tier-validator.d.ts +0 -43
- package/dist/tier-validator.js +0 -159
- package/dist/time-formatter.d.ts +0 -25
- package/dist/time-formatter.js +0 -93
- /package/dist/{search → knowledge}/feedback-store.d.ts +0 -0
- /package/dist/{search → knowledge}/feedback-store.js +0 -0
- /package/dist/{search → knowledge}/ranker-features.d.ts +0 -0
- /package/dist/{search → knowledge}/ranker-rescore.d.ts +0 -0
- /package/dist/{search → knowledge}/ranker-rescore.js +0 -0
- /package/dist/{search → knowledge}/ranker-trainer.d.ts +0 -0
- /package/dist/{search → knowledge}/ranker-trainer.js +0 -0
- /package/dist/{search → knowledge}/search-quality.js +0 -0
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Claude CLI Process - Keeps Claude alive for multi-turn conversations
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS EXISTS:
|
|
5
|
+
* - Previous approach spawned new Claude CLI process for each message
|
|
6
|
+
* - Each spawn required ~20K system prompt to be sent every time
|
|
7
|
+
* - Result: Slow responses (16-30 seconds per message)
|
|
8
|
+
*
|
|
9
|
+
* NEW ARCHITECTURE:
|
|
10
|
+
* - Keep Claude process alive using stream-json input/output
|
|
11
|
+
* - Send messages via stdin, receive responses via stdout
|
|
12
|
+
* - Session memory preserved in Claude's context
|
|
13
|
+
* - System prompt sent only once at process start
|
|
14
|
+
*
|
|
15
|
+
* STREAM-JSON PROTOCOL:
|
|
16
|
+
* Input (stdin):
|
|
17
|
+
* User message: {"type":"user","message":{"role":"user","content":"..."}}
|
|
18
|
+
* Tool result: {"type":"user","message":{"role":"user","content":[{"type":"tool_result","tool_use_id":"xxx","content":"...","is_error":false}]}}
|
|
19
|
+
*
|
|
20
|
+
* Output (stdout):
|
|
21
|
+
* Init: {"type":"system","subtype":"init",...}
|
|
22
|
+
* Assistant: {"type":"assistant","message":{...}}
|
|
23
|
+
* Tool use: Content block with type="tool_use" in assistant message
|
|
24
|
+
* Result: {"type":"result","subtype":"success",...}
|
|
25
|
+
*/
|
|
26
|
+
import { EventEmitter } from 'events';
|
|
27
|
+
import { type SessionPolicyStatus } from './types.js';
|
|
28
|
+
import { type PromptCallbacks, type PromptResult, type TokenUsageRecord } from './types.js';
|
|
29
|
+
import { type ThinkingEffort } from './claude-effort.js';
|
|
30
|
+
export interface PersistentProcessOptions {
|
|
31
|
+
sessionId: string;
|
|
32
|
+
/**
|
|
33
|
+
* Timeouts the product states. A driver does not read a config file: the
|
|
34
|
+
* numbers arrive with the options, and the defaults below are what a caller
|
|
35
|
+
* that states nothing gets.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* The isolated workspace this process runs in, and the empty plugin
|
|
39
|
+
* directory that keeps the host's global plugins out of every turn. The
|
|
40
|
+
* product states both; the driver only creates and uses them. The values
|
|
41
|
+
* are a product decision recorded in its CLAUDE.md — a driver that invented
|
|
42
|
+
* them would be deciding where another system keeps its files.
|
|
43
|
+
*/
|
|
44
|
+
/**
|
|
45
|
+
* Where this run keeps its files. Required: a driver does not know a product's
|
|
46
|
+
* directory name, and the default it used to compute spelled one out.
|
|
47
|
+
*/
|
|
48
|
+
workspaceDir: string;
|
|
49
|
+
timeouts?: {
|
|
50
|
+
requestMs?: number;
|
|
51
|
+
idleMs?: number;
|
|
52
|
+
sessionMs?: number;
|
|
53
|
+
cleanupMs?: number;
|
|
54
|
+
pendingToolMs?: number;
|
|
55
|
+
};
|
|
56
|
+
/** Host-computed authority fingerprint bound to this process generation. */
|
|
57
|
+
policyFingerprint?: string;
|
|
58
|
+
model?: string;
|
|
59
|
+
systemPrompt?: string;
|
|
60
|
+
mcpConfigPath?: string;
|
|
61
|
+
/**
|
|
62
|
+
* Skip permission prompts for tool execution
|
|
63
|
+
*
|
|
64
|
+
* @warning SECURITY RISK: Bypasses all permission checks.
|
|
65
|
+
* Only enable in trusted environments where agent actions are pre-approved.
|
|
66
|
+
*/
|
|
67
|
+
dangerouslySkipPermissions?: boolean;
|
|
68
|
+
/** Noninteractive consumers use dontAsk with explicit permission rules. */
|
|
69
|
+
permissionMode?: 'default' | 'acceptEdits' | 'dontAsk' | 'plan';
|
|
70
|
+
useGatewayTools?: boolean;
|
|
71
|
+
/** Timeout for each request in ms (default: 120000) */
|
|
72
|
+
requestTimeout?: number;
|
|
73
|
+
/** Idle timeout for pooled persistent processes in ms (default: session_ms) */
|
|
74
|
+
idleTimeoutMs?: number;
|
|
75
|
+
/** Cleanup interval for pooled persistent processes in ms (default: session_cleanup_ms) */
|
|
76
|
+
cleanupIntervalMs?: number;
|
|
77
|
+
/** Maximum time to keep a process waiting for host-side tool results (default: max(4 * idleTimeoutMs, 30m)) */
|
|
78
|
+
pendingToolUseTimeoutMs?: number;
|
|
79
|
+
/** Environment variables to pass to the Claude CLI process */
|
|
80
|
+
env?: Record<string, string>;
|
|
81
|
+
/** Complete inherited environment supplied by the consumer; env is applied afterward. */
|
|
82
|
+
processEnv?: NodeJS.ProcessEnv;
|
|
83
|
+
/** Structurally allowed tools (--allowedTools CLI flag) */
|
|
84
|
+
allowedTools?: string[];
|
|
85
|
+
/** Structurally disallowed tools (--disallowedTools CLI flag) */
|
|
86
|
+
disallowedTools?: string[];
|
|
87
|
+
/** Override built-in tool set (--tools CLI flag). Use "" to disable all tools. */
|
|
88
|
+
tools?: string;
|
|
89
|
+
/** Override plugin directory (--plugin-dir CLI flag). Use empty dir to disable plugins. */
|
|
90
|
+
pluginDir?: string;
|
|
91
|
+
/** Optional callback for recording token usage */
|
|
92
|
+
onTokenUsage?: (record: TokenUsageRecord) => void;
|
|
93
|
+
/** Channel key for token usage tracking */
|
|
94
|
+
channelKey?: string;
|
|
95
|
+
/** Agent ID for token usage tracking */
|
|
96
|
+
agentId?: string;
|
|
97
|
+
/** Thinking effort passed as --effort on models that accept it. */
|
|
98
|
+
effort?: ThinkingEffort;
|
|
99
|
+
}
|
|
100
|
+
export interface PersistentProcessAcquireResult {
|
|
101
|
+
process: PersistentClaudeProcess;
|
|
102
|
+
created: boolean;
|
|
103
|
+
}
|
|
104
|
+
export type { ToolUseBlock } from './types.js';
|
|
105
|
+
export interface ContentBlock {
|
|
106
|
+
type: 'text' | 'tool_use' | 'tool_result';
|
|
107
|
+
text?: string;
|
|
108
|
+
id?: string;
|
|
109
|
+
name?: string;
|
|
110
|
+
input?: Record<string, unknown>;
|
|
111
|
+
tool_use_id?: string;
|
|
112
|
+
content?: string | Array<{
|
|
113
|
+
type: string;
|
|
114
|
+
text?: string;
|
|
115
|
+
}>;
|
|
116
|
+
is_error?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface StreamMessage {
|
|
119
|
+
type: 'system' | 'assistant' | 'result' | 'error' | 'user';
|
|
120
|
+
subtype?: string;
|
|
121
|
+
uuid?: string;
|
|
122
|
+
origin?: {
|
|
123
|
+
kind: string;
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* Set by the CLI on events produced INSIDE a subagent (the Agent tool_use id that
|
|
127
|
+
* started it). It is the only non-heuristic way to tell a child's tool calls from the
|
|
128
|
+
* parent's on one stream; absent/null means "this stream position", not "parent".
|
|
129
|
+
*/
|
|
130
|
+
parent_tool_use_id?: string | null;
|
|
131
|
+
/** Background-task identity on `system` task_* events; field name varies by CLI build. */
|
|
132
|
+
task_id?: string;
|
|
133
|
+
taskId?: string;
|
|
134
|
+
task?: {
|
|
135
|
+
id?: string;
|
|
136
|
+
status?: string;
|
|
137
|
+
description?: string;
|
|
138
|
+
agentId?: string;
|
|
139
|
+
};
|
|
140
|
+
agent_id?: string;
|
|
141
|
+
agentId?: string;
|
|
142
|
+
message?: {
|
|
143
|
+
role: string;
|
|
144
|
+
content: ContentBlock[] | string;
|
|
145
|
+
model?: string;
|
|
146
|
+
id?: string;
|
|
147
|
+
usage?: {
|
|
148
|
+
input_tokens: number;
|
|
149
|
+
output_tokens: number;
|
|
150
|
+
cache_read_input_tokens?: number;
|
|
151
|
+
cache_creation_input_tokens?: number;
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
result?: string;
|
|
155
|
+
session_id?: string;
|
|
156
|
+
total_cost_usd?: number;
|
|
157
|
+
usage?: {
|
|
158
|
+
input_tokens: number;
|
|
159
|
+
output_tokens: number;
|
|
160
|
+
cache_read_input_tokens?: number;
|
|
161
|
+
cache_creation_input_tokens?: number;
|
|
162
|
+
};
|
|
163
|
+
duration_ms?: number;
|
|
164
|
+
num_turns?: number;
|
|
165
|
+
is_error?: boolean;
|
|
166
|
+
error?: string;
|
|
167
|
+
}
|
|
168
|
+
export type { PromptCallbacks, PromptResult };
|
|
169
|
+
type ProcessState = 'idle' | 'busy' | 'starting' | 'dead';
|
|
170
|
+
/** Host-visible spawn/finish of a native background Agent on the Claude stream. */
|
|
171
|
+
export interface ClaudeSubagentStreamEvent {
|
|
172
|
+
kind: 'started' | 'completed';
|
|
173
|
+
agentThreadId: string;
|
|
174
|
+
agentPath: string;
|
|
175
|
+
itemId: string;
|
|
176
|
+
status?: 'completed' | 'unknown';
|
|
177
|
+
finalText?: string;
|
|
178
|
+
/**
|
|
179
|
+
* False when the CLI opened its own follow-up turn for the notification: that turn IS
|
|
180
|
+
* the owner reacting, so the host must not enqueue a second one.
|
|
181
|
+
*/
|
|
182
|
+
wakeRequired: boolean;
|
|
183
|
+
}
|
|
184
|
+
/** A turn the CLI begins on its own after a background task notification (no stdin). */
|
|
185
|
+
export interface ClaudeAutonomousTurnEvent {
|
|
186
|
+
agentThreadId: string;
|
|
187
|
+
agentPath: string;
|
|
188
|
+
itemId: string;
|
|
189
|
+
}
|
|
190
|
+
export interface ClaudeAutonomousTurnResultEvent extends ClaudeAutonomousTurnEvent {
|
|
191
|
+
text: string;
|
|
192
|
+
isError: boolean;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* PersistentClaudeProcess - Manages a single long-lived Claude CLI process
|
|
196
|
+
*
|
|
197
|
+
* Features:
|
|
198
|
+
* - Keeps Claude process alive for multiple messages
|
|
199
|
+
* - Uses stream-json for bidirectional communication
|
|
200
|
+
* - Handles tool execution via Gateway Tools
|
|
201
|
+
* - Auto-restarts on process death
|
|
202
|
+
*/
|
|
203
|
+
export declare class PersistentClaudeProcess extends EventEmitter {
|
|
204
|
+
private process;
|
|
205
|
+
private options;
|
|
206
|
+
private state;
|
|
207
|
+
private outputBuffer;
|
|
208
|
+
private currentCallbacks;
|
|
209
|
+
/**
|
|
210
|
+
* The most recent request that offered a follow-up sink. A CLI turn that no stdin request
|
|
211
|
+
* and no tracked child explains (a grandchild's task notification, measured 2026-09-10)
|
|
212
|
+
* still answers SOMEONE: the last request that asked.
|
|
213
|
+
*/
|
|
214
|
+
private lastFollowUp;
|
|
215
|
+
private currentResolve;
|
|
216
|
+
private currentReject;
|
|
217
|
+
private currentInputUuid;
|
|
218
|
+
private inputAcknowledged;
|
|
219
|
+
private requestTimeoutHandle;
|
|
220
|
+
private toolUseBlocks;
|
|
221
|
+
private readonly promptToolExchanges;
|
|
222
|
+
private completedToolExchanges;
|
|
223
|
+
private awaitingToolResults;
|
|
224
|
+
private pendingToolUseStartedAt;
|
|
225
|
+
private accumulatedText;
|
|
226
|
+
private startPromise;
|
|
227
|
+
private onTokenUsage?;
|
|
228
|
+
/** Live + just-finished native background Agents, keyed by their `Agent` tool_use id. */
|
|
229
|
+
private readonly backgroundAgents;
|
|
230
|
+
/**
|
|
231
|
+
* True once a turn's `result` resolved while a background child was still running. From
|
|
232
|
+
* then until the next stdin request, unattributed assistant/user events on the stream
|
|
233
|
+
* belong to that child, not to a parent turn that no longer exists.
|
|
234
|
+
*/
|
|
235
|
+
private parentTurnEnded;
|
|
236
|
+
/** Set between a `task_notification` and the CLI's own follow-up turn. */
|
|
237
|
+
private pendingNotification;
|
|
238
|
+
/** The CLI-initiated turn currently running with no stdin request behind it. */
|
|
239
|
+
private autonomousTurn;
|
|
240
|
+
/**
|
|
241
|
+
* Resolve the effective request timeout in ms.
|
|
242
|
+
* 0 = unlimited (no timeout). Returns the configured or default value.
|
|
243
|
+
*/
|
|
244
|
+
private _getRequestTimeoutMs;
|
|
245
|
+
constructor(options: PersistentProcessOptions);
|
|
246
|
+
/**
|
|
247
|
+
* Start the Claude CLI process
|
|
248
|
+
*
|
|
249
|
+
* Note: The CLI only emits the 'init' event after receiving the first user message.
|
|
250
|
+
* So we don't wait for init here - we just start the process and let it run.
|
|
251
|
+
* The first sendMessage() call will handle init as part of its response flow.
|
|
252
|
+
*/
|
|
253
|
+
start(): Promise<void>;
|
|
254
|
+
private doStart;
|
|
255
|
+
/**
|
|
256
|
+
* Build CLI arguments for stream-json mode
|
|
257
|
+
*/
|
|
258
|
+
private buildArgs;
|
|
259
|
+
/**
|
|
260
|
+
* Send a user message to Claude
|
|
261
|
+
*/
|
|
262
|
+
sendMessage(content: string, callbacks?: PromptCallbacks, nativeInputId?: string): Promise<PromptResult>;
|
|
263
|
+
/**
|
|
264
|
+
* Send a tool result back to Claude
|
|
265
|
+
*/
|
|
266
|
+
sendToolResult(toolUseId: string, result: string, isError?: boolean, callbacks?: PromptCallbacks): Promise<PromptResult>;
|
|
267
|
+
/**
|
|
268
|
+
* Send multiple tool results back to Claude in a single message.
|
|
269
|
+
* Required when Claude requests multiple tools in one turn.
|
|
270
|
+
*/
|
|
271
|
+
sendToolResults(results: Array<{
|
|
272
|
+
tool_use_id: string;
|
|
273
|
+
content: string;
|
|
274
|
+
is_error: boolean;
|
|
275
|
+
}>, callbacks?: PromptCallbacks): Promise<PromptResult>;
|
|
276
|
+
/**
|
|
277
|
+
* Handle stdout data
|
|
278
|
+
*/
|
|
279
|
+
private handleStdout;
|
|
280
|
+
/**
|
|
281
|
+
* Process a parsed event from stdout
|
|
282
|
+
*/
|
|
283
|
+
private processEvent;
|
|
284
|
+
private recordToolUse;
|
|
285
|
+
private trackBackgroundAgent;
|
|
286
|
+
private pruneBackgroundAgents;
|
|
287
|
+
/** The newest tracked agent matching a predicate; `system` task events carry no item id. */
|
|
288
|
+
private latestBackgroundAgent;
|
|
289
|
+
private taskIdentityOf;
|
|
290
|
+
private recordBackgroundTaskStarted;
|
|
291
|
+
/** Lift the child's id out of the "Async agent launched" tool_result text. */
|
|
292
|
+
private recordBackgroundLaunchResult;
|
|
293
|
+
private fireSubagentStart;
|
|
294
|
+
/**
|
|
295
|
+
* Which background child an assistant/user event belongs to, or null for the parent.
|
|
296
|
+
*
|
|
297
|
+
* `parent_tool_use_id` is authoritative when the CLI stamps it. Without it the only
|
|
298
|
+
* honest signal is position: the parent turn already ended and exactly one child is
|
|
299
|
+
* live. Two live children and no stamp is ambiguous, so the event stays with the parent
|
|
300
|
+
* and says so rather than being silently attributed.
|
|
301
|
+
*/
|
|
302
|
+
private childAgentFor;
|
|
303
|
+
private absorbChildAssistant;
|
|
304
|
+
private recordBackgroundTaskNotification;
|
|
305
|
+
private beginAutonomousTurn;
|
|
306
|
+
private finishAutonomousTurn;
|
|
307
|
+
private completeBackgroundAgent;
|
|
308
|
+
/** Whether a spawned background child has not been reported finished yet. */
|
|
309
|
+
hasLiveBackgroundAgents(): boolean;
|
|
310
|
+
private recordToolResult;
|
|
311
|
+
private failToolStreamProtocol;
|
|
312
|
+
/**
|
|
313
|
+
* Handle process close
|
|
314
|
+
*/
|
|
315
|
+
private handleClose;
|
|
316
|
+
/**
|
|
317
|
+
* Handle process error
|
|
318
|
+
*/
|
|
319
|
+
private handleError;
|
|
320
|
+
/**
|
|
321
|
+
* Handle request timeout
|
|
322
|
+
*/
|
|
323
|
+
private handleTimeout;
|
|
324
|
+
/**
|
|
325
|
+
* Clear request timeout
|
|
326
|
+
*/
|
|
327
|
+
private clearRequestTimeout;
|
|
328
|
+
/**
|
|
329
|
+
* Reset request state
|
|
330
|
+
*/
|
|
331
|
+
private resetRequestState;
|
|
332
|
+
/**
|
|
333
|
+
* Stop the process
|
|
334
|
+
*/
|
|
335
|
+
stop(): void;
|
|
336
|
+
/**
|
|
337
|
+
* Check if process is alive
|
|
338
|
+
*/
|
|
339
|
+
isAlive(): boolean;
|
|
340
|
+
/**
|
|
341
|
+
* Check if process is ready for new messages
|
|
342
|
+
*/
|
|
343
|
+
isReady(): boolean;
|
|
344
|
+
/**
|
|
345
|
+
* True while Claude has requested tools and the host has not sent tool_result yet.
|
|
346
|
+
* The process is technically idle during host-side tool execution, but it must not
|
|
347
|
+
* be reclaimed because the next prompt depends on this live Claude context.
|
|
348
|
+
*/
|
|
349
|
+
hasPendingToolUse(): boolean;
|
|
350
|
+
getPendingToolUseStartedAt(): number | null;
|
|
351
|
+
/**
|
|
352
|
+
* Get current state
|
|
353
|
+
*/
|
|
354
|
+
getState(): ProcessState;
|
|
355
|
+
/**
|
|
356
|
+
* Get session ID
|
|
357
|
+
*/
|
|
358
|
+
getSessionId(): string;
|
|
359
|
+
}
|
|
360
|
+
export declare function formatClaudeArgsForLog(args: readonly string[]): string[];
|
|
361
|
+
/**
|
|
362
|
+
* PersistentProcessPool - Manages multiple persistent Claude processes
|
|
363
|
+
*
|
|
364
|
+
* Features:
|
|
365
|
+
* - One process per channel/session
|
|
366
|
+
* - Automatic process lifecycle management
|
|
367
|
+
* - Process reuse for multi-turn conversations
|
|
368
|
+
*/
|
|
369
|
+
export declare class PersistentProcessPool {
|
|
370
|
+
private processes;
|
|
371
|
+
private defaultOptions;
|
|
372
|
+
private idleTimeoutMs;
|
|
373
|
+
private cleanupIntervalMs;
|
|
374
|
+
private pendingToolUseTimeoutMs;
|
|
375
|
+
private cleanupTimer;
|
|
376
|
+
constructor(defaultOptions: Partial<PersistentProcessOptions> & {
|
|
377
|
+
workspaceDir: string;
|
|
378
|
+
});
|
|
379
|
+
private resolveIdleTimeoutMs;
|
|
380
|
+
private resolveCleanupIntervalMs;
|
|
381
|
+
private resolvePendingToolUseTimeoutMs;
|
|
382
|
+
private startCleanupTimer;
|
|
383
|
+
/**
|
|
384
|
+
* Get or create a process for a channel
|
|
385
|
+
*/
|
|
386
|
+
getProcess(channelKey: string, options?: Partial<PersistentProcessOptions>): Promise<PersistentClaudeProcess>;
|
|
387
|
+
/**
|
|
388
|
+
* Get or create a process for a channel and report whether this call created it.
|
|
389
|
+
*/
|
|
390
|
+
getProcessWithStatus(channelKey: string, options?: Partial<PersistentProcessOptions>): Promise<PersistentProcessAcquireResult>;
|
|
391
|
+
/**
|
|
392
|
+
* Stop idle ready processes that have outlived the configured idle timeout.
|
|
393
|
+
*/
|
|
394
|
+
cleanupIdleProcesses(now?: number): number;
|
|
395
|
+
/**
|
|
396
|
+
* Stop a specific process
|
|
397
|
+
*/
|
|
398
|
+
stopProcess(channelKey: string): void;
|
|
399
|
+
getSessionPolicyStatus(channelKey: string, policyFingerprint: string | undefined): SessionPolicyStatus;
|
|
400
|
+
/**
|
|
401
|
+
* Stop the exact process generation acquired by the caller. Only remove the pool entry when it
|
|
402
|
+
* still points at that generation, so stale cleanup cannot stop or evict a replacement. The
|
|
403
|
+
* expected process may already be absent after its error listener ran; it still must be stopped
|
|
404
|
+
* or the child would remain alive outside pool lifecycle management.
|
|
405
|
+
*/
|
|
406
|
+
retireProcess(channelKey: string, expectedProcess: PersistentClaudeProcess): boolean;
|
|
407
|
+
/**
|
|
408
|
+
* Stop all processes
|
|
409
|
+
*/
|
|
410
|
+
stopAll(): void;
|
|
411
|
+
/**
|
|
412
|
+
* Get number of active processes
|
|
413
|
+
*/
|
|
414
|
+
getActiveCount(): number;
|
|
415
|
+
/**
|
|
416
|
+
* Get all channel keys with active processes
|
|
417
|
+
*/
|
|
418
|
+
getActiveChannels(): string[];
|
|
419
|
+
/**
|
|
420
|
+
* Get states of all active processes
|
|
421
|
+
* @returns Map of channelKey → ProcessState
|
|
422
|
+
*/
|
|
423
|
+
getProcessStates(): Map<string, string>;
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=persistent-cli-process.d.ts.map
|