@remnic/core 10.0.1 → 10.0.2
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/dist/access-admin-ops-surface.js +32 -31
- package/dist/access-authorization-probe.js +33 -32
- package/dist/access-boundary.js +32 -31
- package/dist/access-cli.js +78 -77
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.js +32 -31
- package/dist/access-http-briefing.js +33 -32
- package/dist/access-http-query.js +34 -33
- package/dist/access-http.js +50 -49
- package/dist/access-identity-continuity-surface.js +32 -31
- package/dist/access-lcm-surface.js +32 -31
- package/dist/access-mcp.js +41 -40
- package/dist/access-namespace-preflight.js +32 -31
- package/dist/access-observe-write-category.js +9 -9
- package/dist/access-observe-write-surface.js +32 -31
- package/dist/access-offline-manifest.js +6 -6
- package/dist/access-operations-batch.js +33 -32
- package/dist/access-operations.js +40 -39
- package/dist/access-recall-concurrency.js +32 -31
- package/dist/access-recall-response.js +32 -31
- package/dist/access-recall-surface.js +32 -31
- package/dist/access-schema.js +8 -8
- package/dist/access-service.js +32 -31
- package/dist/access-surface-catalog.js +34 -33
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-recall.js +10 -10
- package/dist/briefing.js +6 -6
- package/dist/causal-consolidation.js +7 -7
- package/dist/{chunk-KM2HQZR3.js → chunk-2J3M2KV4.js} +2 -2
- package/dist/{chunk-B2UCJX76.js → chunk-2SYRHFUG.js} +2 -2
- package/dist/{chunk-SBBZXDVJ.js → chunk-36BUOTVN.js} +2 -2
- package/dist/{chunk-A7V7GZ7F.js → chunk-3J54RR3A.js} +2 -2
- package/dist/{chunk-QJWZJ7HL.js → chunk-4A2UMSNB.js} +7 -5
- package/dist/chunk-4A2UMSNB.js.map +1 -0
- package/dist/{chunk-WWUFQ3AG.js → chunk-4G2COUSD.js} +2 -2
- package/dist/{chunk-GYLDYYRA.js → chunk-7IGNDEUJ.js} +4 -4
- package/dist/chunk-7PZHH4KC.js +63 -0
- package/dist/chunk-7PZHH4KC.js.map +1 -0
- package/dist/{chunk-PXDEIJL5.js → chunk-A5N6ZEUW.js} +2 -2
- package/dist/{chunk-3UP6NP4C.js → chunk-AALVXJJ7.js} +2 -2
- package/dist/{chunk-EPFNPPWH.js → chunk-BAREPCLY.js} +2 -2
- package/dist/{chunk-2TCNEJ36.js → chunk-BNMI3JBV.js} +3 -3
- package/dist/{chunk-WIVBNNA3.js → chunk-CAXMG4JI.js} +2 -2
- package/dist/{chunk-VSPBXHGR.js → chunk-CQBFEGLF.js} +2 -2
- package/dist/{chunk-LTDWZ2HC.js → chunk-CVQWNACA.js} +2 -2
- package/dist/{chunk-YX5F4V7H.js → chunk-DAVONFNK.js} +2 -2
- package/dist/{chunk-BCTDTVSR.js → chunk-DQQ4IM5L.js} +2 -2
- package/dist/{chunk-VH76UQK3.js → chunk-EB3RXN2L.js} +2 -2
- package/dist/{chunk-UP3XXGEN.js → chunk-FNVSBUC3.js} +2 -2
- package/dist/{chunk-V3NKVYUD.js → chunk-GUD6FYQG.js} +2 -2
- package/dist/{chunk-LI3OM3NP.js → chunk-H5YACCE3.js} +5 -5
- package/dist/{chunk-GS6LTJFW.js → chunk-HRZZJ4XB.js} +2 -2
- package/dist/{chunk-7AUC2YSU.js → chunk-I2VQ7WBJ.js} +16 -16
- package/dist/{chunk-BOT276JC.js → chunk-IR5LZCE6.js} +2 -2
- package/dist/{chunk-34TSXVQS.js → chunk-J5CUQRST.js} +2 -2
- package/dist/{chunk-BKPV47BK.js → chunk-JFDKPW54.js} +21 -21
- package/dist/{chunk-DHQUQ34W.js → chunk-JOBE47EJ.js} +2 -2
- package/dist/{chunk-DYZHVVJM.js → chunk-K4TWTUEY.js} +32 -32
- package/dist/{chunk-MJ737UIA.js → chunk-KHOINMCN.js} +2 -2
- package/dist/{chunk-7LCGFUMB.js → chunk-KQAFEZQX.js} +4 -4
- package/dist/{chunk-HPEONBM3.js → chunk-LHOIYLKH.js} +2 -2
- package/dist/chunk-LHOIYLKH.js.map +1 -0
- package/dist/{chunk-GZRTH3WZ.js → chunk-LMZV3H4W.js} +127 -6
- package/dist/chunk-LMZV3H4W.js.map +1 -0
- package/dist/{chunk-R6NHHKXE.js → chunk-M2OPC4BD.js} +2 -2
- package/dist/{chunk-QHHWJVVW.js → chunk-NBK24POV.js} +2 -2
- package/dist/{chunk-SFDKLEIY.js → chunk-OSDAF7HH.js} +2 -2
- package/dist/{chunk-JLUS56YZ.js → chunk-OV7EYM6M.js} +2 -2
- package/dist/{chunk-7DB7KYSR.js → chunk-P57VR7AI.js} +4 -4
- package/dist/{chunk-QPG72IPU.js → chunk-PT6DQK5T.js} +3 -3
- package/dist/{chunk-CRZ7BU6R.js → chunk-PTGPU4DC.js} +2 -2
- package/dist/{chunk-HNU5CZ7E.js → chunk-PWVBVIOP.js} +6 -6
- package/dist/{chunk-TFA6HPOA.js → chunk-QCP75JGO.js} +5 -5
- package/dist/{chunk-UT7WE7RM.js → chunk-RNYVAQX2.js} +2 -2
- package/dist/{chunk-NVZRIHW5.js → chunk-RU744TNX.js} +7 -7
- package/dist/{chunk-DDPPV3KA.js → chunk-RVQVWDSN.js} +2 -2
- package/dist/{chunk-47I2EK6G.js → chunk-SIYZDT2V.js} +3 -3
- package/dist/{chunk-S3BB34NI.js → chunk-SQPC6MUM.js} +3 -3
- package/dist/{chunk-5R4YPRAR.js → chunk-TGF43K66.js} +18 -18
- package/dist/{chunk-VXCTQ3B3.js → chunk-U4SG4HKQ.js} +2 -2
- package/dist/{chunk-RGGXSN5A.js → chunk-U6HWKOGD.js} +2 -2
- package/dist/{chunk-RWZXVCGX.js → chunk-UK5EH7AI.js} +4 -4
- package/dist/{chunk-DB6XFMOF.js → chunk-VC4J4UTI.js} +5 -5
- package/dist/{chunk-FB6FQT4P.js → chunk-VQTPEL7O.js} +2 -2
- package/dist/{chunk-3I375S4J.js → chunk-W6K6BC3H.js} +36 -36
- package/dist/{chunk-FYX2LXIX.js → chunk-WI37MWRZ.js} +2 -2
- package/dist/{chunk-DPX3J2N4.js → chunk-WPMDNCGB.js} +2 -2
- package/dist/{chunk-GZ2KV2RO.js → chunk-WWLAKRMX.js} +4 -4
- package/dist/{chunk-DX3ZODO3.js → chunk-WY4IV62O.js} +2 -2
- package/dist/{chunk-VKQI47DJ.js → chunk-Y7427SL7.js} +4 -4
- package/dist/{chunk-TVPDF6CZ.js → chunk-YAPTJQI7.js} +2 -2
- package/dist/{chunk-YY5FM5M7.js → chunk-YFET6A4I.js} +3 -3
- package/dist/{chunk-EUYNHJTK.js → chunk-YVHNBOK2.js} +2 -2
- package/dist/cli.js +64 -63
- package/dist/coding/export-okf-codegraph.js +5 -5
- package/dist/compounding/engine.js +6 -6
- package/dist/config.js +10 -10
- package/dist/connectors/codex-materialize-runner.js +6 -6
- package/dist/connectors/index.js +6 -6
- package/dist/convergence-refresh.js +8 -8
- package/dist/conversation-index/backend.js +2 -2
- package/dist/corpus-watermark.js +8 -8
- package/dist/deep-recall-http-glue.js +9 -9
- package/dist/entity-retrieval.js +6 -6
- package/dist/external-wiki-access.js +33 -32
- package/dist/extraction.js +6 -6
- package/dist/harmonic-retrieval.d.ts.map +1 -1
- package/dist/harmonic-retrieval.js +91 -1
- package/dist/index.js +82 -81
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.js +2 -2
- package/dist/location/index.js +8 -8
- package/dist/maintenance/memory-governance.js +6 -6
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +6 -6
- package/dist/maintenance/rebuild-memory-projection.d.ts.map +1 -1
- package/dist/maintenance/rebuild-memory-projection.js +7 -7
- package/dist/memory-browse-operations.js +33 -32
- package/dist/memory-projection-batch.d.ts +20 -0
- package/dist/memory-projection-batch.d.ts.map +1 -0
- package/dist/memory-projection-batch.js +11 -0
- package/dist/memory-projection-batch.js.map +1 -0
- package/dist/namespaces/migrate.js +7 -7
- package/dist/namespaces/search.js +4 -4
- package/dist/namespaces/storage.js +6 -6
- package/dist/offline-sync-changeset-generations.js +3 -3
- package/dist/offline-sync-embedding-generation.js +2 -2
- package/dist/offline-sync-snapshot-stream.js +6 -6
- package/dist/offline-sync.js +5 -5
- package/dist/operator-doctor-corpus.js +9 -9
- package/dist/operator-toolkit.js +19 -19
- package/dist/orchestration/maintenance.js +14 -14
- package/dist/orchestrator.js +80 -79
- package/dist/recall-navigation-operations.js +33 -32
- package/dist/recall-navigation.js +32 -31
- package/dist/resume-bundles.js +10 -10
- package/dist/search/factory.js +3 -3
- package/dist/search/index.js +3 -3
- package/dist/semantic-consolidation.js +7 -7
- package/dist/semantic-rule-promotion.js +6 -6
- package/dist/semantic-rule-verifier.js +6 -6
- package/dist/source-agent-qualifier.js +6 -6
- package/dist/standup/build.js +6 -6
- package/dist/storage.d.ts +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +5 -5
- package/dist/support-passport/index.js +35 -34
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.js +6 -6
- package/dist/verified-recall.js +6 -6
- package/dist/who-knows-cli.js +7 -7
- package/dist/who-knows.js +6 -6
- package/package.json +2 -2
- package/src/harmonic-retrieval-index.test.ts +387 -0
- package/src/harmonic-retrieval.ts +181 -15
- package/src/maintenance/rebuild-memory-projection.ts +3 -0
- package/src/memory-projection-batch.ts +82 -0
- package/src/storage.ts +1 -1
- package/dist/chunk-GZRTH3WZ.js.map +0 -1
- package/dist/chunk-HPEONBM3.js.map +0 -1
- package/dist/chunk-QJWZJ7HL.js.map +0 -1
- /package/dist/{chunk-KM2HQZR3.js.map → chunk-2J3M2KV4.js.map} +0 -0
- /package/dist/{chunk-B2UCJX76.js.map → chunk-2SYRHFUG.js.map} +0 -0
- /package/dist/{chunk-SBBZXDVJ.js.map → chunk-36BUOTVN.js.map} +0 -0
- /package/dist/{chunk-A7V7GZ7F.js.map → chunk-3J54RR3A.js.map} +0 -0
- /package/dist/{chunk-WWUFQ3AG.js.map → chunk-4G2COUSD.js.map} +0 -0
- /package/dist/{chunk-GYLDYYRA.js.map → chunk-7IGNDEUJ.js.map} +0 -0
- /package/dist/{chunk-PXDEIJL5.js.map → chunk-A5N6ZEUW.js.map} +0 -0
- /package/dist/{chunk-3UP6NP4C.js.map → chunk-AALVXJJ7.js.map} +0 -0
- /package/dist/{chunk-EPFNPPWH.js.map → chunk-BAREPCLY.js.map} +0 -0
- /package/dist/{chunk-2TCNEJ36.js.map → chunk-BNMI3JBV.js.map} +0 -0
- /package/dist/{chunk-WIVBNNA3.js.map → chunk-CAXMG4JI.js.map} +0 -0
- /package/dist/{chunk-VSPBXHGR.js.map → chunk-CQBFEGLF.js.map} +0 -0
- /package/dist/{chunk-LTDWZ2HC.js.map → chunk-CVQWNACA.js.map} +0 -0
- /package/dist/{chunk-YX5F4V7H.js.map → chunk-DAVONFNK.js.map} +0 -0
- /package/dist/{chunk-BCTDTVSR.js.map → chunk-DQQ4IM5L.js.map} +0 -0
- /package/dist/{chunk-VH76UQK3.js.map → chunk-EB3RXN2L.js.map} +0 -0
- /package/dist/{chunk-UP3XXGEN.js.map → chunk-FNVSBUC3.js.map} +0 -0
- /package/dist/{chunk-V3NKVYUD.js.map → chunk-GUD6FYQG.js.map} +0 -0
- /package/dist/{chunk-LI3OM3NP.js.map → chunk-H5YACCE3.js.map} +0 -0
- /package/dist/{chunk-GS6LTJFW.js.map → chunk-HRZZJ4XB.js.map} +0 -0
- /package/dist/{chunk-7AUC2YSU.js.map → chunk-I2VQ7WBJ.js.map} +0 -0
- /package/dist/{chunk-BOT276JC.js.map → chunk-IR5LZCE6.js.map} +0 -0
- /package/dist/{chunk-34TSXVQS.js.map → chunk-J5CUQRST.js.map} +0 -0
- /package/dist/{chunk-BKPV47BK.js.map → chunk-JFDKPW54.js.map} +0 -0
- /package/dist/{chunk-DHQUQ34W.js.map → chunk-JOBE47EJ.js.map} +0 -0
- /package/dist/{chunk-DYZHVVJM.js.map → chunk-K4TWTUEY.js.map} +0 -0
- /package/dist/{chunk-MJ737UIA.js.map → chunk-KHOINMCN.js.map} +0 -0
- /package/dist/{chunk-7LCGFUMB.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-R6NHHKXE.js.map → chunk-M2OPC4BD.js.map} +0 -0
- /package/dist/{chunk-QHHWJVVW.js.map → chunk-NBK24POV.js.map} +0 -0
- /package/dist/{chunk-SFDKLEIY.js.map → chunk-OSDAF7HH.js.map} +0 -0
- /package/dist/{chunk-JLUS56YZ.js.map → chunk-OV7EYM6M.js.map} +0 -0
- /package/dist/{chunk-7DB7KYSR.js.map → chunk-P57VR7AI.js.map} +0 -0
- /package/dist/{chunk-QPG72IPU.js.map → chunk-PT6DQK5T.js.map} +0 -0
- /package/dist/{chunk-CRZ7BU6R.js.map → chunk-PTGPU4DC.js.map} +0 -0
- /package/dist/{chunk-HNU5CZ7E.js.map → chunk-PWVBVIOP.js.map} +0 -0
- /package/dist/{chunk-TFA6HPOA.js.map → chunk-QCP75JGO.js.map} +0 -0
- /package/dist/{chunk-UT7WE7RM.js.map → chunk-RNYVAQX2.js.map} +0 -0
- /package/dist/{chunk-NVZRIHW5.js.map → chunk-RU744TNX.js.map} +0 -0
- /package/dist/{chunk-DDPPV3KA.js.map → chunk-RVQVWDSN.js.map} +0 -0
- /package/dist/{chunk-47I2EK6G.js.map → chunk-SIYZDT2V.js.map} +0 -0
- /package/dist/{chunk-S3BB34NI.js.map → chunk-SQPC6MUM.js.map} +0 -0
- /package/dist/{chunk-5R4YPRAR.js.map → chunk-TGF43K66.js.map} +0 -0
- /package/dist/{chunk-VXCTQ3B3.js.map → chunk-U4SG4HKQ.js.map} +0 -0
- /package/dist/{chunk-RGGXSN5A.js.map → chunk-U6HWKOGD.js.map} +0 -0
- /package/dist/{chunk-RWZXVCGX.js.map → chunk-UK5EH7AI.js.map} +0 -0
- /package/dist/{chunk-DB6XFMOF.js.map → chunk-VC4J4UTI.js.map} +0 -0
- /package/dist/{chunk-FB6FQT4P.js.map → chunk-VQTPEL7O.js.map} +0 -0
- /package/dist/{chunk-3I375S4J.js.map → chunk-W6K6BC3H.js.map} +0 -0
- /package/dist/{chunk-FYX2LXIX.js.map → chunk-WI37MWRZ.js.map} +0 -0
- /package/dist/{chunk-DPX3J2N4.js.map → chunk-WPMDNCGB.js.map} +0 -0
- /package/dist/{chunk-GZ2KV2RO.js.map → chunk-WWLAKRMX.js.map} +0 -0
- /package/dist/{chunk-DX3ZODO3.js.map → chunk-WY4IV62O.js.map} +0 -0
- /package/dist/{chunk-VKQI47DJ.js.map → chunk-Y7427SL7.js.map} +0 -0
- /package/dist/{chunk-TVPDF6CZ.js.map → chunk-YAPTJQI7.js.map} +0 -0
- /package/dist/{chunk-YY5FM5M7.js.map → chunk-YFET6A4I.js.map} +0 -0
- /package/dist/{chunk-EUYNHJTK.js.map → chunk-YVHNBOK2.js.map} +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { MemoryProjectionCurrentState } from "./types.js";
|
|
2
|
+
import {
|
|
3
|
+
memoryCurrentSelectExpressions,
|
|
4
|
+
openProjectionReadonly,
|
|
5
|
+
parseCurrentRow,
|
|
6
|
+
} from "./memory-projection-store.js";
|
|
7
|
+
|
|
8
|
+
export interface ProjectedMemoryStateBatch {
|
|
9
|
+
states: Map<string, MemoryProjectionCurrentState>;
|
|
10
|
+
/** Meta `rebuiltAt`; null when the projection never recorded one. */
|
|
11
|
+
rebuiltAt: string | null;
|
|
12
|
+
/**
|
|
13
|
+
* True only when the writer recorded that `memory_current` covers every active
|
|
14
|
+
* memory (an unscoped rebuild). Projections written before this flag existed,
|
|
15
|
+
* and scoped rebuilds, read as false.
|
|
16
|
+
*/
|
|
17
|
+
complete: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Read many current-state rows over ONE readonly connection, plus the meta the
|
|
22
|
+
* recall path needs to decide whether the index can be trusted. Ids absent from
|
|
23
|
+
* `memory_current` are simply missing from the map. Null means the projection
|
|
24
|
+
* could not be opened or read.
|
|
25
|
+
*/
|
|
26
|
+
export function readProjectedMemoryStates(
|
|
27
|
+
memoryDir: string,
|
|
28
|
+
memoryIds: Iterable<string>,
|
|
29
|
+
): ProjectedMemoryStateBatch | null {
|
|
30
|
+
const db = openProjectionReadonly(memoryDir);
|
|
31
|
+
if (!db) return null;
|
|
32
|
+
try {
|
|
33
|
+
const currentSelect = memoryCurrentSelectExpressions(db);
|
|
34
|
+
const select = db.prepare(
|
|
35
|
+
`
|
|
36
|
+
SELECT
|
|
37
|
+
memory_id,
|
|
38
|
+
category,
|
|
39
|
+
status,
|
|
40
|
+
lifecycle_state,
|
|
41
|
+
path_rel,
|
|
42
|
+
created_at,
|
|
43
|
+
updated_at,
|
|
44
|
+
archived_at,
|
|
45
|
+
superseded_at,
|
|
46
|
+
entity_ref,
|
|
47
|
+
source,
|
|
48
|
+
confidence,
|
|
49
|
+
confidence_tier,
|
|
50
|
+
memory_kind,
|
|
51
|
+
access_count,
|
|
52
|
+
last_accessed,
|
|
53
|
+
${currentSelect.tagsJson},
|
|
54
|
+
${currentSelect.previewText},
|
|
55
|
+
${currentSelect.privateRecord}
|
|
56
|
+
FROM memory_current
|
|
57
|
+
WHERE memory_id = ?
|
|
58
|
+
`,
|
|
59
|
+
);
|
|
60
|
+
const states = new Map<string, MemoryProjectionCurrentState>();
|
|
61
|
+
for (const memoryId of memoryIds) {
|
|
62
|
+
const state = parseCurrentRow(memoryDir, select.get(memoryId) as Record<string, unknown> | undefined);
|
|
63
|
+
if (state) states.set(memoryId, state);
|
|
64
|
+
}
|
|
65
|
+
const meta = new Map<string, unknown>(
|
|
66
|
+
(db.prepare("SELECT key, value FROM meta WHERE key IN ('rebuiltAt', 'complete')").all() as Array<{
|
|
67
|
+
key: string;
|
|
68
|
+
value: unknown;
|
|
69
|
+
}>).map((row) => [row.key, row.value]),
|
|
70
|
+
);
|
|
71
|
+
const rebuiltAt = meta.get("rebuiltAt");
|
|
72
|
+
return {
|
|
73
|
+
states,
|
|
74
|
+
rebuiltAt: typeof rebuiltAt === "string" ? rebuiltAt : null,
|
|
75
|
+
complete: meta.get("complete") === "true",
|
|
76
|
+
};
|
|
77
|
+
} catch {
|
|
78
|
+
return null;
|
|
79
|
+
} finally {
|
|
80
|
+
db.close();
|
|
81
|
+
}
|
|
82
|
+
}
|
package/src/storage.ts
CHANGED
|
@@ -4679,7 +4679,7 @@ export class StorageManager extends TombstoneBlockedCaptureIndexHost {
|
|
|
4679
4679
|
* Lists demoted-but-reachable memory paths under `cold/` without parsing
|
|
4680
4680
|
* frontmatter, so the divergence watermark counts the cold tier too.
|
|
4681
4681
|
*/
|
|
4682
|
-
async collectColdMemoryPaths(options?: { propagateReadErrors?: boolean }): Promise<string[]> {
|
|
4682
|
+
async collectColdMemoryPaths(options?: { propagateReadErrors?: boolean } & CorpusReadOptions): Promise<string[]> {
|
|
4683
4683
|
return this.memoryReadStore.collectColdMemoryPaths(options);
|
|
4684
4684
|
}
|
|
4685
4685
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/harmonic-retrieval.ts"],"sourcesContent":["import path from \"node:path\";\nimport { listJsonFilesStrict, readJsonFile } from \"./json-store.js\";\nimport { throwIfAborted } from \"./abort-error.js\";\nimport { inferMemoryStatus, toMemoryPathRel } from \"./memory-lifecycle-ledger-utils.js\";\n import {\n HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY,\n resolveAbstractionNodeStoreDir,\n validateAbstractionNode,\n type AbstractionNode,\n } from \"./abstraction-nodes.js\";\nimport { resolveCueAnchorStoreDir, validateCueAnchor, type CueAnchor, type CueAnchorType } from \"./cue-anchors.js\";\nimport { compareDeterministicStrings } from \"./deterministic-order.js\";\nimport { countRecallTokenOverlap, normalizeRecallTokens } from \"./recall-tokenization.js\";\nimport { stripAttributesSuffix } from \"./structured-attributes.js\";\nimport { isValidityExpiredNow } from \"./temporal-validity.js\";\nimport { isRecord } from \"./store-contract.js\";\nimport { isSupportPassportPrivateMemory } from \"./support-passport/card-projection.js\";\nimport type { MemoryFile } from \"./types.js\";\n\ntype SourceMemoryMap = Map<string, MemoryFile>;\n\nasync function readSourceMemories(options: {\n memoryDir: string;\n abortSignal?: AbortSignal;\n}): Promise<SourceMemoryMap> {\n const sourceMemories: SourceMemoryMap = new Map();\n try {\n const { StorageManager } = await import(\"./storage.js\");\n const storage = new StorageManager(options.memoryDir);\n const [hotMemories, coldMemories] = await Promise.all([\n storage.readAllMemories({ abortSignal: options.abortSignal }),\n storage.readAllColdMemories(),\n ]);\n for (const memory of [...hotMemories, ...coldMemories]) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n sourceMemories.set(memory.frontmatter.id, memory);\n }\n } catch {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n // Source validation fails closed when the authorized memory directory is\n // unreadable. Source-less nodes remain eligible for retrieval.\n sourceMemories.clear();\n }\n return sourceMemories;\n}\n\nfunction parseSourceMemoryInsertedAt(node: AbstractionNode): Map<string, string> {\n const insertedAtById = new Map<string, string>();\n const insertedAtRaw = node.metadata?.[HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY];\n if (!insertedAtRaw) return insertedAtById;\n try {\n const parsed = JSON.parse(insertedAtRaw) as unknown;\n if (!isRecord(parsed)) return insertedAtById;\n for (const [memoryId, value] of Object.entries(parsed)) {\n if (typeof value === \"string\") insertedAtById.set(memoryId, value);\n }\n } catch {\n // Malformed insertion metadata leaves ordering on the recordedAt fallback.\n }\n return insertedAtById;\n}\n\nfunction projectSourceBackedNode(\n node: AbstractionNode,\n sourceMemories: SourceMemoryMap,\n memoryDir: string,\n temporalExpiredInInjection: boolean,\n nowMs: number\n): AbstractionNode | null {\n const sourceMemoryIds = node.sourceMemoryIds ?? [];\n if (sourceMemoryIds.length === 0) return node;\n\n const activeSourceMemoryIds = sourceMemoryIds.filter((memoryId) => {\n const memory = sourceMemories.get(memoryId);\n return (\n memory !== undefined &&\n // #2332: a private support-passport record leaves the eligible set the\n // same way a rejected one does — a node title or anchor attribution\n // rebuilt from it would leak governed metadata into the deep-recall\n // frontier (and every other graph reader) before any content check runs.\n !isSupportPassportPrivateMemory(memory) &&\n inferMemoryStatus(memory.frontmatter, toMemoryPathRel(memoryDir, memory.path)) === \"active\" &&\n (temporalExpiredInInjection || !isValidityExpiredNow(memory.frontmatter, nowMs))\n );\n });\n if (activeSourceMemoryIds.length === 0) return null;\n\n // Newest-first source order keeps the projected title and summary on the most\n // recently inserted facts. Equal or missing timestamps fall back to ascending\n // id order, which matches the stored sourceMemoryIds order.\n const insertedAtById = parseSourceMemoryInsertedAt(node);\n const insertedAtMs = (memoryId: string): number => {\n const parsedMs = Date.parse(insertedAtById.get(memoryId) ?? \"\");\n return Number.isFinite(parsedMs) ? parsedMs : Date.parse(node.recordedAt);\n };\n activeSourceMemoryIds.sort(\n (left, right) =>\n insertedAtMs(right) - insertedAtMs(left) || compareDeterministicStrings(left, right)\n );\n\n const activeMemories = activeSourceMemoryIds.flatMap((memoryId) => {\n const memory = sourceMemories.get(memoryId);\n return memory ? [memory] : [];\n });\n const activeContents = activeMemories.map((memory) =>\n memory.frontmatter.structuredAttributes ? stripAttributesSuffix(memory.content) : memory.content\n );\n let metadata: Record<string, string> | undefined;\n const activeInsertedAt = activeSourceMemoryIds.flatMap((memoryId) => {\n const value = insertedAtById.get(memoryId);\n return typeof value === \"string\" ? [[memoryId, value] as const] : [];\n });\n if (activeInsertedAt.length > 0) {\n metadata = {\n [HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY]: JSON.stringify(Object.fromEntries(activeInsertedAt)),\n };\n }\n\n return {\n ...node,\n sourceMemoryIds: activeSourceMemoryIds,\n title: activeContents[0]?.slice(0, 80) ?? node.title,\n summary: activeContents.slice(0, 3).join(\"; \").slice(0, 400),\n tags: [...new Set(activeMemories.flatMap((memory) => memory.frontmatter.tags))].sort(compareDeterministicStrings),\n entityRefs: [\n ...new Set(\n activeMemories.flatMap((memory) =>\n typeof memory.frontmatter.entityRef === \"string\" ? [memory.frontmatter.entityRef] : []\n )\n ),\n ].sort(compareDeterministicStrings),\n metadata,\n };\n}\n\nfunction anchorMatchesProjectedNode(\n anchor: CueAnchor,\n nodeRef: string,\n node: AbstractionNode,\n allowLegacyAttribution: boolean\n): boolean {\n const activeSourceMemoryIds = node.sourceMemoryIds ?? [];\n if (activeSourceMemoryIds.length === 0) return true;\n if (!anchor.sourceMemoryIdsByNodeRef) return allowLegacyAttribution;\n const anchorSourceMemoryIds = anchor.sourceMemoryIdsByNodeRef[nodeRef] ?? [];\n return anchorSourceMemoryIds.some((sourceMemoryId) => activeSourceMemoryIds.includes(sourceMemoryId));\n}\n\nexport interface HarmonicMatchedAnchor {\n anchorId: string;\n anchorType: CueAnchorType;\n anchorValue: string;\n}\n\nexport interface HarmonicRetrievalResult {\n node: AbstractionNode;\n score: number;\n nodeScore: number;\n anchorScore: number;\n matchedFields: string[];\n matchedAnchors: HarmonicMatchedAnchor[];\n}\n\ninterface HarmonicCandidate {\n node: AbstractionNode;\n nodeScore: number;\n anchorScore: number;\n matchedFields: Set<string>;\n matchedAnchors: Map<string, HarmonicMatchedAnchor>;\n}\n\nfunction scoreNode(node: AbstractionNode, queryTokens: Set<string>): { score: number; matchedFields: string[] } {\n const matchedFields: string[] = [];\n let score = 0;\n\n const titleMatches = countRecallTokenOverlap(queryTokens, node.title);\n if (titleMatches > 0) {\n score += titleMatches * 3;\n matchedFields.push(\"title\");\n }\n\n const summaryMatches = countRecallTokenOverlap(queryTokens, node.summary);\n if (summaryMatches > 0) {\n score += summaryMatches * 3;\n matchedFields.push(\"summary\");\n }\n\n const tagMatches = countRecallTokenOverlap(queryTokens, node.tags?.join(\" \"));\n if (tagMatches > 0) {\n score += tagMatches * 2;\n matchedFields.push(\"tags\");\n }\n\n const entityMatches = countRecallTokenOverlap(queryTokens, node.entityRefs?.join(\" \"));\n if (entityMatches > 0) {\n score += entityMatches * 2;\n matchedFields.push(\"entityRefs\");\n }\n\n const kindMatches = countRecallTokenOverlap(queryTokens, `${node.kind} ${node.abstractionLevel}`);\n if (kindMatches > 0) {\n score += kindMatches;\n matchedFields.push(\"kind\");\n }\n\n return { score, matchedFields };\n}\n\nfunction scoreAnchor(\n anchor: CueAnchor,\n queryTokens: Set<string>,\n eligibleNodeTags: readonly string[]\n): { score: number; matchedFields: string[] } {\n const matchedFields: string[] = [];\n let score = 0;\n\n const valueMatches = countRecallTokenOverlap(queryTokens, anchor.anchorValue);\n const normalizedMatches = countRecallTokenOverlap(queryTokens, anchor.normalizedCue);\n const cueMatches = Math.max(valueMatches, normalizedMatches);\n if (cueMatches > 0) {\n score += cueMatches * 4;\n if (valueMatches > 0) matchedFields.push(\"anchorValue\");\n if (normalizedMatches > 0) matchedFields.push(\"anchor\");\n }\n\n const typeMatches = countRecallTokenOverlap(queryTokens, anchor.anchorType);\n if (typeMatches > 0) {\n score += typeMatches;\n matchedFields.push(\"anchorType\");\n }\n\n const tagMatches = countRecallTokenOverlap(queryTokens, eligibleNodeTags.join(\" \"));\n if (tagMatches > 0) {\n score += tagMatches * 2;\n matchedFields.push(\"anchorTags\");\n }\n\n return { score, matchedFields };\n}\n\nexport async function readAbstractionNodes(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n}): Promise<AbstractionNode[]> {\n const rootDir = resolveAbstractionNodeStoreDir(options.memoryDir, options.abstractionNodeStoreDir);\n const files = await listJsonFilesStrict(path.join(rootDir, \"nodes\"), { allowMissingDirectory: true });\n const nodes: AbstractionNode[] = [];\n for (const filePath of files) {\n try {\n nodes.push(validateAbstractionNode(await readJsonFile(filePath)));\n } catch {\n // fail-open: invalid artifacts stay visible via status tooling instead of recall\n }\n }\n return nodes;\n}\n\nexport async function readCueAnchors(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n}): Promise<CueAnchor[]> {\n const abstractionRoot = resolveAbstractionNodeStoreDir(options.memoryDir, options.abstractionNodeStoreDir);\n const rootDir = resolveCueAnchorStoreDir(abstractionRoot);\n const files = await listJsonFilesStrict(rootDir, { allowMissingDirectory: true });\n const anchors: CueAnchor[] = [];\n for (const filePath of files) {\n try {\n anchors.push(validateCueAnchor(await readJsonFile(filePath)));\n } catch {\n // fail-open: invalid artifacts stay visible via status tooling instead of recall\n }\n }\n return anchors;\n}\n\nexport interface ProjectedHarmonicGraph {\n nodes: AbstractionNode[];\n anchors: CueAnchor[];\n}\n\n/**\n * Read nodes + anchors and project BOTH against the namespace's current active\n * memories. This is the single projection every graph reader shares: a raw\n * `readAbstractionNodes` / `readCueAnchors` pair still carries the stored title,\n * summary, tags, and anchor attribution of a memory that was later rejected,\n * quarantined, or otherwise moved out of the active set, so a second reader\n * that skipped the projection could leak governed metadata even when the\n * memory itself is excluded from the final results.\n *\n * - A node whose every source memory left the active set is dropped.\n * - A surviving node's title/summary/tags/entityRefs are rebuilt from its\n * active sources only.\n * - An anchor keeps a node reference only while its attribution runs through\n * one of that node's surviving active sources, and is dropped once no\n * reference survives.\n */\nexport async function readProjectedHarmonicGraph(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n anchorsEnabled: boolean;\n abortSignal?: AbortSignal;\n temporalExpiredInInjection?: boolean;\n nowMs?: number;\n}): Promise<ProjectedHarmonicGraph> {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodes = await readAbstractionNodes(options);\n const sourceBacked = nodes.some((node) => (node.sourceMemoryIds?.length ?? 0) > 0);\n const sourceMemories: SourceMemoryMap = sourceBacked\n ? await readSourceMemories(options)\n : new Map<string, MemoryFile>();\n const nowMs = options.nowMs ?? Date.now();\n // A node whose full stored source set survived projection keeps legacy\n // anchor attribution (an anchor written before per-node source ids existed).\n const legacyCompatibleNodeRefs = new Set<string>();\n const projectedNodes = nodes.flatMap((node) => {\n const projected = projectSourceBackedNode(\n node,\n sourceMemories,\n options.memoryDir,\n options.temporalExpiredInInjection === true,\n nowMs\n );\n if (\n projected &&\n (node.sourceMemoryIds?.length ?? 0) > 0 &&\n projected.sourceMemoryIds?.length === node.sourceMemoryIds?.length\n ) {\n legacyCompatibleNodeRefs.add(node.nodeId);\n }\n return projected ? [projected] : [];\n });\n if (!options.anchorsEnabled) return { nodes: projectedNodes, anchors: [] };\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodeIndex = new Map(projectedNodes.map((node) => [node.nodeId, node]));\n const anchors = (await readCueAnchors(options)).flatMap((anchor) => {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodeRefs = anchor.nodeRefs.filter((nodeRef) => {\n const node = nodeIndex.get(nodeRef);\n return (\n node !== undefined &&\n anchorMatchesProjectedNode(anchor, nodeRef, node, legacyCompatibleNodeRefs.has(nodeRef))\n );\n });\n return nodeRefs.length > 0 ? [{ ...anchor, nodeRefs }] : [];\n });\n return { nodes: projectedNodes, anchors };\n}\n\nexport async function searchHarmonicRetrieval(options: {\n memoryDir: string;\n abstractionNodeStoreDir?: string;\n query: string;\n maxResults: number;\n sessionKey?: string;\n anchorsEnabled: boolean;\n abortSignal?: AbortSignal;\n temporalExpiredInInjection?: boolean;\n}): Promise<HarmonicRetrievalResult[]> {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const queryTokens = new Set(normalizeRecallTokens(options.query, [\"what\", \"which\"]));\n if (queryTokens.size === 0 || options.maxResults <= 0) return [];\n\n // One projection for every graph reader: nodes and anchors both arrive\n // already narrowed to the namespace's current active memories.\n const { nodes: eligibleNodes, anchors } = await readProjectedHarmonicGraph(options);\n const candidates = new Map<string, HarmonicCandidate>();\n\n for (const node of eligibleNodes) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const { score, matchedFields } = scoreNode(node, queryTokens);\n if (score <= 0) continue;\n candidates.set(node.nodeId, {\n node,\n nodeScore: score,\n anchorScore: 0,\n matchedFields: new Set(matchedFields),\n matchedAnchors: new Map(),\n });\n }\n\n if (options.anchorsEnabled) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n const nodeIndex = new Map(eligibleNodes.map((node) => [node.nodeId, node]));\n for (const anchor of anchors) {\n throwIfAborted(options.abortSignal, \"harmonic retrieval aborted\");\n // `nodeRefs` are the projection's surviving references already.\n const eligibleNodeRefs = anchor.nodeRefs;\n const eligibleNodeTags = new Set(eligibleNodeRefs.flatMap((nodeRef) => nodeIndex.get(nodeRef)?.tags ?? []));\n const eligibleAnchorTags = anchor.tags?.filter((tag) => eligibleNodeTags.has(tag)) ?? [];\n const { score, matchedFields } = scoreAnchor(anchor, queryTokens, eligibleAnchorTags);\n if (score <= 0) continue;\n for (const nodeRef of eligibleNodeRefs) {\n const node = nodeIndex.get(nodeRef);\n if (!node) continue;\n const existing = candidates.get(nodeRef) ?? {\n node,\n nodeScore: 0,\n anchorScore: 0,\n matchedFields: new Set<string>(),\n matchedAnchors: new Map<string, HarmonicMatchedAnchor>(),\n };\n existing.anchorScore += score;\n existing.matchedFields.add(\"anchor\");\n for (const field of matchedFields) existing.matchedFields.add(field);\n existing.matchedAnchors.set(anchor.anchorId, {\n anchorId: anchor.anchorId,\n anchorType: anchor.anchorType,\n anchorValue: anchor.anchorValue,\n });\n candidates.set(nodeRef, existing);\n }\n }\n }\n\n return [...candidates.values()]\n .map((candidate) => {\n let score = candidate.nodeScore + candidate.anchorScore;\n if (options.sessionKey && candidate.node.sessionKey === options.sessionKey) score += 0.5;\n return {\n node: candidate.node,\n score,\n nodeScore: candidate.nodeScore,\n anchorScore: candidate.anchorScore,\n matchedFields: [...candidate.matchedFields].sort(),\n matchedAnchors: [...candidate.matchedAnchors.values()].sort(\n (left, right) =>\n left.anchorType.localeCompare(right.anchorType) || left.anchorValue.localeCompare(right.anchorValue)\n ),\n };\n })\n .filter((result) => result.nodeScore > 0 || result.anchorScore > 0)\n .sort(\n (left, right) =>\n right.score - left.score ||\n right.anchorScore - left.anchorScore ||\n right.node.recordedAt.localeCompare(left.node.recordedAt)\n )\n .slice(0, options.maxResults);\n}\n"],"mappings":"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","names":[]}
|