@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,378 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @fileoverview Session Manager - tracks multiple Claude Code sessions in SQLite
|
|
4
|
-
* @module mobile/session-manager
|
|
5
|
-
* @version 1.5.0
|
|
6
|
-
*
|
|
7
|
-
* Manages session lifecycle including creation, tracking, and termination.
|
|
8
|
-
* Sessions are persisted to SQLite for durability across server restarts.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* import { SessionManager } from './session-manager';
|
|
12
|
-
* const manager = new SessionManager();
|
|
13
|
-
* await manager.initDB();
|
|
14
|
-
* const { sessionId, daemon } = await manager.createSession('/path/to/project');
|
|
15
|
-
*/
|
|
16
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
-
};
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.SessionManager = exports.CREATE_SESSIONS_TABLE = exports.DEFAULT_DB_PATH = void 0;
|
|
21
|
-
const path_1 = __importDefault(require("path"));
|
|
22
|
-
const os_1 = __importDefault(require("os"));
|
|
23
|
-
const daemon_js_1 = require("./daemon.js");
|
|
24
|
-
/**
|
|
25
|
-
* Default database path
|
|
26
|
-
*/
|
|
27
|
-
exports.DEFAULT_DB_PATH = process.env.MAMA_DB_PATH || path_1.default.join(os_1.default.homedir(), '.claude', 'mama-memory.db');
|
|
28
|
-
/**
|
|
29
|
-
* Sessions table creation SQL
|
|
30
|
-
*/
|
|
31
|
-
exports.CREATE_SESSIONS_TABLE = `
|
|
32
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
33
|
-
id TEXT PRIMARY KEY,
|
|
34
|
-
project_path TEXT,
|
|
35
|
-
created_at TEXT DEFAULT (datetime('now')),
|
|
36
|
-
last_active TEXT DEFAULT (datetime('now')),
|
|
37
|
-
status TEXT DEFAULT 'active',
|
|
38
|
-
pid INTEGER,
|
|
39
|
-
client_id TEXT
|
|
40
|
-
)
|
|
41
|
-
`;
|
|
42
|
-
/**
|
|
43
|
-
* Create index for status queries
|
|
44
|
-
*/
|
|
45
|
-
const CREATE_STATUS_INDEX = `
|
|
46
|
-
CREATE INDEX IF NOT EXISTS idx_sessions_status ON sessions(status)
|
|
47
|
-
`;
|
|
48
|
-
/**
|
|
49
|
-
* SessionManager class - manages Claude Code sessions
|
|
50
|
-
*/
|
|
51
|
-
class SessionManager {
|
|
52
|
-
dbPath;
|
|
53
|
-
sessions;
|
|
54
|
-
db;
|
|
55
|
-
initialized;
|
|
56
|
-
cleanupPromise;
|
|
57
|
-
cleanupHandlersRegistered;
|
|
58
|
-
handleProcessExit;
|
|
59
|
-
/**
|
|
60
|
-
* Create a new SessionManager instance
|
|
61
|
-
* @param dbPath - Path to SQLite database
|
|
62
|
-
*/
|
|
63
|
-
constructor(dbPath = exports.DEFAULT_DB_PATH) {
|
|
64
|
-
this.dbPath = dbPath;
|
|
65
|
-
this.sessions = new Map();
|
|
66
|
-
this.db = null;
|
|
67
|
-
this.initialized = false;
|
|
68
|
-
this.cleanupPromise = null;
|
|
69
|
-
this.cleanupHandlersRegistered = false;
|
|
70
|
-
this.handleProcessExit = null;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Initialize the SQLite database and create sessions table
|
|
74
|
-
*/
|
|
75
|
-
async initDB() {
|
|
76
|
-
if (this.initialized) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
try {
|
|
80
|
-
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
81
|
-
const { DatabaseSync } = require('node:sqlite');
|
|
82
|
-
this.db = new DatabaseSync(this.dbPath);
|
|
83
|
-
// Create sessions table if not exists
|
|
84
|
-
this.db.exec(exports.CREATE_SESSIONS_TABLE);
|
|
85
|
-
this.db.exec(CREATE_STATUS_INDEX);
|
|
86
|
-
// Add missing columns for older databases
|
|
87
|
-
for (const col of [
|
|
88
|
-
'pid INTEGER',
|
|
89
|
-
'client_id TEXT',
|
|
90
|
-
"status TEXT DEFAULT 'active'",
|
|
91
|
-
'last_active TEXT',
|
|
92
|
-
'created_at TEXT',
|
|
93
|
-
]) {
|
|
94
|
-
try {
|
|
95
|
-
this.db.exec(`ALTER TABLE sessions ADD COLUMN ${col}`);
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
// Column already exists
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Mark any orphaned 'active' sessions as 'terminated'
|
|
102
|
-
// (from previous server crashes)
|
|
103
|
-
this.db
|
|
104
|
-
.prepare(`
|
|
105
|
-
UPDATE sessions
|
|
106
|
-
SET status = 'terminated', last_active = datetime('now')
|
|
107
|
-
WHERE status = 'active'
|
|
108
|
-
`)
|
|
109
|
-
.run();
|
|
110
|
-
this.initialized = true;
|
|
111
|
-
console.error(`[SessionManager] Database initialized at ${this.dbPath}`);
|
|
112
|
-
// Setup cleanup on process exit
|
|
113
|
-
this._setupProcessCleanup();
|
|
114
|
-
}
|
|
115
|
-
catch (err) {
|
|
116
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
117
|
-
console.error('[SessionManager] Failed to initialize database:', message);
|
|
118
|
-
throw err;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Create a new Claude Code session
|
|
123
|
-
* @param projectDir - Working directory for the session
|
|
124
|
-
* @returns Session ID and daemon
|
|
125
|
-
*/
|
|
126
|
-
async createSession(projectDir) {
|
|
127
|
-
if (!this.initialized) {
|
|
128
|
-
await this.initDB();
|
|
129
|
-
}
|
|
130
|
-
// Generate unique session ID
|
|
131
|
-
const sessionId = `session_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
|
|
132
|
-
// Create daemon instance
|
|
133
|
-
const daemon = new daemon_js_1.ClaudeDaemon(projectDir, sessionId);
|
|
134
|
-
try {
|
|
135
|
-
// Spawn the daemon
|
|
136
|
-
await daemon.spawn();
|
|
137
|
-
// Insert into database
|
|
138
|
-
const stmt = this.db.prepare(`
|
|
139
|
-
INSERT INTO sessions (id, project_path, status, pid)
|
|
140
|
-
VALUES (?, ?, 'active', ?)
|
|
141
|
-
`);
|
|
142
|
-
stmt.run(sessionId, projectDir, daemon.getPid());
|
|
143
|
-
// Store in memory map
|
|
144
|
-
this.sessions.set(sessionId, {
|
|
145
|
-
daemon,
|
|
146
|
-
clientId: null,
|
|
147
|
-
projectDir,
|
|
148
|
-
createdAt: new Date().toISOString(),
|
|
149
|
-
});
|
|
150
|
-
// Setup daemon event handlers
|
|
151
|
-
this._setupDaemonHandlers(sessionId, daemon);
|
|
152
|
-
console.error(`[SessionManager] Session ${sessionId} created for ${projectDir}`);
|
|
153
|
-
return { sessionId, daemon };
|
|
154
|
-
}
|
|
155
|
-
catch (err) {
|
|
156
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
157
|
-
console.error(`[SessionManager] Failed to create session:`, message);
|
|
158
|
-
// Cleanup on failure
|
|
159
|
-
daemon.kill();
|
|
160
|
-
throw err;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Get all active sessions
|
|
165
|
-
* @returns Array of active session info
|
|
166
|
-
*/
|
|
167
|
-
async getActiveSessions() {
|
|
168
|
-
if (!this.initialized) {
|
|
169
|
-
await this.initDB();
|
|
170
|
-
}
|
|
171
|
-
const stmt = this.db.prepare(`
|
|
172
|
-
SELECT id, project_path, created_at, last_active, status, pid, client_id
|
|
173
|
-
FROM sessions
|
|
174
|
-
WHERE status = 'active'
|
|
175
|
-
ORDER BY created_at DESC
|
|
176
|
-
`);
|
|
177
|
-
const rows = stmt.all();
|
|
178
|
-
// Enrich with in-memory data
|
|
179
|
-
return rows.map((row) => {
|
|
180
|
-
const memSession = this.sessions.get(row.id);
|
|
181
|
-
return {
|
|
182
|
-
id: row.id,
|
|
183
|
-
projectDir: row.project_path ?? '',
|
|
184
|
-
createdAt: row.created_at,
|
|
185
|
-
lastActive: row.last_active,
|
|
186
|
-
status: row.status,
|
|
187
|
-
pid: row.pid,
|
|
188
|
-
clientId: row.client_id,
|
|
189
|
-
isAlive: memSession?.daemon?.isActive() || false,
|
|
190
|
-
};
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Terminate a session by ID
|
|
195
|
-
* @param sessionId - Session to terminate
|
|
196
|
-
* @returns True if session was terminated
|
|
197
|
-
*/
|
|
198
|
-
async terminateSession(sessionId) {
|
|
199
|
-
if (!this.initialized) {
|
|
200
|
-
await this.initDB();
|
|
201
|
-
}
|
|
202
|
-
const session = this.sessions.get(sessionId);
|
|
203
|
-
if (session) {
|
|
204
|
-
// Kill the daemon
|
|
205
|
-
if (session.daemon) {
|
|
206
|
-
session.daemon.kill();
|
|
207
|
-
}
|
|
208
|
-
// Remove from memory
|
|
209
|
-
this.sessions.delete(sessionId);
|
|
210
|
-
}
|
|
211
|
-
// Update database
|
|
212
|
-
const stmt = this.db.prepare(`
|
|
213
|
-
UPDATE sessions
|
|
214
|
-
SET status = 'terminated', last_active = datetime('now')
|
|
215
|
-
WHERE id = ?
|
|
216
|
-
`);
|
|
217
|
-
const result = stmt.run(sessionId);
|
|
218
|
-
console.error(`[SessionManager] Session ${sessionId} terminated`);
|
|
219
|
-
return result.changes > 0;
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Get a session by ID
|
|
223
|
-
* @param sessionId - Session ID to look up
|
|
224
|
-
* @returns Session data or undefined
|
|
225
|
-
*/
|
|
226
|
-
getSession(sessionId) {
|
|
227
|
-
return this.sessions.get(sessionId);
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Update session's last active timestamp
|
|
231
|
-
* @param sessionId - Session ID
|
|
232
|
-
*/
|
|
233
|
-
touchSession(sessionId) {
|
|
234
|
-
if (!this.db || !this.initialized) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
const stmt = this.db.prepare(`
|
|
238
|
-
UPDATE sessions
|
|
239
|
-
SET last_active = datetime('now')
|
|
240
|
-
WHERE id = ?
|
|
241
|
-
`);
|
|
242
|
-
stmt.run(sessionId);
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Assign a client to a session
|
|
246
|
-
* @param sessionId - Session ID
|
|
247
|
-
* @param clientId - Client ID
|
|
248
|
-
*/
|
|
249
|
-
assignClient(sessionId, clientId) {
|
|
250
|
-
const session = this.sessions.get(sessionId);
|
|
251
|
-
if (session) {
|
|
252
|
-
session.clientId = clientId;
|
|
253
|
-
}
|
|
254
|
-
if (this.db && this.initialized) {
|
|
255
|
-
const stmt = this.db.prepare(`
|
|
256
|
-
UPDATE sessions
|
|
257
|
-
SET client_id = ?
|
|
258
|
-
WHERE id = ?
|
|
259
|
-
`);
|
|
260
|
-
stmt.run(clientId, sessionId);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Remove client assignment from a session
|
|
265
|
-
* @param sessionId - Session ID
|
|
266
|
-
*/
|
|
267
|
-
unassignClient(sessionId) {
|
|
268
|
-
const session = this.sessions.get(sessionId);
|
|
269
|
-
if (session) {
|
|
270
|
-
session.clientId = null;
|
|
271
|
-
}
|
|
272
|
-
if (this.db && this.initialized) {
|
|
273
|
-
const stmt = this.db.prepare(`
|
|
274
|
-
UPDATE sessions
|
|
275
|
-
SET client_id = NULL
|
|
276
|
-
WHERE id = ?
|
|
277
|
-
`);
|
|
278
|
-
stmt.run(sessionId);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Get session count
|
|
283
|
-
* @returns Number of active sessions
|
|
284
|
-
*/
|
|
285
|
-
getSessionCount() {
|
|
286
|
-
return this.sessions.size;
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Terminate all active sessions
|
|
290
|
-
* @returns Number of sessions terminated
|
|
291
|
-
*/
|
|
292
|
-
async terminateAll() {
|
|
293
|
-
const sessionIds = Array.from(this.sessions.keys());
|
|
294
|
-
let count = 0;
|
|
295
|
-
for (const sessionId of sessionIds) {
|
|
296
|
-
if (await this.terminateSession(sessionId)) {
|
|
297
|
-
count++;
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
return count;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Setup daemon event handlers
|
|
304
|
-
* @private
|
|
305
|
-
*/
|
|
306
|
-
_setupDaemonHandlers(sessionId, daemon) {
|
|
307
|
-
daemon.on('exit', () => {
|
|
308
|
-
// Update database on daemon exit
|
|
309
|
-
if (this.db && this.initialized) {
|
|
310
|
-
const stmt = this.db.prepare(`
|
|
311
|
-
UPDATE sessions
|
|
312
|
-
SET status = 'terminated', last_active = datetime('now')
|
|
313
|
-
WHERE id = ?
|
|
314
|
-
`);
|
|
315
|
-
stmt.run(sessionId);
|
|
316
|
-
}
|
|
317
|
-
// Remove from memory
|
|
318
|
-
this.sessions.delete(sessionId);
|
|
319
|
-
console.error(`[SessionManager] Session ${sessionId} daemon exited, cleaned up`);
|
|
320
|
-
});
|
|
321
|
-
daemon.on('error', (err) => {
|
|
322
|
-
console.error(`[SessionManager] Session ${sessionId} daemon error:`, err.error);
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
/**
|
|
326
|
-
* Setup process cleanup handlers
|
|
327
|
-
* @private
|
|
328
|
-
*/
|
|
329
|
-
_setupProcessCleanup() {
|
|
330
|
-
if (this.cleanupHandlersRegistered) {
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
const cleanup = () => {
|
|
334
|
-
if (this.cleanupPromise) {
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
if (this.handleProcessExit) {
|
|
338
|
-
process.off('exit', this.handleProcessExit);
|
|
339
|
-
}
|
|
340
|
-
this.cleanupPromise = Promise.resolve();
|
|
341
|
-
console.error('[SessionManager] Process exiting, cleaning up sessions...');
|
|
342
|
-
if (this.db && this.initialized) {
|
|
343
|
-
for (const [sessionId, session] of this.sessions.entries()) {
|
|
344
|
-
try {
|
|
345
|
-
session.daemon.kill();
|
|
346
|
-
}
|
|
347
|
-
catch {
|
|
348
|
-
// Best effort - process is already exiting.
|
|
349
|
-
}
|
|
350
|
-
this.sessions.delete(sessionId);
|
|
351
|
-
const stmt = this.db.prepare(`
|
|
352
|
-
UPDATE sessions
|
|
353
|
-
SET status = 'terminated', last_active = datetime('now')
|
|
354
|
-
WHERE id = ?
|
|
355
|
-
`);
|
|
356
|
-
stmt.run(sessionId);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
this.close();
|
|
360
|
-
};
|
|
361
|
-
this.handleProcessExit = cleanup;
|
|
362
|
-
process.on('exit', this.handleProcessExit);
|
|
363
|
-
this.cleanupHandlersRegistered = true;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* Close the database connection
|
|
367
|
-
*/
|
|
368
|
-
close() {
|
|
369
|
-
if (this.db) {
|
|
370
|
-
const db = this.db;
|
|
371
|
-
this.db = null;
|
|
372
|
-
this.initialized = false;
|
|
373
|
-
db.close();
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
exports.SessionManager = SessionManager;
|
|
378
|
-
//# sourceMappingURL=session-manager.js.map
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview WebSocket Handler - MessageRouter-based real-time communication
|
|
3
|
-
* @module mobile/websocket-handler
|
|
4
|
-
* @version 2.0.0
|
|
5
|
-
*
|
|
6
|
-
* Handles WebSocket connections for mobile clients, using MessageRouter
|
|
7
|
-
* for unified message processing (same as Discord/Slack gateways).
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* import { createWebSocketHandler } from './websocket-handler';
|
|
11
|
-
* const wsHandler = createWebSocketHandler({
|
|
12
|
-
* httpServer,
|
|
13
|
-
* messageRouter,
|
|
14
|
-
* sessionStore,
|
|
15
|
-
* authToken: process.env.MAMA_AUTH_TOKEN
|
|
16
|
-
* });
|
|
17
|
-
*/
|
|
18
|
-
import { WebSocketServer, WebSocket } from 'ws';
|
|
19
|
-
import type { Server as HTTPServer } from 'http';
|
|
20
|
-
/**
|
|
21
|
-
* Message router interface
|
|
22
|
-
*/
|
|
23
|
-
interface StreamCallbacks {
|
|
24
|
-
onDelta?: (text: string) => void;
|
|
25
|
-
onToolUse?: (toolName: string, input: Record<string, unknown>) => void;
|
|
26
|
-
onToolComplete?: (toolName: string, toolUseId: string, isError: boolean) => void;
|
|
27
|
-
onFinal?: (response: unknown) => void;
|
|
28
|
-
onError?: (error: Error) => void;
|
|
29
|
-
}
|
|
30
|
-
interface MessageRouter {
|
|
31
|
-
process(message: NormalizedMessage, options?: {
|
|
32
|
-
onQueued?: () => void;
|
|
33
|
-
onStream?: StreamCallbacks;
|
|
34
|
-
}): Promise<RouterResult>;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Session store interface
|
|
38
|
-
*/
|
|
39
|
-
interface SessionStore {
|
|
40
|
-
getHistoryByChannel?(source: string, channelId: string): Array<{
|
|
41
|
-
user?: string;
|
|
42
|
-
bot?: string;
|
|
43
|
-
timestamp?: number;
|
|
44
|
-
}>;
|
|
45
|
-
getHistory?(sessionId: string): Array<{
|
|
46
|
-
user?: string;
|
|
47
|
-
bot?: string;
|
|
48
|
-
timestamp?: number;
|
|
49
|
-
}>;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Normalized message for router
|
|
53
|
-
*/
|
|
54
|
-
interface NormalizedMessage {
|
|
55
|
-
source: string;
|
|
56
|
-
channelId: string;
|
|
57
|
-
channelName: string;
|
|
58
|
-
userId: string;
|
|
59
|
-
text: string;
|
|
60
|
-
contentBlocks?: ContentBlock[];
|
|
61
|
-
metadata: {
|
|
62
|
-
clientId: string;
|
|
63
|
-
sessionId?: string;
|
|
64
|
-
osAgentMode?: boolean;
|
|
65
|
-
timestamp: number;
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Content block types
|
|
70
|
-
*/
|
|
71
|
-
interface ImageContentBlock {
|
|
72
|
-
type: 'image';
|
|
73
|
-
source: {
|
|
74
|
-
type: 'base64';
|
|
75
|
-
media_type: string;
|
|
76
|
-
data: string;
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
interface TextContentBlock {
|
|
80
|
-
type: 'text';
|
|
81
|
-
text: string;
|
|
82
|
-
}
|
|
83
|
-
type ContentBlock = ImageContentBlock | TextContentBlock;
|
|
84
|
-
/**
|
|
85
|
-
* Router result
|
|
86
|
-
*/
|
|
87
|
-
interface RouterResult {
|
|
88
|
-
response: string;
|
|
89
|
-
sessionId: string;
|
|
90
|
-
duration: number;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Client info stored in clients Map
|
|
94
|
-
*/
|
|
95
|
-
interface ClientInfo {
|
|
96
|
-
clientId: string;
|
|
97
|
-
userId: string;
|
|
98
|
-
ws: WebSocket;
|
|
99
|
-
isAlive: boolean;
|
|
100
|
-
connectedAt: string;
|
|
101
|
-
sessionId?: string;
|
|
102
|
-
osAgentMode?: boolean;
|
|
103
|
-
language?: string;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* WebSocket handler options
|
|
107
|
-
*/
|
|
108
|
-
export interface WebSocketHandlerOptions {
|
|
109
|
-
httpServer: HTTPServer;
|
|
110
|
-
messageRouter: MessageRouter;
|
|
111
|
-
sessionStore: SessionStore;
|
|
112
|
-
authToken?: string;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Extended WebSocketServer with helper methods
|
|
116
|
-
*/
|
|
117
|
-
type ExtendedWebSocketServer = WebSocketServer & {
|
|
118
|
-
getClients: () => Map<string, ClientInfo>;
|
|
119
|
-
getClientCount: () => number;
|
|
120
|
-
};
|
|
121
|
-
/**
|
|
122
|
-
* Create WebSocket handler with MessageRouter integration
|
|
123
|
-
*/
|
|
124
|
-
export declare function createWebSocketHandler({ httpServer, messageRouter, sessionStore, authToken: _authToken, }: WebSocketHandlerOptions): ExtendedWebSocketServer;
|
|
125
|
-
/**
|
|
126
|
-
* WebSocketHandler class (backwards compatibility)
|
|
127
|
-
* @deprecated Use createWebSocketHandler() instead
|
|
128
|
-
*/
|
|
129
|
-
export declare class WebSocketHandler {
|
|
130
|
-
private wss;
|
|
131
|
-
constructor(httpServer: HTTPServer, options: Partial<WebSocketHandlerOptions>);
|
|
132
|
-
getClients(): Map<string, ClientInfo>;
|
|
133
|
-
getClientCount(): number;
|
|
134
|
-
close(): void;
|
|
135
|
-
}
|
|
136
|
-
export {};
|
|
137
|
-
//# sourceMappingURL=websocket-handler.d.ts.map
|