@remnic/core 9.69.9 → 9.69.11
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 +15 -13
- package/dist/access-admin-ops-surface.js +41 -28
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +42 -29
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +41 -28
- package/dist/access-cli.js +101 -89
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-extraction-force-flush.d.ts +13 -11
- package/dist/access-extraction-force-flush.js +41 -28
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-lcm-compaction.d.ts +13 -11
- package/dist/access-http-lifecycle-flush.d.ts +13 -11
- package/dist/access-http-offline-stream.d.ts +13 -11
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +43 -30
- package/dist/access-http.d.ts +14 -12
- package/dist/access-http.js +62 -47
- package/dist/access-identity-continuity-surface.d.ts +10 -9
- package/dist/access-identity-continuity-surface.js +41 -28
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +41 -28
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +53 -39
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-S8fhQcCo.d.ts → access-namespace-preflight-Cy0yPsaE.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +41 -28
- package/dist/access-observe-write-surface.d.ts +15 -13
- package/dist/access-observe-write-surface.js +41 -28
- package/dist/access-offline-manifest.d.ts +10 -9
- package/dist/access-offline-manifest.js +3 -3
- package/dist/access-operations-batch.js +44 -31
- package/dist/access-operations.d.ts +19 -17
- package/dist/access-operations.js +49 -36
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +41 -28
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +41 -28
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +41 -28
- package/dist/access-schema.d.ts +107 -90
- package/dist/access-schema.js +5 -3
- package/dist/{access-service-LbwWl05g.d.ts → access-service-Cqfk3dD1.d.ts} +89 -72
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +41 -28
- package/dist/access-surface-catalog.d.ts +13 -11
- package/dist/access-surface-catalog.js +45 -30
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +6 -5
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +10 -9
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +8 -8
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{catalog-BmBXTtOs.d.ts → catalog-9X8WpZNO.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +11 -11
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-DKZR56A3.js → chunk-227WJVPY.js} +2 -2
- package/dist/{chunk-RXS4SQ5S.js → chunk-2EHDPHMD.js} +2 -2
- package/dist/{chunk-ZPN6SSWA.js → chunk-2XJDAEAM.js} +2 -2
- package/dist/{chunk-J3JEW5CT.js → chunk-3GCK6ONU.js} +2 -2
- package/dist/{chunk-44HBCMOA.js → chunk-3ITTF7YH.js} +51 -51
- package/dist/{chunk-754GA2UE.js → chunk-3YKOFCKP.js} +11 -6
- package/dist/chunk-3YKOFCKP.js.map +1 -0
- package/dist/{chunk-GD7D7WP2.js → chunk-4UVDLNHQ.js} +2 -2
- package/dist/{chunk-IGUWU5BD.js → chunk-4WIKMOE3.js} +44 -22
- package/dist/chunk-4WIKMOE3.js.map +1 -0
- package/dist/{chunk-LVYO2HZJ.js → chunk-5HO3QBAD.js} +11 -6
- package/dist/chunk-5HO3QBAD.js.map +1 -0
- package/dist/{chunk-3QWF54M4.js → chunk-5P2KNFJZ.js} +149 -25
- package/dist/chunk-5P2KNFJZ.js.map +1 -0
- package/dist/{chunk-YVMTXBJJ.js → chunk-5YQ7RFSO.js} +2 -2
- package/dist/{chunk-4PJYD2L3.js → chunk-6TOWUN2R.js} +3 -3
- package/dist/{chunk-HINMCD7V.js → chunk-7NCUHD5U.js} +2 -2
- package/dist/{chunk-QHYSECIG.js → chunk-7ZMU4XQT.js} +2 -2
- package/dist/{chunk-GISV63M2.js → chunk-APZXA4WI.js} +2 -2
- package/dist/{chunk-2QSZNTDO.js → chunk-AU7Q3LSC.js} +4 -4
- package/dist/{chunk-G4MCAHMF.js → chunk-B75VCEX5.js} +5 -5
- package/dist/{chunk-DJZWNKFO.js → chunk-BE4Y6GK6.js} +2 -2
- package/dist/{chunk-E5WTGEWX.js → chunk-BEXFNGQ3.js} +3 -3
- package/dist/{chunk-SO73GYOZ.js → chunk-BFDOBESV.js} +2 -2
- package/dist/{chunk-OLT3YTDH.js → chunk-BIJAWZYW.js} +4 -4
- package/dist/{chunk-X5TGZAP2.js → chunk-BO4PWIJY.js} +3 -3
- package/dist/{chunk-JMAG7WZ7.js → chunk-BX6GW4KC.js} +2 -2
- package/dist/chunk-C5C7IJ4Q.js +27 -0
- package/dist/chunk-C5C7IJ4Q.js.map +1 -0
- package/dist/chunk-CC37E3QM.js +198 -0
- package/dist/chunk-CC37E3QM.js.map +1 -0
- package/dist/{chunk-X5PIDJ3L.js → chunk-DA4ZMCBU.js} +3 -3
- package/dist/{chunk-PEOFTEUC.js → chunk-DH3V7RCQ.js} +21 -13
- package/dist/chunk-DH3V7RCQ.js.map +1 -0
- package/dist/chunk-DXFG2VGN.js +50 -0
- package/dist/chunk-DXFG2VGN.js.map +1 -0
- package/dist/{chunk-4OFKZAJG.js → chunk-EAARGPWI.js} +2 -1
- package/dist/chunk-EAARGPWI.js.map +1 -0
- package/dist/{chunk-H6RSANGQ.js → chunk-ETZ7KKOS.js} +2 -2
- package/dist/{chunk-K4E3Y3ZX.js → chunk-G7VEQEMG.js} +2 -1
- package/dist/chunk-G7VEQEMG.js.map +1 -0
- package/dist/{chunk-SXQZMC7R.js → chunk-GR4C3FHT.js} +2 -2
- package/dist/{chunk-S6AHHQ6C.js → chunk-H5IIBGDM.js} +2 -2
- package/dist/{chunk-GFGQOZGG.js → chunk-HFRGCNFY.js} +10 -10
- package/dist/chunk-HRATODNO.js +28 -0
- package/dist/chunk-HRATODNO.js.map +1 -0
- package/dist/{chunk-MAG6M3B6.js → chunk-HTOWFFAI.js} +2 -2
- package/dist/chunk-HUSTM6PU.js +27 -0
- package/dist/chunk-HUSTM6PU.js.map +1 -0
- package/dist/{chunk-KAVQ5GYY.js → chunk-I4QAH4SY.js} +3 -3
- package/dist/{chunk-2MW3UQNX.js → chunk-I6DUKBUI.js} +2 -2
- package/dist/{chunk-VI637ILW.js → chunk-IN673LEP.js} +48 -15
- package/dist/chunk-IN673LEP.js.map +1 -0
- package/dist/{chunk-YHCBJULX.js → chunk-JGXMA6HL.js} +2 -2
- package/dist/{chunk-TA7UZZMW.js → chunk-JHTF22NQ.js} +2 -2
- package/dist/{chunk-ANN5VMHT.js → chunk-LDOQE34V.js} +2 -2
- package/dist/{chunk-MEW53VQJ.js → chunk-LDWIPYJ6.js} +7 -7
- package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
- package/dist/{chunk-H3HOC6UT.js → chunk-LF6SHWVV.js} +2 -2
- package/dist/{chunk-QGUFN25Q.js → chunk-LJAP4KSW.js} +2 -2
- package/dist/{chunk-JAU4MRKB.js → chunk-LJNLLNEM.js} +2 -2
- package/dist/{chunk-6C57JBJ3.js → chunk-LUDXSSTW.js} +2 -2
- package/dist/{chunk-YJPFTF57.js → chunk-LWBSEYW3.js} +6 -6
- package/dist/chunk-M6RORUO5.js +59 -0
- package/dist/chunk-M6RORUO5.js.map +1 -0
- package/dist/{chunk-PRK4WTPU.js → chunk-M7DGN6JZ.js} +3 -3
- package/dist/{chunk-EN75MUTO.js → chunk-MNH2GM4O.js} +5 -5
- package/dist/{chunk-LK4TOYPU.js → chunk-NF3NMAG7.js} +2 -2
- package/dist/{chunk-M5UJJUON.js → chunk-NHLEFBE2.js} +10 -2
- package/dist/chunk-NHLEFBE2.js.map +1 -0
- package/dist/chunk-NN5CQTAJ.js +42 -0
- package/dist/chunk-NN5CQTAJ.js.map +1 -0
- package/dist/{chunk-VGTXHTWU.js → chunk-OASGWNYL.js} +2 -2
- package/dist/chunk-OEDW4ER7.js +62 -0
- package/dist/chunk-OEDW4ER7.js.map +1 -0
- package/dist/{chunk-C2JCVZWX.js → chunk-OLBZ2WGG.js} +2 -2
- package/dist/{chunk-Z3SQEEB6.js → chunk-OUKBMQ2O.js} +2 -2
- package/dist/{chunk-XXW32OL7.js → chunk-OYV6RKPM.js} +1 -1
- package/dist/chunk-OYV6RKPM.js.map +1 -0
- package/dist/{chunk-2Z3DG5CQ.js → chunk-P6GKRT2H.js} +1 -1
- package/dist/{chunk-A3WMMQAH.js → chunk-P7LVYPIX.js} +3 -3
- package/dist/{chunk-26JWBSWD.js → chunk-PGCZLHRB.js} +11 -3
- package/dist/chunk-PGCZLHRB.js.map +1 -0
- package/dist/{chunk-Y3WMJAZ3.js → chunk-QRDSXR3V.js} +2 -2
- package/dist/{chunk-NDE7CH6C.js → chunk-QUVWFZOU.js} +2 -2
- package/dist/{chunk-M5GBTETG.js → chunk-R7FXPG4T.js} +2 -2
- package/dist/chunk-RF2SMMPP.js +37 -0
- package/dist/chunk-RF2SMMPP.js.map +1 -0
- package/dist/{chunk-X66BHMAU.js → chunk-RJ57OOCD.js} +2 -2
- package/dist/chunk-S5G2LAL7.js +354 -0
- package/dist/chunk-S5G2LAL7.js.map +1 -0
- package/dist/{chunk-VOPOPTZ7.js → chunk-TRLCMLX7.js} +2 -2
- package/dist/{chunk-KZMFU7YL.js → chunk-V3HUBF7T.js} +2 -2
- package/dist/{chunk-KLL5SPER.js → chunk-VHAKBUBD.js} +2 -2
- package/dist/{chunk-WF2WCZCR.js → chunk-VYD63IFH.js} +3 -3
- package/dist/chunk-VZIAVM72.js +49 -0
- package/dist/chunk-VZIAVM72.js.map +1 -0
- package/dist/chunk-WTWQA7BB.js +28 -0
- package/dist/chunk-WTWQA7BB.js.map +1 -0
- package/dist/{chunk-J55NAXDH.js → chunk-X4FIZAVQ.js} +82 -40
- package/dist/chunk-X4FIZAVQ.js.map +1 -0
- package/dist/{chunk-3FXXFLVK.js → chunk-XFPHV65N.js} +2 -2
- package/dist/{chunk-JCUG7AXZ.js → chunk-XJJYSX6F.js} +4 -4
- package/dist/{chunk-NAZROP6I.js → chunk-XMIAU4CO.js} +2 -2
- package/dist/{chunk-LHGIBXVX.js → chunk-XQGFIAG7.js} +2 -2
- package/dist/{chunk-5TBO7CDR.js → chunk-YSSAGB2O.js} +4 -23
- package/dist/chunk-YSSAGB2O.js.map +1 -0
- package/dist/{chunk-IWO4HEOL.js → chunk-YWN3GYI2.js} +2 -2
- package/dist/{chunk-IIO4C3YL.js → chunk-Z33VUMKY.js} +3 -3
- package/dist/{cli-Bvy4jdBu.d.ts → cli-Dk-lM_tI.d.ts} +5 -5
- package/dist/cli.d.ts +15 -13
- package/dist/cli.js +80 -68
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +8 -8
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +10 -9
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +6 -5
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +8 -8
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +10 -9
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +4 -3
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +10 -10
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +10 -10
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-config.d.ts +32 -0
- package/dist/deep-recall-config.js +12 -0
- package/dist/deep-recall-http-glue.d.ts +170 -0
- package/dist/deep-recall-http-glue.js +31 -0
- package/dist/deep-recall-http-glue.js.map +1 -0
- package/dist/deep-recall-mcp-tools.d.ts +144 -0
- package/dist/deep-recall-mcp-tools.js +8 -0
- package/dist/deep-recall-mcp-tools.js.map +1 -0
- package/dist/deep-recall-policy-llm.d.ts +37 -0
- package/dist/deep-recall-policy-llm.js +19 -0
- package/dist/deep-recall-policy-llm.js.map +1 -0
- package/dist/deep-recall-renderer.d.ts +16 -0
- package/dist/deep-recall-renderer.js +8 -0
- package/dist/deep-recall-renderer.js.map +1 -0
- package/dist/deep-recall-seeds.d.ts +83 -0
- package/dist/deep-recall-seeds.js +8 -0
- package/dist/deep-recall-seeds.js.map +1 -0
- package/dist/deep-recall.d.ts +97 -0
- package/dist/deep-recall.js +13 -0
- package/dist/deep-recall.js.map +1 -0
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-BC3bCEet.d.ts → dependency-propagation-delivery-BZGUecZf.d.ts} +1 -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/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +8 -8
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/explicit-capture.d.ts +10 -9
- package/dist/external-wiki-access.d.ts +13 -11
- package/dist/external-wiki-access.js +42 -29
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +13 -11
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -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-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +14 -13
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/{graph-edge-decay-DGTBFALQ.js → graph-edge-decay-FXGELBFA.js} +4 -4
- package/dist/graph-edge-decay-FXGELBFA.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.d.ts +2 -1
- package/dist/graph.js +2 -2
- package/dist/harmonic-construction.js +3 -3
- package/dist/harmonic-retrieval.d.ts +38 -2
- package/dist/harmonic-retrieval.js +12 -3
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-D4hS9uxK.d.ts → index-B4iTvT-w.d.ts} +2 -2
- package/dist/index.d.ts +701 -699
- package/dist/index.js +118 -106
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +10 -10
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +8 -8
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +9 -9
- package/dist/{maintenance-BRcc3Hx8.d.ts → maintenance-BBpNqEeJ.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +13 -11
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +13 -11
- package/dist/memory-subject.d.ts +13 -11
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +9 -9
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +4 -4
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +8 -8
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync.js +2 -2
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +11 -11
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +24 -23
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +16 -16
- package/dist/{orchestrator-Btq9lzAN.d.ts → orchestrator-DglY1H0w.d.ts} +8 -8
- package/dist/orchestrator.d.ts +10 -9
- package/dist/orchestrator.js +101 -89
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-CZoNdFb5.d.ts → pipeline-C7qRsy6g.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/{public-http-2MyshWxl.d.ts → public-http-CPpCsi35.d.ts} +1 -1
- package/dist/{qmd-VIjSCKIE.d.ts → qmd-YRLTa3AE.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-deep-expand-select.js +4 -44
- package/dist/recall-deep-expand-select.js.map +1 -1
- package/dist/recall-deep-frontier.js +4 -23
- package/dist/recall-deep-frontier.js.map +1 -1
- package/dist/recall-deep-rewrite.js +4 -23
- package/dist/recall-deep-rewrite.js.map +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-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.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/reconcile/cursor.d.ts +2 -1
- package/dist/reconcile/manifest.d.ts +2 -1
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +7 -6
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/runtime/http-transport.d.ts +4 -0
- package/dist/runtime/http-transport.js +10 -0
- package/dist/runtime/http-transport.js.map +1 -0
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/schemas.d.ts +176 -176
- package/dist/{scope-profiles-DqbxQXIS.d.ts → scope-profiles-BVvqVzJX.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +3 -3
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +3 -3
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-DW3rEUoW.d.ts → semantic-consolidation-BzCI6Kuu.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +9 -9
- package/dist/semantic-rule-promotion.js +8 -8
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +8 -8
- package/dist/{service-B2vJU_Bx.d.ts → service-DQ3Gscy5.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +43 -7
- package/dist/shared-context/manager.js +2 -1
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +12 -11
- package/dist/standup/build.js +8 -8
- package/dist/{storage-6fn7BPmb.d.ts → storage-DmTbQdD0.d.ts} +1 -1
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +7 -7
- package/dist/subject-config.d.ts +2 -1
- package/dist/summarizer.d.ts +2 -1
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +16 -14
- package/dist/support-passport/index.js +44 -31
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +9 -9
- package/dist/transfer/types.d.ts +78 -78
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-eM7QIcX2.d.ts → types-CLRTESSD.d.ts} +3 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +8 -8
- package/dist/who-knows-cli.d.ts +13 -11
- package/dist/who-knows-cli.js +9 -9
- package/dist/who-knows.d.ts +13 -11
- package/dist/who-knows.js +8 -8
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +12 -2
- package/src/access-boundary.ts +1 -0
- package/src/access-http.ts +5 -5
- package/src/access-mcp-output-schemas.ts +1 -0
- package/src/access-mcp.ts +3 -3
- package/src/access-operations-batch.ts +3 -1
- package/src/access-schema.ts +12 -0
- package/src/access-service.ts +162 -5
- package/src/access-surface-catalog.ts +2 -0
- package/src/cli/deep-recall-commands.ts +60 -0
- package/src/cli.ts +2 -2
- package/src/config.test.ts +19 -0
- package/src/config.ts +7 -0
- package/src/deep-recall-config.ts +83 -0
- package/src/deep-recall-http-glue.ts +75 -0
- package/src/deep-recall-mcp-tools.ts +33 -0
- package/src/deep-recall-policy-llm.ts +65 -0
- package/src/deep-recall-renderer.ts +41 -0
- package/src/deep-recall-seeds.ts +134 -0
- package/src/deep-recall-surface.test.ts +902 -0
- package/src/deep-recall.test.ts +348 -0
- package/src/deep-recall.ts +572 -0
- package/src/harmonic-retrieval.ts +78 -25
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/shared-context/envelope-at.test.ts +23 -0
- package/src/shared-context/envelope-at.ts +12 -6
- package/src/shared-context/envelope-io.ts +184 -0
- package/src/shared-context/envelope-wiring.test.ts +193 -0
- package/src/shared-context/governance.ts +28 -9
- package/src/shared-context/iso-instant.ts +43 -0
- package/src/shared-context/manager.ts +74 -15
- package/src/shared-context/provenance.ts +3 -26
- package/src/shared-context/write-origin.test.ts +145 -0
- package/src/types.ts +3 -1
- package/dist/chunk-26JWBSWD.js.map +0 -1
- package/dist/chunk-3QWF54M4.js.map +0 -1
- package/dist/chunk-4OFKZAJG.js.map +0 -1
- package/dist/chunk-5TBO7CDR.js.map +0 -1
- package/dist/chunk-754GA2UE.js.map +0 -1
- package/dist/chunk-IGUWU5BD.js.map +0 -1
- package/dist/chunk-J55NAXDH.js.map +0 -1
- package/dist/chunk-K4E3Y3ZX.js.map +0 -1
- package/dist/chunk-LVYO2HZJ.js.map +0 -1
- package/dist/chunk-M5UJJUON.js.map +0 -1
- package/dist/chunk-PEOFTEUC.js.map +0 -1
- package/dist/chunk-VI637ILW.js.map +0 -1
- package/dist/chunk-XXW32OL7.js.map +0 -1
- /package/dist/{chunk-DKZR56A3.js.map → chunk-227WJVPY.js.map} +0 -0
- /package/dist/{chunk-RXS4SQ5S.js.map → chunk-2EHDPHMD.js.map} +0 -0
- /package/dist/{chunk-ZPN6SSWA.js.map → chunk-2XJDAEAM.js.map} +0 -0
- /package/dist/{chunk-J3JEW5CT.js.map → chunk-3GCK6ONU.js.map} +0 -0
- /package/dist/{chunk-44HBCMOA.js.map → chunk-3ITTF7YH.js.map} +0 -0
- /package/dist/{chunk-GD7D7WP2.js.map → chunk-4UVDLNHQ.js.map} +0 -0
- /package/dist/{chunk-YVMTXBJJ.js.map → chunk-5YQ7RFSO.js.map} +0 -0
- /package/dist/{chunk-4PJYD2L3.js.map → chunk-6TOWUN2R.js.map} +0 -0
- /package/dist/{chunk-HINMCD7V.js.map → chunk-7NCUHD5U.js.map} +0 -0
- /package/dist/{chunk-QHYSECIG.js.map → chunk-7ZMU4XQT.js.map} +0 -0
- /package/dist/{chunk-GISV63M2.js.map → chunk-APZXA4WI.js.map} +0 -0
- /package/dist/{chunk-2QSZNTDO.js.map → chunk-AU7Q3LSC.js.map} +0 -0
- /package/dist/{chunk-G4MCAHMF.js.map → chunk-B75VCEX5.js.map} +0 -0
- /package/dist/{chunk-DJZWNKFO.js.map → chunk-BE4Y6GK6.js.map} +0 -0
- /package/dist/{chunk-E5WTGEWX.js.map → chunk-BEXFNGQ3.js.map} +0 -0
- /package/dist/{chunk-SO73GYOZ.js.map → chunk-BFDOBESV.js.map} +0 -0
- /package/dist/{chunk-OLT3YTDH.js.map → chunk-BIJAWZYW.js.map} +0 -0
- /package/dist/{chunk-X5TGZAP2.js.map → chunk-BO4PWIJY.js.map} +0 -0
- /package/dist/{chunk-JMAG7WZ7.js.map → chunk-BX6GW4KC.js.map} +0 -0
- /package/dist/{chunk-X5PIDJ3L.js.map → chunk-DA4ZMCBU.js.map} +0 -0
- /package/dist/{chunk-H6RSANGQ.js.map → chunk-ETZ7KKOS.js.map} +0 -0
- /package/dist/{chunk-SXQZMC7R.js.map → chunk-GR4C3FHT.js.map} +0 -0
- /package/dist/{chunk-S6AHHQ6C.js.map → chunk-H5IIBGDM.js.map} +0 -0
- /package/dist/{chunk-GFGQOZGG.js.map → chunk-HFRGCNFY.js.map} +0 -0
- /package/dist/{chunk-MAG6M3B6.js.map → chunk-HTOWFFAI.js.map} +0 -0
- /package/dist/{chunk-KAVQ5GYY.js.map → chunk-I4QAH4SY.js.map} +0 -0
- /package/dist/{chunk-2MW3UQNX.js.map → chunk-I6DUKBUI.js.map} +0 -0
- /package/dist/{chunk-YHCBJULX.js.map → chunk-JGXMA6HL.js.map} +0 -0
- /package/dist/{chunk-TA7UZZMW.js.map → chunk-JHTF22NQ.js.map} +0 -0
- /package/dist/{chunk-ANN5VMHT.js.map → chunk-LDOQE34V.js.map} +0 -0
- /package/dist/{chunk-MEW53VQJ.js.map → chunk-LDWIPYJ6.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-H3HOC6UT.js.map → chunk-LF6SHWVV.js.map} +0 -0
- /package/dist/{chunk-QGUFN25Q.js.map → chunk-LJAP4KSW.js.map} +0 -0
- /package/dist/{chunk-JAU4MRKB.js.map → chunk-LJNLLNEM.js.map} +0 -0
- /package/dist/{chunk-6C57JBJ3.js.map → chunk-LUDXSSTW.js.map} +0 -0
- /package/dist/{chunk-YJPFTF57.js.map → chunk-LWBSEYW3.js.map} +0 -0
- /package/dist/{chunk-PRK4WTPU.js.map → chunk-M7DGN6JZ.js.map} +0 -0
- /package/dist/{chunk-EN75MUTO.js.map → chunk-MNH2GM4O.js.map} +0 -0
- /package/dist/{chunk-LK4TOYPU.js.map → chunk-NF3NMAG7.js.map} +0 -0
- /package/dist/{chunk-VGTXHTWU.js.map → chunk-OASGWNYL.js.map} +0 -0
- /package/dist/{chunk-C2JCVZWX.js.map → chunk-OLBZ2WGG.js.map} +0 -0
- /package/dist/{chunk-Z3SQEEB6.js.map → chunk-OUKBMQ2O.js.map} +0 -0
- /package/dist/{chunk-2Z3DG5CQ.js.map → chunk-P6GKRT2H.js.map} +0 -0
- /package/dist/{chunk-A3WMMQAH.js.map → chunk-P7LVYPIX.js.map} +0 -0
- /package/dist/{chunk-Y3WMJAZ3.js.map → chunk-QRDSXR3V.js.map} +0 -0
- /package/dist/{chunk-NDE7CH6C.js.map → chunk-QUVWFZOU.js.map} +0 -0
- /package/dist/{chunk-M5GBTETG.js.map → chunk-R7FXPG4T.js.map} +0 -0
- /package/dist/{chunk-X66BHMAU.js.map → chunk-RJ57OOCD.js.map} +0 -0
- /package/dist/{chunk-VOPOPTZ7.js.map → chunk-TRLCMLX7.js.map} +0 -0
- /package/dist/{chunk-KZMFU7YL.js.map → chunk-V3HUBF7T.js.map} +0 -0
- /package/dist/{chunk-KLL5SPER.js.map → chunk-VHAKBUBD.js.map} +0 -0
- /package/dist/{chunk-WF2WCZCR.js.map → chunk-VYD63IFH.js.map} +0 -0
- /package/dist/{chunk-3FXXFLVK.js.map → chunk-XFPHV65N.js.map} +0 -0
- /package/dist/{chunk-JCUG7AXZ.js.map → chunk-XJJYSX6F.js.map} +0 -0
- /package/dist/{chunk-NAZROP6I.js.map → chunk-XMIAU4CO.js.map} +0 -0
- /package/dist/{chunk-LHGIBXVX.js.map → chunk-XQGFIAG7.js.map} +0 -0
- /package/dist/{chunk-IWO4HEOL.js.map → chunk-YWN3GYI2.js.map} +0 -0
- /package/dist/{chunk-IIO4C3YL.js.map → chunk-Z33VUMKY.js.map} +0 -0
- /package/dist/{graph-edge-decay-DGTBFALQ.js.map → deep-recall-config.js.map} +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict ISO-8601 instant validation for shared-context envelopes
|
|
3
|
+
* (issue #1957 review round 3).
|
|
4
|
+
*
|
|
5
|
+
* `Date.parse` is permissive: under the supported Node runtime it reads
|
|
6
|
+
* `"2026-02-30"` as March 2 and `"1"` as January 1 2001. A caller-supplied
|
|
7
|
+
* expiry would therefore be silently reinterpreted into a governance deadline
|
|
8
|
+
* the caller never asked for. Validate the ISO shape AND the calendar
|
|
9
|
+
* components against the exact input, and reject rather than normalize.
|
|
10
|
+
*
|
|
11
|
+
* Extracted from `provenance.ts` so the envelope write path and the
|
|
12
|
+
* provenance stamp share one validator instead of two copies.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// Linear ISO instant. No nested quantifiers.
|
|
16
|
+
const ISO_INSTANT =
|
|
17
|
+
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* True only for a calendar-valid ISO-8601 instant carrying an explicit zone.
|
|
21
|
+
* Non-strings and non-finite parses are rejected explicitly, never coerced.
|
|
22
|
+
*/
|
|
23
|
+
export function isStrictIsoInstant(value: unknown): boolean {
|
|
24
|
+
if (typeof value !== "string") return false;
|
|
25
|
+
const match = ISO_INSTANT.exec(value);
|
|
26
|
+
if (!match) return false;
|
|
27
|
+
const year = Number(match[1]);
|
|
28
|
+
const month = Number(match[2]);
|
|
29
|
+
const day = Number(match[3]);
|
|
30
|
+
const hour = Number(match[4]);
|
|
31
|
+
const minute = Number(match[5]);
|
|
32
|
+
const second = Number(match[6]);
|
|
33
|
+
const utc = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
|
|
34
|
+
return (
|
|
35
|
+
Number.isFinite(Date.parse(value)) &&
|
|
36
|
+
utc.getUTCFullYear() === year &&
|
|
37
|
+
utc.getUTCMonth() === month - 1 &&
|
|
38
|
+
utc.getUTCDate() === day &&
|
|
39
|
+
utc.getUTCHours() === hour &&
|
|
40
|
+
utc.getUTCMinutes() === minute &&
|
|
41
|
+
utc.getUTCSeconds() === second
|
|
42
|
+
);
|
|
43
|
+
}
|
|
@@ -7,6 +7,14 @@ import type { PluginConfig } from "../types.js";
|
|
|
7
7
|
import { expandTildePath } from "../utils/path.js";
|
|
8
8
|
import { resolveConversationContextCapabilities } from "../capabilities.js";
|
|
9
9
|
import { throwIfAborted } from "../abort-error.js";
|
|
10
|
+
import {
|
|
11
|
+
composeWriteEnvelope,
|
|
12
|
+
envelopeFromScalars,
|
|
13
|
+
envelopeToFrontmatterLines,
|
|
14
|
+
resolveReadAuthority,
|
|
15
|
+
resolveWriteOrigin,
|
|
16
|
+
} from "./envelope-io.js";
|
|
17
|
+
import type { SharedAuthority, SharedEnvelope } from "./governance.js";
|
|
10
18
|
|
|
11
19
|
export const SharedFeedbackEntrySchema = z.object({
|
|
12
20
|
agent: z.string().min(1),
|
|
@@ -311,6 +319,10 @@ interface SharedCrossSignalSource {
|
|
|
311
319
|
path: string;
|
|
312
320
|
title: string;
|
|
313
321
|
topics: string[];
|
|
322
|
+
/** Resolved least-privilege authority from the item's envelope (issue #1957). */
|
|
323
|
+
authority: SharedAuthority;
|
|
324
|
+
/** Envelope origin agent id; legacy items fall back to the agent field. */
|
|
325
|
+
sharedBy: string;
|
|
314
326
|
}
|
|
315
327
|
|
|
316
328
|
interface SharedCrossSignalOverlap {
|
|
@@ -436,6 +448,7 @@ export class SharedContextManager {
|
|
|
436
448
|
private readonly feedbackDir: string;
|
|
437
449
|
private readonly feedbackInboxPath: string;
|
|
438
450
|
private readonly crossSignalsDir: string;
|
|
451
|
+
private readonly allowBindingAuthority: boolean;
|
|
439
452
|
private readonly dailySynthesisChains = new Map<string, Promise<void>>();
|
|
440
453
|
|
|
441
454
|
constructor(private readonly config: PluginConfig) {
|
|
@@ -449,6 +462,7 @@ export class SharedContextManager {
|
|
|
449
462
|
this.feedbackDir = path.join(base, "feedback");
|
|
450
463
|
this.feedbackInboxPath = path.join(this.feedbackDir, "inbox.jsonl");
|
|
451
464
|
this.crossSignalsDir = path.join(base, "cross-signals");
|
|
465
|
+
this.allowBindingAuthority = config.sharedContextAllowBindingAuthority === true;
|
|
452
466
|
}
|
|
453
467
|
|
|
454
468
|
async ensureStructure(): Promise<void> {
|
|
@@ -553,25 +567,61 @@ export class SharedContextManager {
|
|
|
553
567
|
title: string;
|
|
554
568
|
content: string;
|
|
555
569
|
createdAt?: Date;
|
|
570
|
+
/** Envelope authority class (issue #1957). Unrecognized values throw. */
|
|
571
|
+
authority?: string;
|
|
572
|
+
/** Optional ISO-8601 expiry stamped on the item. */
|
|
573
|
+
expiresAt?: string;
|
|
574
|
+
/** Optional id of the shared item this output supersedes. */
|
|
575
|
+
supersedes?: string;
|
|
576
|
+
/**
|
|
577
|
+
* Server-resolved identity of the caller, supplied by the access
|
|
578
|
+
* surface (issue #1957 review). When present it IS both the producer
|
|
579
|
+
* and the envelope origin; a disagreeing caller-supplied `agentId` is
|
|
580
|
+
* rejected so no caller can publish as another agent.
|
|
581
|
+
*/
|
|
582
|
+
authenticatedIdentity?: string;
|
|
583
|
+
/**
|
|
584
|
+
* Server-owned origin token for a write that crosses an external
|
|
585
|
+
* boundary but resolved no identity (issue #1957 review round 4).
|
|
586
|
+
* Stamped as the envelope origin (`sharedBy`); the caller label stays
|
|
587
|
+
* the producer so grouping never collapses.
|
|
588
|
+
*/
|
|
589
|
+
unattributedOrigin?: string;
|
|
556
590
|
}): Promise<string> {
|
|
591
|
+
const identity = resolveWriteOrigin({
|
|
592
|
+
agentId: opts.agentId,
|
|
593
|
+
authenticatedIdentity: opts.authenticatedIdentity,
|
|
594
|
+
unattributedOrigin: opts.unattributedOrigin,
|
|
595
|
+
});
|
|
557
596
|
const createdAt = opts.createdAt ?? new Date();
|
|
558
597
|
const date = ymd(createdAt);
|
|
559
598
|
const time = createdAt.toISOString().slice(11, 19).replace(/:/g, "");
|
|
560
599
|
const slug = safeSlug(opts.title);
|
|
561
|
-
const agentPathSegment = safePathSegment(
|
|
600
|
+
const agentPathSegment = safePathSegment(identity.agent, "agentId");
|
|
601
|
+
|
|
602
|
+
const envelope = composeWriteEnvelope({
|
|
603
|
+
origin: identity.origin,
|
|
604
|
+
authority: opts.authority,
|
|
605
|
+
expiresAt: opts.expiresAt,
|
|
606
|
+
supersedes: opts.supersedes,
|
|
607
|
+
allowBinding: this.allowBindingAuthority,
|
|
608
|
+
});
|
|
562
609
|
|
|
563
610
|
const dir = path.join(this.outputsDir, agentPathSegment, date);
|
|
564
611
|
await mkdir(dir, { recursive: true });
|
|
565
612
|
|
|
566
|
-
const body =
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
`agent: ${formatFrontmatterScalar(
|
|
570
|
-
`createdAt: ${createdAt.toISOString()}
|
|
571
|
-
`title: ${formatFrontmatterScalar(opts.title.replace(/\n/g, " ").slice(0, 200))}
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
"
|
|
613
|
+
const body = [
|
|
614
|
+
"---",
|
|
615
|
+
"kind: agent_output",
|
|
616
|
+
`agent: ${formatFrontmatterScalar(identity.agent)}`,
|
|
617
|
+
`createdAt: ${createdAt.toISOString()}`,
|
|
618
|
+
`title: ${formatFrontmatterScalar(opts.title.replace(/\n/g, " ").slice(0, 200))}`,
|
|
619
|
+
...envelopeToFrontmatterLines(envelope),
|
|
620
|
+
"---",
|
|
621
|
+
"",
|
|
622
|
+
opts.content.trimEnd(),
|
|
623
|
+
"",
|
|
624
|
+
].join("\n");
|
|
575
625
|
|
|
576
626
|
for (let attempt = 0; attempt < 100; attempt++) {
|
|
577
627
|
const suffix = attempt === 0 ? "" : `-${attempt + 1}`;
|
|
@@ -585,7 +635,7 @@ export class SharedContextManager {
|
|
|
585
635
|
}
|
|
586
636
|
}
|
|
587
637
|
|
|
588
|
-
throw new Error(`Unable to allocate unique shared-context output path for ${
|
|
638
|
+
throw new Error(`Unable to allocate unique shared-context output path for ${identity.agent}`);
|
|
589
639
|
}
|
|
590
640
|
|
|
591
641
|
async appendFeedback(entry: SharedFeedbackEntry): Promise<void> {
|
|
@@ -643,7 +693,7 @@ export class SharedContextManager {
|
|
|
643
693
|
const maxSummaryItems = Math.max(1, opts.maxSummaryItems ?? 8);
|
|
644
694
|
|
|
645
695
|
// Collect outputs for the day (best-effort).
|
|
646
|
-
const outputs: Array<{ agent: string; path: string; title: string; raw: string }> = [];
|
|
696
|
+
const outputs: Array<{ agent: string; path: string; title: string; raw: string; envelope: SharedEnvelope }> = [];
|
|
647
697
|
try {
|
|
648
698
|
const agents = (await readdir(this.outputsDir, { withFileTypes: true }))
|
|
649
699
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -657,7 +707,13 @@ export class SharedContextManager {
|
|
|
657
707
|
const raw = await readFile(p, "utf-8");
|
|
658
708
|
const title = readFrontmatterScalar(raw, "title") ?? f;
|
|
659
709
|
const agent = readFrontmatterScalar(raw, "agent") ?? safeDecodePathSegment(a.name);
|
|
660
|
-
|
|
710
|
+
const envelope = envelopeFromScalars({
|
|
711
|
+
sharedBy: readFrontmatterScalar(raw, "sharedBy"),
|
|
712
|
+
authority: readFrontmatterScalar(raw, "authority"),
|
|
713
|
+
expiresAt: readFrontmatterScalar(raw, "expiresAt"),
|
|
714
|
+
supersedes: readFrontmatterScalar(raw, "supersedes"),
|
|
715
|
+
});
|
|
716
|
+
outputs.push({ agent, path: p, title, raw, envelope });
|
|
661
717
|
}
|
|
662
718
|
} catch {
|
|
663
719
|
// no outputs for this agent/date
|
|
@@ -699,6 +755,8 @@ export class SharedContextManager {
|
|
|
699
755
|
path: output.path,
|
|
700
756
|
title: output.title,
|
|
701
757
|
topics: extractTopicTokens(`${output.title}\n${body}`),
|
|
758
|
+
authority: resolveReadAuthority(output.envelope, this.allowBindingAuthority),
|
|
759
|
+
sharedBy: output.envelope.sharedBy ?? output.agent,
|
|
702
760
|
};
|
|
703
761
|
});
|
|
704
762
|
|
|
@@ -831,7 +889,7 @@ export class SharedContextManager {
|
|
|
831
889
|
"",
|
|
832
890
|
"## Sources",
|
|
833
891
|
...(sources.length === 0 ? ["- (none)"] : sources.map((source) =>
|
|
834
|
-
`- [${markdownLineText(source.agent)}] ${markdownLineText(source.title)} (${markdownLineText(source.path)})`
|
|
892
|
+
`- [${markdownLineText(source.agent)}] ${markdownLineText(source.title)} (${markdownLineText(source.path)}) [authority: ${source.authority}; sharedBy: ${markdownLineText(source.sharedBy)}]`
|
|
835
893
|
)),
|
|
836
894
|
"",
|
|
837
895
|
].join("\n");
|
|
@@ -870,7 +928,8 @@ export class SharedContextManager {
|
|
|
870
928
|
"## Notable Agent Outputs",
|
|
871
929
|
...(crossSignals.report.sources.length === 0
|
|
872
930
|
? ["- (none)"]
|
|
873
|
-
: crossSignals.report.sources.map((source) =>
|
|
931
|
+
: crossSignals.report.sources.map((source) =>
|
|
932
|
+
`- ${markdownLineText(source.title)} (${markdownLineText(source.path)}) [authority: ${source.authority}; sharedBy: ${markdownLineText(source.sharedBy)}]`)),
|
|
874
933
|
"",
|
|
875
934
|
"## Feedback (Approve/Reject)",
|
|
876
935
|
...feedbackLines,
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
* comes later. Does not mutate the input.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import { isStrictIsoInstant } from "./iso-instant.js";
|
|
9
|
+
|
|
8
10
|
export interface ProvenanceStamp {
|
|
9
11
|
actor: string;
|
|
10
12
|
at: string;
|
|
@@ -15,31 +17,6 @@ export interface StampProvenanceOptions {
|
|
|
15
17
|
at: string;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
// Linear ISO instant. No nested quantifiers.
|
|
19
|
-
const ISO_INSTANT =
|
|
20
|
-
/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/;
|
|
21
|
-
|
|
22
|
-
function isStrictIsoTimestamp(value: string): boolean {
|
|
23
|
-
const match = ISO_INSTANT.exec(value);
|
|
24
|
-
if (!match) return false;
|
|
25
|
-
const year = Number(match[1]);
|
|
26
|
-
const month = Number(match[2]);
|
|
27
|
-
const day = Number(match[3]);
|
|
28
|
-
const hour = Number(match[4]);
|
|
29
|
-
const minute = Number(match[5]);
|
|
30
|
-
const second = Number(match[6]);
|
|
31
|
-
const utc = new Date(Date.UTC(year, month - 1, day, hour, minute, second));
|
|
32
|
-
return (
|
|
33
|
-
Number.isFinite(Date.parse(value)) &&
|
|
34
|
-
utc.getUTCFullYear() === year &&
|
|
35
|
-
utc.getUTCMonth() === month - 1 &&
|
|
36
|
-
utc.getUTCDate() === day &&
|
|
37
|
-
utc.getUTCHours() === hour &&
|
|
38
|
-
utc.getUTCMinutes() === minute &&
|
|
39
|
-
utc.getUTCSeconds() === second
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
20
|
function requireActor(actor: string): string {
|
|
44
21
|
if (typeof actor !== "string" || actor.trim().length === 0) {
|
|
45
22
|
throw new Error("stampProvenance: actor must be a non-empty string");
|
|
@@ -48,7 +25,7 @@ function requireActor(actor: string): string {
|
|
|
48
25
|
}
|
|
49
26
|
|
|
50
27
|
function requireAt(at: unknown): string {
|
|
51
|
-
if (typeof at !== "string" || !
|
|
28
|
+
if (typeof at !== "string" || !isStrictIsoInstant(at)) {
|
|
52
29
|
throw new Error("stampProvenance: at must be a valid ISO-8601 timestamp");
|
|
53
30
|
}
|
|
54
31
|
return at;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression: shared-context write origin is server-derived (issue #1957
|
|
3
|
+
* review rounds 2-4). A caller-supplied `agentId` must never decide the
|
|
4
|
+
* governance envelope's origin: when the surface resolved an authenticated
|
|
5
|
+
* identity, that identity is stamped as `sharedBy`, and an `agentId` naming
|
|
6
|
+
* a different agent is rejected instead of silently overridden. An
|
|
7
|
+
* authenticated access write that resolved NO principal (round 4) stamps the
|
|
8
|
+
* reserved server-owned `unattributed:access-surface` origin — never the
|
|
9
|
+
* client's `agentId`, which survives only as the producer label that feeds
|
|
10
|
+
* grouping and display.
|
|
11
|
+
*
|
|
12
|
+
* Exercises the REAL manager write path, the REAL access-service adapter, and
|
|
13
|
+
* the REAL operation registry — no stubbed provenance.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import assert from "node:assert/strict";
|
|
17
|
+
import test from "node:test";
|
|
18
|
+
import os from "node:os";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
21
|
+
|
|
22
|
+
import "../access-operations.js";
|
|
23
|
+
import { getOperation } from "../access-boundary.js";
|
|
24
|
+
import { EngramAccessInputError, EngramAccessService, type EngramAccessService as Service } from "../access-service.js";
|
|
25
|
+
import type { Orchestrator } from "../orchestrator.js";
|
|
26
|
+
import { SharedContextManager } from "./manager.js";
|
|
27
|
+
import { parseConfig } from "../config.js";
|
|
28
|
+
|
|
29
|
+
async function makeManager() {
|
|
30
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-shared-origin-"));
|
|
31
|
+
const config = parseConfig({ sharedContextEnabled: true, sharedContextDir: dir, memoryDir: dir });
|
|
32
|
+
const manager = new SharedContextManager(config);
|
|
33
|
+
await manager.ensureStructure();
|
|
34
|
+
return { manager, dir, config };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
test("manager: authenticated identity is the origin and a mismatched agentId is rejected", async (t) => {
|
|
38
|
+
const { manager, dir } = await makeManager();
|
|
39
|
+
t.after(() => rm(dir, { recursive: true, force: true }));
|
|
40
|
+
|
|
41
|
+
await assert.rejects(
|
|
42
|
+
manager.writeAgentOutput({
|
|
43
|
+
agentId: "victim-agent",
|
|
44
|
+
title: "Spoofed",
|
|
45
|
+
content: "x",
|
|
46
|
+
authenticatedIdentity: "real-agent",
|
|
47
|
+
}),
|
|
48
|
+
/write origin mismatch/,
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const fp = await manager.writeAgentOutput({
|
|
52
|
+
agentId: "",
|
|
53
|
+
title: "Owned",
|
|
54
|
+
content: "x",
|
|
55
|
+
authenticatedIdentity: "real-agent",
|
|
56
|
+
});
|
|
57
|
+
const raw = await readFile(fp, "utf-8");
|
|
58
|
+
assert.match(raw, /^sharedBy: "real-agent"$/m);
|
|
59
|
+
assert.match(raw, /^agent: "real-agent"$/m);
|
|
60
|
+
assert.ok(
|
|
61
|
+
fp.includes(`${path.sep}agent-outputs${path.sep}real-agent${path.sep}`),
|
|
62
|
+
"the write lands in the authenticated agent's directory",
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
// No resolvable identity (in-process caller): the supplied agent id stands.
|
|
66
|
+
const local = await manager.writeAgentOutput({ agentId: "local-agent", title: "Local", content: "x" });
|
|
67
|
+
assert.match(await readFile(local, "utf-8"), /^sharedBy: "local-agent"$/m);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test("access service: the authenticated principal, not the request, stamps the origin", async (t) => {
|
|
71
|
+
const { manager, dir, config } = await makeManager();
|
|
72
|
+
t.after(() => rm(dir, { recursive: true, force: true }));
|
|
73
|
+
const service = new EngramAccessService({ config, sharedContext: manager } as unknown as Orchestrator);
|
|
74
|
+
|
|
75
|
+
await assert.rejects(
|
|
76
|
+
() =>
|
|
77
|
+
service.sharedContextWriteOutput({
|
|
78
|
+
agentId: "victim-agent",
|
|
79
|
+
title: "Spoofed",
|
|
80
|
+
content: "x",
|
|
81
|
+
principal: "real-principal",
|
|
82
|
+
}) as Promise<unknown>,
|
|
83
|
+
(error: unknown) => {
|
|
84
|
+
assert.ok(error instanceof EngramAccessInputError, "a spoofed origin is a client input error");
|
|
85
|
+
assert.match(error.message, /write origin mismatch/);
|
|
86
|
+
return true;
|
|
87
|
+
},
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
const result = (await service.sharedContextWriteOutput({
|
|
91
|
+
agentId: "real-principal",
|
|
92
|
+
title: "Owned",
|
|
93
|
+
content: "x",
|
|
94
|
+
|
|
95
|
+
principal: "real-principal",
|
|
96
|
+
})) as { written: boolean; path: string };
|
|
97
|
+
assert.equal(result.written, true);
|
|
98
|
+
assert.match(await readFile(result.path, "utf-8"), /^sharedBy: "real-principal"$/m);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("access service: a principal-less authenticated write never stamps the caller's agentId as sharedBy", async (t) => {
|
|
102
|
+
const { manager, dir, config } = await makeManager();
|
|
103
|
+
t.after(() => rm(dir, { recursive: true, force: true }));
|
|
104
|
+
const service = new EngramAccessService({ config, sharedContext: manager } as unknown as Orchestrator);
|
|
105
|
+
|
|
106
|
+
// The default request-identity path: bearer-authenticated surface, no
|
|
107
|
+
// configured principal, no adapter identity — principal resolves to
|
|
108
|
+
// undefined. The client's `agentId` must not become audit metadata.
|
|
109
|
+
const result = (await service.sharedContextWriteOutput({
|
|
110
|
+
agentId: "claimed-agent",
|
|
111
|
+
title: "Principal-less",
|
|
112
|
+
content: "x",
|
|
113
|
+
})) as { written: boolean; path: string };
|
|
114
|
+
assert.equal(result.written, true);
|
|
115
|
+
const raw = await readFile(result.path, "utf-8");
|
|
116
|
+
assert.match(raw, /^sharedBy: "unattributed:access-surface"$/m);
|
|
117
|
+
assert.doesNotMatch(raw, /^sharedBy: "claimed-agent"$/m);
|
|
118
|
+
// The producer label survives for grouping/display — it is not audit
|
|
119
|
+
// metadata and collapsing it would erase multi-agent overlaps.
|
|
120
|
+
assert.match(raw, /^agent: "claimed-agent"$/m);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test("operation: shared_context_write_output forwards the authenticated principal", async () => {
|
|
124
|
+
let received: { agentId: string; principal?: string } | undefined;
|
|
125
|
+
const service = {
|
|
126
|
+
sharedContextWriteOutput: async (request: {
|
|
127
|
+
agentId: string;
|
|
128
|
+
title: string;
|
|
129
|
+
content: string;
|
|
130
|
+
principal?: string;
|
|
131
|
+
}) => {
|
|
132
|
+
received = request;
|
|
133
|
+
return { written: true, path: "written.md" };
|
|
134
|
+
},
|
|
135
|
+
} as unknown as Service;
|
|
136
|
+
const operation = getOperation("shared_context_write_output");
|
|
137
|
+
assert.ok(operation);
|
|
138
|
+
|
|
139
|
+
await operation.run(
|
|
140
|
+
{ agentId: "claimed-agent", title: "t", content: "c" },
|
|
141
|
+
{ service, authenticatedPrincipal: "real-principal" },
|
|
142
|
+
);
|
|
143
|
+
assert.equal(received?.principal, "real-principal");
|
|
144
|
+
assert.equal(received?.agentId, "claimed-agent");
|
|
145
|
+
});
|
package/src/types.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { GraphPathScoringConfig } from "./graph-path-scoring-config.js";
|
|
|
12
12
|
export type { ContradictionLocalizationConfig, ContradictionScanConfig } from "./contradiction-config.js";
|
|
13
13
|
export type { GraphPathScoringConfig } from "./graph-path-scoring-config.js";
|
|
14
14
|
import type { DriftDetectionSettings, MemoryDriftProvenance, RecallDriftAnnotation } from "./preferences/drift-types.js";
|
|
15
|
+
import type { DeepRecallSettings } from "./deep-recall-config.js";
|
|
15
16
|
import type { ProceduralMaintenanceConfig } from "./procedural/maintenance-config.js";
|
|
16
17
|
import type { SkillProjectionConfig } from "./procedural/skill-projection.js";
|
|
17
18
|
import type { ActionGateConfig } from "./coding/action-gate.js";
|
|
@@ -682,7 +683,7 @@ export interface SemanticChunkingConfigShape {
|
|
|
682
683
|
fallbackToRecursive: boolean;
|
|
683
684
|
}
|
|
684
685
|
|
|
685
|
-
export interface PluginConfig extends BoundedJsonlStateConfig, SecurityConfig, DriftDetectionSettings, ActiveContextConfigFields {
|
|
686
|
+
export interface PluginConfig extends BoundedJsonlStateConfig, SecurityConfig, DriftDetectionSettings, ActiveContextConfigFields, DeepRecallSettings {
|
|
686
687
|
openaiApiKey: string | undefined;
|
|
687
688
|
openaiBaseUrl: string | undefined;
|
|
688
689
|
model: string;
|
|
@@ -1806,6 +1807,7 @@ export interface PluginConfig extends BoundedJsonlStateConfig, SecurityConfig, D
|
|
|
1806
1807
|
sharedContextEnabled: boolean;
|
|
1807
1808
|
sharedContextDir?: string;
|
|
1808
1809
|
sharedContextMaxInjectChars: number;
|
|
1810
|
+
sharedContextAllowBindingAuthority: boolean;
|
|
1809
1811
|
crossSignalsSemanticEnabled: boolean;
|
|
1810
1812
|
crossSignalsSemanticTimeoutMs: number;
|
|
1811
1813
|
sharedCrossSignalSemanticEnabled?: boolean;
|