@remnic/core 9.30.0 → 9.31.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/dist/access-admin-ops-surface.d.ts +10 -10
- package/dist/access-admin-ops-surface.js +50 -44
- package/dist/access-authorization-probe.d.ts +10 -10
- package/dist/access-authorization-probe.js +51 -45
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +50 -44
- package/dist/access-cli.js +168 -123
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.d.ts +119 -0
- package/dist/access-extraction-force-flush.js +166 -0
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +47 -13
- package/dist/access-http-lcm-compaction.js +7 -3
- package/dist/access-http-lifecycle-flush.d.ts +132 -0
- package/dist/access-http-lifecycle-flush.js +9 -0
- package/dist/access-http-lifecycle-flush.js.map +1 -0
- package/dist/access-http.d.ts +11 -10
- package/dist/access-http.js +66 -59
- package/dist/access-identity-continuity-surface.d.ts +8 -8
- package/dist/access-identity-continuity-surface.js +50 -44
- package/dist/access-lcm-surface.d.ts +10 -10
- package/dist/access-lcm-surface.js +50 -44
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +16 -10
- package/dist/access-mcp.js +58 -52
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-VfXssvoI.d.ts → access-namespace-preflight-D4vW97H1.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +50 -44
- package/dist/access-observe-helpers.d.ts +22 -0
- package/dist/access-observe-helpers.js +10 -0
- package/dist/access-observe-helpers.js.map +1 -0
- package/dist/access-observe-write-surface.d.ts +51 -47
- package/dist/access-observe-write-surface.js +50 -44
- package/dist/access-operations-batch.js +53 -47
- package/dist/access-operations.d.ts +11 -11
- package/dist/access-operations.js +55 -49
- package/dist/access-recall-concurrency.d.ts +10 -10
- package/dist/access-recall-concurrency.js +50 -44
- package/dist/access-recall-response.d.ts +10 -10
- package/dist/access-recall-response.js +50 -44
- package/dist/access-recall-surface.d.ts +10 -10
- package/dist/access-recall-surface.js +50 -44
- package/dist/access-schema.d.ts +37 -7
- package/dist/access-schema.js +5 -3
- package/dist/{access-service-B5RwVsTV.d.ts → access-service-B6PZ_xUL.d.ts} +44 -20
- package/dist/access-service-helpers.d.ts +113 -0
- package/dist/access-service-helpers.js +8 -0
- package/dist/access-service-helpers.js.map +1 -0
- package/dist/access-service.d.ts +10 -10
- package/dist/access-service.js +50 -44
- package/dist/access-surface-catalog.d.ts +10 -10
- package/dist/access-surface-catalog.js +2 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +3 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +8 -8
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +14 -14
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +5 -0
- package/dist/buffer-turn-helpers.js +24 -0
- package/dist/buffer-turn-helpers.js.map +1 -0
- package/dist/buffer.d.ts +17 -4
- package/dist/buffer.js +21 -1
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/capsule-crypto-7FJQINUR.js.map +1 -0
- package/dist/{capsule-merge-5KKJQBWQ.js → capsule-merge-2H2IUTBT.js} +4 -4
- package/dist/{catalog-V7inUQdp.d.ts → catalog-CGFYmTT8.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +19 -19
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-LEPOP46W.js → chunk-227UFSEQ.js} +4 -4
- package/dist/{chunk-GIBMDSJ2.js → chunk-27P5YVDU.js} +2 -2
- package/dist/{chunk-2SA56WMI.js → chunk-2LTDWSR6.js} +4 -4
- package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/{chunk-YTSNAUXN.js → chunk-3F2LKUMU.js} +22 -8
- package/dist/chunk-3F2LKUMU.js.map +1 -0
- package/dist/chunk-3QL24R5Y.js +9 -0
- package/dist/chunk-3QL24R5Y.js.map +1 -0
- package/dist/chunk-4RNZMRAV.js +60 -0
- package/dist/chunk-4RNZMRAV.js.map +1 -0
- package/dist/{chunk-6U7F52DE.js → chunk-4XHR3I67.js} +60 -60
- package/dist/chunk-5IVLTFOV.js +65 -0
- package/dist/chunk-5IVLTFOV.js.map +1 -0
- package/dist/{chunk-2EUVEDF5.js → chunk-5XA7PQ5I.js} +2 -2
- package/dist/{chunk-ALSGMEJR.js → chunk-65ZPVYTA.js} +7 -7
- package/dist/{chunk-5VQJBH2G.js → chunk-6TAUHL33.js} +2 -2
- package/dist/{chunk-HUHX2OCX.js → chunk-7DRETLP5.js} +1 -1
- package/dist/chunk-7DRETLP5.js.map +1 -0
- package/dist/{chunk-RGIWINDN.js → chunk-7G5MH4NT.js} +30 -30
- package/dist/{chunk-WVO4G37W.js → chunk-7TEZUUGM.js} +3 -3
- package/dist/{chunk-MJCGLM25.js → chunk-7VUAG236.js} +5 -5
- package/dist/{chunk-M3C2V3PV.js → chunk-AJEMDQNA.js} +12 -12
- package/dist/{chunk-RKNJBZ55.js → chunk-AU7Q3LSC.js} +7 -7
- package/dist/{chunk-ACXPX4AG.js → chunk-BR2K43MK.js} +2 -2
- package/dist/{chunk-IYZ5K7MU.js → chunk-BUE5E2HL.js} +4 -187
- package/dist/chunk-BUE5E2HL.js.map +1 -0
- package/dist/{chunk-CZRYLSSW.js → chunk-BUGVGH4N.js} +2 -2
- package/dist/{chunk-YTQNQ4KB.js → chunk-C4VQMFVM.js} +3 -3
- package/dist/{chunk-ZPSVBSOF.js → chunk-CIVDJD6P.js} +3 -3
- package/dist/{chunk-K5GB36ME.js → chunk-CZDOT5I2.js} +2 -2
- package/dist/{chunk-VI2JQPNQ.js → chunk-E4PWACUN.js} +2 -2
- package/dist/{chunk-D2ANTDGO.js → chunk-E6BMSH7U.js} +2 -2
- package/dist/{chunk-P5PXWTW7.js → chunk-EJCAV3QZ.js} +3 -3
- package/dist/{chunk-CKMO4RDY.js → chunk-EMDLM3LW.js} +4 -4
- package/dist/chunk-ER7W6H4T.js +112 -0
- package/dist/chunk-ER7W6H4T.js.map +1 -0
- package/dist/{chunk-6FUPCJUL.js → chunk-FI4F5X2V.js} +54 -54
- package/dist/chunk-FI4F5X2V.js.map +1 -0
- package/dist/{chunk-LGHKJABJ.js → chunk-GOUILH55.js} +40 -18
- package/dist/chunk-GOUILH55.js.map +1 -0
- package/dist/{chunk-G5R3D5UP.js → chunk-GTTAHHD3.js} +2 -2
- package/dist/{chunk-H5CPS5JP.js → chunk-H36LJIPD.js} +3 -3
- package/dist/{chunk-AITCS2RC.js → chunk-IJ7HK452.js} +4 -4
- package/dist/{chunk-D3LMYTBV.js → chunk-J7WZUL2K.js} +9 -9
- package/dist/{chunk-5W4ZLBEZ.js → chunk-JCFTIQBR.js} +2 -2
- package/dist/{chunk-XOZ4ALGB.js → chunk-KE353EWI.js} +3 -3
- package/dist/{chunk-W5EG6LE3.js → chunk-KIT6M7EB.js} +3 -3
- package/dist/{chunk-5W7CTZ2E.js → chunk-KQAFEZQX.js} +4 -4
- package/dist/{chunk-Z54EM5YZ.js → chunk-MAXVH44E.js} +7 -7
- package/dist/{chunk-WZFAPHIK.js → chunk-MU7ZHSZE.js} +2 -2
- package/dist/chunk-N5Z4EVOR.js +123 -0
- package/dist/chunk-N5Z4EVOR.js.map +1 -0
- package/dist/{chunk-66772WBP.js → chunk-NFXQJHJD.js} +5 -5
- package/dist/{chunk-AZ5BTEKX.js → chunk-NQUF7XKR.js} +2 -2
- package/dist/{chunk-W4FBGYGK.js → chunk-NRV4Y3PM.js} +1 -1
- package/dist/{chunk-NHWB6HG2.js → chunk-NYCGIQRA.js} +2 -2
- package/dist/{chunk-4WKA6I65.js → chunk-OGCNZPKX.js} +1119 -309
- package/dist/chunk-OGCNZPKX.js.map +1 -0
- package/dist/{chunk-QJAQNXWI.js → chunk-ONHRRJZM.js} +6 -6
- package/dist/{chunk-FDAMS4PK.js → chunk-PNPOWBGC.js} +2 -2
- package/dist/{chunk-IC6CBHCA.js → chunk-QGENAYVS.js} +2 -2
- package/dist/{chunk-GBJ4RDFR.js → chunk-QIHIHZYC.js} +66 -91
- package/dist/chunk-QIHIHZYC.js.map +1 -0
- package/dist/{chunk-PUS63Q3G.js → chunk-RUYJ7TWU.js} +517 -2011
- package/dist/chunk-RUYJ7TWU.js.map +1 -0
- package/dist/{chunk-4A6YGWQN.js → chunk-TL4TO3EA.js} +115 -120
- package/dist/chunk-TL4TO3EA.js.map +1 -0
- package/dist/{chunk-SPJXKAVF.js → chunk-U52AKICI.js} +14 -13
- package/dist/chunk-U52AKICI.js.map +1 -0
- package/dist/chunk-ULARSG5Z.js +203 -0
- package/dist/chunk-ULARSG5Z.js.map +1 -0
- package/dist/{chunk-62U4J2GN.js → chunk-UR77VKF7.js} +2 -2
- package/dist/{chunk-JCBWCYEJ.js → chunk-VANLTS5F.js} +2 -2
- package/dist/{chunk-4Z4XNEWZ.js → chunk-VCD4PSK2.js} +56 -12
- package/dist/chunk-VCD4PSK2.js.map +1 -0
- package/dist/{chunk-RMMVQQA6.js → chunk-WDISJRMG.js} +2 -2
- package/dist/{chunk-B6JDYXL7.js → chunk-WWUVONGW.js} +7 -1
- package/dist/chunk-WWUVONGW.js.map +1 -0
- package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-TH2LSRMG.js → chunk-XHDIB4T4.js} +2 -2
- package/dist/{chunk-CVILPI77.js → chunk-XOQSEF7X.js} +6 -6
- package/dist/{chunk-LBOD4U5B.js → chunk-YFOMN2II.js} +6 -6
- package/dist/{chunk-RPW2NOU6.js → chunk-YIAA2X3D.js} +41 -1
- package/dist/chunk-YIAA2X3D.js.map +1 -0
- package/dist/chunk-YPC7W6GA.js +1604 -0
- package/dist/chunk-YPC7W6GA.js.map +1 -0
- package/dist/{chunk-I5NLEENJ.js → chunk-Z4SWV4VW.js} +3 -3
- package/dist/{chunk-PHWUFPCO.js → chunk-ZCPP5OW6.js} +61 -53
- package/dist/chunk-ZCPP5OW6.js.map +1 -0
- package/dist/{cli-C4GbETPC.d.ts → cli-BptUDTtp.d.ts} +5 -5
- package/dist/cli.d.ts +12 -12
- package/dist/cli.js +91 -84
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +14 -14
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +14 -14
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +17 -17
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-provenance-check.js +5 -5
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/consolidation-undo.js +3 -3
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/contradiction/index.js +4 -4
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +26 -26
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +14 -14
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +8 -8
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +15 -2
- package/dist/extraction-source-grounding.js +10 -1
- package/dist/extraction.d.ts +2 -15
- package/dist/extraction.js +5 -4
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/index.js +215 -207
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +6 -6
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm-helpers.d.ts +7 -0
- package/dist/local-llm-helpers.js +16 -0
- package/dist/local-llm-helpers.js.map +1 -0
- package/dist/local-llm.d.ts +3 -6
- package/dist/local-llm.js +2 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +14 -14
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +15 -15
- package/dist/{maintenance-CL30NWtc.d.ts → maintenance-b6f92bRz.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +10 -10
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-corpus-version.js +2 -2
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +24 -24
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +9 -9
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +14 -14
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/offline-sync-impression-drain.js +6 -5
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +29 -29
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-doctor-replica.js +3 -3
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +38 -37
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +22 -21
- package/dist/{orchestrator-CKTCRwWV.d.ts → orchestrator-3uGxC1qO.d.ts} +72 -34
- package/dist/orchestrator.d.ts +8 -8
- package/dist/orchestrator.js +167 -159
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-B7wj4rRZ.d.ts → pipeline-DepuNr-m.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{qmd-q9tg4dHp.d.ts → qmd-Dalr3Jby.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-divergence.js +2 -2
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +1 -1
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/{scope-profiles-CWDyglPM.d.ts → scope-profiles-BpiM5hTU.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +8 -8
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +12 -12
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-BUE3deLn.d.ts → semantic-consolidation-CMtVrf9f.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +16 -16
- package/dist/semantic-rule-promotion.js +14 -14
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +14 -14
- package/dist/{service-CXgM0bQG.d.ts → service-DuAxwSgg.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/{storage-DysJq-XH.d.ts → storage-CF0Ih8GP.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +13 -13
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -2
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/tokens.js +2 -2
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +5 -5
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-aPPzhnjT.d.ts → types-BpaYvJ6v.d.ts} +22 -2
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +14 -14
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +3 -0
- package/src/access-cli.test.ts +93 -0
- package/src/access-cli.ts +56 -2
- package/src/access-extraction-force-flush.ts +177 -0
- package/src/access-http-extraction-force-flush.test.ts +132 -0
- package/src/access-http-lcm-compaction.ts +99 -22
- package/src/access-http-lifecycle-flush.ts +81 -0
- package/src/access-http.test.ts +227 -0
- package/src/access-http.ts +33 -40
- package/src/access-mcp-output-schemas.ts +6 -0
- package/src/access-mcp.test.ts +40 -0
- package/src/access-mcp.ts +32 -1
- package/src/access-observe-helpers.ts +180 -0
- package/src/access-observe-write-surface.ts +78 -19
- package/src/access-operations-batch.ts +2 -1
- package/src/access-schema-pi.test.ts +17 -0
- package/src/access-schema.ts +28 -11
- package/src/access-service-helpers.ts +46 -0
- package/src/access-service-observe-lcm-parity.test.ts +781 -31
- package/src/access-service-observe-scope.test.ts +88 -0
- package/src/access-service.ts +46 -128
- package/src/access-surface-catalog.test.ts +32 -0
- package/src/access-surface-catalog.ts +2 -0
- package/src/buffer-session.test.ts +148 -0
- package/src/buffer-turn-helpers.ts +152 -0
- package/src/buffer.ts +126 -201
- package/src/correction/correction-access-wiring.ts +79 -27
- package/src/correction/correction-executor.test.ts +542 -1
- package/src/correction/correction-executor.ts +309 -89
- package/src/correction/correction-planner.test.ts +35 -1
- package/src/correction/correction-planner.ts +50 -3
- package/src/correction/correction-service.ts +12 -7
- package/src/correction/correction-storage-integration.test.ts +172 -1
- package/src/correction/passive-capture.test.ts +35 -0
- package/src/correction/passive-capture.ts +17 -3
- package/src/extraction-source-grounding.ts +55 -1
- package/src/extraction-timeout.test.ts +51 -0
- package/src/extraction.ts +64 -90
- package/src/local-llm-headers-timeout.test.ts +48 -0
- package/src/local-llm-helpers.ts +58 -0
- package/src/local-llm.ts +62 -58
- package/src/orchestration/extraction-run-helpers.ts +309 -0
- package/src/orchestration/extraction-run.test.ts +350 -7
- package/src/orchestration/extraction-run.ts +327 -250
- package/src/orchestration/recall-internal-deps.ts +385 -0
- package/src/orchestration/recall-internal.ts +16 -375
- package/src/orchestration/session-context.ts +193 -18
- package/src/orchestration/turn-ingestion.ts +61 -11
- package/src/orchestrator-flush.test.ts +511 -5
- package/src/orchestrator.ts +8 -6
- package/src/types.ts +2 -2
- package/dist/chunk-4A6YGWQN.js.map +0 -1
- package/dist/chunk-4WKA6I65.js.map +0 -1
- package/dist/chunk-4Z4XNEWZ.js.map +0 -1
- package/dist/chunk-6FUPCJUL.js.map +0 -1
- package/dist/chunk-B6JDYXL7.js.map +0 -1
- package/dist/chunk-GBJ4RDFR.js.map +0 -1
- package/dist/chunk-HUHX2OCX.js.map +0 -1
- package/dist/chunk-IYZ5K7MU.js.map +0 -1
- package/dist/chunk-LGHKJABJ.js.map +0 -1
- package/dist/chunk-PHWUFPCO.js.map +0 -1
- package/dist/chunk-PUS63Q3G.js.map +0 -1
- package/dist/chunk-RPW2NOU6.js.map +0 -1
- package/dist/chunk-SPJXKAVF.js.map +0 -1
- package/dist/chunk-YTSNAUXN.js.map +0 -1
- /package/dist/{capsule-crypto-GWVG7LGC.js.map → access-extraction-force-flush.js.map} +0 -0
- /package/dist/{capsule-merge-5KKJQBWQ.js.map → capsule-merge-2H2IUTBT.js.map} +0 -0
- /package/dist/{chunk-LEPOP46W.js.map → chunk-227UFSEQ.js.map} +0 -0
- /package/dist/{chunk-GIBMDSJ2.js.map → chunk-27P5YVDU.js.map} +0 -0
- /package/dist/{chunk-2SA56WMI.js.map → chunk-2LTDWSR6.js.map} +0 -0
- /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-6U7F52DE.js.map → chunk-4XHR3I67.js.map} +0 -0
- /package/dist/{chunk-2EUVEDF5.js.map → chunk-5XA7PQ5I.js.map} +0 -0
- /package/dist/{chunk-ALSGMEJR.js.map → chunk-65ZPVYTA.js.map} +0 -0
- /package/dist/{chunk-5VQJBH2G.js.map → chunk-6TAUHL33.js.map} +0 -0
- /package/dist/{chunk-RGIWINDN.js.map → chunk-7G5MH4NT.js.map} +0 -0
- /package/dist/{chunk-WVO4G37W.js.map → chunk-7TEZUUGM.js.map} +0 -0
- /package/dist/{chunk-MJCGLM25.js.map → chunk-7VUAG236.js.map} +0 -0
- /package/dist/{chunk-M3C2V3PV.js.map → chunk-AJEMDQNA.js.map} +0 -0
- /package/dist/{chunk-RKNJBZ55.js.map → chunk-AU7Q3LSC.js.map} +0 -0
- /package/dist/{chunk-ACXPX4AG.js.map → chunk-BR2K43MK.js.map} +0 -0
- /package/dist/{chunk-CZRYLSSW.js.map → chunk-BUGVGH4N.js.map} +0 -0
- /package/dist/{chunk-YTQNQ4KB.js.map → chunk-C4VQMFVM.js.map} +0 -0
- /package/dist/{chunk-ZPSVBSOF.js.map → chunk-CIVDJD6P.js.map} +0 -0
- /package/dist/{chunk-K5GB36ME.js.map → chunk-CZDOT5I2.js.map} +0 -0
- /package/dist/{chunk-VI2JQPNQ.js.map → chunk-E4PWACUN.js.map} +0 -0
- /package/dist/{chunk-D2ANTDGO.js.map → chunk-E6BMSH7U.js.map} +0 -0
- /package/dist/{chunk-P5PXWTW7.js.map → chunk-EJCAV3QZ.js.map} +0 -0
- /package/dist/{chunk-CKMO4RDY.js.map → chunk-EMDLM3LW.js.map} +0 -0
- /package/dist/{chunk-G5R3D5UP.js.map → chunk-GTTAHHD3.js.map} +0 -0
- /package/dist/{chunk-H5CPS5JP.js.map → chunk-H36LJIPD.js.map} +0 -0
- /package/dist/{chunk-AITCS2RC.js.map → chunk-IJ7HK452.js.map} +0 -0
- /package/dist/{chunk-D3LMYTBV.js.map → chunk-J7WZUL2K.js.map} +0 -0
- /package/dist/{chunk-5W4ZLBEZ.js.map → chunk-JCFTIQBR.js.map} +0 -0
- /package/dist/{chunk-XOZ4ALGB.js.map → chunk-KE353EWI.js.map} +0 -0
- /package/dist/{chunk-W5EG6LE3.js.map → chunk-KIT6M7EB.js.map} +0 -0
- /package/dist/{chunk-5W7CTZ2E.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-Z54EM5YZ.js.map → chunk-MAXVH44E.js.map} +0 -0
- /package/dist/{chunk-WZFAPHIK.js.map → chunk-MU7ZHSZE.js.map} +0 -0
- /package/dist/{chunk-66772WBP.js.map → chunk-NFXQJHJD.js.map} +0 -0
- /package/dist/{chunk-AZ5BTEKX.js.map → chunk-NQUF7XKR.js.map} +0 -0
- /package/dist/{chunk-W4FBGYGK.js.map → chunk-NRV4Y3PM.js.map} +0 -0
- /package/dist/{chunk-NHWB6HG2.js.map → chunk-NYCGIQRA.js.map} +0 -0
- /package/dist/{chunk-QJAQNXWI.js.map → chunk-ONHRRJZM.js.map} +0 -0
- /package/dist/{chunk-FDAMS4PK.js.map → chunk-PNPOWBGC.js.map} +0 -0
- /package/dist/{chunk-IC6CBHCA.js.map → chunk-QGENAYVS.js.map} +0 -0
- /package/dist/{chunk-62U4J2GN.js.map → chunk-UR77VKF7.js.map} +0 -0
- /package/dist/{chunk-JCBWCYEJ.js.map → chunk-VANLTS5F.js.map} +0 -0
- /package/dist/{chunk-RMMVQQA6.js.map → chunk-WDISJRMG.js.map} +0 -0
- /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-TH2LSRMG.js.map → chunk-XHDIB4T4.js.map} +0 -0
- /package/dist/{chunk-CVILPI77.js.map → chunk-XOQSEF7X.js.map} +0 -0
- /package/dist/{chunk-LBOD4U5B.js.map → chunk-YFOMN2II.js.map} +0 -0
- /package/dist/{chunk-I5NLEENJ.js.map → chunk-Z4SWV4VW.js.map} +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
type PendingObservePreparation = {
|
|
2
|
+
cancelled: boolean;
|
|
3
|
+
scopeHint?: string;
|
|
4
|
+
principal?: string;
|
|
5
|
+
namespace?: string;
|
|
6
|
+
released: Promise<void>;
|
|
7
|
+
release: () => void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type PendingObservePreparationHandle = {
|
|
11
|
+
isCancelled(): boolean;
|
|
12
|
+
setScope(principal?: string, namespace?: string): void;
|
|
13
|
+
release(): void;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export function pendingObserveScopeHint(options: {
|
|
17
|
+
namespace?: string;
|
|
18
|
+
projectTag?: string;
|
|
19
|
+
cwd?: string;
|
|
20
|
+
}): string | undefined {
|
|
21
|
+
const namespace = options.namespace?.trim();
|
|
22
|
+
if (namespace) return `namespace:${namespace}`;
|
|
23
|
+
const projectTag = options.projectTag?.trim();
|
|
24
|
+
if (projectTag) return `projectTag:${projectTag}`;
|
|
25
|
+
const cwd = options.cwd?.trim();
|
|
26
|
+
return cwd ? `cwd:${cwd}` : undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
type PendingObserveExtraction = {
|
|
30
|
+
promise: Promise<void>;
|
|
31
|
+
controllers: Set<AbortController>;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export class PendingObserveExtractionTracker {
|
|
35
|
+
private readonly entries = new Map<string, PendingObserveExtraction>();
|
|
36
|
+
private readonly preparations = new Map<string, Set<PendingObservePreparation>>();
|
|
37
|
+
|
|
38
|
+
reserve(sessionKey: string, scopeHint?: string): PendingObservePreparationHandle {
|
|
39
|
+
let released = false;
|
|
40
|
+
let resolveReleased: () => void = () => {};
|
|
41
|
+
const reservation: PendingObservePreparation = {
|
|
42
|
+
cancelled: false,
|
|
43
|
+
scopeHint,
|
|
44
|
+
released: new Promise<void>((resolve) => {
|
|
45
|
+
resolveReleased = resolve;
|
|
46
|
+
}),
|
|
47
|
+
release: () => {
|
|
48
|
+
if (released) return;
|
|
49
|
+
released = true;
|
|
50
|
+
const entries = this.preparations.get(sessionKey);
|
|
51
|
+
entries?.delete(reservation);
|
|
52
|
+
if (entries?.size === 0) this.preparations.delete(sessionKey);
|
|
53
|
+
resolveReleased();
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
const entries = this.preparations.get(sessionKey) ?? new Set<PendingObservePreparation>();
|
|
57
|
+
entries.add(reservation);
|
|
58
|
+
this.preparations.set(sessionKey, entries);
|
|
59
|
+
return {
|
|
60
|
+
isCancelled: () => reservation.cancelled,
|
|
61
|
+
setScope: (principal, namespace) => {
|
|
62
|
+
reservation.principal = principal;
|
|
63
|
+
reservation.namespace = namespace;
|
|
64
|
+
},
|
|
65
|
+
release: reservation.release,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private async waitForPreparations(sessionKey: string): Promise<void> {
|
|
70
|
+
while (true) {
|
|
71
|
+
const pending = [...(this.preparations.get(sessionKey) ?? [])].filter(
|
|
72
|
+
(reservation) => !reservation.cancelled,
|
|
73
|
+
);
|
|
74
|
+
if (pending.length === 0) return;
|
|
75
|
+
await Promise.all(pending.map((reservation) => reservation.released));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
key(sessionKey: string, principal: string | undefined, namespace: string | undefined): string {
|
|
81
|
+
return `${sessionKey}\u0000${principal ?? ""}\u0000${namespace ?? ""}`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
track(key: string, extraction: Promise<void>, controller: AbortController): void {
|
|
85
|
+
const previous = this.entries.get(key);
|
|
86
|
+
const promise = previous
|
|
87
|
+
? Promise.allSettled([previous.promise, extraction]).then((results) => {
|
|
88
|
+
const rejected = results.find((result): result is PromiseRejectedResult => result.status === "rejected");
|
|
89
|
+
if (rejected) throw rejected.reason;
|
|
90
|
+
})
|
|
91
|
+
: extraction;
|
|
92
|
+
const entry = {
|
|
93
|
+
promise,
|
|
94
|
+
controllers: new Set(previous ? [...previous.controllers, controller] : [controller]),
|
|
95
|
+
};
|
|
96
|
+
this.entries.set(key, entry);
|
|
97
|
+
void promise
|
|
98
|
+
.then(() => {
|
|
99
|
+
if (this.entries.get(key) === entry) this.entries.delete(key);
|
|
100
|
+
})
|
|
101
|
+
.catch(() => {
|
|
102
|
+
// Keep a failed barrier visible to the next lifecycle flush.
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
cancel(
|
|
107
|
+
sessionKey: string,
|
|
108
|
+
principal?: string,
|
|
109
|
+
namespace?: string,
|
|
110
|
+
scopeHint?: string,
|
|
111
|
+
): void {
|
|
112
|
+
for (const reservation of this.preparations.get(sessionKey) ?? []) {
|
|
113
|
+
const principalMatches =
|
|
114
|
+
principal === undefined ||
|
|
115
|
+
reservation.principal === undefined ||
|
|
116
|
+
reservation.principal === principal;
|
|
117
|
+
const namespaceMatches =
|
|
118
|
+
namespace === undefined ||
|
|
119
|
+
reservation.namespace === undefined ||
|
|
120
|
+
reservation.namespace === namespace;
|
|
121
|
+
const resolvedScopeMatches =
|
|
122
|
+
namespace !== undefined &&
|
|
123
|
+
reservation.namespace === namespace &&
|
|
124
|
+
principalMatches;
|
|
125
|
+
const scopeHintMismatch =
|
|
126
|
+
(reservation.scopeHint !== undefined && reservation.scopeHint !== scopeHint) ||
|
|
127
|
+
(reservation.scopeHint === undefined && scopeHint !== undefined);
|
|
128
|
+
if ((!resolvedScopeMatches && scopeHintMismatch) || !principalMatches || !namespaceMatches) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
reservation.cancelled = true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
for (const [key, entry] of this.entries) {
|
|
135
|
+
const [entrySessionKey, entryPrincipal, entryNamespace] = key.split("\u0000");
|
|
136
|
+
if (
|
|
137
|
+
entrySessionKey !== sessionKey ||
|
|
138
|
+
(principal !== undefined && entryPrincipal !== (principal ?? "")) ||
|
|
139
|
+
(namespace !== undefined && entryNamespace !== (namespace ?? ""))
|
|
140
|
+
)
|
|
141
|
+
continue;
|
|
142
|
+
for (const controller of entry.controllers) controller.abort();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async wait(
|
|
147
|
+
sessionKey: string,
|
|
148
|
+
principal: string | undefined,
|
|
149
|
+
namespace: string | undefined,
|
|
150
|
+
abortSignal?: AbortSignal,
|
|
151
|
+
registerCancellation?: (cancel: () => void) => void,
|
|
152
|
+
scopeHint?: string,
|
|
153
|
+
): Promise<void> {
|
|
154
|
+
const key = this.key(sessionKey, principal, namespace);
|
|
155
|
+
const abortTracked = (): void => {
|
|
156
|
+
this.cancel(sessionKey, principal, namespace, scopeHint);
|
|
157
|
+
};
|
|
158
|
+
registerCancellation?.(abortTracked);
|
|
159
|
+
abortSignal?.addEventListener("abort", abortTracked, { once: true });
|
|
160
|
+
try {
|
|
161
|
+
await this.waitForPreparations(sessionKey);
|
|
162
|
+
while (true) {
|
|
163
|
+
const entry = this.entries.get(key);
|
|
164
|
+
if (!entry) return;
|
|
165
|
+
try {
|
|
166
|
+
await entry.promise;
|
|
167
|
+
} catch (error) {
|
|
168
|
+
if (this.entries.get(key) !== entry) continue;
|
|
169
|
+
this.entries.delete(key);
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
if (this.entries.get(key) !== entry) continue;
|
|
173
|
+
this.entries.delete(key);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
} finally {
|
|
177
|
+
abortSignal?.removeEventListener("abort", abortTracked);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -11,7 +11,25 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { createHash } from "node:crypto";
|
|
14
|
-
import {
|
|
14
|
+
import {
|
|
15
|
+
type CodingScopedWriteInput,
|
|
16
|
+
ENGRAM_ACCESS_WRITE_SCHEMA_VERSION,
|
|
17
|
+
type EngramAccessBriefingRequest,
|
|
18
|
+
type EngramAccessBriefingResponse,
|
|
19
|
+
type EngramAccessExtractionForceFlushRequest,
|
|
20
|
+
type EngramAccessExtractionForceFlushResponse,
|
|
21
|
+
EngramAccessInputError,
|
|
22
|
+
type EngramAccessMemoryStoreRequest,
|
|
23
|
+
type EngramAccessObserveRequest,
|
|
24
|
+
type EngramAccessObserveResponse,
|
|
25
|
+
type EngramAccessQmdCollectionState,
|
|
26
|
+
type EngramAccessQmdHealthResponse,
|
|
27
|
+
type EngramAccessSuggestionSubmitRequest,
|
|
28
|
+
type EngramAccessWriteResponse,
|
|
29
|
+
type MemoryScopePlan,
|
|
30
|
+
NamespaceNotWritableError,
|
|
31
|
+
} from "./access-service.js";
|
|
32
|
+
import { extractionForceFlush } from "./access-extraction-force-flush.js";
|
|
15
33
|
import { FileCalendarSource, buildBriefing, parseBriefingFocus, parseBriefingWindow } from "./briefing.js";
|
|
16
34
|
import {
|
|
17
35
|
resolveCompressionCapabilities,
|
|
@@ -32,24 +50,9 @@ import type { MemoryActionOutcome, MemoryActionType } from "./types.js";
|
|
|
32
50
|
import { exportWorkBoardMarkdown, exportWorkBoardSnapshot, importWorkBoardSnapshot } from "./work/board.js";
|
|
33
51
|
import { wrapWorkLayerContext } from "./work/boundary.js";
|
|
34
52
|
import { WorkStorage } from "./work/storage.js";
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
|
|
38
|
-
EngramAccessInputError,
|
|
39
|
-
NamespaceNotWritableError,
|
|
40
|
-
type CodingScopedWriteInput,
|
|
41
|
-
type EngramAccessBriefingRequest,
|
|
42
|
-
type EngramAccessBriefingResponse,
|
|
43
|
-
type EngramAccessMemoryStoreRequest,
|
|
44
|
-
type EngramAccessObserveRequest,
|
|
45
|
-
type EngramAccessObserveResponse,
|
|
46
|
-
type EngramAccessQmdCollectionState,
|
|
47
|
-
type EngramAccessQmdHealthResponse,
|
|
48
|
-
type EngramAccessSuggestionSubmitRequest,
|
|
49
|
-
type EngramAccessWriteResponse,
|
|
50
|
-
type MemoryScopePlan,
|
|
51
|
-
} from "./access-service.js";
|
|
52
|
-
|
|
53
|
+
import { buildAccessWriteRequestFingerprint } from "./write-envelope.js";
|
|
54
|
+
import { type QuarantineOperation, WriteQuarantineStore } from "./write-quarantine.js";
|
|
55
|
+
import { PendingObserveExtractionTracker, pendingObserveScopeHint } from "./access-observe-helpers.js";
|
|
53
56
|
export interface AccessObserveWriteSurfaceDeps {
|
|
54
57
|
attachCodingContextAfterScopedWrite(
|
|
55
58
|
request: CodingScopedWriteInput & { namespace?: string; sessionKey?: string }
|
|
@@ -107,6 +110,12 @@ export interface AccessObserveWriteSurfaceDeps {
|
|
|
107
110
|
authenticatedPrincipal?: string;
|
|
108
111
|
}
|
|
109
112
|
): Promise<MemoryScopePlan>;
|
|
113
|
+
cancelPendingObserveExtractions?(
|
|
114
|
+
sessionKey: string,
|
|
115
|
+
principal?: string,
|
|
116
|
+
namespace?: string,
|
|
117
|
+
scopeHint?: string,
|
|
118
|
+
): void;
|
|
110
119
|
resolveReadableNamespace(namespace: string | undefined, principal?: string): string;
|
|
111
120
|
validateWriteCandidate(
|
|
112
121
|
request: EngramAccessMemoryStoreRequest | EngramAccessSuggestionSubmitRequest,
|
|
@@ -121,7 +130,16 @@ export interface AccessObserveWriteSurfaceDeps {
|
|
|
121
130
|
|
|
122
131
|
export class AccessObserveWriteSurface {
|
|
123
132
|
private quarantineStoreInstance?: WriteQuarantineStore;
|
|
133
|
+
private readonly pendingObserveExtractions = new PendingObserveExtractionTracker();
|
|
124
134
|
|
|
135
|
+
public cancelPendingObserveExtractions(
|
|
136
|
+
sessionKey: string,
|
|
137
|
+
principal?: string,
|
|
138
|
+
namespace?: string,
|
|
139
|
+
scopeHint?: string,
|
|
140
|
+
): void {
|
|
141
|
+
this.pendingObserveExtractions.cancel(sessionKey, principal, namespace, scopeHint);
|
|
142
|
+
}
|
|
125
143
|
constructor(private readonly deps: AccessObserveWriteSurfaceDeps) {}
|
|
126
144
|
|
|
127
145
|
private quarantineStore(): WriteQuarantineStore {
|
|
@@ -654,6 +672,12 @@ export class AccessObserveWriteSurface {
|
|
|
654
672
|
// self base leaves NO coding context bound to the session, matching how
|
|
655
673
|
// `memory_store` resolves its full scoped write namespace before any
|
|
656
674
|
// session mutation.
|
|
675
|
+
const observePreparation = this.pendingObserveExtractions.reserve(
|
|
676
|
+
request.sessionKey,
|
|
677
|
+
pendingObserveScopeHint(request),
|
|
678
|
+
);
|
|
679
|
+
try {
|
|
680
|
+
|
|
657
681
|
let scope: MemoryScopePlan;
|
|
658
682
|
try {
|
|
659
683
|
scope = await this.deps.resolveMemoryScopePlan(request);
|
|
@@ -666,6 +690,7 @@ export class AccessObserveWriteSurface {
|
|
|
666
690
|
throw err;
|
|
667
691
|
}
|
|
668
692
|
const writeNamespace = scope.writeNamespace;
|
|
693
|
+
observePreparation.setScope(scope.principal, writeNamespace);
|
|
669
694
|
|
|
670
695
|
// Backward-compatible BASE writable namespace (pre-#1495 response semantics)
|
|
671
696
|
// for the legacy `namespace` response field. DERIVED from the already-resolved
|
|
@@ -812,21 +837,35 @@ export class AccessObserveWriteSurface {
|
|
|
812
837
|
// limits concurrency (one extraction at a time per session via
|
|
813
838
|
// queueBufferedExtraction). Fire-and-forget here just decouples
|
|
814
839
|
// the HTTP response from the queue drain.
|
|
840
|
+
if (!observePreparation.isCancelled()) {
|
|
841
|
+
|
|
815
842
|
try {
|
|
843
|
+
const observeAbortController = new AbortController();
|
|
816
844
|
const extractionPromise = this.deps.orchestrator.ingestReplayBatch(turns, {
|
|
817
845
|
archiveLcm: false,
|
|
818
846
|
writeNamespaceOverride,
|
|
819
847
|
principalOverride,
|
|
848
|
+
abortSignal: observeAbortController.signal,
|
|
849
|
+
...(typeof request.authenticatedPrincipal === "string" && request.authenticatedPrincipal.trim().length > 0
|
|
850
|
+
? { sessionOwnerPrincipal: request.authenticatedPrincipal.trim() }
|
|
851
|
+
: {}),
|
|
820
852
|
});
|
|
821
853
|
extractionPromise.catch((err) => {
|
|
822
854
|
log.error(`access-observe background extraction failed: ${err}`);
|
|
823
855
|
});
|
|
856
|
+
this.pendingObserveExtractions.track(
|
|
857
|
+
this.pendingObserveExtractions.key(request.sessionKey, scope.principal, writeNamespace),
|
|
858
|
+
extractionPromise,
|
|
859
|
+
observeAbortController,
|
|
860
|
+
);
|
|
824
861
|
extractionQueued = true;
|
|
825
862
|
} catch (err) {
|
|
826
863
|
// Synchronous enqueue failure (e.g. orchestrator disposed)
|
|
827
864
|
log.error(`access-observe extraction enqueue failed: ${err}`);
|
|
828
865
|
}
|
|
829
866
|
}
|
|
867
|
+
}
|
|
868
|
+
|
|
830
869
|
|
|
831
870
|
log.info(
|
|
832
871
|
`access-observe namespace=${namespace} effectiveNamespace=${writeNamespace} sessionKey=${request.sessionKey} messages=${request.messages.length} lcm=${lcmArchived} extraction=${extractionQueued}`
|
|
@@ -852,8 +891,28 @@ export class AccessObserveWriteSurface {
|
|
|
852
891
|
lcmArchived,
|
|
853
892
|
extractionQueued,
|
|
854
893
|
};
|
|
894
|
+
} finally {
|
|
895
|
+
observePreparation.release();
|
|
896
|
+
}
|
|
855
897
|
}
|
|
856
898
|
|
|
899
|
+
async extractionForceFlush(
|
|
900
|
+
request: EngramAccessExtractionForceFlushRequest,
|
|
901
|
+
): Promise<EngramAccessExtractionForceFlushResponse> {
|
|
902
|
+
return extractionForceFlush(
|
|
903
|
+
this.deps,
|
|
904
|
+
request,
|
|
905
|
+
(sessionKey, principal, namespace, abortSignal, registerCancellation, scopeHint) =>
|
|
906
|
+
this.pendingObserveExtractions.wait(
|
|
907
|
+
sessionKey,
|
|
908
|
+
principal,
|
|
909
|
+
namespace,
|
|
910
|
+
abortSignal,
|
|
911
|
+
registerCancellation,
|
|
912
|
+
scopeHint,
|
|
913
|
+
),
|
|
914
|
+
);
|
|
915
|
+
}
|
|
857
916
|
async workTask(request: {
|
|
858
917
|
action: "create" | "get" | "list" | "update" | "transition" | "delete";
|
|
859
918
|
id?: string;
|
|
@@ -194,7 +194,8 @@ defineOperation({ name: "observe", description: "Observe messages.", schema: str
|
|
|
194
194
|
handler: async (input, ctx) => ({ result: await ctx.service.observe({ sessionKey: defStr(input.sessionKey, ""), messages: (input.messages as unknown[]).map((m: unknown) => { const r = m as Record<string, unknown>; return { role: String(r.role), content: String(r.content), parts: r.parts as unknown[], rawContent: r.rawContent as string | undefined, sourceFormat: r.sourceFormat as string | undefined }; }) as never, skipExtraction: input.skipExtraction === true, idempotencyKey: optStr(input.idempotencyKey), namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal, cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}) }, ctx.hooks?.enforceWriteQuota ? { enforceWriteQuota: ctx.hooks.enforceWriteQuota } : undefined) }),
|
|
195
195
|
});
|
|
196
196
|
defineOperation({ name: "lcm_search", description: "Search LCM.", schema: strictSchema({ query: S.str, sessionKey: S.str, sessionPrefix: S.str, namespace: S.str, limit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.lcmSearch({ query: defStr(input.query, ""), sessionKey: optStr(input.sessionKey), sessionPrefix: optStr(input.sessionPrefix), namespace: optStr(input.namespace), limit: optNum(input.limit), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
|
|
197
|
-
defineOperation({ name: "lcm_compaction_flush", description: "Flush LCM compaction.", schema: strictSchema({ sessionKey: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.lcmCompactionFlush({ sessionKey: optStr(input.sessionKey) ?? "", namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
|
|
197
|
+
defineOperation({ name: "lcm_compaction_flush", description: "Flush LCM compaction.", schema: strictSchema({ sessionKey: S.str, namespace: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.lcmCompactionFlush({ sessionKey: optStr(input.sessionKey) ?? "", namespace: optStr(input.namespace), cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
|
|
198
|
+
defineOperation({ name: "extraction_force_flush", description: "Force-drain a session extraction buffer.", schema: strictSchema({ sessionKey: S.str, namespace: S.str, cwd: S.str, projectTag: S.str, deadlineMs: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.extractionForceFlush({ sessionKey: optStr(input.sessionKey) ?? "", namespace: optStr(input.namespace), cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), deadlineMs: optNum(input.deadlineMs), authenticatedPrincipal: ctx.authenticatedPrincipal, onCommitted: ctx.hooks?.recordWriteCommit, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) }) });
|
|
198
199
|
defineOperation({ name: "lcm_compaction_record", description: "Record LCM compaction.", schema: strictSchema({ sessionKey: S.str, namespace: S.str, tokensBefore: S.num, tokensAfter: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.lcmCompactionRecord({ sessionKey: optStr(input.sessionKey) ?? "", namespace: optStr(input.namespace), tokensBefore: optNum(input.tokensBefore) ?? 0, tokensAfter: optNum(input.tokensAfter) ?? 0, authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });
|
|
199
200
|
|
|
200
201
|
// === CONTINUITY/IDENTITY ===
|
|
@@ -58,6 +58,23 @@ test("LCM compaction flush rejects duplicate namespace batches", () => {
|
|
|
58
58
|
assert.equal(result.success, false);
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
+
test("extraction force-flush schema accepts scoped deadlines and rejects invalid deadlines", () => {
|
|
62
|
+
const accepted = validateRequest("extractionForceFlush", {
|
|
63
|
+
sessionKey: "pi:session",
|
|
64
|
+
namespace: "work",
|
|
65
|
+
cwd: "/workspace/project",
|
|
66
|
+
projectTag: "Acme/Webshop",
|
|
67
|
+
deadlineMs: 1_900_000_000_000,
|
|
68
|
+
});
|
|
69
|
+
assert.equal(accepted.success, true);
|
|
70
|
+
|
|
71
|
+
const rejected = validateRequest("extractionForceFlush", {
|
|
72
|
+
sessionKey: "pi:session",
|
|
73
|
+
deadlineMs: -1,
|
|
74
|
+
});
|
|
75
|
+
assert.equal(rejected.success, false);
|
|
76
|
+
});
|
|
77
|
+
|
|
61
78
|
test("LCM compaction record rejects invalid token counts", () => {
|
|
62
79
|
const result = validateRequest("lcmCompactionRecord", {
|
|
63
80
|
sessionKey: "pi:session",
|
package/src/access-schema.ts
CHANGED
|
@@ -44,6 +44,14 @@ export function formatZodError(error: z.ZodError): SchemaValidationError {
|
|
|
44
44
|
const namespaceSchema = z.string().trim().max(256).optional();
|
|
45
45
|
const sessionKeySchema = z.string().trim().min(1).max(512).optional();
|
|
46
46
|
const idempotencyKeySchema = z.string().trim().min(1).max(256).optional();
|
|
47
|
+
const cwdSchema = z.string().trim().min(1, "cwd must be non-empty when provided").max(2048).optional();
|
|
48
|
+
const projectTagSchema = z
|
|
49
|
+
.string()
|
|
50
|
+
.trim()
|
|
51
|
+
.min(1, "projectTag must be non-empty when provided")
|
|
52
|
+
.max(256)
|
|
53
|
+
.optional();
|
|
54
|
+
const deadlineMsSchema = z.number().finite().min(0).max(Number.MAX_SAFE_INTEGER).optional();
|
|
47
55
|
const dryRunSchema = z.boolean().optional();
|
|
48
56
|
const schemaVersionSchema = z.number().int().optional();
|
|
49
57
|
const timeZoneSchema = z
|
|
@@ -108,12 +116,12 @@ export const recallRequestSchema = z.object({
|
|
|
108
116
|
disclosure: recallDisclosureSchema.optional(),
|
|
109
117
|
codingContext: codingContextSchema.optional(),
|
|
110
118
|
/** Working directory for auto git-context resolution (issue #569). */
|
|
111
|
-
cwd:
|
|
119
|
+
cwd: cwdSchema,
|
|
112
120
|
/**
|
|
113
121
|
* Arbitrary project tag for non-git-based project scoping (issue #569).
|
|
114
122
|
* Creates a coding context with `projectId: "tag:<projectTag>"`.
|
|
115
123
|
*/
|
|
116
|
-
projectTag:
|
|
124
|
+
projectTag: projectTagSchema,
|
|
117
125
|
/**
|
|
118
126
|
* Historical recall pin (issue #680). ISO 8601 timestamp. The
|
|
119
127
|
* schema only enforces the basic shape; the access service runs
|
|
@@ -225,12 +233,12 @@ export const observeRequestSchema = z.object({
|
|
|
225
233
|
*/
|
|
226
234
|
idempotencyKey: idempotencyKeySchema,
|
|
227
235
|
/** Working directory for auto git-context resolution (issue #569). */
|
|
228
|
-
cwd:
|
|
236
|
+
cwd: cwdSchema,
|
|
229
237
|
/**
|
|
230
238
|
* Arbitrary project tag for non-git-based project scoping (issue #569).
|
|
231
239
|
* Creates a coding context with `projectId: "tag:<projectTag>"`.
|
|
232
240
|
*/
|
|
233
|
-
projectTag:
|
|
241
|
+
projectTag: projectTagSchema,
|
|
234
242
|
});
|
|
235
243
|
|
|
236
244
|
// ---------------------------------------------------------------------------
|
|
@@ -268,13 +276,8 @@ export const memoryStoreRequestSchema = z.object({
|
|
|
268
276
|
// `namespace` is given, these route the write to the same project namespace
|
|
269
277
|
// recall/observe resolve from `cwd`/`projectTag` (issue #569, rule 42). Also
|
|
270
278
|
// lets MCP clients that auto-inject `cwd` (e.g. Pi MCPorter) call write tools.
|
|
271
|
-
cwd:
|
|
272
|
-
projectTag:
|
|
273
|
-
.string()
|
|
274
|
-
.trim()
|
|
275
|
-
.min(1, "projectTag must be non-empty when provided")
|
|
276
|
-
.max(256)
|
|
277
|
-
.optional(),
|
|
279
|
+
cwd: cwdSchema,
|
|
280
|
+
projectTag: projectTagSchema,
|
|
278
281
|
});
|
|
279
282
|
|
|
280
283
|
export const suggestionSubmitRequestSchema = memoryStoreRequestSchema;
|
|
@@ -335,6 +338,8 @@ export const lcmCompactionFlushRequestSchema = z
|
|
|
335
338
|
.object({
|
|
336
339
|
sessionKey: z.string().trim().min(1, "sessionKey is required").max(512),
|
|
337
340
|
namespace: namespaceSchema,
|
|
341
|
+
cwd: cwdSchema,
|
|
342
|
+
projectTag: projectTagSchema,
|
|
338
343
|
/**
|
|
339
344
|
* Optional multi-namespace flush used by delegate lifecycle replay. The
|
|
340
345
|
* server handles the whole list as one quota-counted write.
|
|
@@ -361,6 +366,14 @@ export const lcmCompactionFlushRequestSchema = z
|
|
|
361
366
|
}
|
|
362
367
|
});
|
|
363
368
|
|
|
369
|
+
export const extractionForceFlushRequestSchema = z.object({
|
|
370
|
+
sessionKey: z.string().trim().min(1, "sessionKey is required").max(512),
|
|
371
|
+
namespace: namespaceSchema,
|
|
372
|
+
cwd: cwdSchema,
|
|
373
|
+
projectTag: projectTagSchema,
|
|
374
|
+
deadlineMs: deadlineMsSchema,
|
|
375
|
+
});
|
|
376
|
+
|
|
364
377
|
export const lcmCompactionRecordRequestSchema = z.object({
|
|
365
378
|
sessionKey: z.string().trim().min(1, "sessionKey is required").max(512),
|
|
366
379
|
namespace: namespaceSchema,
|
|
@@ -583,6 +596,7 @@ export type TrustZonePromoteRequest = z.infer<typeof trustZonePromoteRequestSche
|
|
|
583
596
|
export type TrustZoneDemoSeedRequest = z.infer<typeof trustZoneDemoSeedRequestSchema>;
|
|
584
597
|
export type LcmSearchRequest = z.infer<typeof lcmSearchRequestSchema>;
|
|
585
598
|
export type LcmCompactionFlushRequest = z.infer<typeof lcmCompactionFlushRequestSchema>;
|
|
599
|
+
export type ExtractionForceFlushRequest = z.infer<typeof extractionForceFlushRequestSchema>;
|
|
586
600
|
export type LcmCompactionRecordRequest = z.infer<typeof lcmCompactionRecordRequestSchema>;
|
|
587
601
|
export type DaySummaryRequest = z.infer<typeof daySummaryRequestSchema>;
|
|
588
602
|
export type CapsuleExportRequest = z.infer<typeof capsuleExportRequestSchema>;
|
|
@@ -610,6 +624,7 @@ export type SchemaName =
|
|
|
610
624
|
| "trustZoneDemoSeed"
|
|
611
625
|
| "lcmSearch"
|
|
612
626
|
| "lcmCompactionFlush"
|
|
627
|
+
| "extractionForceFlush"
|
|
613
628
|
| "lcmCompactionRecord"
|
|
614
629
|
| "daySummary"
|
|
615
630
|
| "capsuleExport"
|
|
@@ -633,6 +648,7 @@ export type SchemaTypeFor<N extends SchemaName> =
|
|
|
633
648
|
: N extends "trustZoneDemoSeed" ? TrustZoneDemoSeedRequest
|
|
634
649
|
: N extends "lcmSearch" ? LcmSearchRequest
|
|
635
650
|
: N extends "lcmCompactionFlush" ? LcmCompactionFlushRequest
|
|
651
|
+
: N extends "extractionForceFlush" ? ExtractionForceFlushRequest
|
|
636
652
|
: N extends "lcmCompactionRecord" ? LcmCompactionRecordRequest
|
|
637
653
|
: N extends "daySummary" ? DaySummaryRequest
|
|
638
654
|
: N extends "capsuleExport" ? CapsuleExportRequest
|
|
@@ -657,6 +673,7 @@ const schemas: Record<SchemaName, z.ZodTypeAny> = {
|
|
|
657
673
|
trustZoneDemoSeed: trustZoneDemoSeedRequestSchema,
|
|
658
674
|
lcmSearch: lcmSearchRequestSchema,
|
|
659
675
|
lcmCompactionFlush: lcmCompactionFlushRequestSchema,
|
|
676
|
+
extractionForceFlush: extractionForceFlushRequestSchema,
|
|
660
677
|
lcmCompactionRecord: lcmCompactionRecordRequestSchema,
|
|
661
678
|
daySummary: daySummaryRequestSchema,
|
|
662
679
|
capsuleExport: capsuleExportRequestSchema,
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { CodingScopedWriteInput } from "./access-service.js";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
export interface EngramAccessLcmCompactionFlushRequest extends CodingScopedWriteInput {
|
|
5
|
+
sessionKey: string;
|
|
6
|
+
namespace?: string;
|
|
7
|
+
authenticatedPrincipal?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface EngramAccessLcmCompactionFlushResponse {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
flushed: boolean;
|
|
13
|
+
sessionKey: string;
|
|
14
|
+
namespace: string;
|
|
15
|
+
reason?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface EngramAccessExtractionForceFlushRequest extends CodingScopedWriteInput {
|
|
19
|
+
sessionKey: string;
|
|
20
|
+
namespace?: string;
|
|
21
|
+
authenticatedPrincipal?: string;
|
|
22
|
+
deadlineMs?: number;
|
|
23
|
+
abortSignal?: AbortSignal;
|
|
24
|
+
/** Internal HTTP hook invoked at the durable commit boundary. */
|
|
25
|
+
onCommitted?: () => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface EngramAccessExtractionForceFlushResponse {
|
|
29
|
+
flushed: boolean;
|
|
30
|
+
sessionKey: string;
|
|
31
|
+
namespace: string;
|
|
32
|
+
effectiveNamespace: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface ExtractionForceFlushDelegate {
|
|
36
|
+
extractionForceFlush(
|
|
37
|
+
request: EngramAccessExtractionForceFlushRequest,
|
|
38
|
+
): Promise<EngramAccessExtractionForceFlushResponse>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function delegateExtractionForceFlush(
|
|
42
|
+
delegate: ExtractionForceFlushDelegate,
|
|
43
|
+
request: EngramAccessExtractionForceFlushRequest,
|
|
44
|
+
): Promise<EngramAccessExtractionForceFlushResponse> {
|
|
45
|
+
return delegate.extractionForceFlush(request);
|
|
46
|
+
}
|