@remnic/core 1.1.8 → 1.1.10
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-cli.js +44 -41
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +8 -7
- package/dist/access-http.js +20 -17
- package/dist/access-mcp.d.ts +8 -7
- package/dist/access-mcp.js +19 -16
- package/dist/{access-service-C0Rkioec.d.ts → access-service-BTTNyo1i.d.ts} +11 -9
- package/dist/access-service.d.ts +8 -7
- package/dist/access-service.js +18 -15
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +3 -2
- package/dist/active-recall.js +2 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +7 -6
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +6 -6
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/calibration.d.ts +4 -1
- package/dist/calibration.js +10 -5
- package/dist/calibration.js.map +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +5 -2
- package/dist/causal-consolidation.js +17 -11
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/{chunk-AV2WSYZY.js → chunk-2YMTO4ZJ.js} +2 -2
- package/dist/{chunk-SYWJJTNL.js → chunk-363MWCD3.js} +42 -42
- package/dist/{chunk-65ZPH7QA.js → chunk-36CTNQY7.js} +7 -7
- package/dist/{chunk-GZCUW5IC.js → chunk-3IQ2TR4N.js} +5 -5
- package/dist/chunk-3IQ2TR4N.js.map +1 -0
- package/dist/{chunk-TUFG6VXY.js → chunk-4DWOBS2A.js} +2 -2
- package/dist/chunk-4DWOBS2A.js.map +1 -0
- package/dist/{chunk-SRIDOT64.js → chunk-4DXC6HQQ.js} +6 -4
- package/dist/chunk-4DXC6HQQ.js.map +1 -0
- package/dist/{chunk-L2IO2QPY.js → chunk-4IS4SXIQ.js} +17 -13
- package/dist/chunk-4IS4SXIQ.js.map +1 -0
- package/dist/{chunk-RJSVRPNU.js → chunk-57QNCUEZ.js} +19 -12
- package/dist/chunk-57QNCUEZ.js.map +1 -0
- package/dist/{chunk-GRDDGNYQ.js → chunk-5GCNE7CN.js} +105 -499
- package/dist/chunk-5GCNE7CN.js.map +1 -0
- package/dist/{chunk-LOBRX7VD.js → chunk-5UM2VJ6D.js} +12 -1
- package/dist/chunk-5UM2VJ6D.js.map +1 -0
- package/dist/{chunk-XVOIMCVW.js → chunk-6XA7UN4Z.js} +2 -2
- package/dist/{chunk-QJZ77K7F.js → chunk-6Z6UH6TK.js} +26 -12
- package/dist/chunk-6Z6UH6TK.js.map +1 -0
- package/dist/{chunk-ODWDQNRE.js → chunk-7SI52C65.js} +7 -3
- package/dist/chunk-7SI52C65.js.map +1 -0
- package/dist/{chunk-FIXIX6DE.js → chunk-C5HUWVH2.js} +33 -43
- package/dist/chunk-C5HUWVH2.js.map +1 -0
- package/dist/{chunk-NN3TS5BM.js → chunk-D54LZC5L.js} +4 -4
- package/dist/{chunk-KNQ5YJTO.js → chunk-ERUDW6DU.js} +209 -1
- package/dist/chunk-ERUDW6DU.js.map +1 -0
- package/dist/{chunk-E27HOXMX.js → chunk-EYNQTST2.js} +2 -2
- package/dist/chunk-FVQJYWH7.js +52 -0
- package/dist/chunk-FVQJYWH7.js.map +1 -0
- package/dist/{chunk-3FPTCC3Z.js → chunk-GVPWB7EY.js} +2 -2
- package/dist/chunk-HJYHRE4S.js +647 -0
- package/dist/chunk-HJYHRE4S.js.map +1 -0
- package/dist/{chunk-SWRJFKYW.js → chunk-I6BQZSML.js} +5 -5
- package/dist/chunk-IBX3VFOM.js +446 -0
- package/dist/chunk-IBX3VFOM.js.map +1 -0
- package/dist/{chunk-STB3GUYU.js → chunk-KBYWQWSB.js} +8 -8
- package/dist/chunk-KWBPHZUU.js +83 -0
- package/dist/chunk-KWBPHZUU.js.map +1 -0
- package/dist/{chunk-MYH2IBSP.js → chunk-LIO5X3CM.js} +3 -3
- package/dist/{chunk-XGX4TUF6.js → chunk-MCC6KDQF.js} +5 -5
- package/dist/{chunk-4KAN3GZ3.js → chunk-NN2DKE4T.js} +1 -1
- package/dist/chunk-NN2DKE4T.js.map +1 -0
- package/dist/{chunk-R2XRID2N.js → chunk-NN3LPQ5D.js} +5 -5
- package/dist/chunk-NN3LPQ5D.js.map +1 -0
- package/dist/{chunk-WXPPM426.js → chunk-O4XJUPSF.js} +2 -2
- package/dist/{chunk-WSZIHQBK.js → chunk-P77UEOU2.js} +4 -1
- package/dist/{chunk-WSZIHQBK.js.map → chunk-P77UEOU2.js.map} +1 -1
- package/dist/{chunk-RLV2F337.js → chunk-PB5KW5PL.js} +2 -2
- package/dist/{chunk-S5SQDIF5.js → chunk-PHNGXFQ6.js} +7 -5
- package/dist/chunk-PHNGXFQ6.js.map +1 -0
- package/dist/{chunk-FEMOX5AD.js → chunk-QR3C7BKQ.js} +7 -7
- package/dist/chunk-QR3C7BKQ.js.map +1 -0
- package/dist/{chunk-ETA2JXP5.js → chunk-RXTFCYQF.js} +2 -2
- package/dist/{chunk-Q7FJ5ZHM.js → chunk-S3IP6R6K.js} +8 -2
- package/dist/{chunk-Q7FJ5ZHM.js.map → chunk-S3IP6R6K.js.map} +1 -1
- package/dist/{chunk-3LCWFNVS.js → chunk-SKE7JYKA.js} +2 -2
- package/dist/{chunk-T65SHTJP.js → chunk-VQXK37XA.js} +1 -1
- package/dist/chunk-VQXK37XA.js.map +1 -0
- package/dist/{chunk-DWMXVUGO.js → chunk-VX2IUQFE.js} +98 -10
- package/dist/chunk-VX2IUQFE.js.map +1 -0
- package/dist/{chunk-KHJRMWO4.js → chunk-WGK4VHGP.js} +84 -22
- package/dist/chunk-WGK4VHGP.js.map +1 -0
- package/dist/{chunk-4IT6WL23.js → chunk-WTFWLUSX.js} +2 -2
- package/dist/{chunk-67YLUWLG.js → chunk-XJKFSSDW.js} +3 -3
- package/dist/chunk-XJKFSSDW.js.map +1 -0
- package/dist/{chunk-ASIQZXYO.js → chunk-XMVFHBHT.js} +2 -2
- package/dist/{chunk-Q5TJRAGE.js → chunk-Y5KDIOKF.js} +3 -3
- package/dist/{chunk-FCGWNWG4.js → chunk-Z5S5HNGY.js} +31 -29
- package/dist/chunk-Z5S5HNGY.js.map +1 -0
- package/dist/{chunk-OJMD2LIW.js → chunk-ZL4S7ARC.js} +3 -3
- package/dist/{cli-CIATRu8o.d.ts → cli-BrEwQTnW.d.ts} +4 -4
- package/dist/cli.d.ts +9 -8
- package/dist/cli.js +33 -31
- package/dist/codex-cli-fallback.d.ts +44 -0
- package/dist/codex-cli-fallback.js +12 -0
- package/dist/{codex-materialize-xVqbEmcm.d.ts → codex-materialize-CQlLTzke.d.ts} +1 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +1 -1
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/day-summary.d.ts +2 -1
- package/dist/day-summary.js +1 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/{engine-MEAYUA7A.js → engine-FOC3IJLA.js} +7 -7
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +6 -6
- package/dist/entity-schema.d.ts +2 -1
- package/dist/explicit-capture.d.ts +7 -6
- package/dist/explicit-capture.js +2 -2
- package/dist/explicit-cue-recall.js +1 -1
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +10 -8
- package/dist/fallback-llm.d.ts +8 -1
- package/dist/fallback-llm.js +5 -3
- package/dist/identity-continuity.d.ts +2 -1
- package/dist/importance.d.ts +2 -1
- package/dist/index-1qIcnbG1.d.ts +34 -0
- package/dist/index.d.ts +15 -13
- package/dist/index.js +175 -168
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/live-connectors-runner.js +2 -2
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-llm.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/{memory-governance-G3XODEXW.js → memory-governance-F3QOJGEY.js} +7 -7
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/{memory-projection-store-lCzmu4JX.d.ts → memory-projection-store-CY8TU40w.d.ts} +1 -1
- package/dist/memory-projection-store.d.ts +3 -2
- package/dist/memory-projection-store.js +1 -1
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/{migrate-from-identity-anchor-TTEDEJGX.js → migrate-from-identity-anchor-G27MCD6A.js} +2 -2
- package/dist/model-registry.js +1 -1
- package/dist/models-json.d.ts +2 -1
- package/dist/models-json.js +1 -1
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/objective-state-writers.d.ts +23 -1
- package/dist/objective-state-writers.js +10 -306
- package/dist/objective-state-writers.js.map +1 -1
- package/dist/objective-state.d.ts +7 -1
- package/dist/objective-state.js +3 -1
- package/dist/operator-toolkit.d.ts +3 -2
- package/dist/operator-toolkit.js +11 -11
- package/dist/opik-exporter.js +2 -2
- package/dist/opik-exporter.js.map +1 -1
- package/dist/{orchestrator-CvUYwuaL.d.ts → orchestrator-6IvQ-Phj.d.ts} +6 -5
- package/dist/orchestrator.d.ts +7 -6
- package/dist/orchestrator.js +37 -35
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{peers-6OSQ3NK6.js → peers-HCVGHMAE.js} +3 -3
- package/dist/peers-HCVGHMAE.js.map +1 -0
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/{port-BkWL7hqo.d.ts → port-B6VEDIkC.d.ts} +7 -1
- package/dist/qmd-recall-cache.d.ts +3 -2
- package/dist/qmd.d.ts +4 -2
- package/dist/qmd.js +1 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -1
- package/dist/recall-xray.js +2 -2
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resolve-provider-secret.d.ts +2 -1
- package/dist/resolve-provider-secret.js +3 -1
- package/dist/resume-bundles.js +4 -4
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/sanitize.js +1 -1
- package/dist/schemas.d.ts +22 -22
- package/dist/{semantic-consolidation-CGiH52qa.d.ts → semantic-consolidation-ByBXb-sf.d.ts} +2 -2
- package/dist/semantic-consolidation.d.ts +4 -3
- package/dist/semantic-consolidation.js +6 -6
- package/dist/semantic-rule-promotion.js +6 -6
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +6 -6
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/signal.d.ts +2 -1
- package/dist/source-attribution.d.ts +1 -1
- package/dist/source-attribution.js +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +5 -5
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +8 -6
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +4 -3
- package/dist/tier-routing.d.ts +2 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/types.d.ts +2693 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +6 -6
- package/package.json +1 -1
- package/dist/chunk-4KAN3GZ3.js.map +0 -1
- package/dist/chunk-67YLUWLG.js.map +0 -1
- package/dist/chunk-DWMXVUGO.js.map +0 -1
- package/dist/chunk-FCGWNWG4.js.map +0 -1
- package/dist/chunk-FEMOX5AD.js.map +0 -1
- package/dist/chunk-FIXIX6DE.js.map +0 -1
- package/dist/chunk-GRDDGNYQ.js.map +0 -1
- package/dist/chunk-GZCUW5IC.js.map +0 -1
- package/dist/chunk-KHJRMWO4.js.map +0 -1
- package/dist/chunk-KNQ5YJTO.js.map +0 -1
- package/dist/chunk-L2IO2QPY.js.map +0 -1
- package/dist/chunk-LOBRX7VD.js.map +0 -1
- package/dist/chunk-M62O4P4T.js +0 -41
- package/dist/chunk-M62O4P4T.js.map +0 -1
- package/dist/chunk-ODWDQNRE.js.map +0 -1
- package/dist/chunk-QJZ77K7F.js.map +0 -1
- package/dist/chunk-R2XRID2N.js.map +0 -1
- package/dist/chunk-RJSVRPNU.js.map +0 -1
- package/dist/chunk-S5SQDIF5.js.map +0 -1
- package/dist/chunk-SRIDOT64.js.map +0 -1
- package/dist/chunk-T65SHTJP.js.map +0 -1
- package/dist/chunk-TUFG6VXY.js.map +0 -1
- package/dist/types-H85grL1f.d.ts +0 -2714
- /package/dist/{chunk-AV2WSYZY.js.map → chunk-2YMTO4ZJ.js.map} +0 -0
- /package/dist/{chunk-SYWJJTNL.js.map → chunk-363MWCD3.js.map} +0 -0
- /package/dist/{chunk-65ZPH7QA.js.map → chunk-36CTNQY7.js.map} +0 -0
- /package/dist/{chunk-XVOIMCVW.js.map → chunk-6XA7UN4Z.js.map} +0 -0
- /package/dist/{chunk-NN3TS5BM.js.map → chunk-D54LZC5L.js.map} +0 -0
- /package/dist/{chunk-E27HOXMX.js.map → chunk-EYNQTST2.js.map} +0 -0
- /package/dist/{chunk-3FPTCC3Z.js.map → chunk-GVPWB7EY.js.map} +0 -0
- /package/dist/{chunk-SWRJFKYW.js.map → chunk-I6BQZSML.js.map} +0 -0
- /package/dist/{chunk-STB3GUYU.js.map → chunk-KBYWQWSB.js.map} +0 -0
- /package/dist/{chunk-MYH2IBSP.js.map → chunk-LIO5X3CM.js.map} +0 -0
- /package/dist/{chunk-XGX4TUF6.js.map → chunk-MCC6KDQF.js.map} +0 -0
- /package/dist/{chunk-WXPPM426.js.map → chunk-O4XJUPSF.js.map} +0 -0
- /package/dist/{chunk-RLV2F337.js.map → chunk-PB5KW5PL.js.map} +0 -0
- /package/dist/{chunk-ETA2JXP5.js.map → chunk-RXTFCYQF.js.map} +0 -0
- /package/dist/{chunk-3LCWFNVS.js.map → chunk-SKE7JYKA.js.map} +0 -0
- /package/dist/{chunk-4IT6WL23.js.map → chunk-WTFWLUSX.js.map} +0 -0
- /package/dist/{chunk-ASIQZXYO.js.map → chunk-XMVFHBHT.js.map} +0 -0
- /package/dist/{chunk-Q5TJRAGE.js.map → chunk-Y5KDIOKF.js.map} +0 -0
- /package/dist/{chunk-OJMD2LIW.js.map → chunk-ZL4S7ARC.js.map} +0 -0
- /package/dist/{engine-MEAYUA7A.js.map → codex-cli-fallback.js.map} +0 -0
- /package/dist/{memory-governance-G3XODEXW.js.map → engine-FOC3IJLA.js.map} +0 -0
- /package/dist/{migrate-from-identity-anchor-TTEDEJGX.js.map → memory-governance-F3QOJGEY.js.map} +0 -0
- /package/dist/{peers-6OSQ3NK6.js.map → migrate-from-identity-anchor-G27MCD6A.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StorageManager,
|
|
3
3
|
normalizeEntityName
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MCC6KDQF.js";
|
|
5
5
|
import {
|
|
6
6
|
readEnvVar,
|
|
7
7
|
resolveHomeDir
|
|
@@ -824,4 +824,4 @@ export {
|
|
|
824
824
|
resolveBriefingSaveDir,
|
|
825
825
|
briefingFilename
|
|
826
826
|
};
|
|
827
|
-
//# sourceMappingURL=chunk-
|
|
827
|
+
//# sourceMappingURL=chunk-WTFWLUSX.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/memory-projection-store.ts
|
|
2
2
|
import path from "path";
|
|
3
|
-
import
|
|
3
|
+
import fs from "fs";
|
|
4
4
|
|
|
5
5
|
// src/runtime/better-sqlite.ts
|
|
6
6
|
import { createRequire } from "module";
|
|
@@ -445,7 +445,7 @@ function readProjectedMemoryBrowse(memoryDir, options) {
|
|
|
445
445
|
}
|
|
446
446
|
try {
|
|
447
447
|
const filePath = path.join(memoryDir, row.path_rel);
|
|
448
|
-
const content = readFileSync(filePath, "utf-8").toLowerCase();
|
|
448
|
+
const content = fs.readFileSync(filePath, "utf-8").toLowerCase();
|
|
449
449
|
return content.includes(normalizedQuery);
|
|
450
450
|
} catch {
|
|
451
451
|
return false;
|
|
@@ -723,4 +723,4 @@ export {
|
|
|
723
723
|
readProjectedLatestReviewQueue,
|
|
724
724
|
readProjectedGovernanceRecord
|
|
725
725
|
};
|
|
726
|
-
//# sourceMappingURL=chunk-
|
|
726
|
+
//# sourceMappingURL=chunk-XJKFSSDW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory-projection-store.ts","../src/runtime/better-sqlite.ts"],"sourcesContent":["import path from \"node:path\";\nimport fs from \"node:fs\";\nimport type {\n MemoryGovernanceAppliedAction,\n MemoryGovernanceMetrics,\n MemoryGovernanceReviewQueueEntry,\n MemoryGovernanceSummary,\n} from \"./maintenance/memory-governance.js\";\nimport type {\n MemoryCategory,\n MemoryLifecycleEvent,\n MemoryProjectionCurrentState,\n MemoryStatus,\n} from \"./types.js\";\nimport {\n openBetterSqlite3,\n type BetterSqlite3Database,\n} from \"./runtime/better-sqlite.js\";\n\nexport const MEMORY_PROJECTION_SCHEMA_VERSION = 2;\n\nexport interface ProjectedMemoryBrowseOptions {\n query?: string;\n status?: string;\n category?: string;\n sort?: \"updated_desc\" | \"updated_asc\" | \"created_desc\" | \"created_asc\";\n limit: number;\n offset: number;\n}\n\nexport interface ProjectedMemoryBrowseRow {\n id: string;\n path: string;\n category: MemoryCategory;\n status: MemoryStatus;\n created?: string;\n updated?: string;\n tags: string[];\n entityRef?: string;\n preview: string;\n}\n\nexport interface ProjectedMemoryBrowsePage {\n total: number;\n memories: ProjectedMemoryBrowseRow[];\n}\n\nexport interface ProjectedEntityMentionRow {\n memoryId: string;\n entityRef: string;\n mentionSource: string;\n created: string;\n updated: string;\n}\n\nexport interface ProjectedNativeKnowledgeChunkRow {\n chunkId: string;\n sourcePath: string;\n title: string;\n sourceKind: string;\n startLine: number;\n endLine: number;\n derivedDate?: string;\n sessionKey?: string;\n workflowKey?: string;\n author?: string;\n agent?: string;\n namespace?: string;\n privacyClass?: string;\n sourceHash?: string;\n preview: string;\n}\n\nexport interface MemoryProjectionGovernanceReviewQueueRow {\n runId: string;\n entryId: string;\n memoryId: string;\n path: string;\n reasonCode: MemoryGovernanceReviewQueueEntry[\"reasonCode\"];\n severity: MemoryGovernanceReviewQueueEntry[\"severity\"];\n suggestedAction: MemoryGovernanceReviewQueueEntry[\"suggestedAction\"];\n suggestedStatus?: MemoryGovernanceReviewQueueEntry[\"suggestedStatus\"];\n relatedMemoryIds: string[];\n}\n\nexport interface MemoryProjectionGovernanceAppliedActionRow {\n runId: string;\n rowKey: string;\n action: MemoryGovernanceAppliedAction[\"action\"];\n memoryId: string;\n reasonCode: MemoryGovernanceAppliedAction[\"reasonCode\"];\n beforeStatus: MemoryGovernanceAppliedAction[\"beforeStatus\"];\n afterStatus?: MemoryGovernanceAppliedAction[\"afterStatus\"];\n originalPath: string;\n currentPath: string;\n}\n\nexport interface ProjectedReviewQueueSnapshot {\n found: boolean;\n runId?: string;\n summary?: MemoryGovernanceSummary;\n metrics?: MemoryGovernanceMetrics;\n reviewQueue?: MemoryGovernanceReviewQueueEntry[];\n appliedActions?: MemoryGovernanceAppliedAction[];\n report?: string;\n}\n\nexport function getMemoryProjectionPath(memoryDir: string): string {\n return path.join(memoryDir, \"state\", \"memory-projection.sqlite\");\n}\n\nfunction listTableColumns(db: BetterSqlite3Database, tableName: string): Set<string> {\n try {\n const rows = db.prepare(`PRAGMA table_info(${tableName})`).all() as Array<{ name?: unknown }>;\n return new Set(rows.map((row) => row.name).filter((name): name is string => typeof name === \"string\"));\n } catch {\n return new Set<string>();\n }\n}\n\nfunction migrateMemoryCurrentTable(db: BetterSqlite3Database): void {\n const columns = listTableColumns(db, \"memory_current\");\n if (columns.size === 0) return;\n\n if (!columns.has(\"tags_json\")) {\n db.exec(`ALTER TABLE memory_current ADD COLUMN tags_json TEXT NOT NULL DEFAULT '[]'`);\n }\n if (!columns.has(\"preview_text\")) {\n db.exec(`ALTER TABLE memory_current ADD COLUMN preview_text TEXT NOT NULL DEFAULT ''`);\n }\n}\n\nfunction memoryCurrentRequiresMigration(db: BetterSqlite3Database): boolean {\n const columns = listTableColumns(db, \"memory_current\");\n return columns.size > 0 && (!columns.has(\"tags_json\") || !columns.has(\"preview_text\"));\n}\n\nfunction migrateProjectionSchemaIfNeeded(memoryDir: string): void {\n const dbPath = getMemoryProjectionPath(memoryDir);\n try {\n const db = openBetterSqlite3(dbPath, { fileMustExist: true });\n try {\n if (!memoryCurrentRequiresMigration(db)) return;\n initializeMemoryProjectionDb(db);\n } finally {\n db.close();\n }\n } catch {\n // Fail open on migration attempts so readonly consumers can still use legacy rows.\n }\n}\n\nexport function memoryCurrentSelectExpressions(db: BetterSqlite3Database): {\n tagsJson: string;\n previewText: string;\n} {\n const columns = listTableColumns(db, \"memory_current\");\n return {\n tagsJson: columns.has(\"tags_json\") ? \"tags_json\" : `'[]' AS tags_json`,\n previewText: columns.has(\"preview_text\") ? \"preview_text\" : `'' AS preview_text`,\n };\n}\n\nexport function initializeMemoryProjectionDb(db: BetterSqlite3Database): void {\n db.exec(`\n CREATE TABLE IF NOT EXISTS meta (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n\n CREATE TABLE IF NOT EXISTS memory_current (\n memory_id TEXT PRIMARY KEY,\n category TEXT NOT NULL,\n status TEXT NOT NULL,\n lifecycle_state TEXT,\n path_rel TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n archived_at TEXT,\n superseded_at TEXT,\n entity_ref TEXT,\n source TEXT NOT NULL,\n confidence REAL NOT NULL,\n confidence_tier TEXT NOT NULL,\n memory_kind TEXT,\n access_count INTEGER,\n last_accessed TEXT,\n tags_json TEXT NOT NULL DEFAULT '[]',\n preview_text TEXT NOT NULL DEFAULT ''\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_current_status\n ON memory_current(status);\n\n CREATE INDEX IF NOT EXISTS idx_memory_current_category\n ON memory_current(category);\n\n CREATE INDEX IF NOT EXISTS idx_memory_current_updated\n ON memory_current(updated_at DESC);\n\n CREATE TABLE IF NOT EXISTS memory_timeline (\n event_id TEXT PRIMARY KEY,\n memory_id TEXT NOT NULL,\n event_type TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n event_order INTEGER NOT NULL,\n actor TEXT NOT NULL,\n reason_code TEXT,\n rule_version TEXT NOT NULL,\n related_memory_ids_json TEXT,\n before_json TEXT,\n after_json TEXT,\n correlation_id TEXT\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_timeline_memory_ts\n ON memory_timeline(memory_id, timestamp, event_order);\n\n CREATE TABLE IF NOT EXISTS memory_entity_mentions (\n memory_id TEXT NOT NULL,\n entity_ref TEXT NOT NULL,\n mention_source TEXT NOT NULL,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (memory_id, entity_ref, mention_source)\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_entity_mentions_entity\n ON memory_entity_mentions(entity_ref, updated_at DESC);\n\n CREATE TABLE IF NOT EXISTS native_knowledge_chunks (\n chunk_id TEXT PRIMARY KEY,\n source_path TEXT NOT NULL,\n title TEXT NOT NULL,\n source_kind TEXT NOT NULL,\n start_line INTEGER NOT NULL,\n end_line INTEGER NOT NULL,\n derived_date TEXT,\n session_key TEXT,\n workflow_key TEXT,\n author TEXT,\n agent TEXT,\n namespace TEXT,\n privacy_class TEXT,\n source_hash TEXT,\n preview_text TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_native_knowledge_source_kind\n ON native_knowledge_chunks(source_kind);\n\n CREATE INDEX IF NOT EXISTS idx_native_knowledge_namespace\n ON native_knowledge_chunks(namespace);\n\n CREATE TABLE IF NOT EXISTS memory_review_runs (\n run_id TEXT PRIMARY KEY,\n created_at TEXT NOT NULL,\n mode TEXT NOT NULL,\n summary_json TEXT NOT NULL,\n metrics_json TEXT NOT NULL,\n applied_actions_json TEXT NOT NULL,\n report_markdown TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_review_runs_created\n ON memory_review_runs(created_at DESC);\n\n CREATE TABLE IF NOT EXISTS memory_review_queue (\n entry_id TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n memory_id TEXT NOT NULL,\n path TEXT NOT NULL,\n reason_code TEXT NOT NULL,\n severity TEXT NOT NULL,\n suggested_action TEXT NOT NULL,\n suggested_status TEXT,\n related_memory_ids_json TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_review_queue_run\n ON memory_review_queue(run_id, reason_code, memory_id);\n\n CREATE TABLE IF NOT EXISTS memory_review_actions (\n row_key TEXT PRIMARY KEY,\n run_id TEXT NOT NULL,\n action TEXT NOT NULL,\n memory_id TEXT NOT NULL,\n reason_code TEXT NOT NULL,\n before_status TEXT NOT NULL,\n after_status TEXT,\n original_path TEXT NOT NULL,\n current_path TEXT NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_memory_review_actions_run\n ON memory_review_actions(run_id, memory_id);\n `);\n\n migrateMemoryCurrentTable(db);\n db.prepare(\"INSERT OR REPLACE INTO meta(key, value) VALUES (?, ?)\")\n .run(\"schemaVersion\", String(MEMORY_PROJECTION_SCHEMA_VERSION));\n}\n\nfunction openProjectionReadonly(memoryDir: string): BetterSqlite3Database | null {\n const dbPath = getMemoryProjectionPath(memoryDir);\n try {\n return openBetterSqlite3(dbPath, { readonly: true, fileMustExist: true });\n } catch {\n return null;\n }\n}\n\nfunction withProjectionReadonly<T>(\n memoryDir: string,\n reader: (db: BetterSqlite3Database) => T,\n): T | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n let needsMigration = false;\n try {\n needsMigration = memoryCurrentRequiresMigration(db);\n return reader(db);\n } catch {\n return null;\n } finally {\n db.close();\n if (needsMigration) {\n migrateProjectionSchemaIfNeeded(memoryDir);\n }\n }\n}\n\nfunction parseStringArray(value: unknown): string[] {\n if (typeof value !== \"string\" || value.length === 0) return [];\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter((entry): entry is string => typeof entry === \"string\") : [];\n } catch {\n return [];\n }\n}\n\nfunction parseJsonObject<T>(value: unknown): T | undefined {\n if (typeof value !== \"string\" || value.length === 0) return undefined;\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n}\n\nexport function parseCurrentRow(\n memoryDir: string,\n row: Record<string, unknown> | undefined,\n): MemoryProjectionCurrentState | null {\n if (!row) return null;\n if (\n typeof row.memory_id !== \"string\" ||\n typeof row.category !== \"string\" ||\n typeof row.status !== \"string\" ||\n typeof row.path_rel !== \"string\" ||\n typeof row.created_at !== \"string\" ||\n typeof row.updated_at !== \"string\" ||\n typeof row.source !== \"string\" ||\n typeof row.confidence !== \"number\" ||\n typeof row.confidence_tier !== \"string\"\n ) {\n return null;\n }\n\n return {\n memoryId: row.memory_id,\n category: row.category as MemoryProjectionCurrentState[\"category\"],\n status: row.status as MemoryStatus,\n lifecycleState:\n typeof row.lifecycle_state === \"string\"\n ? (row.lifecycle_state as MemoryProjectionCurrentState[\"lifecycleState\"])\n : undefined,\n path: path.join(memoryDir, row.path_rel),\n pathRel: row.path_rel,\n created: row.created_at,\n updated: row.updated_at,\n archivedAt: typeof row.archived_at === \"string\" ? row.archived_at : undefined,\n supersededAt: typeof row.superseded_at === \"string\" ? row.superseded_at : undefined,\n entityRef: typeof row.entity_ref === \"string\" ? row.entity_ref : undefined,\n source: row.source,\n confidence: row.confidence,\n confidenceTier: row.confidence_tier as MemoryProjectionCurrentState[\"confidenceTier\"],\n memoryKind:\n typeof row.memory_kind === \"string\"\n ? (row.memory_kind as MemoryProjectionCurrentState[\"memoryKind\"])\n : undefined,\n accessCount: typeof row.access_count === \"number\" ? row.access_count : undefined,\n lastAccessed: typeof row.last_accessed === \"string\" ? row.last_accessed : undefined,\n tags: parseStringArray(row.tags_json),\n preview: typeof row.preview_text === \"string\" ? row.preview_text : \"\",\n };\n}\n\nexport function parseTimelineRows(rows: Array<Record<string, unknown>>): MemoryLifecycleEvent[] {\n const out: MemoryLifecycleEvent[] = [];\n for (const row of rows) {\n if (\n typeof row.event_id !== \"string\" ||\n typeof row.memory_id !== \"string\" ||\n typeof row.event_type !== \"string\" ||\n typeof row.timestamp !== \"string\" ||\n typeof row.actor !== \"string\" ||\n typeof row.rule_version !== \"string\"\n ) {\n continue;\n }\n\n out.push({\n eventId: row.event_id,\n memoryId: row.memory_id,\n eventType: row.event_type as MemoryLifecycleEvent[\"eventType\"],\n timestamp: row.timestamp,\n actor: row.actor,\n reasonCode: typeof row.reason_code === \"string\" ? row.reason_code : undefined,\n ruleVersion: row.rule_version,\n relatedMemoryIds: parseStringArray(row.related_memory_ids_json),\n before: parseJsonObject<MemoryLifecycleEvent[\"before\"]>(row.before_json),\n after: parseJsonObject<MemoryLifecycleEvent[\"after\"]>(row.after_json),\n correlationId: typeof row.correlation_id === \"string\" ? row.correlation_id : undefined,\n });\n }\n\n return out;\n}\n\nexport function readProjectedMemoryState(\n memoryDir: string,\n memoryId: string,\n): MemoryProjectionCurrentState | null {\n return withProjectionReadonly(memoryDir, (db) => {\n const currentSelect = memoryCurrentSelectExpressions(db);\n const row = db\n .prepare(\n `\n SELECT\n memory_id,\n category,\n status,\n lifecycle_state,\n path_rel,\n created_at,\n updated_at,\n archived_at,\n superseded_at,\n entity_ref,\n source,\n confidence,\n confidence_tier,\n memory_kind,\n access_count,\n last_accessed,\n ${currentSelect.tagsJson},\n ${currentSelect.previewText}\n FROM memory_current\n WHERE memory_id = ?\n `,\n )\n .get(memoryId) as Record<string, unknown> | undefined;\n return parseCurrentRow(memoryDir, row);\n });\n}\n\nexport function readProjectedMemoryTimeline(\n memoryDir: string,\n memoryId: string,\n limit: number,\n): MemoryLifecycleEvent[] | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const rows = db\n .prepare(\n `\n SELECT * FROM (\n SELECT\n event_id,\n memory_id,\n event_type,\n timestamp,\n event_order,\n actor,\n reason_code,\n rule_version,\n related_memory_ids_json,\n before_json,\n after_json,\n correlation_id\n FROM memory_timeline\n WHERE memory_id = ?\n ORDER BY timestamp DESC, event_order DESC\n LIMIT ?\n )\n ORDER BY timestamp ASC, event_order ASC\n `,\n )\n .all(memoryId, limit) as Array<Record<string, unknown>>;\n if (rows.length === 0) return null;\n return parseTimelineRows(rows);\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedMemoryBrowse(\n memoryDir: string,\n options: ProjectedMemoryBrowseOptions,\n): ProjectedMemoryBrowsePage | null {\n return withProjectionReadonly(memoryDir, (db) => {\n const normalizedQuery = options.query?.trim().toLowerCase() ?? \"\";\n\n const currentSelect = memoryCurrentSelectExpressions(db);\n const whereClauses: string[] = [];\n const params: unknown[] = [];\n\n if (options.status) {\n whereClauses.push(\"status = ?\");\n params.push(options.status);\n }\n if (options.category) {\n whereClauses.push(\"category = ?\");\n params.push(options.category);\n }\n const sort = options.sort ?? \"updated_desc\";\n const orderBySql = (() => {\n switch (sort) {\n case \"updated_asc\":\n return \"updated_at ASC, created_at ASC, memory_id ASC\";\n case \"created_desc\":\n return \"created_at DESC, updated_at DESC, memory_id ASC\";\n case \"created_asc\":\n return \"created_at ASC, updated_at ASC, memory_id ASC\";\n case \"updated_desc\":\n default:\n return \"updated_at DESC, created_at DESC, memory_id ASC\";\n }\n })();\n const whereSql = whereClauses.length > 0 ? `WHERE ${whereClauses.join(\" AND \")}` : \"\";\n\n if (normalizedQuery) {\n // Query-based browse: fetch all matching rows, filter by full file content, then paginate in JS\n const allRows = db\n .prepare(`\n SELECT\n memory_id,\n path_rel,\n category,\n status,\n created_at,\n updated_at,\n entity_ref,\n ${currentSelect.tagsJson},\n ${currentSelect.previewText}\n FROM memory_current\n ${whereSql}\n ORDER BY ${orderBySql}\n `)\n .all(...params) as Array<Record<string, unknown>>;\n\n const filtered = allRows.filter((row) => {\n if (typeof row.memory_id !== \"string\" || typeof row.path_rel !== \"string\") return false;\n // Check preview, category, entity_ref, tags first (fast)\n const preview = typeof row.preview_text === \"string\" ? row.preview_text.toLowerCase() : \"\";\n const category = typeof row.category === \"string\" ? row.category.toLowerCase() : \"\";\n const entityRef = typeof row.entity_ref === \"string\" ? row.entity_ref.toLowerCase() : \"\";\n const tags = typeof row.tags_json === \"string\" ? row.tags_json.toLowerCase() : \"\";\n if (preview.includes(normalizedQuery) || category.includes(normalizedQuery) ||\n entityRef.includes(normalizedQuery) || tags.includes(normalizedQuery)) {\n return true;\n }\n // Fall back to reading full file content from disk\n try {\n const filePath = path.join(memoryDir, row.path_rel as string);\n const content = fs.readFileSync(filePath, \"utf-8\").toLowerCase();\n return content.includes(normalizedQuery);\n } catch {\n return false;\n }\n });\n\n const pageRows = filtered.slice(options.offset, options.offset + options.limit);\n return {\n total: filtered.length,\n memories: pageRows\n .filter(\n (row) =>\n typeof row.memory_id === \"string\" &&\n typeof row.path_rel === \"string\" &&\n typeof row.category === \"string\" &&\n typeof row.status === \"string\",\n )\n .map((row) => ({\n id: row.memory_id as string,\n path: path.join(memoryDir, row.path_rel as string),\n category: row.category as MemoryCategory,\n status: row.status as MemoryStatus,\n created: typeof row.created_at === \"string\" ? row.created_at : undefined,\n updated: typeof row.updated_at === \"string\" ? row.updated_at : undefined,\n tags: parseStringArray(row.tags_json),\n entityRef: typeof row.entity_ref === \"string\" ? row.entity_ref : undefined,\n preview: typeof row.preview_text === \"string\" ? row.preview_text : \"\",\n })),\n };\n }\n\n // No query: use SQL pagination directly\n const totalRow = db\n .prepare(`SELECT COUNT(*) AS total FROM memory_current ${whereSql}`)\n .get(...params) as { total?: number } | undefined;\n const rows = db\n .prepare(`\n SELECT\n memory_id,\n path_rel,\n category,\n status,\n created_at,\n updated_at,\n entity_ref,\n ${currentSelect.tagsJson},\n ${currentSelect.previewText}\n FROM memory_current\n ${whereSql}\n ORDER BY ${orderBySql}\n LIMIT ? OFFSET ?\n `)\n .all(...params, options.limit, options.offset) as Array<Record<string, unknown>>;\n\n return {\n total: typeof totalRow?.total === \"number\" ? totalRow.total : 0,\n memories: rows\n .filter(\n (row) =>\n typeof row.memory_id === \"string\" &&\n typeof row.path_rel === \"string\" &&\n typeof row.category === \"string\" &&\n typeof row.status === \"string\",\n )\n .map((row) => ({\n id: row.memory_id as string,\n path: path.join(memoryDir, row.path_rel as string),\n category: row.category as MemoryCategory,\n status: row.status as MemoryStatus,\n created: typeof row.created_at === \"string\" ? row.created_at : undefined,\n updated: typeof row.updated_at === \"string\" ? row.updated_at : undefined,\n tags: parseStringArray(row.tags_json),\n entityRef: typeof row.entity_ref === \"string\" ? row.entity_ref : undefined,\n preview: typeof row.preview_text === \"string\" ? row.preview_text : \"\",\n })),\n };\n });\n}\n\nexport function readProjectedEntityMentions(\n memoryDir: string,\n memoryIds?: Set<string>,\n): ProjectedEntityMentionRow[] | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const rows = db\n .prepare(`\n SELECT\n memory_id,\n entity_ref,\n mention_source,\n created_at,\n updated_at\n FROM memory_entity_mentions\n ORDER BY entity_ref ASC, updated_at DESC, memory_id ASC\n `)\n .all() as Array<Record<string, unknown>>;\n\n return rows\n .filter(\n (row) =>\n typeof row.memory_id === \"string\" &&\n typeof row.entity_ref === \"string\" &&\n typeof row.mention_source === \"string\" &&\n typeof row.created_at === \"string\" &&\n typeof row.updated_at === \"string\" &&\n (!memoryIds || memoryIds.has(row.memory_id)),\n )\n .map((row) => ({\n memoryId: row.memory_id as string,\n entityRef: row.entity_ref as string,\n mentionSource: row.mention_source as string,\n created: row.created_at as string,\n updated: row.updated_at as string,\n }));\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedNativeKnowledgeChunks(\n memoryDir: string,\n): ProjectedNativeKnowledgeChunkRow[] | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const rows = db\n .prepare(`\n SELECT\n chunk_id,\n source_path,\n title,\n source_kind,\n start_line,\n end_line,\n derived_date,\n session_key,\n workflow_key,\n author,\n agent,\n namespace,\n privacy_class,\n source_hash,\n preview_text\n FROM native_knowledge_chunks\n ORDER BY source_kind ASC, source_path ASC, start_line ASC\n `)\n .all() as Array<Record<string, unknown>>;\n\n return rows\n .filter(\n (row) =>\n typeof row.chunk_id === \"string\" &&\n typeof row.source_path === \"string\" &&\n typeof row.title === \"string\" &&\n typeof row.source_kind === \"string\" &&\n typeof row.start_line === \"number\" &&\n typeof row.end_line === \"number\" &&\n typeof row.preview_text === \"string\",\n )\n .map((row) => ({\n chunkId: row.chunk_id as string,\n sourcePath: row.source_path as string,\n title: row.title as string,\n sourceKind: row.source_kind as string,\n startLine: row.start_line as number,\n endLine: row.end_line as number,\n derivedDate: typeof row.derived_date === \"string\" ? row.derived_date : undefined,\n sessionKey: typeof row.session_key === \"string\" ? row.session_key : undefined,\n workflowKey: typeof row.workflow_key === \"string\" ? row.workflow_key : undefined,\n author: typeof row.author === \"string\" ? row.author : undefined,\n agent: typeof row.agent === \"string\" ? row.agent : undefined,\n namespace: typeof row.namespace === \"string\" ? row.namespace : undefined,\n privacyClass: typeof row.privacy_class === \"string\" ? row.privacy_class : undefined,\n sourceHash: typeof row.source_hash === \"string\" ? row.source_hash : undefined,\n preview: row.preview_text as string,\n }));\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedLatestReviewQueue(\n memoryDir: string,\n): ProjectedReviewQueueSnapshot | null {\n const db = openProjectionReadonly(memoryDir);\n if (!db) return null;\n\n try {\n const latestRunId =\n (db.prepare(`SELECT value FROM meta WHERE key = 'latestGovernanceRunId'`).get() as { value?: string } | undefined)\n ?.value\n ?? (db.prepare(`SELECT run_id AS value FROM memory_review_runs ORDER BY created_at DESC LIMIT 1`).get() as {\n value?: string;\n } | undefined)?.value;\n if (!latestRunId) {\n return { found: false };\n }\n\n const runRow = db\n .prepare(`\n SELECT\n run_id,\n summary_json,\n metrics_json,\n applied_actions_json,\n report_markdown\n FROM memory_review_runs\n WHERE run_id = ?\n `)\n .get(latestRunId) as Record<string, unknown> | undefined;\n if (!runRow || typeof runRow.run_id !== \"string\") {\n return { found: false };\n }\n\n const queueRows = db\n .prepare(`\n SELECT\n entry_id,\n memory_id,\n path,\n reason_code,\n severity,\n suggested_action,\n suggested_status,\n related_memory_ids_json\n FROM memory_review_queue\n WHERE run_id = ?\n ORDER BY reason_code ASC, memory_id ASC\n `)\n .all(latestRunId) as Array<Record<string, unknown>>;\n\n const actionRows = db\n .prepare(`\n SELECT\n row_key,\n action,\n memory_id,\n reason_code,\n before_status,\n after_status,\n original_path,\n current_path\n FROM memory_review_actions\n WHERE run_id = ?\n ORDER BY memory_id ASC, action ASC\n `)\n .all(latestRunId) as Array<Record<string, unknown>>;\n\n const reviewQueue: MemoryGovernanceReviewQueueEntry[] = queueRows\n .filter(\n (row) =>\n typeof row.entry_id === \"string\" &&\n typeof row.memory_id === \"string\" &&\n typeof row.path === \"string\" &&\n typeof row.reason_code === \"string\" &&\n typeof row.severity === \"string\" &&\n typeof row.suggested_action === \"string\",\n )\n .map((row) => ({\n entryId: row.entry_id as string,\n memoryId: row.memory_id as string,\n path: row.path as string,\n reasonCode: row.reason_code as MemoryGovernanceReviewQueueEntry[\"reasonCode\"],\n severity: row.severity as MemoryGovernanceReviewQueueEntry[\"severity\"],\n suggestedAction: row.suggested_action as MemoryGovernanceReviewQueueEntry[\"suggestedAction\"],\n suggestedStatus:\n typeof row.suggested_status === \"string\"\n ? (row.suggested_status as MemoryGovernanceReviewQueueEntry[\"suggestedStatus\"])\n : undefined,\n relatedMemoryIds: parseStringArray(row.related_memory_ids_json),\n }));\n\n return {\n found: true,\n runId: latestRunId,\n summary: parseJsonObject<MemoryGovernanceSummary>(runRow.summary_json),\n metrics: parseJsonObject<MemoryGovernanceMetrics>(runRow.metrics_json),\n reviewQueue,\n appliedActions:\n actionRows.length > 0\n ? actionRows\n .filter(\n (row) =>\n typeof row.action === \"string\" &&\n typeof row.memory_id === \"string\" &&\n typeof row.reason_code === \"string\" &&\n typeof row.before_status === \"string\" &&\n typeof row.original_path === \"string\" &&\n typeof row.current_path === \"string\",\n )\n .map((row) => ({\n action: row.action as MemoryGovernanceAppliedAction[\"action\"],\n memoryId: row.memory_id as string,\n reasonCode: row.reason_code as MemoryGovernanceAppliedAction[\"reasonCode\"],\n beforeStatus: row.before_status as MemoryGovernanceAppliedAction[\"beforeStatus\"],\n afterStatus:\n typeof row.after_status === \"string\"\n ? (row.after_status as MemoryGovernanceAppliedAction[\"afterStatus\"])\n : undefined,\n originalPath: row.original_path as string,\n currentPath: row.current_path as string,\n }))\n : (parseJsonObject<MemoryGovernanceAppliedAction[]>(runRow.applied_actions_json) ?? []),\n report: typeof runRow.report_markdown === \"string\" ? runRow.report_markdown : undefined,\n };\n } catch {\n return null;\n } finally {\n db.close();\n }\n}\n\nexport function readProjectedGovernanceRecord(\n memoryDir: string,\n): {\n runId: string;\n summary: unknown;\n metrics: unknown;\n reviewQueueRows: MemoryProjectionGovernanceReviewQueueRow[];\n appliedActionRows: MemoryProjectionGovernanceAppliedActionRow[];\n report: string;\n} | null {\n const snapshot = readProjectedLatestReviewQueue(memoryDir);\n if (!snapshot?.found || !snapshot.runId) return null;\n\n return {\n runId: snapshot.runId,\n summary: snapshot.summary ?? {},\n metrics: snapshot.metrics ?? {},\n reviewQueueRows: (snapshot.reviewQueue ?? []).map((entry) => ({\n runId: snapshot.runId as string,\n entryId: entry.entryId,\n memoryId: entry.memoryId,\n path: entry.path,\n reasonCode: entry.reasonCode,\n severity: entry.severity,\n suggestedAction: entry.suggestedAction,\n suggestedStatus: entry.suggestedStatus,\n relatedMemoryIds: [...entry.relatedMemoryIds],\n })),\n appliedActionRows: (snapshot.appliedActions ?? []).map((action) => ({\n runId: snapshot.runId as string,\n rowKey: [\n action.action,\n action.memoryId,\n action.reasonCode,\n action.originalPath,\n action.currentPath,\n ].join(\"::\"),\n action: action.action,\n memoryId: action.memoryId,\n reasonCode: action.reasonCode,\n beforeStatus: action.beforeStatus,\n afterStatus: action.afterStatus,\n originalPath: action.originalPath,\n currentPath: action.currentPath,\n })),\n report: snapshot.report ?? \"\",\n };\n}\n","import { createRequire } from \"node:module\";\nimport type BetterSqlite3 from \"better-sqlite3\";\n\nexport type BetterSqlite3Database = BetterSqlite3.Database;\ntype BetterSqlite3Ctor = typeof BetterSqlite3;\ntype RuntimeRequire = ReturnType<typeof createRequire>;\n\nlet cachedCtor: BetterSqlite3Ctor | null = null;\n\nfunction loadBetterSqlite3(): BetterSqlite3Ctor {\n if (cachedCtor) return cachedCtor;\n\n const require = createRequire(import.meta.url);\n\n try {\n cachedCtor = requireBetterSqlite3Ctor(require);\n return cachedCtor;\n } catch (error) {\n throw unavailableError(error);\n }\n}\n\nexport function openBetterSqlite3(\n file: string,\n options?: ConstructorParameters<BetterSqlite3Ctor>[1],\n): BetterSqlite3Database {\n const Database = loadBetterSqlite3();\n return new Database(file, options);\n}\n\nfunction requireBetterSqlite3Ctor(require: RuntimeRequire): BetterSqlite3Ctor {\n const loaded = require(\"better-sqlite3\") as\n | BetterSqlite3Ctor\n | { default?: BetterSqlite3Ctor };\n const ctor = typeof loaded === \"function\" ? loaded : loaded.default;\n\n if (typeof ctor !== \"function\") {\n throw new Error(\"module did not export a constructor\");\n }\n\n return ctor;\n}\n\nexport function isLikelyBetterSqlite3NativeBindingError(error: unknown): boolean {\n const detail = errorDetail(error);\n return (\n detail.includes(\"Could not locate the bindings file\") ||\n detail.includes(\"better_sqlite3.node\") ||\n (detail.includes(\"node-v\") && detail.includes(\"better-sqlite3\")) ||\n (detail.includes(\"NODE_MODULE_VERSION\") && detail.includes(\"better-sqlite3\")) ||\n detail.includes(\"was compiled against a different Node.js version\")\n );\n}\n\nfunction unavailableError(error: unknown): Error {\n const detail = errorDetail(error);\n const nativeBindingHint = isLikelyBetterSqlite3NativeBindingError(error)\n ? \" This usually means the better-sqlite3 native binding was not compiled for this Node.js/platform combination. \" +\n \"Run `node scripts/ensure-better-sqlite3.mjs` from the Remnic install directory, or run \" +\n \"`npx node-gyp rebuild --directory=node_modules/better-sqlite3` if the verification script is unavailable.\"\n : \"\";\n return new Error(\n \"better-sqlite3 is unavailable. Remnic attempted to load the native SQLite binding and could not.\" +\n nativeBindingHint +\n (detail ? ` Original error: ${detail}` : \"\"),\n { cause: error instanceof Error ? error : undefined },\n );\n}\n\nfunction errorDetail(error: unknown): string {\n if (error instanceof Error) {\n const stack = error.stack && error.stack !== error.message ? `\\n${error.stack}` : \"\";\n return `${error.message}${stack}`;\n }\n return String(error ?? \"\");\n}\n"],"mappings":"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","names":["require"]}
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
validateGmailConfig,
|
|
16
16
|
validateGoogleDriveConfig,
|
|
17
17
|
validateNotionConfig
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-4IS4SXIQ.js";
|
|
19
19
|
import {
|
|
20
20
|
readConnectorState,
|
|
21
21
|
writeConnectorState
|
|
@@ -274,4 +274,4 @@ export {
|
|
|
274
274
|
hasEnabledLiveConnector,
|
|
275
275
|
runLiveConnectorsOnce
|
|
276
276
|
};
|
|
277
|
-
//# sourceMappingURL=chunk-
|
|
277
|
+
//# sourceMappingURL=chunk-XMVFHBHT.js.map
|
|
@@ -3,13 +3,13 @@ import {
|
|
|
3
3
|
} from "./chunk-IQT3XTKW.js";
|
|
4
4
|
import {
|
|
5
5
|
EngramAccessInputError
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-WGK4VHGP.js";
|
|
7
7
|
import {
|
|
8
8
|
expandTildePath
|
|
9
9
|
} from "./chunk-IXEJRKCZ.js";
|
|
10
10
|
import {
|
|
11
11
|
validateBriefingFormat
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WTFWLUSX.js";
|
|
13
13
|
import {
|
|
14
14
|
readEnvVar
|
|
15
15
|
} from "./chunk-MARWOCVP.js";
|
|
@@ -2400,4 +2400,4 @@ ${body}`;
|
|
|
2400
2400
|
export {
|
|
2401
2401
|
EngramMcpServer
|
|
2402
2402
|
};
|
|
2403
|
-
//# sourceMappingURL=chunk-
|
|
2403
|
+
//# sourceMappingURL=chunk-Y5KDIOKF.js.map
|
|
@@ -12,21 +12,21 @@ import {
|
|
|
12
12
|
} from "./chunk-54V4BZWP.js";
|
|
13
13
|
import {
|
|
14
14
|
ModelRegistry
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QR3C7BKQ.js";
|
|
16
16
|
import {
|
|
17
17
|
LocalLlmClient
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-NN3LPQ5D.js";
|
|
19
19
|
import {
|
|
20
20
|
buildExtensionsFooterForSummary,
|
|
21
21
|
formatDaySummaryMemories,
|
|
22
22
|
loadDaySummaryPrompt
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-3IQ2TR4N.js";
|
|
24
24
|
import {
|
|
25
25
|
delinearize
|
|
26
26
|
} from "./chunk-VEWZZM3H.js";
|
|
27
27
|
import {
|
|
28
28
|
FallbackLlmClient
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-VX2IUQFE.js";
|
|
30
30
|
import {
|
|
31
31
|
buildChatCompletionTokenLimit,
|
|
32
32
|
shouldAssumeOpenAiChatCompletions
|
|
@@ -45,7 +45,7 @@ import {
|
|
|
45
45
|
} from "./chunk-QDW3E4RD.js";
|
|
46
46
|
import {
|
|
47
47
|
sanitizeMemoryContent
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-FVQJYWH7.js";
|
|
49
49
|
import {
|
|
50
50
|
log
|
|
51
51
|
} from "./chunk-2ODBA7MQ.js";
|
|
@@ -103,7 +103,9 @@ var ExtractionEngine = class {
|
|
|
103
103
|
log.warn("no OpenAI API key \u2014 direct OpenAI client disabled; local and gateway fallback paths remain available");
|
|
104
104
|
}
|
|
105
105
|
this.localLlm = localLlm ?? new LocalLlmClient(config, modelRegistry);
|
|
106
|
-
this.fallbackLlm = new FallbackLlmClient(gatewayConfig
|
|
106
|
+
this.fallbackLlm = new FallbackLlmClient(gatewayConfig, {
|
|
107
|
+
workspaceDir: config.workspaceDir
|
|
108
|
+
});
|
|
107
109
|
this.modelRegistry = modelRegistry ?? new ModelRegistry(config.memoryDir);
|
|
108
110
|
if (config.modelSource === "gateway") {
|
|
109
111
|
log.debug(
|
|
@@ -1290,7 +1292,7 @@ Consolidate the new memories against existing ones.`
|
|
|
1290
1292
|
return { items: [], profileUpdates: [], entityUpdates: [] };
|
|
1291
1293
|
}
|
|
1292
1294
|
try {
|
|
1293
|
-
const
|
|
1295
|
+
const instructionText = `You are a memory consolidation system. Compare new memories against existing ones and decide what to do with each.
|
|
1294
1296
|
|
|
1295
1297
|
Actions:
|
|
1296
1298
|
- ADD: Keep the new memory as-is (no duplicate exists)
|
|
@@ -1318,7 +1320,7 @@ ${CONSOLIDATION_RESPONSE_SCHEMA}`;
|
|
|
1318
1320
|
const response = await this.client.chat.completions.create({
|
|
1319
1321
|
model: this.config.model,
|
|
1320
1322
|
messages: [
|
|
1321
|
-
{ role: "system", content:
|
|
1323
|
+
{ role: "system", content: instructionText },
|
|
1322
1324
|
{ role: "user", content: "Consolidate the new memories against existing ones." }
|
|
1323
1325
|
],
|
|
1324
1326
|
...this.config.reasoningEffort !== "none" ? { reasoning_effort: this.config.reasoningEffort } : {},
|
|
@@ -1507,7 +1509,7 @@ The output should be the COMPLETE consolidated profile as valid markdown, starti
|
|
|
1507
1509
|
return null;
|
|
1508
1510
|
}
|
|
1509
1511
|
try {
|
|
1510
|
-
const
|
|
1512
|
+
const instructionText = `You are a profile consolidation system. You are given a behavioral profile (markdown) that has grown too large. Your job is to produce a CONSOLIDATED version that:
|
|
1511
1513
|
|
|
1512
1514
|
1. PRESERVES all ## section headers and their structure
|
|
1513
1515
|
2. MERGES duplicate or near-duplicate bullet points into single, clear statements
|
|
@@ -1528,7 +1530,7 @@ Respond with valid JSON matching this schema:
|
|
|
1528
1530
|
const response = await this.client.chat.completions.create({
|
|
1529
1531
|
model: this.config.model,
|
|
1530
1532
|
messages: [
|
|
1531
|
-
{ role: "system", content:
|
|
1533
|
+
{ role: "system", content: instructionText },
|
|
1532
1534
|
{ role: "user", content: fullProfileContent }
|
|
1533
1535
|
],
|
|
1534
1536
|
...this.config.reasoningEffort !== "none" ? { reasoning_effort: this.config.reasoningEffort } : {},
|
|
@@ -1709,7 +1711,7 @@ The goal is to reduce a bloated file to a compact, high-signal set of learned pa
|
|
|
1709
1711
|
return null;
|
|
1710
1712
|
}
|
|
1711
1713
|
try {
|
|
1712
|
-
const
|
|
1714
|
+
const instructionText = `You are an identity consolidation system. You are given the full contents of an IDENTITY.md file that contains many individual reflection entries. Your job is to:
|
|
1713
1715
|
|
|
1714
1716
|
1. Read all the reflection entries (sections starting with "## Reflection")
|
|
1715
1717
|
2. Extract the most important, durable behavioral patterns and lessons learned
|
|
@@ -1728,7 +1730,7 @@ Respond with valid JSON matching this schema:
|
|
|
1728
1730
|
const response = await this.client.chat.completions.create({
|
|
1729
1731
|
model: this.config.model,
|
|
1730
1732
|
messages: [
|
|
1731
|
-
{ role: "system", content:
|
|
1733
|
+
{ role: "system", content: instructionText },
|
|
1732
1734
|
{ role: "user", content: fullIdentityContent }
|
|
1733
1735
|
],
|
|
1734
1736
|
...this.config.reasoningEffort !== "none" ? { reasoning_effort: this.config.reasoningEffort } : {},
|
|
@@ -1857,7 +1859,7 @@ Memory 2 (new):
|
|
|
1857
1859
|
Category: ${newMemory.category}
|
|
1858
1860
|
Content: ${newMemory.content}`;
|
|
1859
1861
|
try {
|
|
1860
|
-
const
|
|
1862
|
+
const instructionText = `You are a contradiction detection system. Analyze whether two memories contradict each other.
|
|
1861
1863
|
|
|
1862
1864
|
IMPORTANT: Not all similar memories are contradictions!
|
|
1863
1865
|
- "User likes TypeScript" and "User likes Python" are NOT contradictions (preferences can coexist)
|
|
@@ -1883,7 +1885,7 @@ Respond with valid JSON matching this schema:
|
|
|
1883
1885
|
try {
|
|
1884
1886
|
const localResponse = await this.localLlm.chatCompletion(
|
|
1885
1887
|
[
|
|
1886
|
-
{ role: "system", content:
|
|
1888
|
+
{ role: "system", content: instructionText },
|
|
1887
1889
|
{ role: "user", content: input }
|
|
1888
1890
|
],
|
|
1889
1891
|
{
|
|
@@ -1916,7 +1918,7 @@ Respond with valid JSON matching this schema:
|
|
|
1916
1918
|
if (!this.shouldUseDirectClient) {
|
|
1917
1919
|
const fallbackResponse = await this.fallbackLlm.chatCompletion(
|
|
1918
1920
|
[
|
|
1919
|
-
{ role: "system", content:
|
|
1921
|
+
{ role: "system", content: instructionText },
|
|
1920
1922
|
{ role: "user", content: input }
|
|
1921
1923
|
],
|
|
1922
1924
|
this.withGatewayAgent({ temperature: 0.3, maxTokens: 2048 })
|
|
@@ -1936,7 +1938,7 @@ Respond with valid JSON matching this schema:
|
|
|
1936
1938
|
const response = await this.client.chat.completions.create({
|
|
1937
1939
|
model: this.config.model,
|
|
1938
1940
|
messages: [
|
|
1939
|
-
{ role: "system", content:
|
|
1941
|
+
{ role: "system", content: instructionText },
|
|
1940
1942
|
{ role: "user", content: input }
|
|
1941
1943
|
],
|
|
1942
1944
|
...buildChatCompletionTokenLimit(this.config.model, 2048, {
|
|
@@ -1976,7 +1978,7 @@ Content: ${newMemory.content}
|
|
|
1976
1978
|
Candidate memories to link to:
|
|
1977
1979
|
${candidateList}`;
|
|
1978
1980
|
try {
|
|
1979
|
-
const
|
|
1981
|
+
const instructionText = `You are a memory linking system. Analyze the new memory and suggest relationships to existing memories.
|
|
1980
1982
|
|
|
1981
1983
|
Link types:
|
|
1982
1984
|
- follows: This memory is a continuation or next step (e.g., decision follows discussion)
|
|
@@ -1999,7 +2001,7 @@ Respond with valid JSON matching this schema:
|
|
|
1999
2001
|
try {
|
|
2000
2002
|
const localResponse = await this.localLlm.chatCompletion(
|
|
2001
2003
|
[
|
|
2002
|
-
{ role: "system", content:
|
|
2004
|
+
{ role: "system", content: instructionText },
|
|
2003
2005
|
{ role: "user", content: input }
|
|
2004
2006
|
],
|
|
2005
2007
|
{
|
|
@@ -2028,7 +2030,7 @@ Respond with valid JSON matching this schema:
|
|
|
2028
2030
|
if (!this.shouldUseDirectClient) {
|
|
2029
2031
|
const fallbackResponse = await this.fallbackLlm.chatCompletion(
|
|
2030
2032
|
[
|
|
2031
|
-
{ role: "system", content:
|
|
2033
|
+
{ role: "system", content: instructionText },
|
|
2032
2034
|
{ role: "user", content: input }
|
|
2033
2035
|
],
|
|
2034
2036
|
this.withGatewayAgent({ temperature: 0.3, maxTokens: 2048 })
|
|
@@ -2044,7 +2046,7 @@ Respond with valid JSON matching this schema:
|
|
|
2044
2046
|
const response = await this.client.chat.completions.create({
|
|
2045
2047
|
model: this.config.model,
|
|
2046
2048
|
messages: [
|
|
2047
|
-
{ role: "system", content:
|
|
2049
|
+
{ role: "system", content: instructionText },
|
|
2048
2050
|
{ role: "user", content: input }
|
|
2049
2051
|
],
|
|
2050
2052
|
...buildChatCompletionTokenLimit(this.config.model, 2048, {
|
|
@@ -2071,7 +2073,7 @@ Respond with valid JSON matching this schema:
|
|
|
2071
2073
|
}
|
|
2072
2074
|
const memoryContext = formatDaySummaryMemories(memories);
|
|
2073
2075
|
if (memoryContext.length === 0) return null;
|
|
2074
|
-
const
|
|
2076
|
+
const instructionText = await loadDaySummaryPrompt();
|
|
2075
2077
|
let extensionsFooter = "";
|
|
2076
2078
|
try {
|
|
2077
2079
|
extensionsFooter = await buildExtensionsFooterForSummary(this.config);
|
|
@@ -2089,7 +2091,7 @@ ${extensionsFooter}` : ""}`;
|
|
|
2089
2091
|
try {
|
|
2090
2092
|
const localResponse = await this.localLlm.chatCompletion(
|
|
2091
2093
|
[
|
|
2092
|
-
{ role: "system", content: `${
|
|
2094
|
+
{ role: "system", content: `${instructionText}
|
|
2093
2095
|
|
|
2094
2096
|
Return valid JSON only.` },
|
|
2095
2097
|
{ role: "user", content: userPrompt }
|
|
@@ -2126,7 +2128,7 @@ Return valid JSON only.` },
|
|
|
2126
2128
|
startedAt,
|
|
2127
2129
|
DaySummaryResultSchema,
|
|
2128
2130
|
[
|
|
2129
|
-
{ role: "system", content: `${
|
|
2131
|
+
{ role: "system", content: `${instructionText}
|
|
2130
2132
|
|
|
2131
2133
|
Return valid JSON only.` },
|
|
2132
2134
|
{ role: "user", content: userPrompt }
|
|
@@ -2144,7 +2146,7 @@ Return valid JSON only.` },
|
|
|
2144
2146
|
try {
|
|
2145
2147
|
const response = await this.client.responses.create({
|
|
2146
2148
|
model: this.config.model,
|
|
2147
|
-
instructions: `${
|
|
2149
|
+
instructions: `${instructionText}
|
|
2148
2150
|
|
|
2149
2151
|
Return valid JSON only.`,
|
|
2150
2152
|
input: userPrompt,
|
|
@@ -2174,7 +2176,7 @@ Return valid JSON only.`,
|
|
|
2174
2176
|
const memoryList = memories.map((m) => `[${m.id}] (${m.category}, ${m.created.slice(0, 10)})
|
|
2175
2177
|
${m.content}`).join("\n\n");
|
|
2176
2178
|
try {
|
|
2177
|
-
const
|
|
2179
|
+
const instructionText = `You are a memory summarization system. You are given a batch of old memories that need to be compressed into a summary.
|
|
2178
2180
|
|
|
2179
2181
|
Your task:
|
|
2180
2182
|
1. Write a concise summary paragraph (2-4 sentences) capturing the essence of these memories
|
|
@@ -2197,7 +2199,7 @@ Respond with valid JSON matching this schema:
|
|
|
2197
2199
|
try {
|
|
2198
2200
|
const localResponse = await this.localLlm.chatCompletion(
|
|
2199
2201
|
[
|
|
2200
|
-
{ role: "system", content:
|
|
2202
|
+
{ role: "system", content: instructionText },
|
|
2201
2203
|
{ role: "user", content: `Summarize these ${memories.length} memories:
|
|
2202
2204
|
|
|
2203
2205
|
${memoryList}` }
|
|
@@ -2230,7 +2232,7 @@ ${memoryList}` }
|
|
|
2230
2232
|
if (!this.shouldUseDirectClient) {
|
|
2231
2233
|
const fallbackResponse = await this.fallbackLlm.chatCompletion(
|
|
2232
2234
|
[
|
|
2233
|
-
{ role: "system", content:
|
|
2235
|
+
{ role: "system", content: instructionText },
|
|
2234
2236
|
{ role: "user", content: `Summarize these ${memories.length} memories:
|
|
2235
2237
|
|
|
2236
2238
|
${memoryList}` }
|
|
@@ -2248,7 +2250,7 @@ ${memoryList}` }
|
|
|
2248
2250
|
const response = await this.client.chat.completions.create({
|
|
2249
2251
|
model: this.config.model,
|
|
2250
2252
|
messages: [
|
|
2251
|
-
{ role: "system", content:
|
|
2253
|
+
{ role: "system", content: instructionText },
|
|
2252
2254
|
{ role: "user", content: `Summarize these ${memories.length} memories:
|
|
2253
2255
|
|
|
2254
2256
|
${memoryList}` }
|
|
@@ -2275,4 +2277,4 @@ ${memoryList}` }
|
|
|
2275
2277
|
export {
|
|
2276
2278
|
ExtractionEngine
|
|
2277
2279
|
};
|
|
2278
|
-
//# sourceMappingURL=chunk-
|
|
2280
|
+
//# sourceMappingURL=chunk-Z5S5HNGY.js.map
|