@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
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.listVisibleAgentSituationSources = listVisibleAgentSituationSources;
|
|
4
|
-
exports.buildAgentSituationPacketRecord = buildAgentSituationPacketRecord;
|
|
5
|
-
const node_crypto_1 = require("node:crypto");
|
|
6
|
-
const canonicalize_js_1 = require("../canonicalize.js");
|
|
7
|
-
const cache_key_js_1 = require("./cache-key.js");
|
|
8
|
-
const ranking_policy_js_1 = require("./ranking-policy.js");
|
|
9
|
-
const source_readers_js_1 = require("./source-readers.js");
|
|
10
|
-
function iso(ms) {
|
|
11
|
-
return new Date(ms).toISOString();
|
|
12
|
-
}
|
|
13
|
-
function ttlForRange(rangeStartMs, rangeEndMs) {
|
|
14
|
-
const rangeMs = Math.max(0, rangeEndMs - rangeStartMs);
|
|
15
|
-
const dayMs = 24 * 60 * 60 * 1000;
|
|
16
|
-
if (rangeMs <= 7 * dayMs) {
|
|
17
|
-
return 120;
|
|
18
|
-
}
|
|
19
|
-
if (rangeMs <= 30 * dayMs) {
|
|
20
|
-
return 300;
|
|
21
|
-
}
|
|
22
|
-
return 900;
|
|
23
|
-
}
|
|
24
|
-
function topStrings(values, limit = 3) {
|
|
25
|
-
return values
|
|
26
|
-
.map((value) => value.trim())
|
|
27
|
-
.filter(Boolean)
|
|
28
|
-
.slice(0, limit);
|
|
29
|
-
}
|
|
30
|
-
function refKey(ref) {
|
|
31
|
-
return `${ref.kind}:${ref.id}`;
|
|
32
|
-
}
|
|
33
|
-
function buildBriefing(sources) {
|
|
34
|
-
const memories = sources.memories;
|
|
35
|
-
const openQuestions = memories.filter((memory) => memory.is_open_question);
|
|
36
|
-
const lowConfidence = [...memories, ...sources.cases, ...sources.edges].filter((candidate) => typeof candidate.confidence === 'number' && candidate.confidence < 0.6);
|
|
37
|
-
return {
|
|
38
|
-
decisions: topStrings(memories.map((memory) => memory.summary || memory.title)),
|
|
39
|
-
facts: topStrings(sources.raw.map((raw) => raw.summary)),
|
|
40
|
-
open_questions: topStrings(openQuestions.map((memory) => memory.summary || memory.title)),
|
|
41
|
-
risks: topStrings([
|
|
42
|
-
...lowConfidence.map((candidate) => candidate.summary || candidate.title),
|
|
43
|
-
...sources.cases
|
|
44
|
-
.filter((item) => item.status === 'blocked')
|
|
45
|
-
.map((item) => `${item.title}: ${item.status}`),
|
|
46
|
-
]),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function buildCoverage(sources, input) {
|
|
50
|
-
const coverage = [];
|
|
51
|
-
for (const connector of input.effective_filters.connectors) {
|
|
52
|
-
for (const scope of input.effective_filters.scopes) {
|
|
53
|
-
const raw = sources.raw.filter((item) => item.connector === connector &&
|
|
54
|
-
item.scope?.kind === scope.kind &&
|
|
55
|
-
item.scope.id === scope.id);
|
|
56
|
-
const memories = sources.memories.filter((item) => item.scope?.kind === scope.kind && item.scope.id === scope.id);
|
|
57
|
-
const cases = sources.cases.filter((item) => item.scope?.kind === scope.kind && item.scope.id === scope.id);
|
|
58
|
-
const rowRefs = new Set([...raw, ...memories, ...cases].map((item) => refKey(item.ref)));
|
|
59
|
-
const edges = sources.edges.filter((item) => rowRefs.has(refKey(item.subject_ref)) && rowRefs.has(refKey(item.object_ref)));
|
|
60
|
-
const lastSeenMs = Math.max(0, ...raw.map((item) => item.timestamp_ms), ...memories.map((item) => item.timestamp_ms), ...cases.map((item) => item.timestamp_ms), ...edges.map((item) => item.timestamp_ms));
|
|
61
|
-
coverage.push({
|
|
62
|
-
connector,
|
|
63
|
-
channel_id: raw[0]?.channel_id ?? null,
|
|
64
|
-
memory_scope: scope,
|
|
65
|
-
raw_count: raw.length,
|
|
66
|
-
memory_count: memories.length,
|
|
67
|
-
case_count: cases.length,
|
|
68
|
-
edge_count: edges.length,
|
|
69
|
-
last_seen: lastSeenMs > 0 ? iso(lastSeenMs) : null,
|
|
70
|
-
stale: lastSeenMs > 0
|
|
71
|
-
? (input.now_ms ?? Date.now()) - lastSeenMs > 30 * 24 * 60 * 60 * 1000
|
|
72
|
-
: true,
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return coverage;
|
|
77
|
-
}
|
|
78
|
-
function buildRankedItems(sources, limit) {
|
|
79
|
-
const policy = (0, ranking_policy_js_1.getAgentSituationRankingPolicy)();
|
|
80
|
-
const candidates = [...sources.raw, ...sources.memories, ...sources.cases, ...sources.edges];
|
|
81
|
-
return candidates
|
|
82
|
-
.map((candidate) => {
|
|
83
|
-
const score = (0, ranking_policy_js_1.scoreAgentSituationCandidate)(candidate, policy);
|
|
84
|
-
return {
|
|
85
|
-
ref: candidate.ref,
|
|
86
|
-
kind: candidate.kind,
|
|
87
|
-
score: score.score,
|
|
88
|
-
reasons: score.reasons,
|
|
89
|
-
caveats: score.caveats,
|
|
90
|
-
};
|
|
91
|
-
})
|
|
92
|
-
.sort((left, right) => right.score - left.score || left.ref.id.localeCompare(right.ref.id))
|
|
93
|
-
.slice(0, limit);
|
|
94
|
-
}
|
|
95
|
-
function buildRecommendations(sources, rankedItems) {
|
|
96
|
-
const recommendations = [];
|
|
97
|
-
const expectedRefs = rankedItems.map((item) => item.ref);
|
|
98
|
-
if (sources.memories.some((memory) => memory.is_open_question) || sources.raw.length > 0) {
|
|
99
|
-
recommendations.push({
|
|
100
|
-
tool: 'raw.searchAll',
|
|
101
|
-
args: {
|
|
102
|
-
query: sources.memories.find((memory) => memory.is_open_question)?.title ?? 'recent work',
|
|
103
|
-
},
|
|
104
|
-
reason: 'visible_open_question_needs_evidence',
|
|
105
|
-
expected_refs: expectedRefs.filter((ref) => ref.kind === 'raw' || ref.kind === 'memory'),
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
const topRaw = sources.raw[0];
|
|
109
|
-
if (topRaw) {
|
|
110
|
-
recommendations.push({
|
|
111
|
-
tool: 'raw.window',
|
|
112
|
-
args: { raw_id: topRaw.ref.id },
|
|
113
|
-
reason: 'inspect_visible_raw_context',
|
|
114
|
-
expected_refs: [topRaw.ref],
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return recommendations;
|
|
118
|
-
}
|
|
119
|
-
function sourceRefs(sources) {
|
|
120
|
-
return [
|
|
121
|
-
...sources.raw.map((item) => item.ref),
|
|
122
|
-
...sources.memories.map((item) => item.ref),
|
|
123
|
-
...sources.cases.map((item) => item.ref),
|
|
124
|
-
...sources.edges.map((item) => item.ref),
|
|
125
|
-
];
|
|
126
|
-
}
|
|
127
|
-
function primaryScope(input) {
|
|
128
|
-
const scope = input.scope[0] ?? input.effective_filters.scopes[0];
|
|
129
|
-
if (!scope) {
|
|
130
|
-
throw new Error('agent.situation requires at least one effective memory scope');
|
|
131
|
-
}
|
|
132
|
-
return scope;
|
|
133
|
-
}
|
|
134
|
-
function primaryProjectId(input) {
|
|
135
|
-
const project = input.effective_filters.project_refs[0];
|
|
136
|
-
if (!project) {
|
|
137
|
-
throw new Error('agent.situation requires at least one effective project ref');
|
|
138
|
-
}
|
|
139
|
-
return project.id;
|
|
140
|
-
}
|
|
141
|
-
function json(value) {
|
|
142
|
-
return (0, canonicalize_js_1.canonicalizeJSON)(value);
|
|
143
|
-
}
|
|
144
|
-
function listVisibleAgentSituationSources(adapter, input) {
|
|
145
|
-
return (0, source_readers_js_1.listVisibleAgentSituationSources)(adapter, input);
|
|
146
|
-
}
|
|
147
|
-
function buildAgentSituationPacketRecord(adapter, input) {
|
|
148
|
-
const rankingPolicyVersion = input.ranking_policy_version ?? ranking_policy_js_1.AGENT_SITUATION_V0_POLICY_VERSION;
|
|
149
|
-
const nowMs = Math.floor(input.now_ms ?? Date.now());
|
|
150
|
-
const limit = Math.floor(input.limit);
|
|
151
|
-
const effectiveFilters = (0, cache_key_js_1.normalizeAgentSituationEffectiveFilters)(input.effective_filters);
|
|
152
|
-
const normalizedInput = { ...input, effective_filters: effectiveFilters };
|
|
153
|
-
const sources = (0, source_readers_js_1.listVisibleAgentSituationSources)(adapter, {
|
|
154
|
-
effective_filters: effectiveFilters,
|
|
155
|
-
range_start_ms: input.range_start_ms,
|
|
156
|
-
range_end_ms: input.range_end_ms,
|
|
157
|
-
limit,
|
|
158
|
-
});
|
|
159
|
-
const key = (0, cache_key_js_1.buildAgentSituationCacheKey)({
|
|
160
|
-
...effectiveFilters,
|
|
161
|
-
range_start_ms: input.range_start_ms,
|
|
162
|
-
range_end_ms: input.range_end_ms,
|
|
163
|
-
focus: input.focus,
|
|
164
|
-
limit,
|
|
165
|
-
ranking_policy_version: rankingPolicyVersion,
|
|
166
|
-
});
|
|
167
|
-
const ttlSeconds = ttlForRange(input.range_start_ms, input.range_end_ms);
|
|
168
|
-
const expiresAt = nowMs + ttlSeconds * 1000;
|
|
169
|
-
const scope = primaryScope(input);
|
|
170
|
-
const rankedItems = buildRankedItems(sources, limit);
|
|
171
|
-
const briefing = buildBriefing(sources);
|
|
172
|
-
const coverage = buildCoverage(sources, normalizedInput);
|
|
173
|
-
const visibleSourceRefs = sourceRefs(sources);
|
|
174
|
-
const pendingHumanQuestions = sources.memories
|
|
175
|
-
.filter((memory) => memory.is_open_question)
|
|
176
|
-
.slice(0, 3)
|
|
177
|
-
.map((memory) => ({
|
|
178
|
-
memory_id: memory.ref.id,
|
|
179
|
-
title: memory.title,
|
|
180
|
-
summary: memory.summary,
|
|
181
|
-
}));
|
|
182
|
-
const caveats = visibleSourceRefs.length === 0 ? ['no_visible_sources'] : [];
|
|
183
|
-
const recommendedNextTools = buildRecommendations(sources, rankedItems);
|
|
184
|
-
const topMemoryRefs = sources.memories.map((memory) => memory.ref.id).slice(0, limit);
|
|
185
|
-
const freshness = {
|
|
186
|
-
generated_at_ms: nowMs,
|
|
187
|
-
visible_source_count: visibleSourceRefs.length,
|
|
188
|
-
};
|
|
189
|
-
return {
|
|
190
|
-
packet_id: `situ_${(0, node_crypto_1.randomUUID)().replace(/-/g, '')}`,
|
|
191
|
-
cache_key: key.cacheKey,
|
|
192
|
-
scope_json: json(input.scope),
|
|
193
|
-
scope: input.scope,
|
|
194
|
-
scope_hash: key.scopeHash,
|
|
195
|
-
range_start_ms: Math.floor(input.range_start_ms),
|
|
196
|
-
range_end_ms: Math.floor(input.range_end_ms),
|
|
197
|
-
focus_json: json(input.focus),
|
|
198
|
-
focus: input.focus,
|
|
199
|
-
envelope_hash: input.envelope_hash,
|
|
200
|
-
envelope_effective_filters_json: json(effectiveFilters),
|
|
201
|
-
envelope_effective_filters: effectiveFilters,
|
|
202
|
-
envelope_effective_filters_hash: key.filtersHash,
|
|
203
|
-
ranking_policy_version: rankingPolicyVersion,
|
|
204
|
-
generated_at: nowMs,
|
|
205
|
-
expires_at: expiresAt,
|
|
206
|
-
ttl_seconds: ttlSeconds,
|
|
207
|
-
freshness_json: json(freshness),
|
|
208
|
-
freshness,
|
|
209
|
-
source_coverage_json: json(coverage),
|
|
210
|
-
source_coverage: coverage,
|
|
211
|
-
briefing_json: json(briefing),
|
|
212
|
-
briefing,
|
|
213
|
-
ranked_items_json: json(rankedItems),
|
|
214
|
-
ranked_items: rankedItems,
|
|
215
|
-
top_memory_refs_json: json(topMemoryRefs),
|
|
216
|
-
top_memory_refs: topMemoryRefs,
|
|
217
|
-
pending_human_questions_json: json(pendingHumanQuestions),
|
|
218
|
-
pending_human_questions: pendingHumanQuestions,
|
|
219
|
-
entity_clusters_json: '[]',
|
|
220
|
-
entity_clusters: [],
|
|
221
|
-
recommended_next_tools_json: json(recommendedNextTools),
|
|
222
|
-
recommended_next_tools: recommendedNextTools,
|
|
223
|
-
generated_from_slice_ids_json: '[]',
|
|
224
|
-
generated_from_slice_ids: [],
|
|
225
|
-
caveats_json: json(caveats),
|
|
226
|
-
caveats,
|
|
227
|
-
agent_id: input.agent_id,
|
|
228
|
-
model_run_id: input.model_run_id,
|
|
229
|
-
input_snapshot_ref: `situation:${key.cacheKey}`,
|
|
230
|
-
source_refs_json: json(visibleSourceRefs),
|
|
231
|
-
source_refs: visibleSourceRefs,
|
|
232
|
-
tenant_id: effectiveFilters.tenant_id,
|
|
233
|
-
project_id: primaryProjectId(normalizedInput),
|
|
234
|
-
memory_scope_kind: scope.kind,
|
|
235
|
-
memory_scope_id: scope.id,
|
|
236
|
-
created_at: nowMs,
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
//# sourceMappingURL=builder.js.map
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { AgentSituationCacheKeyInput, AgentSituationCacheKeyResult, AgentSituationEffectiveFilters } from './types.js';
|
|
2
|
-
export declare function normalizeAgentSituationEffectiveFilters(input: AgentSituationEffectiveFilters): AgentSituationEffectiveFilters;
|
|
3
|
-
export declare function buildAgentSituationCacheKey(input: AgentSituationCacheKeyInput): AgentSituationCacheKeyResult;
|
|
4
|
-
//# sourceMappingURL=cache-key.d.ts.map
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeAgentSituationEffectiveFilters = normalizeAgentSituationEffectiveFilters;
|
|
4
|
-
exports.buildAgentSituationCacheKey = buildAgentSituationCacheKey;
|
|
5
|
-
const node_crypto_1 = require("node:crypto");
|
|
6
|
-
const canonicalize_js_1 = require("../canonicalize.js");
|
|
7
|
-
function sha256Hex(value) {
|
|
8
|
-
return (0, node_crypto_1.createHash)('sha256').update((0, canonicalize_js_1.canonicalizeJSON)(value), 'utf8').digest('hex');
|
|
9
|
-
}
|
|
10
|
-
function uniqueSorted(values) {
|
|
11
|
-
return [...new Set(values.map((value) => value.trim()).filter(Boolean))].sort();
|
|
12
|
-
}
|
|
13
|
-
function normalizeScopes(scopes) {
|
|
14
|
-
const byKey = new Map();
|
|
15
|
-
for (const scope of scopes) {
|
|
16
|
-
const normalized = { kind: scope.kind, id: scope.id.trim() };
|
|
17
|
-
if (normalized.id.length > 0) {
|
|
18
|
-
byKey.set(`${normalized.kind}:${normalized.id}`, normalized);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return [...byKey.values()].sort((left, right) => `${left.kind}:${left.id}`.localeCompare(`${right.kind}:${right.id}`));
|
|
22
|
-
}
|
|
23
|
-
function normalizeProjectRefs(projectRefs) {
|
|
24
|
-
const byId = new Map();
|
|
25
|
-
for (const project of projectRefs) {
|
|
26
|
-
const normalized = { kind: 'project', id: project.id.trim() };
|
|
27
|
-
if (normalized.id.length > 0) {
|
|
28
|
-
byId.set(normalized.id, normalized);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return [...byId.values()].sort((left, right) => left.id.localeCompare(right.id));
|
|
32
|
-
}
|
|
33
|
-
function normalizeFocus(focus) {
|
|
34
|
-
return [...new Set(focus)].sort();
|
|
35
|
-
}
|
|
36
|
-
function normalizeAgentSituationEffectiveFilters(input) {
|
|
37
|
-
return {
|
|
38
|
-
scopes: normalizeScopes(input.scopes),
|
|
39
|
-
connectors: uniqueSorted(input.connectors),
|
|
40
|
-
project_refs: normalizeProjectRefs(input.project_refs),
|
|
41
|
-
tenant_id: input.tenant_id.trim() || 'default',
|
|
42
|
-
as_of: input.as_of ?? null,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
function buildAgentSituationCacheKey(input) {
|
|
46
|
-
const effective = normalizeAgentSituationEffectiveFilters(input);
|
|
47
|
-
const canonicalInput = {
|
|
48
|
-
...effective,
|
|
49
|
-
range_start_ms: Math.floor(input.range_start_ms),
|
|
50
|
-
range_end_ms: Math.floor(input.range_end_ms),
|
|
51
|
-
focus: normalizeFocus(input.focus),
|
|
52
|
-
limit: Math.floor(input.limit),
|
|
53
|
-
ranking_policy_version: input.ranking_policy_version,
|
|
54
|
-
};
|
|
55
|
-
const canonicalJson = (0, canonicalize_js_1.canonicalizeJSON)(canonicalInput);
|
|
56
|
-
return {
|
|
57
|
-
cacheKey: (0, node_crypto_1.createHash)('sha256').update(canonicalJson, 'utf8').digest('hex'),
|
|
58
|
-
canonicalInput,
|
|
59
|
-
canonicalJson,
|
|
60
|
-
filtersHash: sha256Hex(effective),
|
|
61
|
-
scopeHash: sha256Hex(effective.scopes),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=cache-key.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export * from './types.js';
|
|
2
|
-
export * from './cache-key.js';
|
|
3
|
-
export * from './ranking-policy.js';
|
|
4
|
-
export { listVisibleRawCandidates, listVisibleMemoryCandidates, listVisibleCaseCandidates, listVisibleEdgeCandidates, type AgentSituationSourceReadInput, type VisibleAgentSituationSources, type VisibleRawCandidate, type VisibleMemoryCandidate, type VisibleCaseCandidate, type VisibleEdgeCandidate, } from './source-readers.js';
|
|
5
|
-
export * from './builder.js';
|
|
6
|
-
export * from './packet-store.js';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.listVisibleEdgeCandidates = exports.listVisibleCaseCandidates = exports.listVisibleMemoryCandidates = exports.listVisibleRawCandidates = void 0;
|
|
18
|
-
__exportStar(require("./types.js"), exports);
|
|
19
|
-
__exportStar(require("./cache-key.js"), exports);
|
|
20
|
-
__exportStar(require("./ranking-policy.js"), exports);
|
|
21
|
-
var source_readers_js_1 = require("./source-readers.js");
|
|
22
|
-
Object.defineProperty(exports, "listVisibleRawCandidates", { enumerable: true, get: function () { return source_readers_js_1.listVisibleRawCandidates; } });
|
|
23
|
-
Object.defineProperty(exports, "listVisibleMemoryCandidates", { enumerable: true, get: function () { return source_readers_js_1.listVisibleMemoryCandidates; } });
|
|
24
|
-
Object.defineProperty(exports, "listVisibleCaseCandidates", { enumerable: true, get: function () { return source_readers_js_1.listVisibleCaseCandidates; } });
|
|
25
|
-
Object.defineProperty(exports, "listVisibleEdgeCandidates", { enumerable: true, get: function () { return source_readers_js_1.listVisibleEdgeCandidates; } });
|
|
26
|
-
__exportStar(require("./builder.js"), exports);
|
|
27
|
-
__exportStar(require("./packet-store.js"), exports);
|
|
28
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { DatabaseAdapter } from '../db-manager.js';
|
|
2
|
-
import type { AgentSituationLease, AgentSituationPacketRecord } from './types.js';
|
|
3
|
-
type PacketStoreAdapter = Pick<DatabaseAdapter, 'prepare' | 'transaction'>;
|
|
4
|
-
export interface AcquireAgentSituationLeaseInput {
|
|
5
|
-
cacheKey: string;
|
|
6
|
-
rankingPolicyVersion: string;
|
|
7
|
-
leaseOwner: string;
|
|
8
|
-
nowMs: number;
|
|
9
|
-
leaseSeconds: number;
|
|
10
|
-
}
|
|
11
|
-
export interface AgentSituationRefreshInput {
|
|
12
|
-
cacheKey: string;
|
|
13
|
-
rankingPolicyVersion: string;
|
|
14
|
-
nowMs: number;
|
|
15
|
-
leaseOwner: string;
|
|
16
|
-
leaseSeconds?: number;
|
|
17
|
-
pollIntervalMs?: number;
|
|
18
|
-
maxPollMs?: number;
|
|
19
|
-
refresh?: boolean;
|
|
20
|
-
}
|
|
21
|
-
export declare function getFreshAgentSituationPacket(adapter: PacketStoreAdapter, cacheKey: string, rankingPolicyVersion: string, nowMs: number): AgentSituationPacketRecord | null;
|
|
22
|
-
export declare function insertAgentSituationPacket(adapter: PacketStoreAdapter, packet: AgentSituationPacketRecord): AgentSituationPacketRecord;
|
|
23
|
-
export declare function acquireAgentSituationLease(adapter: PacketStoreAdapter, input: AcquireAgentSituationLeaseInput): AgentSituationLease | null;
|
|
24
|
-
export declare function releaseAgentSituationLease(adapter: PacketStoreAdapter, cacheKey: string, leaseOwner: string): void;
|
|
25
|
-
export declare function getOrRefreshAgentSituationPacket(adapter: PacketStoreAdapter, input: AgentSituationRefreshInput, builder: () => Promise<AgentSituationPacketRecord> | AgentSituationPacketRecord): Promise<AgentSituationPacketRecord>;
|
|
26
|
-
export {};
|
|
27
|
-
//# sourceMappingURL=packet-store.d.ts.map
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getFreshAgentSituationPacket = getFreshAgentSituationPacket;
|
|
4
|
-
exports.insertAgentSituationPacket = insertAgentSituationPacket;
|
|
5
|
-
exports.acquireAgentSituationLease = acquireAgentSituationLease;
|
|
6
|
-
exports.releaseAgentSituationLease = releaseAgentSituationLease;
|
|
7
|
-
exports.getOrRefreshAgentSituationPacket = getOrRefreshAgentSituationPacket;
|
|
8
|
-
const inProcessRefreshesByAdapter = new WeakMap();
|
|
9
|
-
function parseJson(row, field) {
|
|
10
|
-
const value = row[field];
|
|
11
|
-
if (typeof value !== 'string') {
|
|
12
|
-
throw new Error(`Invalid agent situation packet JSON field ${field}: expected string`);
|
|
13
|
-
}
|
|
14
|
-
try {
|
|
15
|
-
return JSON.parse(value);
|
|
16
|
-
}
|
|
17
|
-
catch (error) {
|
|
18
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
19
|
-
throw new Error(`Invalid agent situation packet JSON field ${field}: ${message}`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function inProcessRefreshesForAdapter(adapter) {
|
|
23
|
-
const existing = inProcessRefreshesByAdapter.get(adapter);
|
|
24
|
-
if (existing) {
|
|
25
|
-
return existing;
|
|
26
|
-
}
|
|
27
|
-
const scoped = new Map();
|
|
28
|
-
inProcessRefreshesByAdapter.set(adapter, scoped);
|
|
29
|
-
return scoped;
|
|
30
|
-
}
|
|
31
|
-
function mapPacketRow(row) {
|
|
32
|
-
return {
|
|
33
|
-
packet_id: String(row.packet_id),
|
|
34
|
-
cache_key: String(row.cache_key),
|
|
35
|
-
scope_json: String(row.scope_json),
|
|
36
|
-
scope: parseJson(row, 'scope_json'),
|
|
37
|
-
scope_hash: String(row.scope_hash),
|
|
38
|
-
range_start_ms: Number(row.range_start_ms),
|
|
39
|
-
range_end_ms: Number(row.range_end_ms),
|
|
40
|
-
focus_json: String(row.focus_json),
|
|
41
|
-
focus: parseJson(row, 'focus_json'),
|
|
42
|
-
envelope_hash: String(row.envelope_hash),
|
|
43
|
-
envelope_effective_filters_json: String(row.envelope_effective_filters_json),
|
|
44
|
-
envelope_effective_filters: parseJson(row, 'envelope_effective_filters_json'),
|
|
45
|
-
envelope_effective_filters_hash: String(row.envelope_effective_filters_hash),
|
|
46
|
-
ranking_policy_version: String(row.ranking_policy_version),
|
|
47
|
-
generated_at: Number(row.generated_at),
|
|
48
|
-
expires_at: Number(row.expires_at),
|
|
49
|
-
ttl_seconds: Number(row.ttl_seconds),
|
|
50
|
-
freshness_json: String(row.freshness_json),
|
|
51
|
-
freshness: parseJson(row, 'freshness_json'),
|
|
52
|
-
source_coverage_json: String(row.source_coverage_json),
|
|
53
|
-
source_coverage: parseJson(row, 'source_coverage_json'),
|
|
54
|
-
briefing_json: String(row.briefing_json),
|
|
55
|
-
briefing: parseJson(row, 'briefing_json'),
|
|
56
|
-
ranked_items_json: String(row.ranked_items_json),
|
|
57
|
-
ranked_items: parseJson(row, 'ranked_items_json'),
|
|
58
|
-
top_memory_refs_json: String(row.top_memory_refs_json),
|
|
59
|
-
top_memory_refs: parseJson(row, 'top_memory_refs_json'),
|
|
60
|
-
pending_human_questions_json: String(row.pending_human_questions_json),
|
|
61
|
-
pending_human_questions: parseJson(row, 'pending_human_questions_json'),
|
|
62
|
-
entity_clusters_json: String(row.entity_clusters_json),
|
|
63
|
-
entity_clusters: parseJson(row, 'entity_clusters_json'),
|
|
64
|
-
recommended_next_tools_json: String(row.recommended_next_tools_json),
|
|
65
|
-
recommended_next_tools: parseJson(row, 'recommended_next_tools_json'),
|
|
66
|
-
generated_from_slice_ids_json: String(row.generated_from_slice_ids_json),
|
|
67
|
-
generated_from_slice_ids: parseJson(row, 'generated_from_slice_ids_json'),
|
|
68
|
-
caveats_json: String(row.caveats_json),
|
|
69
|
-
caveats: parseJson(row, 'caveats_json'),
|
|
70
|
-
agent_id: String(row.agent_id),
|
|
71
|
-
model_run_id: String(row.model_run_id),
|
|
72
|
-
input_snapshot_ref: String(row.input_snapshot_ref),
|
|
73
|
-
source_refs_json: String(row.source_refs_json),
|
|
74
|
-
source_refs: parseJson(row, 'source_refs_json'),
|
|
75
|
-
tenant_id: String(row.tenant_id),
|
|
76
|
-
project_id: String(row.project_id),
|
|
77
|
-
memory_scope_kind: String(row.memory_scope_kind),
|
|
78
|
-
memory_scope_id: String(row.memory_scope_id),
|
|
79
|
-
created_at: Number(row.created_at),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function isDuplicateLeaseError(error) {
|
|
83
|
-
if (!(error instanceof Error)) {
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
return /UNIQUE constraint failed: agent_situation_refresh_leases\.cache_key|PRIMARY KEY constraint failed|SQLITE_CONSTRAINT_(PRIMARYKEY|UNIQUE)/i.test(error.message);
|
|
87
|
-
}
|
|
88
|
-
function mapLeaseRow(row) {
|
|
89
|
-
return {
|
|
90
|
-
cache_key: String(row.cache_key),
|
|
91
|
-
ranking_policy_version: String(row.ranking_policy_version),
|
|
92
|
-
lease_owner: String(row.lease_owner),
|
|
93
|
-
lease_expires_at: Number(row.lease_expires_at),
|
|
94
|
-
created_at: Number(row.created_at),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
function getFreshAgentSituationPacket(adapter, cacheKey, rankingPolicyVersion, nowMs) {
|
|
98
|
-
const row = adapter
|
|
99
|
-
.prepare(`
|
|
100
|
-
SELECT *
|
|
101
|
-
FROM agent_situation_packets
|
|
102
|
-
WHERE cache_key = ?
|
|
103
|
-
AND ranking_policy_version = ?
|
|
104
|
-
AND expires_at > ?
|
|
105
|
-
ORDER BY expires_at DESC, generated_at DESC
|
|
106
|
-
LIMIT 1
|
|
107
|
-
`)
|
|
108
|
-
.get(cacheKey, rankingPolicyVersion, nowMs);
|
|
109
|
-
return row ? mapPacketRow(row) : null;
|
|
110
|
-
}
|
|
111
|
-
function insertAgentSituationPacket(adapter, packet) {
|
|
112
|
-
adapter
|
|
113
|
-
.prepare(`
|
|
114
|
-
INSERT INTO agent_situation_packets (
|
|
115
|
-
packet_id, cache_key, scope_json, scope_hash, range_start_ms, range_end_ms,
|
|
116
|
-
focus_json, envelope_hash, envelope_effective_filters_json,
|
|
117
|
-
envelope_effective_filters_hash, ranking_policy_version, generated_at, expires_at,
|
|
118
|
-
ttl_seconds, freshness_json, source_coverage_json, briefing_json, ranked_items_json,
|
|
119
|
-
top_memory_refs_json, pending_human_questions_json, entity_clusters_json,
|
|
120
|
-
recommended_next_tools_json, generated_from_slice_ids_json, caveats_json,
|
|
121
|
-
agent_id, model_run_id, input_snapshot_ref, source_refs_json, tenant_id, project_id,
|
|
122
|
-
memory_scope_kind, memory_scope_id, created_at
|
|
123
|
-
)
|
|
124
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
125
|
-
`)
|
|
126
|
-
.run(packet.packet_id, packet.cache_key, packet.scope_json, packet.scope_hash, packet.range_start_ms, packet.range_end_ms, packet.focus_json, packet.envelope_hash, packet.envelope_effective_filters_json, packet.envelope_effective_filters_hash, packet.ranking_policy_version, packet.generated_at, packet.expires_at, packet.ttl_seconds, packet.freshness_json, packet.source_coverage_json, packet.briefing_json, packet.ranked_items_json, packet.top_memory_refs_json, packet.pending_human_questions_json, packet.entity_clusters_json, packet.recommended_next_tools_json, packet.generated_from_slice_ids_json, packet.caveats_json, packet.agent_id, packet.model_run_id, packet.input_snapshot_ref, packet.source_refs_json, packet.tenant_id, packet.project_id, packet.memory_scope_kind, packet.memory_scope_id, packet.created_at);
|
|
127
|
-
const inserted = adapter
|
|
128
|
-
.prepare('SELECT * FROM agent_situation_packets WHERE packet_id = ?')
|
|
129
|
-
.get(packet.packet_id);
|
|
130
|
-
if (!inserted) {
|
|
131
|
-
throw new Error(`Agent situation packet insert failed: ${packet.packet_id}`);
|
|
132
|
-
}
|
|
133
|
-
return mapPacketRow(inserted);
|
|
134
|
-
}
|
|
135
|
-
function acquireAgentSituationLease(adapter, input) {
|
|
136
|
-
adapter
|
|
137
|
-
.prepare('DELETE FROM agent_situation_refresh_leases WHERE lease_expires_at <= ?')
|
|
138
|
-
.run(input.nowMs);
|
|
139
|
-
try {
|
|
140
|
-
adapter
|
|
141
|
-
.prepare(`
|
|
142
|
-
INSERT INTO agent_situation_refresh_leases (
|
|
143
|
-
cache_key, ranking_policy_version, lease_owner, lease_expires_at, created_at
|
|
144
|
-
)
|
|
145
|
-
VALUES (?, ?, ?, ?, ?)
|
|
146
|
-
`)
|
|
147
|
-
.run(input.cacheKey, input.rankingPolicyVersion, input.leaseOwner, input.nowMs + input.leaseSeconds * 1000, input.nowMs);
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
if (isDuplicateLeaseError(error)) {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
throw error;
|
|
154
|
-
}
|
|
155
|
-
const row = adapter
|
|
156
|
-
.prepare('SELECT * FROM agent_situation_refresh_leases WHERE cache_key = ?')
|
|
157
|
-
.get(input.cacheKey);
|
|
158
|
-
return row ? mapLeaseRow(row) : null;
|
|
159
|
-
}
|
|
160
|
-
function releaseAgentSituationLease(adapter, cacheKey, leaseOwner) {
|
|
161
|
-
adapter
|
|
162
|
-
.prepare('DELETE FROM agent_situation_refresh_leases WHERE cache_key = ? AND lease_owner = ?')
|
|
163
|
-
.run(cacheKey, leaseOwner);
|
|
164
|
-
}
|
|
165
|
-
function delay(ms) {
|
|
166
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
167
|
-
}
|
|
168
|
-
async function waitForFreshPacket(adapter, input) {
|
|
169
|
-
const pollIntervalMs = input.pollIntervalMs ?? 50;
|
|
170
|
-
const maxPollMs = input.maxPollMs ?? 30_000;
|
|
171
|
-
const started = Date.now();
|
|
172
|
-
while (Date.now() - started < maxPollMs) {
|
|
173
|
-
const fresh = getFreshAgentSituationPacket(adapter, input.cacheKey, input.rankingPolicyVersion, input.nowMs);
|
|
174
|
-
if (fresh) {
|
|
175
|
-
return fresh;
|
|
176
|
-
}
|
|
177
|
-
await delay(pollIntervalMs);
|
|
178
|
-
}
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
async function getOrRefreshAgentSituationPacket(adapter, input, builder) {
|
|
182
|
-
if (!input.refresh) {
|
|
183
|
-
const fresh = getFreshAgentSituationPacket(adapter, input.cacheKey, input.rankingPolicyVersion, input.nowMs);
|
|
184
|
-
if (fresh) {
|
|
185
|
-
return fresh;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
const refreshes = inProcessRefreshesForAdapter(adapter);
|
|
189
|
-
const key = `${input.cacheKey}:${input.rankingPolicyVersion}`;
|
|
190
|
-
const existing = refreshes.get(key);
|
|
191
|
-
if (existing) {
|
|
192
|
-
return existing;
|
|
193
|
-
}
|
|
194
|
-
const task = (async () => {
|
|
195
|
-
const lease = acquireAgentSituationLease(adapter, {
|
|
196
|
-
cacheKey: input.cacheKey,
|
|
197
|
-
rankingPolicyVersion: input.rankingPolicyVersion,
|
|
198
|
-
leaseOwner: input.leaseOwner,
|
|
199
|
-
nowMs: input.nowMs,
|
|
200
|
-
leaseSeconds: input.leaseSeconds ?? 30,
|
|
201
|
-
});
|
|
202
|
-
if (!lease) {
|
|
203
|
-
const fresh = await waitForFreshPacket(adapter, input);
|
|
204
|
-
if (fresh) {
|
|
205
|
-
return fresh;
|
|
206
|
-
}
|
|
207
|
-
throw new Error(`Timed out waiting for agent situation refresh lease for cache key ${input.cacheKey} and ranking policy ${input.rankingPolicyVersion}`);
|
|
208
|
-
}
|
|
209
|
-
try {
|
|
210
|
-
const built = await builder();
|
|
211
|
-
return insertAgentSituationPacket(adapter, built);
|
|
212
|
-
}
|
|
213
|
-
finally {
|
|
214
|
-
releaseAgentSituationLease(adapter, input.cacheKey, input.leaseOwner);
|
|
215
|
-
}
|
|
216
|
-
})();
|
|
217
|
-
refreshes.set(key, task);
|
|
218
|
-
try {
|
|
219
|
-
return await task;
|
|
220
|
-
}
|
|
221
|
-
finally {
|
|
222
|
-
refreshes.delete(key);
|
|
223
|
-
if (refreshes.size === 0) {
|
|
224
|
-
inProcessRefreshesByAdapter.delete(adapter);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=packet-store.js.map
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { AgentSituationCandidate, SituationScore } from './types.js';
|
|
2
|
-
export declare const AGENT_SITUATION_V0_POLICY_VERSION = "agent_situation.v0";
|
|
3
|
-
export declare const AGENT_SITUATION_V0_WEIGHTS: {
|
|
4
|
-
readonly urgency: 0.35;
|
|
5
|
-
readonly confidence_gap: 0.2;
|
|
6
|
-
readonly debate_edge: 0.2;
|
|
7
|
-
readonly source_freshness: 0.2;
|
|
8
|
-
readonly cross_channel_signal: 0.15;
|
|
9
|
-
readonly pending_human_question: 0.1;
|
|
10
|
-
readonly open_question_urgency_boost: 0.2;
|
|
11
|
-
};
|
|
12
|
-
export interface AgentSituationRankingPolicy {
|
|
13
|
-
version: string;
|
|
14
|
-
weights: typeof AGENT_SITUATION_V0_WEIGHTS;
|
|
15
|
-
}
|
|
16
|
-
export declare function getAgentSituationRankingPolicy(version?: string): AgentSituationRankingPolicy;
|
|
17
|
-
export declare function scoreAgentSituationCandidate(candidate: AgentSituationCandidate, policy: AgentSituationRankingPolicy): SituationScore;
|
|
18
|
-
//# sourceMappingURL=ranking-policy.d.ts.map
|