@jungjaehoon/mama-core 2.4.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/068-tool-trace-diagnostics.sql +13 -0
- 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/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 +87 -15
- package/dist/db-adapter/node-sqlite-adapter.js +2045 -568
- 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 +99 -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/commitments.d.ts +188 -0
- package/dist/knowledge/commitments.js +370 -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/judgments.d.ts +118 -0
- package/dist/knowledge/judgments.js +808 -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 +116 -778
- package/dist/mama-api.js +313 -2457
- 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 +155 -0
- package/dist/runtime/drivers/claude-cli-wrapper.js +392 -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 +424 -0
- package/dist/runtime/drivers/persistent-cli-process.js +1543 -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/runtime/model-run-types.d.ts +132 -0
- 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/runtime/tool-trace-store.js +242 -0
- 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 -4
- package/dist/model-runs/tool-trace-store.js +0 -118
- package/dist/model-runs/types.d.ts +0 -72
- 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,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Database lifetime.
|
|
4
|
+
*
|
|
5
|
+
* `openDatabase` returns a handle to one database. It does not register itself
|
|
6
|
+
* anywhere, so two calls give two independent databases and a caller always
|
|
7
|
+
* knows which one it holds. `db-manager.ts` keeps a single handle for the
|
|
8
|
+
* callers that still reach for a module-level connection; nothing here depends
|
|
9
|
+
* on that handle existing.
|
|
10
|
+
*
|
|
11
|
+
* @module storage/database
|
|
12
|
+
*/
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.MIGRATIONS_DIR = void 0;
|
|
18
|
+
exports.isTestMode = isTestMode;
|
|
19
|
+
exports.declareProductionDatabasePath = declareProductionDatabasePath;
|
|
20
|
+
exports.clearProductionDatabasePaths = clearProductionDatabasePaths;
|
|
21
|
+
exports.assertTestProcessIsNotUsingRealDb = assertTestProcessIsNotUsingRealDb;
|
|
22
|
+
exports.resolveAdapterDbPath = resolveAdapterDbPath;
|
|
23
|
+
exports.openDatabase = openDatabase;
|
|
24
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
25
|
+
const index_js_1 = require("../db-adapter/index.js");
|
|
26
|
+
const db_manager_js_1 = require("../db-manager.js");
|
|
27
|
+
const debug_logger_js_1 = require("../debug-logger.js");
|
|
28
|
+
const progress_indicator_js_1 = require("../progress-indicator.js");
|
|
29
|
+
/** Migrations ship beside the compiled output, two levels up from `dist/storage`. */
|
|
30
|
+
exports.MIGRATIONS_DIR = node_path_1.default.join(__dirname, '..', '..', 'db', 'migrations');
|
|
31
|
+
function isTestMode() {
|
|
32
|
+
return Boolean(process.env.MAMA_TEST_MODE || process.env.VITEST || process.env.NODE_ENV === 'test');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A path a consumer states must already be resolved.
|
|
36
|
+
*
|
|
37
|
+
* The core used to expand `~` and `${HOME}` itself, which made it the thing that
|
|
38
|
+
* decides what home means. Two consumers with different homes then got the same
|
|
39
|
+
* answer from a library neither of them configured. Expansion belongs to whoever owns
|
|
40
|
+
* the home directory; this only refuses to guess.
|
|
41
|
+
*/
|
|
42
|
+
function requireResolvedPath(value, source) {
|
|
43
|
+
if (value === '~' || value.startsWith('~/') || value.includes('${HOME}')) {
|
|
44
|
+
throw new Error(`[db-boundary] ${source} is not a resolved path (${value}). ` +
|
|
45
|
+
'Expand it where the home directory is known and state the result.');
|
|
46
|
+
}
|
|
47
|
+
return node_path_1.default.resolve(value);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Databases a product has declared as its live one.
|
|
51
|
+
*
|
|
52
|
+
* The core used to hold one such path itself, `~/.claude/mama-memory.db`, which meant
|
|
53
|
+
* a shared library knew where one product kept its data in order to protect it. Each
|
|
54
|
+
* product declares its own now, and the guard below refuses all of them.
|
|
55
|
+
*/
|
|
56
|
+
const productionDatabasePaths = new Set();
|
|
57
|
+
/**
|
|
58
|
+
* Declare where this product's live database is, as a resolved absolute path.
|
|
59
|
+
* Call once, before opening anything.
|
|
60
|
+
*/
|
|
61
|
+
function declareProductionDatabasePath(value) {
|
|
62
|
+
productionDatabasePaths.add(requireResolvedPath(value, 'the declared production database path'));
|
|
63
|
+
}
|
|
64
|
+
/** Test seam: forget what was declared. */
|
|
65
|
+
function clearProductionDatabasePaths() {
|
|
66
|
+
productionDatabasePaths.clear();
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Refuse, in a test process, to open a database nobody named or one a product
|
|
70
|
+
* declared as live.
|
|
71
|
+
*
|
|
72
|
+
* This used to compare against one hard-coded path, `~/.claude/mama-memory.db`, which
|
|
73
|
+
* meant the core held a product's data location in order to protect it. The rule is
|
|
74
|
+
* the same and says no product's name: a test that did not state where it wanted to
|
|
75
|
+
* write is about to write somewhere it did not choose, and that failure surfaces far
|
|
76
|
+
* from its cause.
|
|
77
|
+
*/
|
|
78
|
+
function assertTestProcessIsNotUsingRealDb(effectivePath, effectivePathSource = 'adapter') {
|
|
79
|
+
if (!isTestMode()) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const configuredPaths = [
|
|
83
|
+
{ name: 'MAMA_DB_PATH', value: process.env.MAMA_DB_PATH },
|
|
84
|
+
{ name: 'MAMA_DATABASE_PATH', value: process.env.MAMA_DATABASE_PATH },
|
|
85
|
+
];
|
|
86
|
+
if (effectivePath) {
|
|
87
|
+
configuredPaths.push({ name: effectivePathSource, value: effectivePath });
|
|
88
|
+
}
|
|
89
|
+
const named = configuredPaths.find((configuredPath) => Boolean(configuredPath.value));
|
|
90
|
+
if (!named) {
|
|
91
|
+
throw new Error('[db-boundary] Refusing to open an unnamed database from a test process. ' +
|
|
92
|
+
'Set MAMA_DB_PATH to a temporary path first.');
|
|
93
|
+
}
|
|
94
|
+
for (const configuredPath of configuredPaths) {
|
|
95
|
+
if (!configuredPath.value) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const resolvedPath = requireResolvedPath(configuredPath.value, configuredPath.name);
|
|
99
|
+
if (productionDatabasePaths.has(resolvedPath)) {
|
|
100
|
+
throw new Error(`[db-boundary] Refusing to open the live database ${resolvedPath} ` +
|
|
101
|
+
`from a test process (${configuredPath.name}=${configuredPath.value}). ` +
|
|
102
|
+
'Set MAMA_DB_PATH to a temporary path first.');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function resolveAdapterDbPath(adapter) {
|
|
107
|
+
if (typeof adapter.getDbPath === 'function') {
|
|
108
|
+
return adapter.getDbPath();
|
|
109
|
+
}
|
|
110
|
+
return adapter.dbPath;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Open one database: connect, migrate, and verify the embedding scheme.
|
|
114
|
+
*
|
|
115
|
+
* Throws if any step fails. Nothing partially opened is returned, so a caller
|
|
116
|
+
* that receives a handle holds a migrated database it can use.
|
|
117
|
+
*/
|
|
118
|
+
async function openDatabase(options = {}) {
|
|
119
|
+
assertTestProcessIsNotUsingRealDb(options.path, 'openDatabase({ path })');
|
|
120
|
+
(0, progress_indicator_js_1.logSearching)('Initializing database...');
|
|
121
|
+
const adapter = (0, index_js_1.createAdapter)(options.path ? { dbPath: options.path } : {});
|
|
122
|
+
assertTestProcessIsNotUsingRealDb(resolveAdapterDbPath(adapter), 'adapter.getDbPath()');
|
|
123
|
+
let connection;
|
|
124
|
+
try {
|
|
125
|
+
connection = await adapter.connect();
|
|
126
|
+
await adapter.runMigrations([
|
|
127
|
+
{ name: 'core', dir: options.migrationsDir ?? exports.MIGRATIONS_DIR },
|
|
128
|
+
...(options.migrations ?? []),
|
|
129
|
+
]);
|
|
130
|
+
// New tables and rows exist only after migrations run.
|
|
131
|
+
if (typeof adapter.reloadVectorCache === 'function') {
|
|
132
|
+
adapter.reloadVectorCache();
|
|
133
|
+
}
|
|
134
|
+
// Fail loud on legacy vectors meeting current code.
|
|
135
|
+
(0, db_manager_js_1.assertEmbeddingSchemeCurrent)(adapter);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
try {
|
|
139
|
+
adapter.disconnect();
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// The open already failed; a disconnect error would only mask it.
|
|
143
|
+
}
|
|
144
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
145
|
+
throw new Error(`Failed to initialize database: ${message}`);
|
|
146
|
+
}
|
|
147
|
+
(0, debug_logger_js_1.info)(`[storage/database] Database opened (${adapter.constructor.name})`);
|
|
148
|
+
(0, progress_indicator_js_1.logComplete)('Database ready');
|
|
149
|
+
return {
|
|
150
|
+
adapter,
|
|
151
|
+
connection,
|
|
152
|
+
dbPath: resolveAdapterDbPath(adapter) ?? `${adapter.constructor.name} (path unavailable)`,
|
|
153
|
+
close: async () => {
|
|
154
|
+
await adapter.disconnect();
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=database.js.map
|
package/package.json
CHANGED
|
@@ -1,53 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jungjaehoon/mama-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "MAMA Core - Shared modules for Memory-Augmented MCP Assistant",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./dist/index.js",
|
|
9
|
-
"./embeddings": "./dist/
|
|
10
|
-
"./embedding-cache": "./dist/embedding-cache.js",
|
|
11
|
-
"./embedding-client": "./dist/embedding-client.js",
|
|
12
|
-
"./embedding-server": "./dist/embedding-server/index.js",
|
|
9
|
+
"./embeddings": "./dist/embedding/embedder.js",
|
|
13
10
|
"./memory/types": "./dist/memory/types.js",
|
|
14
|
-
"./memory-store": "./dist/memory-store.js",
|
|
15
11
|
"./db-manager": "./dist/db-manager.js",
|
|
16
|
-
"./db-adapter": "./dist/db-adapter/index.js",
|
|
17
12
|
"./mama-api": "./dist/mama-api.js",
|
|
18
|
-
"./config-loader": "./dist/config-loader.js",
|
|
19
13
|
"./relevance-scorer": "./dist/relevance-scorer.js",
|
|
20
|
-
"./decision-tracker": "./dist/decision-tracker.js",
|
|
21
14
|
"./debug-logger": "./dist/debug-logger.js",
|
|
22
15
|
"./decision-formatter": "./dist/decision-formatter.js",
|
|
23
|
-
"./ollama-client": "./dist/ollama-client.js",
|
|
24
16
|
"./errors": "./dist/errors.js",
|
|
25
|
-
"./time-formatter": "./dist/time-formatter.js",
|
|
26
|
-
"./outcome-tracker": "./dist/outcome-tracker.js",
|
|
27
|
-
"./query-intent": "./dist/query-intent.js",
|
|
28
|
-
"./test-utils": "./dist/test-utils.js",
|
|
29
|
-
"./entities/store": "./dist/entities/store.js",
|
|
30
|
-
"./entities/candidate-generator": "./dist/entities/candidate-generator.js",
|
|
31
17
|
"./canonicalize": "./dist/canonicalize.js",
|
|
32
|
-
"./
|
|
33
|
-
"./
|
|
34
|
-
"./
|
|
35
|
-
"./cases/timeline-range": "./dist/cases/timeline-range.js",
|
|
36
|
-
"./cases/wiki-page-index": "./dist/cases/wiki-page-index.js",
|
|
37
|
-
"./connectors": "./dist/connectors/event-index.js",
|
|
38
|
-
"./connectors/event-index": "./dist/connectors/event-index.js",
|
|
39
|
-
"./connectors/raw-query": "./dist/connectors/raw-query.js",
|
|
40
|
-
"./connectors/types": "./dist/connectors/types.js",
|
|
41
|
-
"./agent-situation": "./dist/agent-situation/index.js",
|
|
42
|
-
"./agent-graph": "./dist/agent-graph/index.js",
|
|
43
|
-
"./context-compile": "./dist/context-compile/index.js",
|
|
18
|
+
"./connectors": "./dist/knowledge/event-index.js",
|
|
19
|
+
"./connectors/event-index": "./dist/knowledge/event-index.js",
|
|
20
|
+
"./connectors/raw-query": "./dist/knowledge/raw-query.js",
|
|
44
21
|
"./provenance/source-ref": "./dist/provenance/source-ref.js",
|
|
45
|
-
"./
|
|
46
|
-
"./
|
|
47
|
-
"./
|
|
22
|
+
"./registry/store": "./dist/registry/store.js",
|
|
23
|
+
"./operations/owner-action-effects": "./dist/operations/owner-action-effects.js",
|
|
24
|
+
"./knowledge": "./dist/knowledge/index.js",
|
|
25
|
+
"./action-contracts": "./dist/action-contracts.js",
|
|
26
|
+
"./api/catalog": "./dist/api/catalog.js",
|
|
27
|
+
"./api/dispatch": "./dist/api/dispatch.js",
|
|
28
|
+
"./client/client": "./dist/client/client.js",
|
|
29
|
+
"./client/ipc": "./dist/client/ipc.js",
|
|
30
|
+
"./runtime/*": {
|
|
31
|
+
"types": "./dist/runtime/*.d.ts",
|
|
32
|
+
"default": "./dist/runtime/*.js"
|
|
33
|
+
}
|
|
48
34
|
},
|
|
49
35
|
"scripts": {
|
|
50
|
-
"build": "tsc",
|
|
36
|
+
"build": "node scripts/clean-dist.mjs && tsc",
|
|
51
37
|
"build:watch": "tsc --watch",
|
|
52
38
|
"test": "vitest run",
|
|
53
39
|
"test:watch": "vitest watch",
|
|
@@ -83,12 +69,12 @@
|
|
|
83
69
|
"dependencies": {
|
|
84
70
|
"@huggingface/transformers": "^3.8.1",
|
|
85
71
|
"better-sqlite3": "^12.8.0",
|
|
86
|
-
"
|
|
72
|
+
"js-tiktoken": "^1.0.21",
|
|
73
|
+
"minimatch": "^10.1.1"
|
|
87
74
|
},
|
|
88
75
|
"devDependencies": {
|
|
89
76
|
"@types/better-sqlite3": "^7.6.13",
|
|
90
77
|
"@types/node": "^22.0.0",
|
|
91
|
-
"@types/ws": "^8.18.1",
|
|
92
78
|
"typescript": "^5.9.3",
|
|
93
79
|
"vitest": "^1.0.0"
|
|
94
80
|
},
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { AgentGraphAdapter, AttachEntityAliasWithEdgeInput, AttachEntityAliasWithEdgeResult } from './types.js';
|
|
2
|
-
export declare function attachEntityAliasWithEdge(adapter: AgentGraphAdapter, input: AttachEntityAliasWithEdgeInput): AttachEntityAliasWithEdgeResult;
|
|
3
|
-
//# sourceMappingURL=alias-write.d.ts.map
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.attachEntityAliasWithEdge = attachEntityAliasWithEdge;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const canonicalize_js_1 = require("../canonicalize.js");
|
|
6
|
-
const ref_validation_js_1 = require("../edges/ref-validation.js");
|
|
7
|
-
const store_js_1 = require("../edges/store.js");
|
|
8
|
-
const types_js_1 = require("../edges/types.js");
|
|
9
|
-
const normalization_js_1 = require("../entities/normalization.js");
|
|
10
|
-
const store_js_2 = require("../entities/store.js");
|
|
11
|
-
const errors_js_1 = require("./errors.js");
|
|
12
|
-
const TWIN_REF_KIND_SET = new Set(types_js_1.TWIN_REF_KINDS);
|
|
13
|
-
function stableAliasId(input, normalizedLabel) {
|
|
14
|
-
const replayKey = replayIdempotencyKey(input);
|
|
15
|
-
if (replayKey) {
|
|
16
|
-
const hash = (0, node_crypto_1.createHash)('sha256')
|
|
17
|
-
.update(`${input.entity_id}\0${normalizedLabel}\0${replayKey}`, 'utf8')
|
|
18
|
-
.digest('hex')
|
|
19
|
-
.slice(0, 32);
|
|
20
|
-
return `alias_${hash}`;
|
|
21
|
-
}
|
|
22
|
-
return `alias_${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}`;
|
|
23
|
-
}
|
|
24
|
-
function replayIdempotencyKey(input) {
|
|
25
|
-
return input.edge_idempotency_key ?? input.request_idempotency_key;
|
|
26
|
-
}
|
|
27
|
-
function loadAlias(adapter, aliasId) {
|
|
28
|
-
const row = adapter.prepare('SELECT * FROM entity_aliases WHERE id = ?').get(aliasId);
|
|
29
|
-
if (!row) {
|
|
30
|
-
throw new Error(`Entity alias was not written: ${aliasId}`);
|
|
31
|
-
}
|
|
32
|
-
return {
|
|
33
|
-
id: String(row.id),
|
|
34
|
-
entity_id: String(row.entity_id),
|
|
35
|
-
label: String(row.label),
|
|
36
|
-
normalized_label: String(row.normalized_label),
|
|
37
|
-
lang: typeof row.lang === 'string' ? row.lang : null,
|
|
38
|
-
script: typeof row.script === 'string' ? row.script : null,
|
|
39
|
-
label_type: row.label_type,
|
|
40
|
-
source_type: String(row.source_type),
|
|
41
|
-
source_ref: typeof row.source_ref === 'string' ? row.source_ref : null,
|
|
42
|
-
confidence: typeof row.confidence === 'number' ? row.confidence : null,
|
|
43
|
-
status: row.status,
|
|
44
|
-
created_at: Number(row.created_at),
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function normalizeConfidence(value) {
|
|
48
|
-
if (value === undefined || value === null) {
|
|
49
|
-
return 1;
|
|
50
|
-
}
|
|
51
|
-
if (typeof value === 'number' && Number.isFinite(value) && value >= 0 && value <= 1) {
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
|
-
throw new errors_js_1.AgentGraphValidationError(`confidence must be between 0 and 1: ${String(value)}`);
|
|
55
|
-
}
|
|
56
|
-
function selectExistingAliasEdge(adapter, modelRunId, edgeIdempotencyKey) {
|
|
57
|
-
if (!edgeIdempotencyKey) {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
const row = adapter
|
|
61
|
-
.prepare(`
|
|
62
|
-
SELECT *
|
|
63
|
-
FROM twin_edges
|
|
64
|
-
WHERE model_run_id = ?
|
|
65
|
-
AND edge_idempotency_key = ?
|
|
66
|
-
LIMIT 1
|
|
67
|
-
`)
|
|
68
|
-
.get(modelRunId, edgeIdempotencyKey);
|
|
69
|
-
return row ? (0, store_js_1.mapTwinEdgeRow)(row) : null;
|
|
70
|
-
}
|
|
71
|
-
function normalizeSourceRefs(sourceRefs) {
|
|
72
|
-
if (!sourceRefs || sourceRefs.length === 0) {
|
|
73
|
-
return [];
|
|
74
|
-
}
|
|
75
|
-
const refs = [];
|
|
76
|
-
const seen = new Set();
|
|
77
|
-
for (const ref of sourceRefs) {
|
|
78
|
-
if (!ref ||
|
|
79
|
-
typeof ref !== 'object' ||
|
|
80
|
-
typeof ref.kind !== 'string' ||
|
|
81
|
-
typeof ref.id !== 'string' ||
|
|
82
|
-
ref.id.trim().length === 0 ||
|
|
83
|
-
!TWIN_REF_KIND_SET.has(ref.kind)) {
|
|
84
|
-
throw new errors_js_1.AgentGraphValidationError('source_refs must be TwinRef objects with kind and id.');
|
|
85
|
-
}
|
|
86
|
-
const normalized = { kind: ref.kind, id: ref.id.trim() };
|
|
87
|
-
const key = `${normalized.kind}:${normalized.id}`;
|
|
88
|
-
if (!seen.has(key)) {
|
|
89
|
-
seen.add(key);
|
|
90
|
-
refs.push(normalized);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return refs.sort((left, right) => `${left.kind}:${left.id}`.localeCompare(`${right.kind}:${right.id}`));
|
|
94
|
-
}
|
|
95
|
-
function expectedRelationAttrs(alias, sourceRefs) {
|
|
96
|
-
const attrs = {
|
|
97
|
-
alias_id: alias.id,
|
|
98
|
-
label: alias.label,
|
|
99
|
-
normalized_label: alias.normalized_label,
|
|
100
|
-
lang: alias.lang,
|
|
101
|
-
script: alias.script,
|
|
102
|
-
label_type: alias.label_type,
|
|
103
|
-
};
|
|
104
|
-
if (sourceRefs.length > 0) {
|
|
105
|
-
attrs.source_refs = sourceRefs.map((ref) => ({ kind: ref.kind, id: ref.id }));
|
|
106
|
-
}
|
|
107
|
-
return attrs;
|
|
108
|
-
}
|
|
109
|
-
function assertAliasReplayMatches(alias, input, normalized, confidence) {
|
|
110
|
-
const expectedScript = input.script ?? normalized.script;
|
|
111
|
-
const expectedLabelType = input.label_type ?? 'alt';
|
|
112
|
-
const expectedSourceRef = input.source_ref ?? null;
|
|
113
|
-
const matches = alias.entity_id === input.entity_id &&
|
|
114
|
-
alias.label === input.label &&
|
|
115
|
-
alias.normalized_label === normalized.normalized &&
|
|
116
|
-
alias.lang === (input.lang ?? null) &&
|
|
117
|
-
alias.script === expectedScript &&
|
|
118
|
-
alias.label_type === expectedLabelType &&
|
|
119
|
-
alias.source_type === input.source_type &&
|
|
120
|
-
alias.source_ref === expectedSourceRef &&
|
|
121
|
-
alias.confidence === confidence &&
|
|
122
|
-
alias.status === 'active';
|
|
123
|
-
if (!matches) {
|
|
124
|
-
throw new errors_js_1.AgentGraphValidationError(`Conflicting entity alias replay for request idempotency key: ${replayIdempotencyKey(input)}`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
function assertAliasEdgeReplayMatches(edge, input, alias, confidence, edgeIdempotencyKey, sourceRefs) {
|
|
128
|
-
const matches = edge.edge_type === 'alias_of' &&
|
|
129
|
-
edge.subject_ref.kind === 'entity' &&
|
|
130
|
-
edge.subject_ref.id === input.entity_id &&
|
|
131
|
-
edge.object_ref.kind === 'entity' &&
|
|
132
|
-
edge.object_ref.id === input.entity_id &&
|
|
133
|
-
edge.relation_attrs_json === (0, canonicalize_js_1.canonicalizeJSON)(expectedRelationAttrs(alias, sourceRefs)) &&
|
|
134
|
-
edge.confidence === confidence &&
|
|
135
|
-
edge.source === 'agent' &&
|
|
136
|
-
edge.agent_id === input.agent_id &&
|
|
137
|
-
edge.model_run_id === input.model_run_id &&
|
|
138
|
-
edge.envelope_hash === input.envelope_hash &&
|
|
139
|
-
edge.request_idempotency_key === (input.request_idempotency_key ?? null) &&
|
|
140
|
-
edge.edge_idempotency_key === (edgeIdempotencyKey ?? null);
|
|
141
|
-
if (!matches) {
|
|
142
|
-
throw new errors_js_1.AgentGraphValidationError(`Conflicting alias edge replay for request idempotency key: ${replayIdempotencyKey(input)}`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
function insertAliasEdge(adapter, input, alias, confidence, sourceRefs) {
|
|
146
|
-
const edgeIdempotencyKey = replayIdempotencyKey(input);
|
|
147
|
-
const existing = selectExistingAliasEdge(adapter, input.model_run_id, edgeIdempotencyKey);
|
|
148
|
-
const edgeId = `edge_${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}`;
|
|
149
|
-
const relationAttrs = expectedRelationAttrs(alias, sourceRefs);
|
|
150
|
-
const relationAttrsJson = (0, canonicalize_js_1.canonicalizeJSON)(relationAttrs);
|
|
151
|
-
if (existing) {
|
|
152
|
-
assertAliasEdgeReplayMatches(existing, input, alias, confidence, edgeIdempotencyKey, sourceRefs);
|
|
153
|
-
return existing;
|
|
154
|
-
}
|
|
155
|
-
const contentHash = (0, node_crypto_1.createHash)('sha256')
|
|
156
|
-
.update((0, canonicalize_js_1.canonicalizeJSON)({
|
|
157
|
-
edge_type: 'alias_of',
|
|
158
|
-
subject_ref: { kind: 'entity', id: input.entity_id },
|
|
159
|
-
object_ref: { kind: 'entity', id: input.entity_id },
|
|
160
|
-
relation_attrs_json: relationAttrsJson,
|
|
161
|
-
confidence,
|
|
162
|
-
source: 'agent',
|
|
163
|
-
agent_id: input.agent_id,
|
|
164
|
-
model_run_id: input.model_run_id,
|
|
165
|
-
envelope_hash: input.envelope_hash,
|
|
166
|
-
}), 'utf8')
|
|
167
|
-
.digest();
|
|
168
|
-
adapter
|
|
169
|
-
.prepare(`
|
|
170
|
-
INSERT INTO twin_edges (
|
|
171
|
-
edge_id, edge_type, subject_kind, subject_id, object_kind, object_id,
|
|
172
|
-
relation_attrs_json, confidence, source, agent_id, model_run_id, envelope_hash,
|
|
173
|
-
request_idempotency_key, edge_idempotency_key, content_hash, created_at
|
|
174
|
-
)
|
|
175
|
-
VALUES (?, 'alias_of', 'entity', ?, 'entity', ?, ?, ?, 'agent', ?, ?, ?, ?, ?, ?, ?)
|
|
176
|
-
`)
|
|
177
|
-
.run(edgeId, input.entity_id, input.entity_id, relationAttrsJson, confidence, input.agent_id, input.model_run_id, input.envelope_hash, input.request_idempotency_key ?? null, edgeIdempotencyKey ?? null, contentHash, Date.now());
|
|
178
|
-
const row = adapter.prepare('SELECT * FROM twin_edges WHERE edge_id = ?').get(edgeId);
|
|
179
|
-
if (!row) {
|
|
180
|
-
throw new Error(`Entity alias edge was not written: ${edgeId}`);
|
|
181
|
-
}
|
|
182
|
-
return (0, store_js_1.mapTwinEdgeRow)(row);
|
|
183
|
-
}
|
|
184
|
-
function attachEntityAliasWithEdge(adapter, input) {
|
|
185
|
-
const entity = (0, store_js_2.getEntityNode)(input.entity_id, adapter);
|
|
186
|
-
if (!entity || entity.status !== 'active') {
|
|
187
|
-
throw new errors_js_1.AgentGraphValidationError(`Active entity not found: ${input.entity_id}`);
|
|
188
|
-
}
|
|
189
|
-
const visibility = {
|
|
190
|
-
scopes: input.scopes,
|
|
191
|
-
connectors: input.connectors,
|
|
192
|
-
projectRefs: input.project_refs,
|
|
193
|
-
tenantId: input.tenant_id,
|
|
194
|
-
// source_refs are caller-supplied, so this is the surface where naming a raw id from
|
|
195
|
-
// an ungranted channel would bind it to an entity the caller can read back.
|
|
196
|
-
...(input.channels ? { channels: input.channels } : {}),
|
|
197
|
-
};
|
|
198
|
-
const sourceRefs = normalizeSourceRefs(input.source_refs);
|
|
199
|
-
if (sourceRefs.length === 0) {
|
|
200
|
-
throw new errors_js_1.AgentGraphValidationError('source_refs must include at least one visible source.');
|
|
201
|
-
}
|
|
202
|
-
try {
|
|
203
|
-
(0, ref_validation_js_1.assertTwinRefsVisible)(adapter, [{ kind: 'entity', id: input.entity_id }, ...sourceRefs], visibility);
|
|
204
|
-
}
|
|
205
|
-
catch (error) {
|
|
206
|
-
throw new errors_js_1.AgentGraphValidationError(error instanceof Error ? error.message : String(error));
|
|
207
|
-
}
|
|
208
|
-
let normalized;
|
|
209
|
-
try {
|
|
210
|
-
normalized = (0, normalization_js_1.normalizeEntityLabel)(input.label);
|
|
211
|
-
}
|
|
212
|
-
catch (error) {
|
|
213
|
-
throw new errors_js_1.AgentGraphValidationError(error instanceof Error ? error.message : String(error));
|
|
214
|
-
}
|
|
215
|
-
const confidence = normalizeConfidence(input.confidence);
|
|
216
|
-
const aliasId = stableAliasId(input, normalized.normalized);
|
|
217
|
-
const createdAt = Date.now();
|
|
218
|
-
return adapter.transaction(() => {
|
|
219
|
-
adapter
|
|
220
|
-
.prepare(`
|
|
221
|
-
INSERT OR IGNORE INTO entity_aliases (
|
|
222
|
-
id, entity_id, label, normalized_label, lang, script, label_type,
|
|
223
|
-
source_type, source_ref, confidence, status, created_at
|
|
224
|
-
)
|
|
225
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'active', ?)
|
|
226
|
-
`)
|
|
227
|
-
.run(aliasId, input.entity_id, input.label, normalized.normalized, input.lang ?? null, input.script ?? normalized.script, input.label_type ?? 'alt', input.source_type, input.source_ref ?? null, confidence, createdAt);
|
|
228
|
-
const alias = loadAlias(adapter, aliasId);
|
|
229
|
-
assertAliasReplayMatches(alias, input, normalized, confidence);
|
|
230
|
-
const edge = insertAliasEdge(adapter, input, alias, confidence, sourceRefs);
|
|
231
|
-
return { alias, edge };
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
//# sourceMappingURL=alias-write.js.map
|