@jungjaehoon/mama-core 2.4.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/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 +1968 -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/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 +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 +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/{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
package/dist/decision-tracker.js
DELETED
|
@@ -1,481 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* MAMA (Memory-Augmented MCP Architecture) - Decision Tracker
|
|
4
|
-
*
|
|
5
|
-
* Learn and store decisions with graph relationships
|
|
6
|
-
* Tasks: 3.1-3.9 (Learn decision, ID generation, supersedes edges, refinement, embeddings)
|
|
7
|
-
* AC #1: Decision stored with outcome=NULL, confidence from LLM
|
|
8
|
-
* AC #2: Supersedes relationship creation
|
|
9
|
-
* AC #5: Multi-parent refinement with confidence calculation
|
|
10
|
-
*
|
|
11
|
-
* Updated for PostgreSQL compatibility via db-manager
|
|
12
|
-
*
|
|
13
|
-
* @module decision-tracker
|
|
14
|
-
* @version 2.0
|
|
15
|
-
* @date 2025-11-17
|
|
16
|
-
*/
|
|
17
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.VALID_EDGE_TYPES = void 0;
|
|
19
|
-
exports.generateDecisionId = generateDecisionId;
|
|
20
|
-
exports.getPreviousDecision = getPreviousDecision;
|
|
21
|
-
exports.createEdge = createEdge;
|
|
22
|
-
exports.createSupersedesEdge = createSupersedesEdge;
|
|
23
|
-
exports.markSuperseded = markSuperseded;
|
|
24
|
-
exports.calculateCombinedConfidence = calculateCombinedConfidence;
|
|
25
|
-
exports.detectRefinement = detectRefinement;
|
|
26
|
-
exports.parseReasoningForRelationships = parseReasoningForRelationships;
|
|
27
|
-
exports.createEdgesFromReasoning = createEdgesFromReasoning;
|
|
28
|
-
exports.learnDecision = learnDecision;
|
|
29
|
-
exports.updateConfidence = updateConfidence;
|
|
30
|
-
const debug_logger_js_1 = require("./debug-logger.js");
|
|
31
|
-
const memory_store_js_1 = require("./memory-store.js");
|
|
32
|
-
// ════════════════════════════════════════════════════════════════════════════
|
|
33
|
-
// Story 2.1: Extended Edge Types
|
|
34
|
-
// ════════════════════════════════════════════════════════════════════════════
|
|
35
|
-
// Valid relationship types for decision_edges
|
|
36
|
-
// Original: supersedes, refines, contradicts
|
|
37
|
-
// v1.3 Extension: builds_on, debates, synthesizes
|
|
38
|
-
exports.VALID_EDGE_TYPES = [
|
|
39
|
-
'supersedes', // Original: New decision replaces old one
|
|
40
|
-
'refines', // Original: Decision refines another
|
|
41
|
-
'contradicts', // Original: Decision contradicts another
|
|
42
|
-
'builds_on', // v1.3: Extends existing decision with new insights
|
|
43
|
-
'debates', // v1.3: Presents counter-argument with evidence
|
|
44
|
-
'synthesizes', // v1.3: Merges multiple decisions into unified approach
|
|
45
|
-
];
|
|
46
|
-
/**
|
|
47
|
-
* Generate decision ID
|
|
48
|
-
*
|
|
49
|
-
* Task 3.2: Generate decision ID: `decision_${topic}_${timestamp}`
|
|
50
|
-
*
|
|
51
|
-
* @param topic - Decision topic
|
|
52
|
-
* @returns Decision ID
|
|
53
|
-
*/
|
|
54
|
-
function generateDecisionId(topic) {
|
|
55
|
-
// Sanitize topic: remove spaces, lowercase, max 50 chars
|
|
56
|
-
const sanitized = topic
|
|
57
|
-
.toLowerCase()
|
|
58
|
-
.replace(/\s+/g, '_')
|
|
59
|
-
.replace(/[^a-z0-9_]/g, '')
|
|
60
|
-
.substring(0, 50);
|
|
61
|
-
const timestamp = Date.now();
|
|
62
|
-
const random = Math.random().toString(36).substring(2, 6);
|
|
63
|
-
return `decision_${sanitized}_${timestamp}_${random}`;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Check for previous decision on same topic
|
|
67
|
-
*
|
|
68
|
-
* Task 3.3: Query decisions table WHERE topic=? AND superseded_by IS NULL
|
|
69
|
-
* AC #2: Find previous decision to create supersedes relationship
|
|
70
|
-
*
|
|
71
|
-
* @param topic - Decision topic
|
|
72
|
-
* @returns Previous decision or null
|
|
73
|
-
*/
|
|
74
|
-
async function getPreviousDecision(topic) {
|
|
75
|
-
const adapter = (0, memory_store_js_1.getAdapter)();
|
|
76
|
-
try {
|
|
77
|
-
const stmt = adapter.prepare(`
|
|
78
|
-
SELECT * FROM decisions
|
|
79
|
-
WHERE topic = ? AND superseded_by IS NULL
|
|
80
|
-
ORDER BY created_at DESC
|
|
81
|
-
LIMIT 1
|
|
82
|
-
`);
|
|
83
|
-
const previous = stmt.get(topic);
|
|
84
|
-
return previous || null;
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
88
|
-
throw new Error(`Failed to query previous decision: ${message}`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Create a decision edge with specified relationship type
|
|
93
|
-
*
|
|
94
|
-
* Story 2.1: Generic edge creation supporting all relationship types
|
|
95
|
-
*
|
|
96
|
-
* @param fromId - Source decision ID
|
|
97
|
-
* @param toId - Target decision ID
|
|
98
|
-
* @param relationship - Edge type (supersedes, builds_on, debates, synthesizes, etc.)
|
|
99
|
-
* @param reason - Reason for the relationship
|
|
100
|
-
* @returns Success status
|
|
101
|
-
*/
|
|
102
|
-
async function createEdge(fromId, toId, relationship, reason) {
|
|
103
|
-
const adapter = (0, memory_store_js_1.getAdapter)();
|
|
104
|
-
// Story 2.1: Runtime validation of edge types
|
|
105
|
-
if (!exports.VALID_EDGE_TYPES.includes(relationship)) {
|
|
106
|
-
throw new Error(`Invalid edge type: "${relationship}". Valid types: ${exports.VALID_EDGE_TYPES.join(', ')}`);
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
// Note: SQLite CHECK constraint only allows supersedes/refines/contradicts
|
|
110
|
-
// New types (builds_on, debates, synthesizes) bypass CHECK via runtime validation
|
|
111
|
-
// The INSERT will fail for new types due to CHECK constraint
|
|
112
|
-
// WORKAROUND: Use PRAGMA ignore_check_constraints or recreate table
|
|
113
|
-
// For now, we'll catch the error and handle gracefully
|
|
114
|
-
// Story 2.1: LLM auto-detected edges are approved by default (approved_by_user=1)
|
|
115
|
-
// This allows them to appear in search results via querySemanticEdges
|
|
116
|
-
const stmt = adapter.prepare(`
|
|
117
|
-
INSERT OR REPLACE INTO decision_edges (from_id, to_id, relationship, reason, created_at, created_by, approved_by_user)
|
|
118
|
-
VALUES (?, ?, ?, ?, ?, 'llm', 1)
|
|
119
|
-
`);
|
|
120
|
-
stmt.run(fromId, toId, relationship, reason, Date.now());
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
125
|
-
// Handle CHECK constraint failure for new edge types
|
|
126
|
-
if (message.includes('CHECK constraint failed')) {
|
|
127
|
-
(0, debug_logger_js_1.info)(`[decision-tracker] Edge type "${relationship}" not yet supported in schema, skipping edge creation`);
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
throw new Error(`Failed to create ${relationship} edge: ${message}`);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Create supersedes edge
|
|
135
|
-
*
|
|
136
|
-
* Task 3.5: Create supersedes edge (INSERT INTO decision_edges)
|
|
137
|
-
* AC #2: Supersedes relationship creation
|
|
138
|
-
*
|
|
139
|
-
* @param fromId - New decision ID
|
|
140
|
-
* @param toId - Previous decision ID
|
|
141
|
-
* @param reason - Reason for superseding
|
|
142
|
-
*/
|
|
143
|
-
async function createSupersedesEdge(fromId, toId, reason) {
|
|
144
|
-
return createEdge(fromId, toId, 'supersedes', reason);
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Update previous decision's superseded_by field
|
|
148
|
-
*
|
|
149
|
-
* Task 3.5: Update previous decision's superseded_by field
|
|
150
|
-
* AC #2: Previous decision's superseded_by field updated
|
|
151
|
-
*
|
|
152
|
-
* @param previousId - Previous decision ID
|
|
153
|
-
* @param newId - New decision ID
|
|
154
|
-
*/
|
|
155
|
-
async function markSuperseded(previousId, newId) {
|
|
156
|
-
const adapter = (0, memory_store_js_1.getAdapter)();
|
|
157
|
-
try {
|
|
158
|
-
const stmt = adapter.prepare(`
|
|
159
|
-
UPDATE decisions
|
|
160
|
-
SET superseded_by = ?, updated_at = ?
|
|
161
|
-
WHERE id = ?
|
|
162
|
-
`);
|
|
163
|
-
stmt.run(newId, Date.now(), previousId);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
167
|
-
throw new Error(`Failed to mark decision as superseded: ${message}`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Calculate combined confidence (Bayesian update)
|
|
172
|
-
*
|
|
173
|
-
* Task 3.6: Calculate combined confidence for multi-parent refinement
|
|
174
|
-
* AC #5: Confidence score calculated based on history
|
|
175
|
-
*
|
|
176
|
-
* @param prior - Prior confidence
|
|
177
|
-
* @param parents - Parent decisions
|
|
178
|
-
* @returns Updated confidence (0.0-1.0)
|
|
179
|
-
*/
|
|
180
|
-
function calculateCombinedConfidence(prior, parents) {
|
|
181
|
-
if (!parents || parents.length === 0) {
|
|
182
|
-
return prior;
|
|
183
|
-
}
|
|
184
|
-
// Bayesian update: Average parent confidences + prior
|
|
185
|
-
const parentConfidences = parents.map((p) => p.confidence ?? 0.5);
|
|
186
|
-
const avgParentConfidence = parentConfidences.reduce((a, b) => a + b, 0) / parentConfidences.length;
|
|
187
|
-
// Weighted average: 60% prior, 40% parent history
|
|
188
|
-
const combined = prior * 0.6 + avgParentConfidence * 0.4;
|
|
189
|
-
// Clamp to [0.0, 1.0]
|
|
190
|
-
return Math.max(0, Math.min(1, combined));
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Detect multi-parent refinement
|
|
194
|
-
*
|
|
195
|
-
* Task 3.6: Detect if new decision refines multiple previous decisions
|
|
196
|
-
* AC #5: Multi-parent refinement
|
|
197
|
-
*
|
|
198
|
-
* @param _detection - Decision detection result
|
|
199
|
-
* @param _sessionContext - Session context
|
|
200
|
-
* @returns Array of parent decision IDs or null
|
|
201
|
-
*/
|
|
202
|
-
function detectRefinement(_detection, _sessionContext) {
|
|
203
|
-
// Refinement detection not implemented; currently returns null for single-parent only.
|
|
204
|
-
// Multi-parent refinement detection would analyze session context for references
|
|
205
|
-
// to multiple decisions (e.g., "combine", "merge", user mentioning multiple topics).
|
|
206
|
-
return null;
|
|
207
|
-
}
|
|
208
|
-
// ════════════════════════════════════════════════════════════════════════════
|
|
209
|
-
// Story 2.2: Reasoning Field Parsing
|
|
210
|
-
// ════════════════════════════════════════════════════════════════════════════
|
|
211
|
-
/**
|
|
212
|
-
* Parse reasoning field for relationship references
|
|
213
|
-
*
|
|
214
|
-
* Story 2.2: Detect patterns like:
|
|
215
|
-
* - builds_on: <decision_id>
|
|
216
|
-
* - debates: <decision_id>
|
|
217
|
-
* - synthesizes: [id1, id2]
|
|
218
|
-
*
|
|
219
|
-
* @param reasoning - Decision reasoning text
|
|
220
|
-
* @returns Detected relationships
|
|
221
|
-
*/
|
|
222
|
-
function parseReasoningForRelationships(reasoning) {
|
|
223
|
-
if (!reasoning || typeof reasoning !== 'string') {
|
|
224
|
-
return [];
|
|
225
|
-
}
|
|
226
|
-
const relationships = [];
|
|
227
|
-
// Pattern 1: builds_on: <id> (allows optional markdown **bold**)
|
|
228
|
-
const buildsOnMatch = reasoning.match(/\*{0,2}builds_on\*{0,2}:\*{0,2}\s*(decision_[a-z0-9_]+)/gi);
|
|
229
|
-
if (buildsOnMatch) {
|
|
230
|
-
buildsOnMatch.forEach((match) => {
|
|
231
|
-
const id = match.replace(/\*{0,2}builds_on\*{0,2}:\*{0,2}\s*/i, '').trim();
|
|
232
|
-
if (id) {
|
|
233
|
-
relationships.push({ type: 'builds_on', targetIds: [id] });
|
|
234
|
-
}
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
// Pattern 2: debates: <id> (allows optional markdown **bold**)
|
|
238
|
-
const debatesMatch = reasoning.match(/\*{0,2}debates\*{0,2}:\*{0,2}\s*(decision_[a-z0-9_]+)/gi);
|
|
239
|
-
if (debatesMatch) {
|
|
240
|
-
debatesMatch.forEach((match) => {
|
|
241
|
-
const id = match.replace(/\*{0,2}debates\*{0,2}:\*{0,2}\s*/i, '').trim();
|
|
242
|
-
if (id) {
|
|
243
|
-
relationships.push({ type: 'debates', targetIds: [id] });
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
}
|
|
247
|
-
// Pattern 3: synthesizes: [id1, id2] (allows optional markdown **bold**)
|
|
248
|
-
const synthesizesMatch = reasoning.match(/\*{0,2}synthesizes\*{0,2}:\*{0,2}\s*\[?\s*(decision_[a-z0-9_]+(?:\s*,\s*decision_[a-z0-9_]+)*)\s*\]?/gi);
|
|
249
|
-
if (synthesizesMatch) {
|
|
250
|
-
synthesizesMatch.forEach((match) => {
|
|
251
|
-
const idsStr = match
|
|
252
|
-
.replace(/\*{0,2}synthesizes\*{0,2}:\*{0,2}\s*\[?\s*/i, '')
|
|
253
|
-
.replace(/\s*\]?\s*$/, '');
|
|
254
|
-
const ids = idsStr.split(/\s*,\s*/).filter((id) => id.startsWith('decision_'));
|
|
255
|
-
if (ids.length > 0) {
|
|
256
|
-
relationships.push({ type: 'synthesizes', targetIds: ids });
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
return relationships;
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Create edges from parsed reasoning relationships
|
|
264
|
-
*
|
|
265
|
-
* Story 2.2: Auto-create edges when reasoning references other decisions
|
|
266
|
-
*
|
|
267
|
-
* @param fromId - Source decision ID
|
|
268
|
-
* @param reasoning - Decision reasoning text
|
|
269
|
-
* @returns Edge creation stats
|
|
270
|
-
*/
|
|
271
|
-
async function createEdgesFromReasoning(fromId, reasoning) {
|
|
272
|
-
const relationships = parseReasoningForRelationships(reasoning);
|
|
273
|
-
let created = 0;
|
|
274
|
-
let failed = 0;
|
|
275
|
-
for (const rel of relationships) {
|
|
276
|
-
for (const targetId of rel.targetIds) {
|
|
277
|
-
try {
|
|
278
|
-
// Verify target decision exists
|
|
279
|
-
const adapter = (0, memory_store_js_1.getAdapter)();
|
|
280
|
-
const stmt = adapter.prepare('SELECT id FROM decisions WHERE id = ?');
|
|
281
|
-
const target = stmt.get(targetId);
|
|
282
|
-
if (!target) {
|
|
283
|
-
(0, debug_logger_js_1.info)(`[decision-tracker] Referenced decision not found: ${targetId}, skipping edge`);
|
|
284
|
-
failed++;
|
|
285
|
-
continue;
|
|
286
|
-
}
|
|
287
|
-
// Create the edge
|
|
288
|
-
const reason = `Auto-detected from reasoning: ${rel.type} reference`;
|
|
289
|
-
const success = await createEdge(fromId, targetId, rel.type, reason);
|
|
290
|
-
if (success) {
|
|
291
|
-
created++;
|
|
292
|
-
(0, debug_logger_js_1.info)(`[decision-tracker] Created ${rel.type} edge: ${fromId} -> ${targetId}`);
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
failed++;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
catch (error) {
|
|
299
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
300
|
-
(0, debug_logger_js_1.info)(`[decision-tracker] Failed to create edge to ${targetId}: ${message}`);
|
|
301
|
-
failed++;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
return { created, failed };
|
|
306
|
-
}
|
|
307
|
-
// ════════════════════════════════════════════════════════════════════════════
|
|
308
|
-
// NOTE: Auto-link functions REMOVED in v1.2.0
|
|
309
|
-
//
|
|
310
|
-
// Removed functions:
|
|
311
|
-
// - createRefinesEdge
|
|
312
|
-
// - detectConflicts
|
|
313
|
-
// - createContradictsEdge
|
|
314
|
-
// - findRelatedDecisions
|
|
315
|
-
// - isConflicting
|
|
316
|
-
//
|
|
317
|
-
// Reason: LLM can infer decision evolution from time-ordered search results.
|
|
318
|
-
// Auto-links created 366 noise edges (100% cross-topic).
|
|
319
|
-
// Only supersedes (same topic) is reliable.
|
|
320
|
-
//
|
|
321
|
-
// See: CHANGELOG.md v1.2.0 - 2025-11-25
|
|
322
|
-
// ════════════════════════════════════════════════════════════════════════════
|
|
323
|
-
/**
|
|
324
|
-
* Learn Decision Function (Main API)
|
|
325
|
-
*
|
|
326
|
-
* Task 3.1: Create Learn Decision Function
|
|
327
|
-
* Task 3.2: Generate decision ID
|
|
328
|
-
* Task 3.3: Check for previous decision on same topic
|
|
329
|
-
* Task 3.4: Insert new decision with outcome=NULL, confidence from LLM
|
|
330
|
-
* Task 3.5: If previous exists: Create supersedes edge, Update previous superseded_by
|
|
331
|
-
* Task 3.6: If multi-parent refinement: Store refined_from, Calculate combined confidence
|
|
332
|
-
* Task 3.7: Generate enhanced embedding
|
|
333
|
-
* Task 3.8: Store embedding (link via rowid)
|
|
334
|
-
*
|
|
335
|
-
* AC #1: Decision stored with outcome=NULL, confidence from LLM
|
|
336
|
-
* AC #2: Supersedes relationship creation
|
|
337
|
-
* AC #5: Multi-parent refinement with confidence calculation
|
|
338
|
-
*
|
|
339
|
-
* @param detection - Decision detection result
|
|
340
|
-
* @param toolExecution - Tool execution data
|
|
341
|
-
* @param sessionContext - Session context
|
|
342
|
-
* @returns decisionId and notification
|
|
343
|
-
*/
|
|
344
|
-
async function learnDecision(detection, toolExecution, sessionContext) {
|
|
345
|
-
try {
|
|
346
|
-
// Ensure database is initialized
|
|
347
|
-
await (0, memory_store_js_1.initDB)();
|
|
348
|
-
// ════════════════════════════════════════════════════════
|
|
349
|
-
// Task 3.2: Generate Decision ID
|
|
350
|
-
// ════════════════════════════════════════════════════════
|
|
351
|
-
const decisionId = generateDecisionId(detection.topic);
|
|
352
|
-
// ════════════════════════════════════════════════════════
|
|
353
|
-
// Task 3.3: Check for Previous Decision on Same Topic
|
|
354
|
-
// ════════════════════════════════════════════════════════
|
|
355
|
-
const previous = await getPreviousDecision(detection.topic);
|
|
356
|
-
// ════════════════════════════════════════════════════════
|
|
357
|
-
// Task 3.6: Detect Multi-Parent Refinement
|
|
358
|
-
// ════════════════════════════════════════════════════════
|
|
359
|
-
const refinedFrom = detectRefinement(detection, sessionContext);
|
|
360
|
-
let finalConfidence = detection.confidence;
|
|
361
|
-
if (refinedFrom && refinedFrom.length > 0) {
|
|
362
|
-
// AC #5: Multi-parent refinement
|
|
363
|
-
// Get parent decisions
|
|
364
|
-
const adapter = (0, memory_store_js_1.getAdapter)();
|
|
365
|
-
const stmt = adapter.prepare('SELECT * FROM decisions WHERE id = ?');
|
|
366
|
-
const parents = refinedFrom.map((parentId) => stmt.get(parentId));
|
|
367
|
-
const validParents = parents.filter((p) => p !== undefined && p !== null);
|
|
368
|
-
// Calculate combined confidence
|
|
369
|
-
finalConfidence = calculateCombinedConfidence(detection.confidence, validParents);
|
|
370
|
-
}
|
|
371
|
-
// ════════════════════════════════════════════════════════
|
|
372
|
-
// Task 3.4: Insert New Decision
|
|
373
|
-
// ════════════════════════════════════════════════════════
|
|
374
|
-
// ════════════════════════════════════════════════════════
|
|
375
|
-
// Story 014.7.6: Set needs_validation for assistant insights
|
|
376
|
-
// ════════════════════════════════════════════════════════
|
|
377
|
-
const isAssistantInsight = detection.type === 'assistant_insight';
|
|
378
|
-
const needsValidation = isAssistantInsight ? 1 : 0;
|
|
379
|
-
// AC #1: Decision stored with outcome=NULL, confidence from LLM
|
|
380
|
-
const decision = {
|
|
381
|
-
id: decisionId,
|
|
382
|
-
topic: detection.topic,
|
|
383
|
-
decision: detection.decision,
|
|
384
|
-
reasoning: detection.reasoning,
|
|
385
|
-
outcome: null, // AC #1: outcome=NULL (not yet tracked)
|
|
386
|
-
failure_reason: null,
|
|
387
|
-
limitation: null,
|
|
388
|
-
user_involvement: 'requested', // Inferred from tool execution
|
|
389
|
-
session_id: sessionContext.session_id,
|
|
390
|
-
supersedes: previous ? previous.id : null,
|
|
391
|
-
superseded_by: null,
|
|
392
|
-
refined_from: refinedFrom, // AC #5: Multi-parent refinement
|
|
393
|
-
confidence: finalConfidence, // AC #1, AC #5: Confidence from LLM
|
|
394
|
-
needs_validation: needsValidation, // Story 014.7.6: AC #1 - Validation for assistant insights
|
|
395
|
-
validation_attempts: 0, // Story 014.7.6: Track skip count
|
|
396
|
-
usage_count: 0, // Story 014.7.6: Track usage for periodic review
|
|
397
|
-
created_at: toolExecution.timestamp || Date.now(),
|
|
398
|
-
updated_at: Date.now(),
|
|
399
|
-
// Story 014.7.10: Add trust_context for Claude-Friendly Context Formatting
|
|
400
|
-
trust_context: detection.trust_context ? JSON.stringify(detection.trust_context) : null,
|
|
401
|
-
// Story 2.1: 5-layer narrative fields
|
|
402
|
-
evidence: detection.evidence
|
|
403
|
-
? Array.isArray(detection.evidence)
|
|
404
|
-
? JSON.stringify(detection.evidence)
|
|
405
|
-
: detection.evidence
|
|
406
|
-
: null,
|
|
407
|
-
alternatives: detection.alternatives
|
|
408
|
-
? Array.isArray(detection.alternatives)
|
|
409
|
-
? JSON.stringify(detection.alternatives)
|
|
410
|
-
: detection.alternatives
|
|
411
|
-
: null,
|
|
412
|
-
risks: detection.risks || null,
|
|
413
|
-
};
|
|
414
|
-
// Task 3.7, 3.8: Generate enhanced embedding and store in embeddings table
|
|
415
|
-
// (Handled by insertDecisionWithEmbedding function)
|
|
416
|
-
await (0, memory_store_js_1.insertDecisionWithEmbedding)(decision);
|
|
417
|
-
// ════════════════════════════════════════════════════════
|
|
418
|
-
// Task 3.5: Create Supersedes Relationship (if previous exists)
|
|
419
|
-
// ════════════════════════════════════════════════════════
|
|
420
|
-
if (previous) {
|
|
421
|
-
// AC #2: Supersedes relationship creation
|
|
422
|
-
const reason = `User changed from "${previous.decision}" to "${detection.decision}"`;
|
|
423
|
-
// Create edge: new decision → previous decision
|
|
424
|
-
await createSupersedesEdge(decisionId, previous.id, reason);
|
|
425
|
-
// Update previous decision's superseded_by field
|
|
426
|
-
await markSuperseded(previous.id, decisionId);
|
|
427
|
-
}
|
|
428
|
-
// ════════════════════════════════════════════════════════
|
|
429
|
-
// NOTE: Auto-link generation (refines, contradicts) REMOVED
|
|
430
|
-
//
|
|
431
|
-
// Reason: LLM can infer decision evolution from time-ordered
|
|
432
|
-
// search results. Auto-links created 366 noise edges (100%
|
|
433
|
-
// cross-topic). Only supersedes (same topic) is reliable.
|
|
434
|
-
//
|
|
435
|
-
// See: 2025-11-25 discussion on decision tracking algorithm
|
|
436
|
-
// ════════════════════════════════════════════════════════
|
|
437
|
-
// ════════════════════════════════════════════════════════
|
|
438
|
-
// Story 014.7.6: Generate notification if needs validation
|
|
439
|
-
// ════════════════════════════════════════════════════════
|
|
440
|
-
let notification = null;
|
|
441
|
-
if (needsValidation) {
|
|
442
|
-
const { notifyInsight } = await import('./notification-manager.js');
|
|
443
|
-
// notifyInsight is a stub that returns null
|
|
444
|
-
notification = notifyInsight();
|
|
445
|
-
}
|
|
446
|
-
// ════════════════════════════════════════════════════════
|
|
447
|
-
// Task 3.9: Return decision ID (+ notification for Story 014.7.6)
|
|
448
|
-
// ════════════════════════════════════════════════════════
|
|
449
|
-
return {
|
|
450
|
-
decisionId,
|
|
451
|
-
notification, // null if no validation needed, notification object otherwise
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
catch (error) {
|
|
455
|
-
// CLAUDE.md Rule #1: No silent failures
|
|
456
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
457
|
-
throw new Error(`Failed to learn decision: ${message}`);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
/**
|
|
461
|
-
* Update confidence score
|
|
462
|
-
*
|
|
463
|
-
* Task 6: Confidence evolution (used in outcome tracking)
|
|
464
|
-
* AC #5: Confidence score calculated based on history
|
|
465
|
-
*
|
|
466
|
-
* @param prior - Prior confidence
|
|
467
|
-
* @param evidence - Evidence items
|
|
468
|
-
* @returns Updated confidence (0.0-1.0)
|
|
469
|
-
*/
|
|
470
|
-
function updateConfidence(prior, evidence) {
|
|
471
|
-
if (!evidence || evidence.length === 0) {
|
|
472
|
-
return prior;
|
|
473
|
-
}
|
|
474
|
-
// Calculate total impact
|
|
475
|
-
const totalImpact = evidence.reduce((acc, e) => acc + e.impact, 0);
|
|
476
|
-
// Update confidence
|
|
477
|
-
const updated = prior + totalImpact;
|
|
478
|
-
// Clamp to [0.0, 1.0]
|
|
479
|
-
return Math.max(0, Math.min(1, updated));
|
|
480
|
-
}
|
|
481
|
-
//# sourceMappingURL=decision-tracker.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { DatabaseAdapter } from '../db-manager.js';
|
|
2
|
-
import type { ListVisibleTwinEdgesOptions, TwinEdgeRecord, TwinRef, TwinVisibility } from './types.js';
|
|
3
|
-
type TwinRefVisibilityAdapter = Pick<DatabaseAdapter, 'prepare'>;
|
|
4
|
-
export declare function assertTwinRefsVisible(adapter: TwinRefVisibilityAdapter, refs: readonly TwinRef[], visibility?: TwinVisibility): void;
|
|
5
|
-
export declare function listVisibleTwinEdgesForRefs(adapter: TwinRefVisibilityAdapter, refs: readonly TwinRef[], options?: ListVisibleTwinEdgesOptions): TwinEdgeRecord[];
|
|
6
|
-
export {};
|
|
7
|
-
//# sourceMappingURL=ref-validation.d.ts.map
|