@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
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Output Parser - parses Claude Code stdout into structured events
|
|
4
|
-
* @module mobile/output-parser
|
|
5
|
-
* @version 1.5.0
|
|
6
|
-
*
|
|
7
|
-
* Parses raw stdout from Claude Code CLI, identifying message types
|
|
8
|
-
* such as stream content, tool usage, completion, and errors.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* import { OutputParser } from './output-parser';
|
|
12
|
-
* const parser = new OutputParser();
|
|
13
|
-
* const events = parser.parse(chunk);
|
|
14
|
-
* // events: [{ type: 'stream', text: '...' }, { type: 'tool_use', tool: 'Read' }]
|
|
15
|
-
*/
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.OutputParser = exports.ANSI_REGEX = exports.COMPLETE_PATTERNS = exports.ERROR_PATTERNS = exports.TOOL_PATTERNS = void 0;
|
|
18
|
-
/**
|
|
19
|
-
* Tool detection patterns
|
|
20
|
-
*/
|
|
21
|
-
exports.TOOL_PATTERNS = [
|
|
22
|
-
/Tool:\s*(\w+)/i,
|
|
23
|
-
/Using\s+(\w+)\s+tool/i,
|
|
24
|
-
/Calling\s+(\w+)/i,
|
|
25
|
-
/⏺\s*(\w+)/, // Claude Code uses this indicator
|
|
26
|
-
/\[(\w+)\]\s*Reading/i,
|
|
27
|
-
/\[(\w+)\]\s*Writing/i,
|
|
28
|
-
/\[(\w+)\]\s*Editing/i,
|
|
29
|
-
];
|
|
30
|
-
/**
|
|
31
|
-
* Tool completion patterns
|
|
32
|
-
*/
|
|
33
|
-
const TOOL_COMPLETE_PATTERNS = [
|
|
34
|
-
/Tool\s+(\w+)\s+completed/i,
|
|
35
|
-
/(\w+)\s+finished/i,
|
|
36
|
-
/✓\s*(\w+)/,
|
|
37
|
-
];
|
|
38
|
-
/**
|
|
39
|
-
* Error patterns
|
|
40
|
-
*/
|
|
41
|
-
exports.ERROR_PATTERNS = [
|
|
42
|
-
/Error:\s*(.+)/i,
|
|
43
|
-
/ERROR:\s*(.+)/i,
|
|
44
|
-
/Failed:\s*(.+)/i,
|
|
45
|
-
/Exception:\s*(.+)/i,
|
|
46
|
-
];
|
|
47
|
-
/**
|
|
48
|
-
* Completion/prompt patterns
|
|
49
|
-
*/
|
|
50
|
-
exports.COMPLETE_PATTERNS = [
|
|
51
|
-
/^>\s*$/m, // Simple prompt
|
|
52
|
-
/^\$\s*$/m, // Shell prompt
|
|
53
|
-
/^claude>\s*$/im, // Claude prompt
|
|
54
|
-
/\n\n\n$/, // Multiple empty lines
|
|
55
|
-
];
|
|
56
|
-
/**
|
|
57
|
-
* ANSI escape code regex pattern
|
|
58
|
-
*/
|
|
59
|
-
// eslint-disable-next-line no-control-regex
|
|
60
|
-
exports.ANSI_REGEX = /\x1b\[[0-9;]*m/g;
|
|
61
|
-
/**
|
|
62
|
-
* OutputParser class - parses Claude Code stdout
|
|
63
|
-
*/
|
|
64
|
-
class OutputParser {
|
|
65
|
-
buffer;
|
|
66
|
-
lastToolDetected;
|
|
67
|
-
/**
|
|
68
|
-
* Create a new OutputParser instance
|
|
69
|
-
*/
|
|
70
|
-
constructor() {
|
|
71
|
-
this.buffer = '';
|
|
72
|
-
this.lastToolDetected = null;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Parse a stdout chunk into events
|
|
76
|
-
* @param chunk - Raw stdout data
|
|
77
|
-
* @returns Array of parsed events
|
|
78
|
-
*/
|
|
79
|
-
parse(chunk) {
|
|
80
|
-
const text = typeof chunk === 'string' ? chunk : chunk.toString();
|
|
81
|
-
const cleanText = this.stripAnsi(text);
|
|
82
|
-
// Add to buffer for incomplete line handling
|
|
83
|
-
this.buffer += cleanText;
|
|
84
|
-
const events = [];
|
|
85
|
-
// Check for errors first (highest priority)
|
|
86
|
-
const errorResult = this.detectError(this.buffer);
|
|
87
|
-
if (errorResult) {
|
|
88
|
-
events.push({
|
|
89
|
-
type: 'error',
|
|
90
|
-
message: errorResult,
|
|
91
|
-
});
|
|
92
|
-
// Don't clear buffer entirely, might have more content
|
|
93
|
-
}
|
|
94
|
-
// Check for tool usage
|
|
95
|
-
const toolResult = this.detectToolUse(this.buffer);
|
|
96
|
-
if (toolResult) {
|
|
97
|
-
events.push({
|
|
98
|
-
type: 'tool_use',
|
|
99
|
-
tool: toolResult.tool,
|
|
100
|
-
status: 'started',
|
|
101
|
-
args: toolResult.args || null,
|
|
102
|
-
});
|
|
103
|
-
this.lastToolDetected = toolResult.tool;
|
|
104
|
-
}
|
|
105
|
-
// Check for tool completion
|
|
106
|
-
const toolComplete = this.detectToolComplete(this.buffer);
|
|
107
|
-
if (toolComplete) {
|
|
108
|
-
events.push({
|
|
109
|
-
type: 'tool_complete',
|
|
110
|
-
tool: toolComplete,
|
|
111
|
-
status: 'completed',
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
// Check for completion
|
|
115
|
-
if (this.detectComplete(this.buffer)) {
|
|
116
|
-
events.push({
|
|
117
|
-
type: 'complete',
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
// Always emit stream event with the text
|
|
121
|
-
if (cleanText.trim()) {
|
|
122
|
-
events.push({
|
|
123
|
-
type: 'stream',
|
|
124
|
-
text: cleanText,
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
// Clear buffer if we have complete lines (ends with newline)
|
|
128
|
-
if (this.buffer.endsWith('\n')) {
|
|
129
|
-
this.buffer = '';
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
// Keep only the incomplete last line
|
|
133
|
-
const lastNewline = this.buffer.lastIndexOf('\n');
|
|
134
|
-
if (lastNewline !== -1) {
|
|
135
|
-
this.buffer = this.buffer.substring(lastNewline + 1);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
return events;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Remove ANSI escape codes from text
|
|
142
|
-
* @param text - Text with potential ANSI codes
|
|
143
|
-
* @returns Clean text
|
|
144
|
-
*/
|
|
145
|
-
stripAnsi(text) {
|
|
146
|
-
return text.replace(exports.ANSI_REGEX, '');
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Detect tool usage pattern in text
|
|
150
|
-
* @param text - Text to analyze
|
|
151
|
-
* @returns Tool info or null
|
|
152
|
-
*/
|
|
153
|
-
detectToolUse(text) {
|
|
154
|
-
for (const pattern of exports.TOOL_PATTERNS) {
|
|
155
|
-
const match = text.match(pattern);
|
|
156
|
-
if (match) {
|
|
157
|
-
const tool = match[1];
|
|
158
|
-
// Try to extract args if present
|
|
159
|
-
const argsMatch = text.match(new RegExp(`${tool}[:\\s]+(.+?)(?:\\n|$)`, 'i'));
|
|
160
|
-
return {
|
|
161
|
-
tool,
|
|
162
|
-
args: argsMatch ? argsMatch[1].trim() : null,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return null;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Detect tool completion pattern in text
|
|
170
|
-
* @param text - Text to analyze
|
|
171
|
-
* @returns Tool name or null
|
|
172
|
-
*/
|
|
173
|
-
detectToolComplete(text) {
|
|
174
|
-
for (const pattern of TOOL_COMPLETE_PATTERNS) {
|
|
175
|
-
const match = text.match(pattern);
|
|
176
|
-
if (match) {
|
|
177
|
-
return match[1];
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return null;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Detect completion pattern in text
|
|
184
|
-
* @param text - Text to analyze
|
|
185
|
-
* @returns True if completion detected
|
|
186
|
-
*/
|
|
187
|
-
detectComplete(text) {
|
|
188
|
-
for (const pattern of exports.COMPLETE_PATTERNS) {
|
|
189
|
-
if (pattern.test(text)) {
|
|
190
|
-
return true;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return false;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Detect error pattern in text
|
|
197
|
-
* @param text - Text to analyze
|
|
198
|
-
* @returns Error message or null
|
|
199
|
-
*/
|
|
200
|
-
detectError(text) {
|
|
201
|
-
for (const pattern of exports.ERROR_PATTERNS) {
|
|
202
|
-
const match = text.match(pattern);
|
|
203
|
-
if (match) {
|
|
204
|
-
return match[1].trim();
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return null;
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Flush any remaining buffer content
|
|
211
|
-
* @returns Remaining events
|
|
212
|
-
*/
|
|
213
|
-
flush() {
|
|
214
|
-
const events = [];
|
|
215
|
-
if (this.buffer.trim()) {
|
|
216
|
-
events.push({
|
|
217
|
-
type: 'stream',
|
|
218
|
-
text: this.buffer,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
this.buffer = '';
|
|
222
|
-
this.lastToolDetected = null;
|
|
223
|
-
return events;
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Reset the parser state
|
|
227
|
-
*/
|
|
228
|
-
reset() {
|
|
229
|
-
this.buffer = '';
|
|
230
|
-
this.lastToolDetected = null;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Get current buffer content
|
|
234
|
-
* @returns Buffer content
|
|
235
|
-
*/
|
|
236
|
-
getBuffer() {
|
|
237
|
-
return this.buffer;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
exports.OutputParser = OutputParser;
|
|
241
|
-
//# sourceMappingURL=output-parser.js.map
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Session REST API - HTTP endpoints for session management
|
|
3
|
-
* @module mobile/session-api
|
|
4
|
-
* @version 1.5.0
|
|
5
|
-
*
|
|
6
|
-
* Provides REST API endpoints for creating, listing, and terminating
|
|
7
|
-
* Claude Code sessions.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* import { createSessionHandler } from './session-api';
|
|
11
|
-
* const sessionHandler = createSessionHandler(sessionManager);
|
|
12
|
-
* // Use in HTTP server: if (sessionHandler(req, res)) return;
|
|
13
|
-
*/
|
|
14
|
-
import type { IncomingMessage, ServerResponse } from 'http';
|
|
15
|
-
import { SessionManager } from './session-manager.js';
|
|
16
|
-
/**
|
|
17
|
-
* Default WebSocket port (same as HTTP port)
|
|
18
|
-
*/
|
|
19
|
-
export declare const DEFAULT_WS_PORT: number;
|
|
20
|
-
/**
|
|
21
|
-
* Request body type
|
|
22
|
-
*/
|
|
23
|
-
interface RequestBody {
|
|
24
|
-
projectDir?: string;
|
|
25
|
-
workDir?: string;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Parse request body as JSON
|
|
29
|
-
* @param req - HTTP request
|
|
30
|
-
* @returns Parsed JSON body
|
|
31
|
-
*/
|
|
32
|
-
export declare function readBody(req: IncomingMessage): Promise<RequestBody>;
|
|
33
|
-
/**
|
|
34
|
-
* Extract session ID from URL path
|
|
35
|
-
* @param url - Request URL
|
|
36
|
-
* @returns Session ID or null
|
|
37
|
-
*/
|
|
38
|
-
export declare function extractSessionId(url: string): string | null;
|
|
39
|
-
/**
|
|
40
|
-
* Get WebSocket URL for a session
|
|
41
|
-
* @param req - HTTP request
|
|
42
|
-
* @param sessionId - Session ID
|
|
43
|
-
* @returns WebSocket URL
|
|
44
|
-
*/
|
|
45
|
-
export declare function getWsUrl(req: IncomingMessage, sessionId: string): string;
|
|
46
|
-
/**
|
|
47
|
-
* Session handler function type
|
|
48
|
-
*/
|
|
49
|
-
type SessionHandler = (req: IncomingMessage, res: ServerResponse) => Promise<boolean>;
|
|
50
|
-
/**
|
|
51
|
-
* Create session API request handler
|
|
52
|
-
* @param sessionManager - Session manager instance (will create if not provided)
|
|
53
|
-
* @returns Request handler function
|
|
54
|
-
*/
|
|
55
|
-
export declare function createSessionHandler(sessionManager?: SessionManager | null): SessionHandler;
|
|
56
|
-
export {};
|
|
57
|
-
//# sourceMappingURL=session-api.d.ts.map
|
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Session REST API - HTTP endpoints for session management
|
|
4
|
-
* @module mobile/session-api
|
|
5
|
-
* @version 1.5.0
|
|
6
|
-
*
|
|
7
|
-
* Provides REST API endpoints for creating, listing, and terminating
|
|
8
|
-
* Claude Code sessions.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* import { createSessionHandler } from './session-api';
|
|
12
|
-
* const sessionHandler = createSessionHandler(sessionManager);
|
|
13
|
-
* // Use in HTTP server: if (sessionHandler(req, res)) return;
|
|
14
|
-
*/
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.DEFAULT_WS_PORT = void 0;
|
|
17
|
-
exports.readBody = readBody;
|
|
18
|
-
exports.extractSessionId = extractSessionId;
|
|
19
|
-
exports.getWsUrl = getWsUrl;
|
|
20
|
-
exports.createSessionHandler = createSessionHandler;
|
|
21
|
-
const session_manager_js_1 = require("./session-manager.js");
|
|
22
|
-
const auth_js_1 = require("./auth.js");
|
|
23
|
-
function resolveConfiguredPort() {
|
|
24
|
-
const rawPort = process.env.MAMA_EMBEDDING_PORT || process.env.MAMA_HTTP_PORT || '';
|
|
25
|
-
const parsedPort = parseInt(rawPort, 10);
|
|
26
|
-
if (Number.isInteger(parsedPort) && parsedPort > 0 && parsedPort < 65536) {
|
|
27
|
-
return parsedPort;
|
|
28
|
-
}
|
|
29
|
-
return 3849;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Default WebSocket port (same as HTTP port)
|
|
33
|
-
*/
|
|
34
|
-
exports.DEFAULT_WS_PORT = resolveConfiguredPort();
|
|
35
|
-
/**
|
|
36
|
-
* Parse request body as JSON
|
|
37
|
-
* @param req - HTTP request
|
|
38
|
-
* @returns Parsed JSON body
|
|
39
|
-
*/
|
|
40
|
-
function readBody(req) {
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
let data = '';
|
|
43
|
-
req.on('data', (chunk) => (data += chunk));
|
|
44
|
-
req.on('end', () => {
|
|
45
|
-
try {
|
|
46
|
-
if (!data) {
|
|
47
|
-
resolve({});
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
resolve(JSON.parse(data));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
reject(new Error('Invalid JSON'));
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
req.on('error', reject);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Extract session ID from URL path
|
|
62
|
-
* @param url - Request URL
|
|
63
|
-
* @returns Session ID or null
|
|
64
|
-
*/
|
|
65
|
-
function extractSessionId(url) {
|
|
66
|
-
const match = url.match(/\/api\/sessions\/([^/?]+)/);
|
|
67
|
-
return match ? match[1] : null;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Get WebSocket URL for a session
|
|
71
|
-
* @param req - HTTP request
|
|
72
|
-
* @param sessionId - Session ID
|
|
73
|
-
* @returns WebSocket URL
|
|
74
|
-
*/
|
|
75
|
-
function getWsUrl(req, sessionId) {
|
|
76
|
-
const host = req.headers.host || `localhost:${exports.DEFAULT_WS_PORT}`;
|
|
77
|
-
const protocol = req.headers['x-forwarded-proto'] === 'https' ? 'wss' : 'ws';
|
|
78
|
-
return `${protocol}://${host}/ws?session=${sessionId}`;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Create session API request handler
|
|
82
|
-
* @param sessionManager - Session manager instance (will create if not provided)
|
|
83
|
-
* @returns Request handler function
|
|
84
|
-
*/
|
|
85
|
-
function createSessionHandler(sessionManager = null) {
|
|
86
|
-
// Create session manager if not provided
|
|
87
|
-
const manager = sessionManager || new session_manager_js_1.SessionManager();
|
|
88
|
-
let initialized = false;
|
|
89
|
-
/**
|
|
90
|
-
* Handle session API requests
|
|
91
|
-
* @param req - HTTP request
|
|
92
|
-
* @param res - HTTP response
|
|
93
|
-
* @returns True if request was handled
|
|
94
|
-
*/
|
|
95
|
-
return async function handleSessionRequest(req, res) {
|
|
96
|
-
const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
|
|
97
|
-
const pathname = url.pathname;
|
|
98
|
-
// Only handle /api/session routes (includes /api/sessions and /api/session/create)
|
|
99
|
-
if (!pathname.startsWith('/api/session')) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
// Initialize manager on first request
|
|
103
|
-
if (!initialized) {
|
|
104
|
-
try {
|
|
105
|
-
await manager.initDB();
|
|
106
|
-
initialized = true;
|
|
107
|
-
}
|
|
108
|
-
catch (err) {
|
|
109
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
110
|
-
console.error('[SessionAPI] Failed to initialize:', message);
|
|
111
|
-
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
112
|
-
res.end(JSON.stringify({ error: 'Session manager initialization failed' }));
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// Set common headers
|
|
117
|
-
res.setHeader('Content-Type', 'application/json');
|
|
118
|
-
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
119
|
-
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, DELETE, OPTIONS');
|
|
120
|
-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
|
121
|
-
// Handle CORS preflight
|
|
122
|
-
if (req.method === 'OPTIONS') {
|
|
123
|
-
res.writeHead(204);
|
|
124
|
-
res.end();
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
// Authentication check
|
|
128
|
-
if (!(0, auth_js_1.authenticate)(req)) {
|
|
129
|
-
res.writeHead(401, { 'Content-Type': 'application/json' });
|
|
130
|
-
res.end(JSON.stringify({ error: 'Unauthorized' }));
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
try {
|
|
134
|
-
// GET /api/sessions - List active sessions
|
|
135
|
-
if (pathname === '/api/sessions' && req.method === 'GET') {
|
|
136
|
-
const sessions = await manager.getActiveSessions();
|
|
137
|
-
res.writeHead(200);
|
|
138
|
-
res.end(JSON.stringify({
|
|
139
|
-
sessions: sessions.map((s) => ({
|
|
140
|
-
id: s.id,
|
|
141
|
-
projectDir: s.projectDir,
|
|
142
|
-
status: s.status,
|
|
143
|
-
createdAt: s.createdAt,
|
|
144
|
-
lastActive: s.lastActive,
|
|
145
|
-
isAlive: s.isAlive,
|
|
146
|
-
})),
|
|
147
|
-
}));
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
// POST /api/sessions - Create new session
|
|
151
|
-
// Alias: POST /api/session/create
|
|
152
|
-
if ((pathname === '/api/sessions' || pathname === '/api/session/create') &&
|
|
153
|
-
req.method === 'POST') {
|
|
154
|
-
const body = await readBody(req);
|
|
155
|
-
const projectDir = body.projectDir || body.workDir || '.';
|
|
156
|
-
try {
|
|
157
|
-
const { sessionId } = await manager.createSession(projectDir);
|
|
158
|
-
const wsUrl = getWsUrl(req, sessionId);
|
|
159
|
-
res.writeHead(201);
|
|
160
|
-
res.end(JSON.stringify({
|
|
161
|
-
sessionId,
|
|
162
|
-
wsUrl,
|
|
163
|
-
status: 'active',
|
|
164
|
-
}));
|
|
165
|
-
}
|
|
166
|
-
catch (err) {
|
|
167
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
168
|
-
console.error('[SessionAPI] Failed to create session:', message);
|
|
169
|
-
res.writeHead(500);
|
|
170
|
-
res.end(JSON.stringify({ error: 'Failed to create session', details: message }));
|
|
171
|
-
}
|
|
172
|
-
return true;
|
|
173
|
-
}
|
|
174
|
-
// DELETE /api/sessions/:id - Terminate session
|
|
175
|
-
if (pathname.startsWith('/api/sessions/') && req.method === 'DELETE') {
|
|
176
|
-
const sessionId = extractSessionId(pathname);
|
|
177
|
-
if (!sessionId) {
|
|
178
|
-
res.writeHead(400);
|
|
179
|
-
res.end(JSON.stringify({ error: 'Missing session ID' }));
|
|
180
|
-
return true;
|
|
181
|
-
}
|
|
182
|
-
const terminated = await manager.terminateSession(sessionId);
|
|
183
|
-
if (terminated) {
|
|
184
|
-
res.writeHead(200);
|
|
185
|
-
res.end(JSON.stringify({ success: true, sessionId }));
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
res.writeHead(404);
|
|
189
|
-
res.end(JSON.stringify({ error: 'Session not found', sessionId }));
|
|
190
|
-
}
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
// GET /api/sessions/last-active - Get the most recently active session
|
|
194
|
-
// NOTE: This must come BEFORE the generic :id handler to avoid being matched as an ID
|
|
195
|
-
if (pathname === '/api/sessions/last-active' && req.method === 'GET') {
|
|
196
|
-
const sessions = await manager.getActiveSessions();
|
|
197
|
-
if (sessions.length > 0) {
|
|
198
|
-
// Sort by lastActive descending and get the first one
|
|
199
|
-
const sorted = sessions.sort((a, b) => {
|
|
200
|
-
const aTime = a.lastActive ? new Date(a.lastActive).getTime() : 0;
|
|
201
|
-
const bTime = b.lastActive ? new Date(b.lastActive).getTime() : 0;
|
|
202
|
-
return bTime - aTime;
|
|
203
|
-
});
|
|
204
|
-
const lastSession = sorted[0];
|
|
205
|
-
res.writeHead(200);
|
|
206
|
-
res.end(JSON.stringify({
|
|
207
|
-
id: lastSession.id,
|
|
208
|
-
projectDir: lastSession.projectDir,
|
|
209
|
-
status: lastSession.status,
|
|
210
|
-
createdAt: lastSession.createdAt,
|
|
211
|
-
lastActive: lastSession.lastActive,
|
|
212
|
-
isAlive: lastSession.isAlive,
|
|
213
|
-
}));
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
res.writeHead(404);
|
|
217
|
-
res.end(JSON.stringify({ error: 'No active sessions found' }));
|
|
218
|
-
}
|
|
219
|
-
return true;
|
|
220
|
-
}
|
|
221
|
-
// GET /api/sessions/:id - Get single session (bonus endpoint)
|
|
222
|
-
if (pathname.startsWith('/api/sessions/') && req.method === 'GET') {
|
|
223
|
-
const sessionId = extractSessionId(pathname);
|
|
224
|
-
if (!sessionId) {
|
|
225
|
-
res.writeHead(400);
|
|
226
|
-
res.end(JSON.stringify({ error: 'Missing session ID' }));
|
|
227
|
-
return true;
|
|
228
|
-
}
|
|
229
|
-
const session = manager.getSession(sessionId);
|
|
230
|
-
if (session) {
|
|
231
|
-
res.writeHead(200);
|
|
232
|
-
res.end(JSON.stringify({
|
|
233
|
-
id: sessionId,
|
|
234
|
-
projectDir: session.projectDir,
|
|
235
|
-
status: 'active',
|
|
236
|
-
createdAt: session.createdAt,
|
|
237
|
-
clientId: session.clientId,
|
|
238
|
-
isAlive: session.daemon?.isActive() || false,
|
|
239
|
-
}));
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
res.writeHead(404);
|
|
243
|
-
res.end(JSON.stringify({ error: 'Session not found', sessionId }));
|
|
244
|
-
}
|
|
245
|
-
return true;
|
|
246
|
-
}
|
|
247
|
-
// Unknown /api/sessions route
|
|
248
|
-
res.writeHead(404);
|
|
249
|
-
res.end(JSON.stringify({ error: 'Not found' }));
|
|
250
|
-
return true;
|
|
251
|
-
}
|
|
252
|
-
catch (err) {
|
|
253
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
254
|
-
console.error('[SessionAPI] Error:', message);
|
|
255
|
-
res.writeHead(500);
|
|
256
|
-
res.end(JSON.stringify({ error: 'Internal server error', details: message }));
|
|
257
|
-
return true;
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
//# sourceMappingURL=session-api.js.map
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Session Manager - tracks multiple Claude Code sessions in SQLite
|
|
3
|
-
* @module mobile/session-manager
|
|
4
|
-
* @version 1.5.0
|
|
5
|
-
*
|
|
6
|
-
* Manages session lifecycle including creation, tracking, and termination.
|
|
7
|
-
* Sessions are persisted to SQLite for durability across server restarts.
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* import { SessionManager } from './session-manager';
|
|
11
|
-
* const manager = new SessionManager();
|
|
12
|
-
* await manager.initDB();
|
|
13
|
-
* const { sessionId, daemon } = await manager.createSession('/path/to/project');
|
|
14
|
-
*/
|
|
15
|
-
import { ClaudeDaemon } from './daemon.js';
|
|
16
|
-
/**
|
|
17
|
-
* Default database path
|
|
18
|
-
*/
|
|
19
|
-
export declare const DEFAULT_DB_PATH: string;
|
|
20
|
-
/**
|
|
21
|
-
* Sessions table creation SQL
|
|
22
|
-
*/
|
|
23
|
-
export declare const CREATE_SESSIONS_TABLE: string;
|
|
24
|
-
/**
|
|
25
|
-
* In-memory session data
|
|
26
|
-
*/
|
|
27
|
-
interface MemorySession {
|
|
28
|
-
daemon: ClaudeDaemon;
|
|
29
|
-
clientId: string | null;
|
|
30
|
-
projectDir: string;
|
|
31
|
-
createdAt: string;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Session info returned from getActiveSessions
|
|
35
|
-
*/
|
|
36
|
-
export interface SessionInfo {
|
|
37
|
-
id: string;
|
|
38
|
-
projectDir: string;
|
|
39
|
-
createdAt: string | undefined;
|
|
40
|
-
lastActive: string | undefined;
|
|
41
|
-
status: string;
|
|
42
|
-
pid: number | null;
|
|
43
|
-
clientId: string | null;
|
|
44
|
-
isAlive: boolean;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Create session result
|
|
48
|
-
*/
|
|
49
|
-
export interface CreateSessionResult {
|
|
50
|
-
sessionId: string;
|
|
51
|
-
daemon: ClaudeDaemon;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* SessionManager class - manages Claude Code sessions
|
|
55
|
-
*/
|
|
56
|
-
export declare class SessionManager {
|
|
57
|
-
private dbPath;
|
|
58
|
-
private sessions;
|
|
59
|
-
private db;
|
|
60
|
-
private initialized;
|
|
61
|
-
private cleanupPromise;
|
|
62
|
-
private cleanupHandlersRegistered;
|
|
63
|
-
private handleProcessExit;
|
|
64
|
-
/**
|
|
65
|
-
* Create a new SessionManager instance
|
|
66
|
-
* @param dbPath - Path to SQLite database
|
|
67
|
-
*/
|
|
68
|
-
constructor(dbPath?: string);
|
|
69
|
-
/**
|
|
70
|
-
* Initialize the SQLite database and create sessions table
|
|
71
|
-
*/
|
|
72
|
-
initDB(): Promise<void>;
|
|
73
|
-
/**
|
|
74
|
-
* Create a new Claude Code session
|
|
75
|
-
* @param projectDir - Working directory for the session
|
|
76
|
-
* @returns Session ID and daemon
|
|
77
|
-
*/
|
|
78
|
-
createSession(projectDir: string): Promise<CreateSessionResult>;
|
|
79
|
-
/**
|
|
80
|
-
* Get all active sessions
|
|
81
|
-
* @returns Array of active session info
|
|
82
|
-
*/
|
|
83
|
-
getActiveSessions(): Promise<SessionInfo[]>;
|
|
84
|
-
/**
|
|
85
|
-
* Terminate a session by ID
|
|
86
|
-
* @param sessionId - Session to terminate
|
|
87
|
-
* @returns True if session was terminated
|
|
88
|
-
*/
|
|
89
|
-
terminateSession(sessionId: string): Promise<boolean>;
|
|
90
|
-
/**
|
|
91
|
-
* Get a session by ID
|
|
92
|
-
* @param sessionId - Session ID to look up
|
|
93
|
-
* @returns Session data or undefined
|
|
94
|
-
*/
|
|
95
|
-
getSession(sessionId: string): MemorySession | undefined;
|
|
96
|
-
/**
|
|
97
|
-
* Update session's last active timestamp
|
|
98
|
-
* @param sessionId - Session ID
|
|
99
|
-
*/
|
|
100
|
-
touchSession(sessionId: string): void;
|
|
101
|
-
/**
|
|
102
|
-
* Assign a client to a session
|
|
103
|
-
* @param sessionId - Session ID
|
|
104
|
-
* @param clientId - Client ID
|
|
105
|
-
*/
|
|
106
|
-
assignClient(sessionId: string, clientId: string): void;
|
|
107
|
-
/**
|
|
108
|
-
* Remove client assignment from a session
|
|
109
|
-
* @param sessionId - Session ID
|
|
110
|
-
*/
|
|
111
|
-
unassignClient(sessionId: string): void;
|
|
112
|
-
/**
|
|
113
|
-
* Get session count
|
|
114
|
-
* @returns Number of active sessions
|
|
115
|
-
*/
|
|
116
|
-
getSessionCount(): number;
|
|
117
|
-
/**
|
|
118
|
-
* Terminate all active sessions
|
|
119
|
-
* @returns Number of sessions terminated
|
|
120
|
-
*/
|
|
121
|
-
terminateAll(): Promise<number>;
|
|
122
|
-
/**
|
|
123
|
-
* Setup daemon event handlers
|
|
124
|
-
* @private
|
|
125
|
-
*/
|
|
126
|
-
private _setupDaemonHandlers;
|
|
127
|
-
/**
|
|
128
|
-
* Setup process cleanup handlers
|
|
129
|
-
* @private
|
|
130
|
-
*/
|
|
131
|
-
private _setupProcessCleanup;
|
|
132
|
-
/**
|
|
133
|
-
* Close the database connection
|
|
134
|
-
*/
|
|
135
|
-
close(): void;
|
|
136
|
-
}
|
|
137
|
-
export {};
|
|
138
|
-
//# sourceMappingURL=session-manager.d.ts.map
|