@remnic/core 9.69.45 → 9.69.47
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 -14
- package/dist/access-admin-ops-surface.js +40 -39
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +15 -14
- package/dist/access-authorization-probe.js +41 -40
- package/dist/access-boundary.d.ts +15 -14
- package/dist/access-boundary.js +40 -39
- package/dist/access-cli.js +110 -104
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +15 -14
- package/dist/access-extraction-force-flush.js +40 -39
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-briefing.d.ts +15 -14
- package/dist/access-http-briefing.js +41 -40
- package/dist/access-http-lcm-compaction.d.ts +15 -14
- package/dist/access-http-lifecycle-flush.d.ts +15 -14
- package/dist/access-http-offline-stream.d.ts +15 -14
- package/dist/access-http-query.d.ts +2 -2
- package/dist/access-http-query.js +42 -41
- package/dist/access-http.d.ts +16 -15
- package/dist/access-http.js +64 -60
- package/dist/access-identity-continuity-surface.d.ts +11 -11
- package/dist/access-identity-continuity-surface.js +40 -39
- package/dist/access-lcm-surface.d.ts +15 -14
- package/dist/access-lcm-surface.js +40 -39
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp-shared-context-tools.d.ts +15 -14
- package/dist/access-mcp.d.ts +15 -14
- package/dist/access-mcp.js +53 -50
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-DDnsN22V.d.ts → access-namespace-preflight-CetF9ziA.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +40 -39
- package/dist/access-observe-transcript.d.ts +11 -11
- package/dist/access-observe-write-category.d.ts +3 -3
- package/dist/access-observe-write-surface.d.ts +15 -14
- package/dist/access-observe-write-surface.js +40 -39
- package/dist/access-offline-manifest.d.ts +11 -11
- package/dist/access-offline-manifest.js +2 -2
- package/dist/access-operations-batch.js +42 -41
- package/dist/access-operations.d.ts +16 -15
- package/dist/access-operations.js +49 -47
- package/dist/access-recall-concurrency.d.ts +15 -14
- package/dist/access-recall-concurrency.js +40 -39
- package/dist/access-recall-response.d.ts +15 -14
- package/dist/access-recall-response.js +40 -39
- package/dist/access-recall-surface.d.ts +15 -14
- package/dist/access-recall-surface.js +40 -39
- package/dist/access-schema.d.ts +1 -1
- package/dist/{access-service-CDteK_Gt.d.ts → access-service-BXYrJ3pO.d.ts} +13 -10
- package/dist/access-service-helpers.d.ts +15 -14
- package/dist/access-service.d.ts +15 -14
- package/dist/access-service.js +40 -39
- package/dist/access-surface-catalog.d.ts +15 -14
- package/dist/access-surface-catalog.js +48 -41
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -4
- 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 +3 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/background-generation.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +11 -11
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +13 -13
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +5 -5
- 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/{catalog-Dl2hYqpS.d.ts → catalog-Bns9zpl3.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +14 -14
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-OREGA7GY.js → chunk-2JFSQWFH.js} +5 -5
- package/dist/chunk-2JFSQWFH.js.map +1 -0
- package/dist/{chunk-C3MCMFNV.js → chunk-2QX65IEC.js} +2 -2
- package/dist/{chunk-HBGSZ62Z.js → chunk-3RKVSECD.js} +8 -8
- package/dist/{chunk-7LKXP4QG.js → chunk-44BILQ7U.js} +85 -43
- package/dist/chunk-44BILQ7U.js.map +1 -0
- package/dist/{chunk-R4HFCATE.js → chunk-4LPIVP77.js} +2 -2
- package/dist/{chunk-PW4HTWXL.js → chunk-55XWRL6F.js} +2 -2
- package/dist/{chunk-E5VOKZQV.js → chunk-5KBI2MOC.js} +1 -1
- package/dist/{chunk-ZQ533JDE.js → chunk-6A6HSXWV.js} +2 -2
- package/dist/{chunk-4HTQ76O4.js → chunk-7SJCSDQ3.js} +2 -2
- package/dist/{chunk-A2YN3FR4.js → chunk-7YUX52XZ.js} +3 -3
- package/dist/{chunk-NKDQXDFL.js → chunk-AS4YKT75.js} +36 -26
- package/dist/chunk-AS4YKT75.js.map +1 -0
- package/dist/{chunk-LQVXSRAJ.js → chunk-B4EGAHHS.js} +2 -2
- package/dist/{chunk-EUP4AXIW.js → chunk-B6VDWDFN.js} +2 -2
- package/dist/{chunk-Z5YNVWRD.js → chunk-BMENHAJL.js} +2 -2
- package/dist/{chunk-5ZXGH2ZL.js → chunk-BXOPUJ3W.js} +2 -2
- package/dist/{chunk-J6NEOCQC.js → chunk-CD7VTZIG.js} +2 -2
- package/dist/{chunk-EC5SVM6H.js → chunk-DE4ZGH2N.js} +2 -2
- package/dist/{chunk-2LRO73MN.js → chunk-DRLZB3CN.js} +2 -2
- package/dist/{chunk-SHEHQBCG.js → chunk-DUJYRVUD.js} +638 -45
- package/dist/chunk-DUJYRVUD.js.map +1 -0
- package/dist/{chunk-Q4MI2KCG.js → chunk-EGOWY342.js} +2 -2
- package/dist/chunk-EIB4FJVR.js +46 -0
- package/dist/chunk-EIB4FJVR.js.map +1 -0
- package/dist/{chunk-W44T2KHG.js → chunk-EWBDJQ5Y.js} +3 -3
- package/dist/{chunk-JMBTNVMW.js → chunk-FGRJJBFO.js} +2 -2
- package/dist/{chunk-F3TURDFG.js → chunk-FPB5LQWW.js} +4 -1
- package/dist/{chunk-F3TURDFG.js.map → chunk-FPB5LQWW.js.map} +1 -1
- package/dist/{chunk-OOBUWMPY.js → chunk-G2SJRFGP.js} +6 -6
- package/dist/{chunk-WGZHSQDV.js → chunk-G2XZFGYN.js} +4 -4
- package/dist/{chunk-JPNUKKSL.js → chunk-GGROFIYX.js} +2 -2
- package/dist/chunk-GXJSLNYO.js +74 -0
- package/dist/chunk-GXJSLNYO.js.map +1 -0
- package/dist/{chunk-VA5QRTZX.js → chunk-HG74GEVY.js} +2 -2
- package/dist/chunk-HMDYSGY6.js +54 -0
- package/dist/chunk-HMDYSGY6.js.map +1 -0
- package/dist/{chunk-WUUGE7QC.js → chunk-HS75MCQF.js} +4 -4
- package/dist/{chunk-DO6R3LIE.js → chunk-I6IJDTRP.js} +2 -2
- package/dist/{chunk-T3F2HWIG.js → chunk-IO7K7GES.js} +2 -2
- package/dist/{chunk-6II55MXS.js → chunk-JXLEQIJ7.js} +2 -2
- package/dist/{chunk-4XTSKGLX.js → chunk-JYXLW22X.js} +3 -3
- package/dist/chunk-LI4APB6M.js +218 -0
- package/dist/chunk-LI4APB6M.js.map +1 -0
- package/dist/{chunk-IFULZYYQ.js → chunk-LIAM7U2J.js} +2 -2
- package/dist/{chunk-LZAJONO5.js → chunk-LIDJWAQV.js} +2 -2
- package/dist/{chunk-B55FYF6F.js → chunk-LYMJ36UI.js} +2 -2
- package/dist/chunk-M4DB6ZNN.js +87 -0
- package/dist/chunk-M4DB6ZNN.js.map +1 -0
- package/dist/{chunk-5TKHJ5RW.js → chunk-MMQVWKFY.js} +17 -13
- package/dist/chunk-MMQVWKFY.js.map +1 -0
- package/dist/{chunk-IAT5WFEU.js → chunk-MNG536IS.js} +261 -797
- package/dist/chunk-MNG536IS.js.map +1 -0
- package/dist/{chunk-AOMUIF3R.js → chunk-MQT3WP3F.js} +2 -2
- package/dist/{chunk-F6AYWLRN.js → chunk-NE45P3OF.js} +2 -2
- package/dist/{chunk-5XTILJRI.js → chunk-NMA7RQPR.js} +2 -2
- package/dist/{chunk-46A4RGBC.js → chunk-OS4JVTHR.js} +3 -3
- package/dist/{chunk-W6YDAIVB.js → chunk-OSTXIFZW.js} +13 -2
- package/dist/chunk-OSTXIFZW.js.map +1 -0
- package/dist/chunk-P3YNEMYY.js +212 -0
- package/dist/chunk-P3YNEMYY.js.map +1 -0
- package/dist/{chunk-C3YEB7CR.js → chunk-PA67GXYJ.js} +5 -5
- package/dist/{chunk-NGAFYIHQ.js → chunk-PPJLJD2D.js} +2 -2
- package/dist/{chunk-AG6PANBG.js → chunk-PXJ6HE2W.js} +11 -11
- package/dist/{chunk-BOWAP64Q.js → chunk-QB4VXCFN.js} +2 -2
- package/dist/{chunk-L63M2PE4.js → chunk-QGAKUOKU.js} +2 -2
- package/dist/{chunk-T2ZNUWUY.js → chunk-QKFYJVDG.js} +2 -2
- package/dist/{chunk-YHSEUZV5.js → chunk-QLCMOHRE.js} +2 -2
- package/dist/{chunk-Q4AUIFUA.js → chunk-QMWKENNK.js} +4 -4
- package/dist/{chunk-UJXNBZYJ.js → chunk-R4JTUTU6.js} +12 -5
- package/dist/chunk-R4JTUTU6.js.map +1 -0
- package/dist/{chunk-TFS5FAAC.js → chunk-ROBGBT3D.js} +213 -77
- package/dist/chunk-ROBGBT3D.js.map +1 -0
- package/dist/{chunk-TNQR7N52.js → chunk-S3YM4SZQ.js} +2 -1
- package/dist/chunk-S3YM4SZQ.js.map +1 -0
- package/dist/{chunk-RW4QNB4J.js → chunk-S45INSV3.js} +3 -1
- package/dist/{chunk-RW4QNB4J.js.map → chunk-S45INSV3.js.map} +1 -1
- package/dist/{chunk-HVGCQMTQ.js → chunk-SJ7ZNUXB.js} +2 -2
- package/dist/{chunk-WCQ7L54B.js → chunk-SK6HEQTW.js} +2 -2
- package/dist/{chunk-PGAB2V53.js → chunk-SMBWBEE7.js} +2 -2
- package/dist/{chunk-SPN5YFXN.js → chunk-SS33RR4F.js} +8 -8
- package/dist/{chunk-NRFUYVW7.js → chunk-T3T5HTZZ.js} +2 -2
- package/dist/{chunk-KG2OOAFF.js → chunk-TQSCR5DU.js} +6 -6
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-ZLVURGAJ.js → chunk-V2XNMIAM.js} +2 -2
- package/dist/{chunk-AS2NOPDM.js → chunk-V7IONNTJ.js} +2 -2
- package/dist/{chunk-OFBJD3V5.js → chunk-VV5GCNKG.js} +2 -2
- package/dist/{chunk-MDYZCPNQ.js → chunk-WL3PGPGU.js} +2 -2
- package/dist/{chunk-66YUOI53.js → chunk-WQW6KPVC.js} +1 -1
- package/dist/chunk-WQW6KPVC.js.map +1 -0
- package/dist/{chunk-2AV75BJW.js → chunk-WVI43D54.js} +24 -1
- package/dist/chunk-WVI43D54.js.map +1 -0
- package/dist/{chunk-N6I257OM.js → chunk-WYU66IVZ.js} +3 -3
- package/dist/{chunk-A7GQBJP5.js → chunk-X2NFFBTO.js} +4 -4
- package/dist/{chunk-D3DJYGU2.js → chunk-XEHLYA5Z.js} +3 -3
- package/dist/{chunk-JIWZVOQM.js → chunk-XKHRNAK7.js} +2 -2
- package/dist/{chunk-VW5TGNJN.js → chunk-XXLH6KFO.js} +2 -2
- package/dist/{chunk-WMTYEQO5.js → chunk-XZUHXKM3.js} +2 -2
- package/dist/{chunk-K4KE5MYE.js → chunk-Y5VT7BIT.js} +2 -2
- package/dist/{chunk-M7ECD3KN.js → chunk-YOSLKZLZ.js} +2 -2
- package/dist/{chunk-K75H7FSO.js → chunk-YXWMZAAN.js} +2 -2
- package/dist/{chunk-DSHSQGSN.js → chunk-ZEIJQ4I3.js} +2 -2
- package/dist/{cli-CZDhIcxu.d.ts → cli-B8YyIrPR.d.ts} +5 -5
- package/dist/cli.d.ts +17 -16
- package/dist/cli.js +81 -76
- package/dist/coding/export-okf-codegraph.d.ts +1 -1
- package/dist/coding/export-okf-codegraph.js +12 -12
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +13 -13
- 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 +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +13 -13
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +13 -13
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +4 -4
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +15 -15
- package/dist/conversation-index/backend.d.ts +1 -1
- 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 +15 -15
- package/dist/cross-lingual-recall.d.ts +1 -1
- package/dist/day-summary.d.ts +1 -1
- package/dist/deep-recall-http-glue.d.ts +15 -14
- package/dist/deep-recall-mcp-tools.d.ts +15 -14
- package/dist/deep-recall-policy-llm.d.ts +2 -2
- package/dist/deep-recall-seeds.d.ts +1 -1
- package/dist/deep-recall.js +2 -2
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-BXaUoVUf.d.ts → dependency-propagation-delivery-B-LvcDaq.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-origin-fields.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +13 -13
- package/dist/entity-schema.d.ts +1 -1
- package/dist/episodic-context.d.ts +1 -1
- package/dist/eval-trajectory-contracts.d.ts +1 -1
- package/dist/eval-trajectory-store.d.ts +1 -1
- package/dist/eval-trajectory.d.ts +1 -1
- package/dist/explicit-capture.d.ts +11 -11
- package/dist/explicit-capture.js +2 -2
- package/dist/external-wiki-access.d.ts +15 -14
- package/dist/external-wiki-access.js +41 -40
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +15 -14
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-evidence-class.d.ts +142 -0
- package/dist/extraction-evidence-class.js +113 -0
- package/dist/extraction-evidence-class.js.map +1 -0
- package/dist/extraction-faithfulness.d.ts +2 -2
- package/dist/extraction-judge-telemetry.d.ts +2 -2
- package/dist/extraction-judge-training.d.ts +2 -2
- package/dist/extraction-judge.d.ts +2 -2
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction-source-grounding.js +2 -2
- package/dist/extraction-span-config.d.ts +1 -1
- package/dist/extraction-span-materialize.d.ts +1 -1
- package/dist/extraction-span-wire.d.ts +1 -1
- package/dist/extraction.d.ts +2 -2
- package/dist/extraction.js +21 -21
- package/dist/fallback-llm-codex-subscription.d.ts +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{generic-recall-paths-BkVVEoeO.d.ts → generic-recall-paths-Bfc7zigS.d.ts} +1 -1
- package/dist/graph-append-error.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-jsonl.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/importers/test-utils.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/{index-TBPe6NvB.d.ts → index-C7IA1DxB.d.ts} +3 -3
- package/dist/index.d.ts +121 -30
- package/dist/index.js +170 -123
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +4 -4
- 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-DdrhmecM.d.ts → local-llm-DH4tWtck.d.ts} +1 -1
- package/dist/local-llm-helpers.d.ts +2 -2
- package/dist/local-llm.d.ts +2 -2
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/location/index.d.ts +5 -5
- package/dist/location/index.js +15 -15
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +13 -13
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +13 -13
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +14 -14
- package/dist/{maintenance-B813YFWJ.d.ts → maintenance-n6yeTQhR.d.ts} +4 -4
- package/dist/mcp-memory-inspector-app.d.ts +15 -14
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-age.d.ts +100 -0
- package/dist/memory-age.js +22 -0
- package/dist/memory-age.js.map +1 -0
- package/dist/memory-browse-http-glue.d.ts +170 -0
- package/dist/memory-browse-http-glue.js +9 -0
- package/dist/memory-browse-http-glue.js.map +1 -0
- package/dist/memory-browse-mcp-tools.d.ts +160 -0
- package/dist/memory-browse-mcp-tools.js +8 -0
- package/dist/memory-browse-mcp-tools.js.map +1 -0
- package/dist/memory-browse-operations.d.ts +2 -0
- package/dist/memory-browse-operations.js +246 -0
- package/dist/memory-browse-operations.js.map +1 -0
- package/dist/memory-browse.d.ts +113 -0
- package/dist/memory-browse.js +49 -0
- package/dist/memory-browse.js.map +1 -0
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-controller.d.ts +1 -1
- 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-snapshot.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +15 -14
- package/dist/memory-subject.d.ts +15 -14
- 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 +14 -14
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +13 -13
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +16 -16
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +23 -22
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +23 -23
- package/dist/{orchestrator-BCvQavIS.d.ts → orchestrator-Cirjo3ZB.d.ts} +10 -10
- package/dist/orchestrator.d.ts +11 -11
- package/dist/orchestrator.js +112 -106
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-4lqKJZ_0.d.ts → pipeline-DK79FrgH.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +2 -2
- package/dist/provenance.d.ts +77 -2
- package/dist/provenance.js +7 -3
- package/dist/{public-http-NH72a6aa.d.ts → public-http-VB85y0ZH.d.ts} +1 -1
- package/dist/{qmd-DnoWaXKb.d.ts → qmd-BT0ErlRS.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-navigate-access.d.ts +1 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +1 -1
- package/dist/recall-navigate-disclosure.js +2 -2
- package/dist/recall-navigate.d.ts +1 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-navigation-http-glue.d.ts +15 -14
- package/dist/recall-navigation-mcp-tools.d.ts +15 -14
- package/dist/recall-navigation-operations.js +41 -40
- package/dist/recall-navigation-renderer.d.ts +1 -1
- package/dist/recall-navigation.d.ts +1 -1
- package/dist/recall-navigation.js +40 -39
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state-view-admission.d.ts +2 -2
- package/dist/recall-state-view-admission.js +5 -5
- package/dist/recall-state-view-anchors.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/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/manifest.d.ts +4 -1
- package/dist/reconcile/manifest.js +1 -1
- package/dist/reconcile/plan.d.ts +1 -1
- 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-peers-config.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +4 -3
- 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-crazXegZ.d.ts → scope-profiles-BgPQx9iE.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 +5 -5
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +9 -9
- 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-B09JI9WM.d.ts → semantic-consolidation-BrAWKVcm.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +14 -14
- package/dist/semantic-rule-promotion.js +13 -13
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +13 -13
- package/dist/{service-Echc5Xso.d.ts → service-CqHOTg87.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/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +17 -17
- package/dist/standing-memory-block.d.ts +77 -0
- package/dist/standing-memory-block.js +40 -0
- package/dist/standing-memory-block.js.map +1 -0
- package/dist/standup/build.js +13 -13
- package/dist/{storage-ClkHCQSE.d.ts → storage-mD2YQ8_2.d.ts} +17 -3
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +12 -12
- package/dist/subject-config.d.ts +1 -1
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -3
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +18 -17
- package/dist/support-passport/index.js +43 -42
- package/dist/{tagging-ksktJ60G.d.ts → tagging-CiAVA-ID.d.ts} +2 -2
- 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/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/export-okf.d.ts +1 -1
- package/dist/transfer/export-okf.js +13 -13
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-nmhnJpxx.d.ts → types-DgDaoY61.d.ts} +6 -0
- 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 +13 -13
- package/dist/who-knows-cli.d.ts +15 -14
- package/dist/who-knows-cli.js +14 -14
- package/dist/who-knows.d.ts +15 -14
- package/dist/who-knows.js +13 -13
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +3 -0
- package/src/access-http.ts +2 -2
- package/src/access-mcp-output-schemas.ts +25 -0
- package/src/access-mcp.ts +3 -3
- package/src/access-operations.ts +2 -0
- package/src/access-service.ts +6 -1
- package/src/access-surface-catalog.test.ts +20 -0
- package/src/access-surface-catalog.ts +6 -0
- package/src/activity/timeline/index.ts +1 -0
- package/src/activity/timeline/journal-recap.test.ts +17 -0
- package/src/activity/timeline/journal-recap.ts +19 -6
- package/src/activity/timeline/recap-export-range.test.ts +289 -0
- package/src/activity/timeline/recap-export-range.ts +169 -0
- package/src/activity/timeline/recap-export.test.ts +73 -1
- package/src/activity/timeline/recap-export.ts +57 -4
- package/src/cli/memory-browse-commands.ts +77 -0
- package/src/cli.ts +2 -2
- package/src/config.ts +11 -0
- package/src/dedup/merge.test.ts +185 -8
- package/src/extraction-evidence-class.test.ts +355 -0
- package/src/extraction-evidence-class.ts +241 -0
- package/src/index.ts +1 -0
- package/src/mcp-read-only-tools.ts +3 -0
- package/src/memory-age.test.ts +106 -0
- package/src/memory-age.ts +196 -0
- package/src/memory-browse-http-glue.ts +93 -0
- package/src/memory-browse-mcp-tools.ts +57 -0
- package/src/memory-browse-operations.ts +88 -0
- package/src/memory-browse-surface.test.ts +500 -0
- package/src/memory-browse.ts +316 -0
- package/src/orchestration/recall-search-pipeline.test.ts +207 -1
- package/src/orchestration/recall-search-pipeline.ts +13 -9
- package/src/orchestration/semantic-merge-commit-effects.ts +31 -9
- package/src/orchestration/semantic-merge-persist.ts +16 -5
- package/src/provenance.ts +3 -3
- package/src/reconcile/manifest.test.ts +27 -0
- package/src/reconcile/manifest.ts +7 -0
- package/src/standing-memory-block.test.ts +262 -0
- package/src/standing-memory-block.ts +331 -0
- package/src/storage/cas-revision-host.ts +22 -0
- package/src/storage/cas-revision-store.test.ts +44 -1
- package/src/storage/cas-revision-store.ts +23 -0
- package/src/storage/tombstone-blocked-capture-sync.ts +26 -1
- package/src/storage-frontmatter-cas.test.ts +49 -1
- package/src/storage.ts +1 -1
- package/src/types.ts +6 -0
- package/dist/chunk-2AV75BJW.js.map +0 -1
- package/dist/chunk-5TKHJ5RW.js.map +0 -1
- package/dist/chunk-66YUOI53.js.map +0 -1
- package/dist/chunk-7LKXP4QG.js.map +0 -1
- package/dist/chunk-IAT5WFEU.js.map +0 -1
- package/dist/chunk-NKDQXDFL.js.map +0 -1
- package/dist/chunk-OREGA7GY.js.map +0 -1
- package/dist/chunk-SHEHQBCG.js.map +0 -1
- package/dist/chunk-TFS5FAAC.js.map +0 -1
- package/dist/chunk-TNQR7N52.js.map +0 -1
- package/dist/chunk-UJXNBZYJ.js.map +0 -1
- package/dist/chunk-W6YDAIVB.js.map +0 -1
- /package/dist/{chunk-C3MCMFNV.js.map → chunk-2QX65IEC.js.map} +0 -0
- /package/dist/{chunk-HBGSZ62Z.js.map → chunk-3RKVSECD.js.map} +0 -0
- /package/dist/{chunk-R4HFCATE.js.map → chunk-4LPIVP77.js.map} +0 -0
- /package/dist/{chunk-PW4HTWXL.js.map → chunk-55XWRL6F.js.map} +0 -0
- /package/dist/{chunk-E5VOKZQV.js.map → chunk-5KBI2MOC.js.map} +0 -0
- /package/dist/{chunk-ZQ533JDE.js.map → chunk-6A6HSXWV.js.map} +0 -0
- /package/dist/{chunk-4HTQ76O4.js.map → chunk-7SJCSDQ3.js.map} +0 -0
- /package/dist/{chunk-A2YN3FR4.js.map → chunk-7YUX52XZ.js.map} +0 -0
- /package/dist/{chunk-LQVXSRAJ.js.map → chunk-B4EGAHHS.js.map} +0 -0
- /package/dist/{chunk-EUP4AXIW.js.map → chunk-B6VDWDFN.js.map} +0 -0
- /package/dist/{chunk-Z5YNVWRD.js.map → chunk-BMENHAJL.js.map} +0 -0
- /package/dist/{chunk-5ZXGH2ZL.js.map → chunk-BXOPUJ3W.js.map} +0 -0
- /package/dist/{chunk-J6NEOCQC.js.map → chunk-CD7VTZIG.js.map} +0 -0
- /package/dist/{chunk-EC5SVM6H.js.map → chunk-DE4ZGH2N.js.map} +0 -0
- /package/dist/{chunk-2LRO73MN.js.map → chunk-DRLZB3CN.js.map} +0 -0
- /package/dist/{chunk-Q4MI2KCG.js.map → chunk-EGOWY342.js.map} +0 -0
- /package/dist/{chunk-W44T2KHG.js.map → chunk-EWBDJQ5Y.js.map} +0 -0
- /package/dist/{chunk-JMBTNVMW.js.map → chunk-FGRJJBFO.js.map} +0 -0
- /package/dist/{chunk-OOBUWMPY.js.map → chunk-G2SJRFGP.js.map} +0 -0
- /package/dist/{chunk-WGZHSQDV.js.map → chunk-G2XZFGYN.js.map} +0 -0
- /package/dist/{chunk-JPNUKKSL.js.map → chunk-GGROFIYX.js.map} +0 -0
- /package/dist/{chunk-VA5QRTZX.js.map → chunk-HG74GEVY.js.map} +0 -0
- /package/dist/{chunk-WUUGE7QC.js.map → chunk-HS75MCQF.js.map} +0 -0
- /package/dist/{chunk-DO6R3LIE.js.map → chunk-I6IJDTRP.js.map} +0 -0
- /package/dist/{chunk-T3F2HWIG.js.map → chunk-IO7K7GES.js.map} +0 -0
- /package/dist/{chunk-6II55MXS.js.map → chunk-JXLEQIJ7.js.map} +0 -0
- /package/dist/{chunk-4XTSKGLX.js.map → chunk-JYXLW22X.js.map} +0 -0
- /package/dist/{chunk-IFULZYYQ.js.map → chunk-LIAM7U2J.js.map} +0 -0
- /package/dist/{chunk-LZAJONO5.js.map → chunk-LIDJWAQV.js.map} +0 -0
- /package/dist/{chunk-B55FYF6F.js.map → chunk-LYMJ36UI.js.map} +0 -0
- /package/dist/{chunk-AOMUIF3R.js.map → chunk-MQT3WP3F.js.map} +0 -0
- /package/dist/{chunk-F6AYWLRN.js.map → chunk-NE45P3OF.js.map} +0 -0
- /package/dist/{chunk-5XTILJRI.js.map → chunk-NMA7RQPR.js.map} +0 -0
- /package/dist/{chunk-46A4RGBC.js.map → chunk-OS4JVTHR.js.map} +0 -0
- /package/dist/{chunk-C3YEB7CR.js.map → chunk-PA67GXYJ.js.map} +0 -0
- /package/dist/{chunk-NGAFYIHQ.js.map → chunk-PPJLJD2D.js.map} +0 -0
- /package/dist/{chunk-AG6PANBG.js.map → chunk-PXJ6HE2W.js.map} +0 -0
- /package/dist/{chunk-BOWAP64Q.js.map → chunk-QB4VXCFN.js.map} +0 -0
- /package/dist/{chunk-L63M2PE4.js.map → chunk-QGAKUOKU.js.map} +0 -0
- /package/dist/{chunk-T2ZNUWUY.js.map → chunk-QKFYJVDG.js.map} +0 -0
- /package/dist/{chunk-YHSEUZV5.js.map → chunk-QLCMOHRE.js.map} +0 -0
- /package/dist/{chunk-Q4AUIFUA.js.map → chunk-QMWKENNK.js.map} +0 -0
- /package/dist/{chunk-HVGCQMTQ.js.map → chunk-SJ7ZNUXB.js.map} +0 -0
- /package/dist/{chunk-WCQ7L54B.js.map → chunk-SK6HEQTW.js.map} +0 -0
- /package/dist/{chunk-PGAB2V53.js.map → chunk-SMBWBEE7.js.map} +0 -0
- /package/dist/{chunk-SPN5YFXN.js.map → chunk-SS33RR4F.js.map} +0 -0
- /package/dist/{chunk-NRFUYVW7.js.map → chunk-T3T5HTZZ.js.map} +0 -0
- /package/dist/{chunk-KG2OOAFF.js.map → chunk-TQSCR5DU.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-ZLVURGAJ.js.map → chunk-V2XNMIAM.js.map} +0 -0
- /package/dist/{chunk-AS2NOPDM.js.map → chunk-V7IONNTJ.js.map} +0 -0
- /package/dist/{chunk-OFBJD3V5.js.map → chunk-VV5GCNKG.js.map} +0 -0
- /package/dist/{chunk-MDYZCPNQ.js.map → chunk-WL3PGPGU.js.map} +0 -0
- /package/dist/{chunk-N6I257OM.js.map → chunk-WYU66IVZ.js.map} +0 -0
- /package/dist/{chunk-A7GQBJP5.js.map → chunk-X2NFFBTO.js.map} +0 -0
- /package/dist/{chunk-D3DJYGU2.js.map → chunk-XEHLYA5Z.js.map} +0 -0
- /package/dist/{chunk-JIWZVOQM.js.map → chunk-XKHRNAK7.js.map} +0 -0
- /package/dist/{chunk-VW5TGNJN.js.map → chunk-XXLH6KFO.js.map} +0 -0
- /package/dist/{chunk-WMTYEQO5.js.map → chunk-XZUHXKM3.js.map} +0 -0
- /package/dist/{chunk-K4KE5MYE.js.map → chunk-Y5VT7BIT.js.map} +0 -0
- /package/dist/{chunk-M7ECD3KN.js.map → chunk-YOSLKZLZ.js.map} +0 -0
- /package/dist/{chunk-K75H7FSO.js.map → chunk-YXWMZAAN.js.map} +0 -0
- /package/dist/{chunk-DSHSQGSN.js.map → chunk-ZEIJQ4I3.js.map} +0 -0
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-NHLLKEKK.js";
|
|
12
12
|
import {
|
|
13
13
|
parseConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-OSTXIFZW.js";
|
|
15
15
|
import {
|
|
16
16
|
resolveObjectiveStateStoreDir,
|
|
17
17
|
validateObjectiveStateSnapshot
|
|
@@ -268,4 +268,4 @@ export {
|
|
|
268
268
|
recordResumeBundle,
|
|
269
269
|
getResumeBundleStatus
|
|
270
270
|
};
|
|
271
|
-
//# sourceMappingURL=chunk-
|
|
271
|
+
//# sourceMappingURL=chunk-FGRJJBFO.js.map
|
|
@@ -18,6 +18,9 @@ var MCP_READ_ONLY_TOOL_SUFFIXES = {
|
|
|
18
18
|
deep_recall: true,
|
|
19
19
|
memory_expand: true,
|
|
20
20
|
memory_traverse: true,
|
|
21
|
+
memory_ls: true,
|
|
22
|
+
memory_tree: true,
|
|
23
|
+
memory_find: true,
|
|
21
24
|
standup: true,
|
|
22
25
|
action_confidence: true,
|
|
23
26
|
capsule_list: true,
|
|
@@ -65,4 +68,4 @@ var MCP_READ_ONLY_TOOL_SUFFIXES = {
|
|
|
65
68
|
export {
|
|
66
69
|
MCP_READ_ONLY_TOOL_SUFFIXES
|
|
67
70
|
};
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-FPB5LQWW.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mcp-read-only-tools.ts"],"sourcesContent":["/**\n * Conservative allowlist of canonical MCP tool suffixes that are\n * unambiguously read-only. Tools in this set are tagged with\n * `annotations: { readOnlyHint: true }` so ChatGPT (and other MCP\n * clients that honor the hint) can skip per-call confirmation.\n *\n * The list is suffix-based so it covers both the `remnic.*` and\n * `engram.*` naming forms. Anything not on it stays unannotated:\n * uncertainty is resolved as \"might mutate\".\n *\n * Excluded by construction: anything that writes, runs a pipeline,\n * flushes, applies, records, imports, or destructively deletes.\n */\nexport const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {\n recall: true,\n recall_explain: true,\n recall_tier_explain: true,\n recall_xray: true,\n who_knows: true,\n promotion_candidates: true,\n briefing: true,\n wearables_status: true,\n transcript_day: true,\n transcript_search: true,\n transcript_memories: true,\n location_status: true,\n location_day: true,\n meetings_list: true,\n meetings_get: true,\n deep_recall: true,\n memory_expand: true,\n memory_traverse: true,\n standup: true,\n action_confidence: true,\n capsule_list: true,\n procedural_stats: true,\n memory_get: true,\n memory_timeline: true,\n entity_get: true,\n review_queue_list: true,\n lcm_search: true,\n continuity_incident_list: true,\n identity_anchor_get: true,\n memory_identity: true,\n memory_search: true,\n external_wiki_search: true,\n memory_profile: true,\n memory_entities_list: true,\n memory_questions: true,\n memory_last_recall: true,\n memory_intent_debug: true,\n memory_qmd_debug: true,\n memory_graph_explain: true,\n graph_snapshot: true,\n review_list: true,\n profiling_report: true,\n peer_list: true,\n peer_get: true,\n peer_profile_get: true,\n console_state: true,\n dreams_status: true,\n codegraph_list_projects: true,\n codegraph_index_status: true,\n codegraph_search_graph: true,\n codegraph_trace_path: true,\n codegraph_detect_changes: true,\n codegraph_query_graph: true,\n codegraph_get_schema: true,\n codegraph_get_snippet: true,\n codegraph_get_architecture: true,\n codegraph_search_code: true,\n support_passport_memory_preview: true,\n support_passport_cards_list: true,\n support_passport_grants_list: true,\n};\n"],"mappings":";AAaO,IAAM,8BAA8D;AAAA,EACzE,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,sBAAsB;AAAA,EACtB,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,aAAa;AAAA,EACb,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,yBAAyB;AAAA,EACzB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,iCAAiC;AAAA,EACjC,6BAA6B;AAAA,EAC7B,8BAA8B;AAChC;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/mcp-read-only-tools.ts"],"sourcesContent":["/**\n * Conservative allowlist of canonical MCP tool suffixes that are\n * unambiguously read-only. Tools in this set are tagged with\n * `annotations: { readOnlyHint: true }` so ChatGPT (and other MCP\n * clients that honor the hint) can skip per-call confirmation.\n *\n * The list is suffix-based so it covers both the `remnic.*` and\n * `engram.*` naming forms. Anything not on it stays unannotated:\n * uncertainty is resolved as \"might mutate\".\n *\n * Excluded by construction: anything that writes, runs a pipeline,\n * flushes, applies, records, imports, or destructively deletes.\n */\nexport const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {\n recall: true,\n recall_explain: true,\n recall_tier_explain: true,\n recall_xray: true,\n who_knows: true,\n promotion_candidates: true,\n briefing: true,\n wearables_status: true,\n transcript_day: true,\n transcript_search: true,\n transcript_memories: true,\n location_status: true,\n location_day: true,\n meetings_list: true,\n meetings_get: true,\n deep_recall: true,\n memory_expand: true,\n memory_traverse: true,\n memory_ls: true,\n memory_tree: true,\n memory_find: true,\n standup: true,\n action_confidence: true,\n capsule_list: true,\n procedural_stats: true,\n memory_get: true,\n memory_timeline: true,\n entity_get: true,\n review_queue_list: true,\n lcm_search: true,\n continuity_incident_list: true,\n identity_anchor_get: true,\n memory_identity: true,\n memory_search: true,\n external_wiki_search: true,\n memory_profile: true,\n memory_entities_list: true,\n memory_questions: true,\n memory_last_recall: true,\n memory_intent_debug: true,\n memory_qmd_debug: true,\n memory_graph_explain: true,\n graph_snapshot: true,\n review_list: true,\n profiling_report: true,\n peer_list: true,\n peer_get: true,\n peer_profile_get: true,\n console_state: true,\n dreams_status: true,\n codegraph_list_projects: true,\n codegraph_index_status: true,\n codegraph_search_graph: true,\n codegraph_trace_path: true,\n codegraph_detect_changes: true,\n codegraph_query_graph: true,\n codegraph_get_schema: true,\n codegraph_get_snippet: true,\n codegraph_get_architecture: true,\n codegraph_search_code: true,\n support_passport_memory_preview: true,\n support_passport_cards_list: true,\n support_passport_grants_list: true,\n};\n"],"mappings":";AAaO,IAAM,8BAA8D;AAAA,EACzE,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,sBAAsB;AAAA,EACtB,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,aAAa;AAAA,EACb,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,YAAY;AAAA,EACZ,0BAA0B;AAAA,EAC1B,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,sBAAsB;AAAA,EACtB,kBAAkB;AAAA,EAClB,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,yBAAyB;AAAA,EACzB,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,sBAAsB;AAAA,EACtB,0BAA0B;AAAA,EAC1B,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,uBAAuB;AAAA,EACvB,iCAAiC;AAAA,EACjC,6BAA6B;AAAA,EAC7B,8BAA8B;AAChC;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
normalizeDreamsStatusWindowHours
|
|
3
|
-
} from "./chunk-EQWEIIKQ.js";
|
|
4
1
|
import {
|
|
5
2
|
runGraphEdgeDecayMaintenanceAcrossNamespaces
|
|
6
3
|
} from "./chunk-SCXURCVT.js";
|
|
4
|
+
import {
|
|
5
|
+
normalizeDreamsStatusWindowHours
|
|
6
|
+
} from "./chunk-EQWEIIKQ.js";
|
|
7
7
|
import {
|
|
8
8
|
executeResolution,
|
|
9
9
|
isValidResolutionVerb,
|
|
@@ -29,13 +29,13 @@ import {
|
|
|
29
29
|
defineOperation,
|
|
30
30
|
parseNamespacePreflightWriteOp,
|
|
31
31
|
resolveAuthorizedNamespaceWritablePreflight
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-AS4YKT75.js";
|
|
33
33
|
import {
|
|
34
34
|
parseSharedWriteOutputControls
|
|
35
35
|
} from "./chunk-IFBSZGW3.js";
|
|
36
36
|
import {
|
|
37
37
|
validateBriefingFormat
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-QLCMOHRE.js";
|
|
39
39
|
import {
|
|
40
40
|
parseDeepRecallMaxSteps
|
|
41
41
|
} from "./chunk-7RGX7BMF.js";
|
|
@@ -594,4 +594,4 @@ defineOperation({ name: "graph_events", description: "SSE graph events.", schema
|
|
|
594
594
|
defineOperation({ name: "chat_message", description: "Chat message.", schema: strictSchema({ message: S.str, chatSessionId: S.str }), handler: async (_i, _ctx) => ({ result: { ok: true } }) });
|
|
595
595
|
defineOperation({ name: "chat_events", description: "SSE chat events.", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { stream: "sse" } }) });
|
|
596
596
|
defineOperation({ name: "adapters_status", description: "Adapter registry metadata (issue #1850 round 5). Marker op: the HTTP transport builds the response from its own adapterRegistry, but the op still must be registered so it appears in listRegisteredOperations and enforceTokenOp can gate it for scoped tokens.", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { ok: true } }) });
|
|
597
|
-
//# sourceMappingURL=chunk-
|
|
597
|
+
//# sourceMappingURL=chunk-G2SJRFGP.js.map
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ChatTransport
|
|
3
|
-
} from "./chunk-JUXOTY6J.js";
|
|
4
1
|
import {
|
|
5
2
|
SingleFlightProbe,
|
|
6
3
|
extractNonRecoverableBackendReason,
|
|
@@ -11,6 +8,9 @@ import {
|
|
|
11
8
|
resolveUnavailableVerdict,
|
|
12
9
|
waitForRetryBackoff
|
|
13
10
|
} from "./chunk-QM2SPLKQ.js";
|
|
11
|
+
import {
|
|
12
|
+
ChatTransport
|
|
13
|
+
} from "./chunk-JUXOTY6J.js";
|
|
14
14
|
import {
|
|
15
15
|
estimateTokenCount
|
|
16
16
|
} from "./chunk-TOTT6S2V.js";
|
|
@@ -1100,4 +1100,4 @@ var LocalLlmClient = class _LocalLlmClient {
|
|
|
1100
1100
|
export {
|
|
1101
1101
|
LocalLlmClient
|
|
1102
1102
|
};
|
|
1103
|
-
//# sourceMappingURL=chunk-
|
|
1103
|
+
//# sourceMappingURL=chunk-G2XZFGYN.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-3UXOZBHV.js";
|
|
15
15
|
import {
|
|
16
16
|
StorageManager
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MNG536IS.js";
|
|
18
18
|
import {
|
|
19
19
|
OKF_PROFILE_TYPE,
|
|
20
20
|
okfTypeForMemory
|
|
@@ -272,4 +272,4 @@ export {
|
|
|
272
272
|
exportOkfBundle,
|
|
273
273
|
firstHeading
|
|
274
274
|
};
|
|
275
|
-
//# sourceMappingURL=chunk-
|
|
275
|
+
//# sourceMappingURL=chunk-GGROFIYX.js.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineOperation
|
|
3
|
+
} from "./chunk-AS4YKT75.js";
|
|
4
|
+
import {
|
|
5
|
+
EngramAccessInputError
|
|
6
|
+
} from "./chunk-2Z24E5W2.js";
|
|
7
|
+
|
|
8
|
+
// src/memory-browse-operations.ts
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
function strictSchema(shape) {
|
|
11
|
+
return z.preprocess(
|
|
12
|
+
(data) => {
|
|
13
|
+
if (data !== null && typeof data === "object" && !Array.isArray(data)) {
|
|
14
|
+
return Object.fromEntries(Object.entries(data).filter(([, value]) => value !== null));
|
|
15
|
+
}
|
|
16
|
+
return data;
|
|
17
|
+
},
|
|
18
|
+
z.object(shape).passthrough()
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
function optStr(value) {
|
|
22
|
+
return typeof value === "string" ? value : void 0;
|
|
23
|
+
}
|
|
24
|
+
function optInt(value) {
|
|
25
|
+
if (typeof value === "number") return value;
|
|
26
|
+
if (typeof value === "string" && Number.isFinite(Number(value))) return Number(value);
|
|
27
|
+
return void 0;
|
|
28
|
+
}
|
|
29
|
+
function reqStr(value, field) {
|
|
30
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
31
|
+
throw new EngramAccessInputError(`${field} is required`);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
var verbShape = {
|
|
36
|
+
namespace: z.string().optional()
|
|
37
|
+
};
|
|
38
|
+
function browseRequest(verb, input) {
|
|
39
|
+
return {
|
|
40
|
+
verb,
|
|
41
|
+
...optStr(input.path) !== void 0 ? { path: optStr(input.path) } : {},
|
|
42
|
+
...optInt(input.depth) !== void 0 ? { depth: optInt(input.depth) } : {},
|
|
43
|
+
...optStr(input.pattern) !== void 0 ? { pattern: optStr(input.pattern) } : {},
|
|
44
|
+
namespace: optStr(input.namespace)
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
defineOperation({
|
|
48
|
+
name: "memory_ls",
|
|
49
|
+
description: "List the children of one store path in the caller's namespace: category dirs with counts, memory files with a one-line description.",
|
|
50
|
+
schema: strictSchema({ ...verbShape, path: z.string().optional() }),
|
|
51
|
+
handler: async (input, ctx) => ({
|
|
52
|
+
result: await ctx.service.memoryStoreBrowse({ ...browseRequest("ls", input), authenticatedPrincipal: ctx.authenticatedPrincipal })
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
defineOperation({
|
|
56
|
+
name: "memory_tree",
|
|
57
|
+
description: "Depth-limited tree of store paths under one directory, one-line descriptions, entry-capped.",
|
|
58
|
+
schema: strictSchema({ ...verbShape, path: z.string().optional(), depth: z.union([z.number(), z.string()]).optional() }),
|
|
59
|
+
handler: async (input, ctx) => ({
|
|
60
|
+
result: await ctx.service.memoryStoreBrowse({ ...browseRequest("tree", input), authenticatedPrincipal: ctx.authenticatedPrincipal })
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
defineOperation({
|
|
64
|
+
name: "memory_find",
|
|
65
|
+
description: "Deterministic name/path match (`*` glob or substring) over the caller's namespace store; semantic search stays memory_search.",
|
|
66
|
+
schema: strictSchema({ ...verbShape, pattern: z.string() }),
|
|
67
|
+
handler: async (input, ctx) => ({
|
|
68
|
+
result: await ctx.service.memoryStoreBrowse({
|
|
69
|
+
...browseRequest("find", { ...input, pattern: reqStr(input.pattern, "pattern") }),
|
|
70
|
+
authenticatedPrincipal: ctx.authenticatedPrincipal
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=chunk-GXJSLNYO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory-browse-operations.ts"],"sourcesContent":["/**\n * Memory-store browse boundary operations (issue #2978).\n *\n * `memory_ls` / `memory_tree` / `memory_find` route MCP, HTTP, and CLI\n * dispatch through the shared validation + error-mapping layer\n * (access-boundary.ts) to the single `EngramAccessService.memoryStoreBrowse`\n * implementation. Sibling module so access-operations-batch.ts stays at its\n * ceiling seam (same layout as recall-navigation-operations.ts).\n */\n\nimport { z } from \"zod\";\n\nimport { defineOperation } from \"./access-boundary.js\";\nimport { EngramAccessInputError } from \"./access-errors.js\";\nimport type { BrowseVerb, MemoryStoreBrowseRequest } from \"./memory-browse.js\";\n\nfunction strictSchema<T extends z.ZodRawShape>(shape: T): z.ZodType<Record<string, unknown>> {\n return z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n return Object.fromEntries(Object.entries(data as Record<string, unknown>).filter(([, value]) => value !== null));\n }\n return data;\n },\n z.object(shape).passthrough(),\n ) as unknown as z.ZodType<Record<string, unknown>>;\n}\n\nfunction optStr(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction optInt(value: unknown): number | undefined {\n if (typeof value === \"number\") return value;\n if (typeof value === \"string\" && Number.isFinite(Number(value))) return Number(value);\n return undefined;\n}\n\nfunction reqStr(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new EngramAccessInputError(`${field} is required`);\n }\n return value;\n}\n\nconst verbShape = {\n namespace: z.string().optional(),\n} as const;\n\nfunction browseRequest(verb: BrowseVerb, input: Record<string, unknown>): MemoryStoreBrowseRequest {\n return {\n verb,\n ...(optStr(input.path) !== undefined ? { path: optStr(input.path) } : {}),\n ...(optInt(input.depth) !== undefined ? { depth: optInt(input.depth) } : {}),\n ...(optStr(input.pattern) !== undefined ? { pattern: optStr(input.pattern) } : {}),\n namespace: optStr(input.namespace),\n };\n}\n\ndefineOperation({\n name: \"memory_ls\",\n description: \"List the children of one store path in the caller's namespace: category dirs with counts, memory files with a one-line description.\",\n schema: strictSchema({ ...verbShape, path: z.string().optional() }),\n handler: async (input, ctx) => ({\n result: await ctx.service.memoryStoreBrowse({ ...browseRequest(\"ls\", input), authenticatedPrincipal: ctx.authenticatedPrincipal }),\n }),\n});\n\ndefineOperation({\n name: \"memory_tree\",\n description: \"Depth-limited tree of store paths under one directory, one-line descriptions, entry-capped.\",\n schema: strictSchema({ ...verbShape, path: z.string().optional(), depth: z.union([z.number(), z.string()]).optional() }),\n handler: async (input, ctx) => ({\n result: await ctx.service.memoryStoreBrowse({ ...browseRequest(\"tree\", input), authenticatedPrincipal: ctx.authenticatedPrincipal }),\n }),\n});\n\ndefineOperation({\n name: \"memory_find\",\n description: \"Deterministic name/path match (`*` glob or substring) over the caller's namespace store; semantic search stays memory_search.\",\n schema: strictSchema({ ...verbShape, pattern: z.string() }),\n handler: async (input, ctx) => ({\n result: await ctx.service.memoryStoreBrowse({\n ...browseRequest(\"find\", { ...input, pattern: reqStr(input.pattern, \"pattern\") }),\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n }),\n }),\n});\n"],"mappings":";;;;;;;;AAUA,SAAS,SAAS;AAMlB,SAAS,aAAsC,OAA8C;AAC3F,SAAO,EAAE;AAAA,IACP,CAAC,SAAS;AACR,UAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AACrE,eAAO,OAAO,YAAY,OAAO,QAAQ,IAA+B,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,IAAI,CAAC;AAAA,MACjH;AACA,aAAO;AAAA,IACT;AAAA,IACA,EAAE,OAAO,KAAK,EAAE,YAAY;AAAA,EAC9B;AACF;AAEA,SAAS,OAAO,OAAoC;AAClD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,OAAO,OAAoC;AAClD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,SAAS,OAAO,KAAK,CAAC,EAAG,QAAO,OAAO,KAAK;AACpF,SAAO;AACT;AAEA,SAAS,OAAO,OAAgB,OAAuB;AACrD,MAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAC1D,UAAM,IAAI,uBAAuB,GAAG,KAAK,cAAc;AAAA,EACzD;AACA,SAAO;AACT;AAEA,IAAM,YAAY;AAAA,EAChB,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC;AAEA,SAAS,cAAc,MAAkB,OAA0D;AACjG,SAAO;AAAA,IACL;AAAA,IACA,GAAI,OAAO,MAAM,IAAI,MAAM,SAAY,EAAE,MAAM,OAAO,MAAM,IAAI,EAAE,IAAI,CAAC;AAAA,IACvE,GAAI,OAAO,MAAM,KAAK,MAAM,SAAY,EAAE,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC;AAAA,IAC1E,GAAI,OAAO,MAAM,OAAO,MAAM,SAAY,EAAE,SAAS,OAAO,MAAM,OAAO,EAAE,IAAI,CAAC;AAAA,IAChF,WAAW,OAAO,MAAM,SAAS;AAAA,EACnC;AACF;AAEA,gBAAgB;AAAA,EACd,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ,aAAa,EAAE,GAAG,WAAW,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EAClE,SAAS,OAAO,OAAO,SAAS;AAAA,IAC9B,QAAQ,MAAM,IAAI,QAAQ,kBAAkB,EAAE,GAAG,cAAc,MAAM,KAAK,GAAG,wBAAwB,IAAI,uBAAuB,CAAC;AAAA,EACnI;AACF,CAAC;AAED,gBAAgB;AAAA,EACd,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ,aAAa,EAAE,GAAG,WAAW,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;AAAA,EACvH,SAAS,OAAO,OAAO,SAAS;AAAA,IAC9B,QAAQ,MAAM,IAAI,QAAQ,kBAAkB,EAAE,GAAG,cAAc,QAAQ,KAAK,GAAG,wBAAwB,IAAI,uBAAuB,CAAC;AAAA,EACrI;AACF,CAAC;AAED,gBAAgB;AAAA,EACd,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ,aAAa,EAAE,GAAG,WAAW,SAAS,EAAE,OAAO,EAAE,CAAC;AAAA,EAC1D,SAAS,OAAO,OAAO,SAAS;AAAA,IAC9B,QAAQ,MAAM,IAAI,QAAQ,kBAAkB;AAAA,MAC1C,GAAG,cAAc,QAAQ,EAAE,GAAG,OAAO,SAAS,OAAO,MAAM,SAAS,SAAS,EAAE,CAAC;AAAA,MAChF,wBAAwB,IAAI;AAAA,IAC9B,CAAC;AAAA,EACH;AACF,CAAC;","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-5JMAGU26.js";
|
|
6
6
|
import {
|
|
7
7
|
runPostConsolidationMaterialize
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-WL3PGPGU.js";
|
|
9
9
|
import {
|
|
10
10
|
isSemanticConsolidationLlmOperator
|
|
11
11
|
} from "./chunk-G7D6GZ5J.js";
|
|
@@ -220,4 +220,4 @@ export {
|
|
|
220
220
|
buildExtensionsBlockForConsolidation,
|
|
221
221
|
materializeAfterSemanticConsolidation
|
|
222
222
|
};
|
|
223
|
-
//# sourceMappingURL=chunk-
|
|
223
|
+
//# sourceMappingURL=chunk-HG74GEVY.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EngramAccessInputError
|
|
3
|
+
} from "./chunk-2Z24E5W2.js";
|
|
4
|
+
|
|
5
|
+
// src/memory-browse-http-glue.ts
|
|
6
|
+
function optStr(value) {
|
|
7
|
+
return typeof value === "string" ? value : void 0;
|
|
8
|
+
}
|
|
9
|
+
function optInt(value) {
|
|
10
|
+
if (value === void 0 || value === null || value === "") return void 0;
|
|
11
|
+
const parsed = typeof value === "string" ? Number(value) : value;
|
|
12
|
+
if (typeof parsed !== "number" || !Number.isInteger(parsed)) {
|
|
13
|
+
throw new EngramAccessInputError("depth must be an integer");
|
|
14
|
+
}
|
|
15
|
+
return parsed;
|
|
16
|
+
}
|
|
17
|
+
async function respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, verb) {
|
|
18
|
+
const body = await readJsonBody(req);
|
|
19
|
+
const scope = scopeFor(optStr(body.namespace));
|
|
20
|
+
const depth = verb === "tree" ? optInt(body.depth) : void 0;
|
|
21
|
+
const result = await service.memoryStoreBrowse({
|
|
22
|
+
verb,
|
|
23
|
+
...optStr(body.path) !== void 0 ? { path: optStr(body.path) } : {},
|
|
24
|
+
...depth !== void 0 ? { depth } : {},
|
|
25
|
+
...verb === "find" && optStr(body.pattern) !== void 0 ? { pattern: optStr(body.pattern) } : {},
|
|
26
|
+
namespace: scope.namespace,
|
|
27
|
+
authenticatedPrincipal: scope.authenticatedPrincipal
|
|
28
|
+
});
|
|
29
|
+
const { rendered: _rendered, ...payload } = result;
|
|
30
|
+
respondJson(res, 200, payload);
|
|
31
|
+
}
|
|
32
|
+
async function maybeRespondMemoryBrowse(req, res, pathname, method, enforceTokenOp, respondJson, readJsonBody, service, scopeFor) {
|
|
33
|
+
if (method === "POST" && (pathname === "/engram/v1/memory/ls" || pathname === "/remnic/v1/memory/ls")) {
|
|
34
|
+
enforceTokenOp("memory_ls");
|
|
35
|
+
await respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, "ls");
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
if (method === "POST" && (pathname === "/engram/v1/memory/tree" || pathname === "/remnic/v1/memory/tree")) {
|
|
39
|
+
enforceTokenOp("memory_tree");
|
|
40
|
+
await respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, "tree");
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
if (method === "POST" && (pathname === "/engram/v1/memory/find" || pathname === "/remnic/v1/memory/find")) {
|
|
44
|
+
enforceTokenOp("memory_find");
|
|
45
|
+
await respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, "find");
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
maybeRespondMemoryBrowse
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=chunk-HMDYSGY6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory-browse-http-glue.ts"],"sourcesContent":["/**\n * Memory-store browse HTTP glue (issue #2978) — route bodies live here so\n * access-http.ts stays at its structural ceiling (same seam as\n * recall-navigation-http-glue.ts).\n *\n * Each route carries its literal `enforceTokenOp(\"<op>\")` boundary-dispatch\n * marker so `access-surface-catalog.test.ts` can prove dispatch statically.\n * Input errors map to 400; everything else rethrows to the global 500\n * handler. Namespace resolution flows through the caller-supplied\n * `scopeFor` gate so a body-supplied namespace passes the SAME\n * effective-namespace allow-list as the query string (issue #1850 finding\n * 2), and `authenticatedPrincipal` reaches the service so authorization\n * derives from the presenting principal, never client-supplied input.\n */\n\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport { EngramAccessInputError } from \"./access-errors.js\";\nimport type { EngramAccessService } from \"./access-service.js\";\nimport type { BrowseVerb } from \"./memory-browse.js\";\n\ntype RespondJson = (res: ServerResponse, status: number, payload: unknown) => void;\ntype ReadJsonBody = (req: IncomingMessage) => Promise<unknown>;\n\ntype ScopeFor = (\n bodyNamespace?: string,\n) => { namespace?: string; authenticatedPrincipal?: string };\n\nfunction optStr(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction optInt(value: unknown): number | undefined {\n if (value === undefined || value === null || value === \"\") return undefined;\n const parsed = typeof value === \"string\" ? Number(value) : value;\n if (typeof parsed !== \"number\" || !Number.isInteger(parsed)) {\n throw new EngramAccessInputError(\"depth must be an integer\");\n }\n return parsed;\n}\n\nasync function respondBrowse(\n req: IncomingMessage,\n res: ServerResponse,\n respondJson: RespondJson,\n readJsonBody: ReadJsonBody,\n service: EngramAccessService,\n scopeFor: ScopeFor,\n verb: BrowseVerb,\n): Promise<void> {\n const body = (await readJsonBody(req)) as Record<string, unknown>;\n const scope = scopeFor(optStr(body.namespace));\n const depth = verb === \"tree\" ? optInt(body.depth) : undefined;\n const result = await service.memoryStoreBrowse({\n verb,\n ...(optStr(body.path) !== undefined ? { path: optStr(body.path) } : {}),\n ...(depth !== undefined ? { depth } : {}),\n ...(verb === \"find\" && optStr(body.pattern) !== undefined ? { pattern: optStr(body.pattern) } : {}),\n namespace: scope.namespace,\n authenticatedPrincipal: scope.authenticatedPrincipal,\n });\n const { rendered: _rendered, ...payload } = result;\n respondJson(res, 200, payload);\n}\n\nexport async function maybeRespondMemoryBrowse(\n req: IncomingMessage,\n res: ServerResponse,\n pathname: string,\n method: string | undefined,\n enforceTokenOp: (op: \"memory_ls\" | \"memory_tree\" | \"memory_find\") => void,\n respondJson: RespondJson,\n readJsonBody: ReadJsonBody,\n service: EngramAccessService,\n scopeFor: ScopeFor,\n): Promise<boolean> {\n if (method === \"POST\" && (pathname === \"/engram/v1/memory/ls\" || pathname === \"/remnic/v1/memory/ls\")) {\n enforceTokenOp(\"memory_ls\");\n await respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, \"ls\");\n return true;\n }\n if (method === \"POST\" && (pathname === \"/engram/v1/memory/tree\" || pathname === \"/remnic/v1/memory/tree\")) {\n enforceTokenOp(\"memory_tree\");\n await respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, \"tree\");\n return true;\n }\n if (method === \"POST\" && (pathname === \"/engram/v1/memory/find\" || pathname === \"/remnic/v1/memory/find\")) {\n enforceTokenOp(\"memory_find\");\n await respondBrowse(req, res, respondJson, readJsonBody, service, scopeFor, \"find\");\n return true;\n }\n return false;\n}\n"],"mappings":";;;;;AA4BA,SAAS,OAAO,OAAoC;AAClD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,OAAO,OAAoC;AAClD,MAAI,UAAU,UAAa,UAAU,QAAQ,UAAU,GAAI,QAAO;AAClE,QAAM,SAAS,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AAC3D,MAAI,OAAO,WAAW,YAAY,CAAC,OAAO,UAAU,MAAM,GAAG;AAC3D,UAAM,IAAI,uBAAuB,0BAA0B;AAAA,EAC7D;AACA,SAAO;AACT;AAEA,eAAe,cACb,KACA,KACA,aACA,cACA,SACA,UACA,MACe;AACf,QAAM,OAAQ,MAAM,aAAa,GAAG;AACpC,QAAM,QAAQ,SAAS,OAAO,KAAK,SAAS,CAAC;AAC7C,QAAM,QAAQ,SAAS,SAAS,OAAO,KAAK,KAAK,IAAI;AACrD,QAAM,SAAS,MAAM,QAAQ,kBAAkB;AAAA,IAC7C;AAAA,IACA,GAAI,OAAO,KAAK,IAAI,MAAM,SAAY,EAAE,MAAM,OAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,IACrE,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,SAAS,UAAU,OAAO,KAAK,OAAO,MAAM,SAAY,EAAE,SAAS,OAAO,KAAK,OAAO,EAAE,IAAI,CAAC;AAAA,IACjG,WAAW,MAAM;AAAA,IACjB,wBAAwB,MAAM;AAAA,EAChC,CAAC;AACD,QAAM,EAAE,UAAU,WAAW,GAAG,QAAQ,IAAI;AAC5C,cAAY,KAAK,KAAK,OAAO;AAC/B;AAEA,eAAsB,yBACpB,KACA,KACA,UACA,QACA,gBACA,aACA,cACA,SACA,UACkB;AAClB,MAAI,WAAW,WAAW,aAAa,0BAA0B,aAAa,yBAAyB;AACrG,mBAAe,WAAW;AAC1B,UAAM,cAAc,KAAK,KAAK,aAAa,cAAc,SAAS,UAAU,IAAI;AAChF,WAAO;AAAA,EACT;AACA,MAAI,WAAW,WAAW,aAAa,4BAA4B,aAAa,2BAA2B;AACzG,mBAAe,aAAa;AAC5B,UAAM,cAAc,KAAK,KAAK,aAAa,cAAc,SAAS,UAAU,MAAM;AAClF,WAAO;AAAA,EACT;AACA,MAAI,WAAW,WAAW,aAAa,4BAA4B,aAAa,2BAA2B;AACzG,mBAAe,aAAa;AAC5B,UAAM,cAAc,KAAK,KAAK,aAAa,cAAc,SAAS,UAAU,MAAM;AAClF,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
rankDeepRecallFrontier
|
|
3
|
-
} from "./chunk-HRATODNO.js";
|
|
4
1
|
import {
|
|
5
2
|
validateRefineRewrite
|
|
6
3
|
} from "./chunk-WTWQA7BB.js";
|
|
7
4
|
import {
|
|
8
5
|
selectExpandNodeIds
|
|
9
6
|
} from "./chunk-VZIAVM72.js";
|
|
7
|
+
import {
|
|
8
|
+
rankDeepRecallFrontier
|
|
9
|
+
} from "./chunk-HRATODNO.js";
|
|
10
10
|
import {
|
|
11
11
|
extractJsonCandidates,
|
|
12
12
|
stripCodeFences
|
|
@@ -384,4 +384,4 @@ async function runBudgetedDeepRecall(deps, query) {
|
|
|
384
384
|
export {
|
|
385
385
|
runBudgetedDeepRecall
|
|
386
386
|
};
|
|
387
|
-
//# sourceMappingURL=chunk-
|
|
387
|
+
//# sourceMappingURL=chunk-HS75MCQF.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-DBB5JPSL.js";
|
|
4
4
|
import {
|
|
5
5
|
isGenericRecallExcludedPath
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DE4ZGH2N.js";
|
|
7
7
|
import {
|
|
8
8
|
shouldFilterSupersededFromRecall
|
|
9
9
|
} from "./chunk-5WITETWU.js";
|
|
@@ -69,4 +69,4 @@ export {
|
|
|
69
69
|
filterRecentScanMemoriesForStateView,
|
|
70
70
|
indexStateViewAnnotatedResults
|
|
71
71
|
};
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
72
|
+
//# sourceMappingURL=chunk-I6IJDTRP.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSearchBackend
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PA67GXYJ.js";
|
|
4
4
|
import {
|
|
5
5
|
namespaceIdentityToken,
|
|
6
6
|
normalizeNamespaceIdentity
|
|
@@ -508,4 +508,4 @@ export {
|
|
|
508
508
|
NamespaceSearchRouter,
|
|
509
509
|
normalizeQmdResultPath
|
|
510
510
|
};
|
|
511
|
-
//# sourceMappingURL=chunk-
|
|
511
|
+
//# sourceMappingURL=chunk-IO7K7GES.js.map
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-7ZNJN5WZ.js";
|
|
24
24
|
import {
|
|
25
25
|
compareEntityTimestamps
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-MNG536IS.js";
|
|
27
27
|
import {
|
|
28
28
|
normalizeEntityName
|
|
29
29
|
} from "./chunk-YXZG5TVN.js";
|
|
@@ -918,4 +918,4 @@ export {
|
|
|
918
918
|
entityIndexVersion,
|
|
919
919
|
entityRecentTranscriptLookbackHours
|
|
920
920
|
};
|
|
921
|
-
//# sourceMappingURL=chunk-
|
|
921
|
+
//# sourceMappingURL=chunk-JXLEQIJ7.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
applyExtractionSourceGrounding
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SMBWBEE7.js";
|
|
4
4
|
import {
|
|
5
5
|
CONNECTOR_LABEL_MAX_LENGTH,
|
|
6
6
|
knownConnectorIds
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "./chunk-SGUDMW2K.js";
|
|
11
11
|
import {
|
|
12
12
|
deriveSourceConnector
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-B6VDWDFN.js";
|
|
14
14
|
import {
|
|
15
15
|
resolvePipelineProcessingCapabilities
|
|
16
16
|
} from "./chunk-JUOZ62Y7.js";
|
|
@@ -112,4 +112,4 @@ export {
|
|
|
112
112
|
renderExtractionConversation,
|
|
113
113
|
applyGroundingWithConnector
|
|
114
114
|
};
|
|
115
|
-
//# sourceMappingURL=chunk-
|
|
115
|
+
//# sourceMappingURL=chunk-JYXLW22X.js.map
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import {
|
|
2
|
+
coerceBooleanLike,
|
|
3
|
+
coerceNumber
|
|
4
|
+
} from "./chunk-PQVCH2AE.js";
|
|
5
|
+
|
|
6
|
+
// src/standing-memory-block.ts
|
|
7
|
+
var DEFAULT_RECALL_STANDING_BLOCK = false;
|
|
8
|
+
var DEFAULT_STANDING_BLOCK_FRESH_DAYS = 14;
|
|
9
|
+
var DEFAULT_STANDING_BLOCK_MAX_CHARS = 2048;
|
|
10
|
+
var DEFAULT_STANDING_BLOCK_HOOK_CHARS = 96;
|
|
11
|
+
var STANDING_BLOCK_HEADER = "## Standing Memory (Remnic)";
|
|
12
|
+
var STANDING_BLOCK_INSTRUCTION = "Use this standing index for orientation. It changes only when the memory store changes.";
|
|
13
|
+
var STANDING_BLOCK_TRIMMED_MARKER = "- ...(older lines trimmed)";
|
|
14
|
+
function standingHookLedgerKey(description, hookMaxChars) {
|
|
15
|
+
return `${description}\0${hookMaxChars}`;
|
|
16
|
+
}
|
|
17
|
+
var ISO_DATE_RE = /\b\d{4}-\d{2}-\d{2}(?:[T ]\d{2}:\d{2})?/;
|
|
18
|
+
var CLOCK_TIME_RE = /\b\d{1,2}:\d{2}(?::\d{2})?\b/;
|
|
19
|
+
var RELATIVE_DATE_RE = /\b(?:today|tonight|tomorrow|yesterday|this\s+(?:morning|afternoon|evening|week|month|year))\b/i;
|
|
20
|
+
var COUNTER_RE = /\b(?:count|total|entries|memories|items)\s*[:=]\s*\d+\b/i;
|
|
21
|
+
function lintStandingBlockVolatility(text) {
|
|
22
|
+
const matches = [];
|
|
23
|
+
for (const [kind, re] of [
|
|
24
|
+
["iso-date", ISO_DATE_RE],
|
|
25
|
+
["clock-time", CLOCK_TIME_RE],
|
|
26
|
+
["relative-date", RELATIVE_DATE_RE],
|
|
27
|
+
["counter", COUNTER_RE]
|
|
28
|
+
]) {
|
|
29
|
+
const hit = text.match(re);
|
|
30
|
+
if (hit) matches.push({ kind, token: hit[0] });
|
|
31
|
+
}
|
|
32
|
+
return matches;
|
|
33
|
+
}
|
|
34
|
+
var StandingBlockError = class extends Error {
|
|
35
|
+
constructor(message) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = "StandingBlockError";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var StandingBlockVolatilityError = class extends StandingBlockError {
|
|
41
|
+
matches;
|
|
42
|
+
constructor(matches) {
|
|
43
|
+
super(
|
|
44
|
+
`standing memory block refused: volatile content busts the prefix cache (${matches.map((m) => `${m.kind}:${JSON.stringify(m.token)}`).join(", ")})`
|
|
45
|
+
);
|
|
46
|
+
this.name = "StandingBlockVolatilityError";
|
|
47
|
+
this.matches = matches;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var StandingBlockBudgetError = class extends StandingBlockError {
|
|
51
|
+
constructor(maxChars) {
|
|
52
|
+
super(
|
|
53
|
+
`standing memory block does not fit: pinned lines alone exceed maxChars=${maxChars}; raise standingBlockMaxChars or unpin entries`
|
|
54
|
+
);
|
|
55
|
+
this.name = "StandingBlockBudgetError";
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
function parseRecallStandingBlock(raw) {
|
|
59
|
+
return coerceBooleanLike(raw, "recallStandingBlock") === true;
|
|
60
|
+
}
|
|
61
|
+
function parseStandingBlockFreshDays(raw) {
|
|
62
|
+
if (raw === void 0 || raw === null) return DEFAULT_STANDING_BLOCK_FRESH_DAYS;
|
|
63
|
+
const n = coerceNumber(raw, "standingBlockFreshDays");
|
|
64
|
+
if (n === void 0 || !Number.isFinite(n) || n < 0) {
|
|
65
|
+
throw new Error(`Invalid standingBlockFreshDays: expected a number >= 0, got ${JSON.stringify(raw)}`);
|
|
66
|
+
}
|
|
67
|
+
return n;
|
|
68
|
+
}
|
|
69
|
+
function parseStandingBlockMaxChars(raw) {
|
|
70
|
+
if (raw === void 0 || raw === null) return DEFAULT_STANDING_BLOCK_MAX_CHARS;
|
|
71
|
+
const n = coerceNumber(raw, "standingBlockMaxChars");
|
|
72
|
+
if (n === void 0 || !Number.isFinite(n) || n < 1) {
|
|
73
|
+
throw new Error(`Invalid standingBlockMaxChars: expected an integer >= 1, got ${JSON.stringify(raw)}`);
|
|
74
|
+
}
|
|
75
|
+
return Math.floor(n);
|
|
76
|
+
}
|
|
77
|
+
function mechanicalHook(description, budget) {
|
|
78
|
+
if (description.length <= budget) return description;
|
|
79
|
+
const cut = description.slice(0, budget);
|
|
80
|
+
const lastSpace = cut.lastIndexOf(" ");
|
|
81
|
+
const base = lastSpace > Math.floor(budget * 0.6) ? cut.slice(0, lastSpace) : cut;
|
|
82
|
+
return `${base.replace(/[\s,;:]+$/, "")}...`;
|
|
83
|
+
}
|
|
84
|
+
var BAND_RANK = { pinned: 0, fresh: 1, compressed: 2 };
|
|
85
|
+
function validateEntries(entries) {
|
|
86
|
+
if (!Array.isArray(entries)) {
|
|
87
|
+
throw new StandingBlockError("standing memory block entries must be an array");
|
|
88
|
+
}
|
|
89
|
+
const seen = /* @__PURE__ */ new Set();
|
|
90
|
+
const validated = /* @__PURE__ */ new Map();
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
if (typeof entry !== "object" || entry === null) {
|
|
93
|
+
throw new StandingBlockError(`standing memory block entry must be an object, got ${JSON.stringify(entry)}`);
|
|
94
|
+
}
|
|
95
|
+
const id = typeof entry.id === "string" ? entry.id.trim() : "";
|
|
96
|
+
const description = typeof entry.description === "string" ? entry.description.trim() : "";
|
|
97
|
+
if (id.length === 0) {
|
|
98
|
+
throw new StandingBlockError("standing memory block entry requires a non-empty id");
|
|
99
|
+
}
|
|
100
|
+
if (description.length === 0) {
|
|
101
|
+
throw new StandingBlockError(`standing memory block entry ${id} requires a non-empty description`);
|
|
102
|
+
}
|
|
103
|
+
if (seen.has(id)) {
|
|
104
|
+
throw new StandingBlockError(`standing memory block entry ids must be unique; duplicate: ${id}`);
|
|
105
|
+
}
|
|
106
|
+
if (entry.lastChangedAt !== void 0 && Number.isNaN(Date.parse(entry.lastChangedAt))) {
|
|
107
|
+
throw new StandingBlockError(
|
|
108
|
+
`standing memory block entry ${id} has an unparseable lastChangedAt: ${JSON.stringify(entry.lastChangedAt)}`
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
seen.add(id);
|
|
112
|
+
validated.set(id, { ...entry, id, description });
|
|
113
|
+
}
|
|
114
|
+
return validated;
|
|
115
|
+
}
|
|
116
|
+
function buildStandingMemoryBlock(input) {
|
|
117
|
+
const freshDays = input.freshDays ?? DEFAULT_STANDING_BLOCK_FRESH_DAYS;
|
|
118
|
+
const maxChars = input.maxChars ?? DEFAULT_STANDING_BLOCK_MAX_CHARS;
|
|
119
|
+
const hookMaxChars = input.hookMaxChars ?? DEFAULT_STANDING_BLOCK_HOOK_CHARS;
|
|
120
|
+
if (!Number.isFinite(input.nowMs)) {
|
|
121
|
+
throw new StandingBlockError("standing memory block requires a finite nowMs");
|
|
122
|
+
}
|
|
123
|
+
if (!(freshDays >= 0) || !Number.isFinite(freshDays)) {
|
|
124
|
+
throw new StandingBlockError("standing memory block requires freshDays >= 0");
|
|
125
|
+
}
|
|
126
|
+
if (!(maxChars >= 1) || !Number.isFinite(maxChars)) {
|
|
127
|
+
throw new StandingBlockError("standing memory block requires maxChars >= 1");
|
|
128
|
+
}
|
|
129
|
+
if (!(hookMaxChars >= 1) || !Number.isFinite(hookMaxChars)) {
|
|
130
|
+
throw new StandingBlockError("standing memory block requires hookMaxChars >= 1");
|
|
131
|
+
}
|
|
132
|
+
const entries = validateEntries(input.entries);
|
|
133
|
+
const ledger = new Map(input.ledger ?? []);
|
|
134
|
+
if (entries.size === 0) {
|
|
135
|
+
return {
|
|
136
|
+
text: "",
|
|
137
|
+
lines: [],
|
|
138
|
+
ledger,
|
|
139
|
+
bandCounts: { pinned: 0, fresh: 0, compressed: 0, dropped: 0 }
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const freshCutoff = input.nowMs - freshDays * 864e5;
|
|
143
|
+
const layered = [];
|
|
144
|
+
for (const entry of entries.values()) {
|
|
145
|
+
let band;
|
|
146
|
+
if (entry.pinned === true) {
|
|
147
|
+
band = "pinned";
|
|
148
|
+
} else if (typeof entry.lastChangedAt === "string" && Date.parse(entry.lastChangedAt) >= freshCutoff && Date.parse(entry.lastChangedAt) <= input.nowMs) {
|
|
149
|
+
band = "fresh";
|
|
150
|
+
} else {
|
|
151
|
+
band = "compressed";
|
|
152
|
+
}
|
|
153
|
+
if (band !== "compressed") {
|
|
154
|
+
layered.push({ id: entry.id, band, line: `- ${entry.description}` });
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
const key = standingHookLedgerKey(entry.description, hookMaxChars);
|
|
158
|
+
const cached = ledger.get(key);
|
|
159
|
+
const hook = cached ?? mechanicalHook(entry.description, hookMaxChars);
|
|
160
|
+
if (cached === void 0) ledger.set(key, hook);
|
|
161
|
+
layered.push({ id: entry.id, band, line: `- ${hook}` });
|
|
162
|
+
}
|
|
163
|
+
layered.sort(
|
|
164
|
+
(a, b) => BAND_RANK[a.band] - BAND_RANK[b.band] || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0)
|
|
165
|
+
);
|
|
166
|
+
const render = (keep2, withMarker) => {
|
|
167
|
+
const body = layered.slice(0, keep2).map((item) => item.line);
|
|
168
|
+
if (withMarker) body.push(STANDING_BLOCK_TRIMMED_MARKER);
|
|
169
|
+
const lines = [STANDING_BLOCK_HEADER, "", ...body, "", STANDING_BLOCK_INSTRUCTION];
|
|
170
|
+
return { text: lines.join("\n"), lines };
|
|
171
|
+
};
|
|
172
|
+
const pinnedCount = layered.filter((item) => item.band === "pinned").length;
|
|
173
|
+
let keep = layered.length;
|
|
174
|
+
let rendered = render(keep, false);
|
|
175
|
+
while (rendered.text.length > maxChars && keep > pinnedCount) {
|
|
176
|
+
keep -= 1;
|
|
177
|
+
rendered = render(keep, true);
|
|
178
|
+
}
|
|
179
|
+
if (rendered.text.length > maxChars) {
|
|
180
|
+
throw new StandingBlockBudgetError(maxChars);
|
|
181
|
+
}
|
|
182
|
+
const volatility = lintStandingBlockVolatility(rendered.text);
|
|
183
|
+
if (volatility.length > 0) {
|
|
184
|
+
throw new StandingBlockVolatilityError(volatility);
|
|
185
|
+
}
|
|
186
|
+
const kept = layered.slice(0, keep);
|
|
187
|
+
return {
|
|
188
|
+
text: rendered.text,
|
|
189
|
+
lines: rendered.lines,
|
|
190
|
+
ledger,
|
|
191
|
+
bandCounts: {
|
|
192
|
+
pinned: kept.filter((item) => item.band === "pinned").length,
|
|
193
|
+
fresh: kept.filter((item) => item.band === "fresh").length,
|
|
194
|
+
compressed: kept.filter((item) => item.band === "compressed").length,
|
|
195
|
+
dropped: layered.length - keep
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export {
|
|
201
|
+
DEFAULT_RECALL_STANDING_BLOCK,
|
|
202
|
+
DEFAULT_STANDING_BLOCK_FRESH_DAYS,
|
|
203
|
+
DEFAULT_STANDING_BLOCK_MAX_CHARS,
|
|
204
|
+
DEFAULT_STANDING_BLOCK_HOOK_CHARS,
|
|
205
|
+
STANDING_BLOCK_HEADER,
|
|
206
|
+
STANDING_BLOCK_INSTRUCTION,
|
|
207
|
+
STANDING_BLOCK_TRIMMED_MARKER,
|
|
208
|
+
standingHookLedgerKey,
|
|
209
|
+
lintStandingBlockVolatility,
|
|
210
|
+
StandingBlockError,
|
|
211
|
+
StandingBlockVolatilityError,
|
|
212
|
+
StandingBlockBudgetError,
|
|
213
|
+
parseRecallStandingBlock,
|
|
214
|
+
parseStandingBlockFreshDays,
|
|
215
|
+
parseStandingBlockMaxChars,
|
|
216
|
+
buildStandingMemoryBlock
|
|
217
|
+
};
|
|
218
|
+
//# sourceMappingURL=chunk-LI4APB6M.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/standing-memory-block.ts"],"sourcesContent":["/**\n * Prefix-cache-stable standing memory block (issue #2971, foundation slice).\n *\n * A standing block is a compact, byte-stable index over pinned/high-value\n * memories that a host injects as the FIRST part of the system prompt, so\n * the LLM prefix cache survives across turns. Measured motivation\n * (distill-kura, local OpenAI-compatible server): an identical 4k-token\n * prefix reprices at 0.14 s vs 0.68 s cold, and one changed word at the\n * front costs the whole cache. So the block contains no clock, no date,\n * and no counter — and the builder REFUSES, at build time, any block that\n * carries one instead of discovering slow turns weeks later.\n *\n * Determinism rules (byte-identical between rebuilds):\n * - line order is band rank, then id codepoint order — never wall clock,\n * never insertion order, never locale collation;\n * - `nowMs` classifies bands but never renders into the text;\n * - the trimmed-tail marker is a constant string (no count of dropped\n * lines, which would itself be a counter).\n *\n * Host contract for the full feature (later wiring slices):\n * - rebuild only when the underlying store changes (store version), not\n * per turn and not on a timer — band edges must not drift mid-session;\n * - inject the standing block BEFORE per-turn dynamic recall and any\n * ticking content (persona with a clock), see docs/config-reference.md;\n * - selection of which memories qualify (pinned/high-value) happens\n * before this builder — it only layers and renders what it is given;\n * - on build failure (volatility, budget) skip injection and log — the\n * dynamic recall surface must not go blank.\n *\n * Pure: no I/O, inputs never mutated, the returned ledger is a fresh Map.\n */\nimport { coerceBooleanLike, coerceNumber } from \"./connectors/coerce.js\";\n\nexport const DEFAULT_RECALL_STANDING_BLOCK = false;\nexport const DEFAULT_STANDING_BLOCK_FRESH_DAYS = 14;\nexport const DEFAULT_STANDING_BLOCK_MAX_CHARS = 2048;\n/** ~24-token recognition hook at the repo's 4-chars-per-token Latin headroom. */\nexport const DEFAULT_STANDING_BLOCK_HOOK_CHARS = 96;\n\nexport const STANDING_BLOCK_HEADER = \"## Standing Memory (Remnic)\";\nexport const STANDING_BLOCK_INSTRUCTION =\n \"Use this standing index for orientation. It changes only when the memory store changes.\";\nexport const STANDING_BLOCK_TRIMMED_MARKER = \"- ...(older lines trimmed)\";\n\nexport type StandingBand = \"pinned\" | \"fresh\" | \"compressed\";\n\nexport interface StandingMemoryEntry {\n /** Stable document id. Total order within a band is id codepoint order. */\n id: string;\n /** The one-line description to stand in the index. */\n description: string;\n /** Pinned entries render in full, first band, never trimmed away. */\n pinned?: boolean;\n /** ISO timestamp of the last content change; drives the fresh band. */\n lastChangedAt?: string;\n}\n\n/** Cache of compressed hooks keyed on `${description}\\u0000${hookMaxChars}`. */\nexport type StandingHookLedger = ReadonlyMap<string, string>;\n\nexport function standingHookLedgerKey(description: string, hookMaxChars: number): string {\n return `${description}\\u0000${hookMaxChars}`;\n}\n\nexport interface StandingBlockBandCounts {\n pinned: number;\n fresh: number;\n compressed: number;\n dropped: number;\n}\n\nexport interface StandingMemoryBlock {\n /** Full block text (header + lines + instruction). Empty string for no entries. */\n text: string;\n /** Lines without a trailing newline; empty for no entries. */\n lines: string[];\n /** Ledger including hooks generated this build. Fresh Map; input never mutated. */\n ledger: StandingHookLedger;\n bandCounts: StandingBlockBandCounts;\n}\n\nexport type StandingVolatilityKind = \"iso-date\" | \"clock-time\" | \"relative-date\" | \"counter\";\n\nexport interface StandingVolatilityMatch {\n kind: StandingVolatilityKind;\n token: string;\n}\n\nconst ISO_DATE_RE = /\\b\\d{4}-\\d{2}-\\d{2}(?:[T ]\\d{2}:\\d{2})?/;\nconst CLOCK_TIME_RE = /\\b\\d{1,2}:\\d{2}(?::\\d{2})?\\b/;\nconst RELATIVE_DATE_RE =\n /\\b(?:today|tonight|tomorrow|yesterday|this\\s+(?:morning|afternoon|evening|week|month|year))\\b/i;\nconst COUNTER_RE = /\\b(?:count|total|entries|memories|items)\\s*[:=]\\s*\\d+\\b/i;\n\n/**\n * Build-time volatility lint. Returns every cache-busting token class found:\n * ISO dates/datetimes, clock times, relative date words, and index counters.\n * Refusal is the designed behavior (a memory surface skips the block and\n * logs) — a silently repricing prefix is the failure this catches.\n */\nexport function lintStandingBlockVolatility(text: string): StandingVolatilityMatch[] {\n const matches: StandingVolatilityMatch[] = [];\n for (const [kind, re] of [\n [\"iso-date\", ISO_DATE_RE],\n [\"clock-time\", CLOCK_TIME_RE],\n [\"relative-date\", RELATIVE_DATE_RE],\n [\"counter\", COUNTER_RE],\n ] as const) {\n const hit = text.match(re);\n if (hit) matches.push({ kind, token: hit[0] });\n }\n return matches;\n}\n\nexport class StandingBlockError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StandingBlockError\";\n }\n}\n\nexport class StandingBlockVolatilityError extends StandingBlockError {\n readonly matches: readonly StandingVolatilityMatch[];\n constructor(matches: readonly StandingVolatilityMatch[]) {\n super(\n `standing memory block refused: volatile content busts the prefix cache (${matches\n .map((m) => `${m.kind}:${JSON.stringify(m.token)}`)\n .join(\", \")})`,\n );\n this.name = \"StandingBlockVolatilityError\";\n this.matches = matches;\n }\n}\n\nexport class StandingBlockBudgetError extends StandingBlockError {\n constructor(maxChars: number) {\n super(\n `standing memory block does not fit: pinned lines alone exceed maxChars=${maxChars}; raise standingBlockMaxChars or unpin entries`,\n );\n this.name = \"StandingBlockBudgetError\";\n }\n}\n\nexport function parseRecallStandingBlock(raw: unknown): boolean {\n return coerceBooleanLike(raw, \"recallStandingBlock\") === true;\n}\n\nexport function parseStandingBlockFreshDays(raw: unknown): number {\n if (raw === undefined || raw === null) return DEFAULT_STANDING_BLOCK_FRESH_DAYS;\n const n = coerceNumber(raw, \"standingBlockFreshDays\");\n if (n === undefined || !Number.isFinite(n) || n < 0) {\n throw new Error(`Invalid standingBlockFreshDays: expected a number >= 0, got ${JSON.stringify(raw)}`);\n }\n return n;\n}\n\nexport function parseStandingBlockMaxChars(raw: unknown): number {\n if (raw === undefined || raw === null) return DEFAULT_STANDING_BLOCK_MAX_CHARS;\n const n = coerceNumber(raw, \"standingBlockMaxChars\");\n if (n === undefined || !Number.isFinite(n) || n < 1) {\n throw new Error(`Invalid standingBlockMaxChars: expected an integer >= 1, got ${JSON.stringify(raw)}`);\n }\n return Math.floor(n);\n}\n\n/**\n * Mechanical hook: deterministic first-cut of the description to the char\n * budget at a word boundary. This is also the fallback when no model is\n * reachable for compression — the standing surface never goes blank because\n * a model is down. Model-generated hooks arrive pre-seeded in the ledger.\n */\nfunction mechanicalHook(description: string, budget: number): string {\n if (description.length <= budget) return description;\n const cut = description.slice(0, budget);\n const lastSpace = cut.lastIndexOf(\" \");\n const base = lastSpace > Math.floor(budget * 0.6) ? cut.slice(0, lastSpace) : cut;\n return `${base.replace(/[\\s,;:]+$/, \"\")}...`;\n}\n\ninterface LayeredEntry {\n id: string;\n band: StandingBand;\n line: string;\n}\n\nconst BAND_RANK: Record<StandingBand, number> = { pinned: 0, fresh: 1, compressed: 2 };\n\nfunction validateEntries(entries: readonly StandingMemoryEntry[]): Map<string, StandingMemoryEntry> {\n if (!Array.isArray(entries)) {\n throw new StandingBlockError(\"standing memory block entries must be an array\");\n }\n const seen = new Set<string>();\n const validated = new Map<string, StandingMemoryEntry>();\n for (const entry of entries) {\n if (typeof entry !== \"object\" || entry === null) {\n throw new StandingBlockError(`standing memory block entry must be an object, got ${JSON.stringify(entry)}`);\n }\n const id = typeof entry.id === \"string\" ? entry.id.trim() : \"\";\n const description = typeof entry.description === \"string\" ? entry.description.trim() : \"\";\n if (id.length === 0) {\n throw new StandingBlockError(\"standing memory block entry requires a non-empty id\");\n }\n if (description.length === 0) {\n throw new StandingBlockError(`standing memory block entry ${id} requires a non-empty description`);\n }\n if (seen.has(id)) {\n throw new StandingBlockError(`standing memory block entry ids must be unique; duplicate: ${id}`);\n }\n if (entry.lastChangedAt !== undefined && Number.isNaN(Date.parse(entry.lastChangedAt))) {\n throw new StandingBlockError(\n `standing memory block entry ${id} has an unparseable lastChangedAt: ${JSON.stringify(entry.lastChangedAt)}`,\n );\n }\n seen.add(id);\n validated.set(id, { ...entry, id, description });\n }\n return validated;\n}\n\nexport interface StandingMemoryBlockInput {\n entries: readonly StandingMemoryEntry[];\n /**\n * Evaluation instant for the fresh band. Hosts must key rebuilds on the\n * store version, not on this clock, or band edges drift per turn.\n */\n nowMs: number;\n freshDays?: number;\n maxChars?: number;\n hookMaxChars?: number;\n ledger?: StandingHookLedger;\n}\n\nexport function buildStandingMemoryBlock(input: StandingMemoryBlockInput): StandingMemoryBlock {\n const freshDays = input.freshDays ?? DEFAULT_STANDING_BLOCK_FRESH_DAYS;\n const maxChars = input.maxChars ?? DEFAULT_STANDING_BLOCK_MAX_CHARS;\n const hookMaxChars = input.hookMaxChars ?? DEFAULT_STANDING_BLOCK_HOOK_CHARS;\n if (!Number.isFinite(input.nowMs)) {\n throw new StandingBlockError(\"standing memory block requires a finite nowMs\");\n }\n if (!(freshDays >= 0) || !Number.isFinite(freshDays)) {\n throw new StandingBlockError(\"standing memory block requires freshDays >= 0\");\n }\n if (!(maxChars >= 1) || !Number.isFinite(maxChars)) {\n throw new StandingBlockError(\"standing memory block requires maxChars >= 1\");\n }\n if (!(hookMaxChars >= 1) || !Number.isFinite(hookMaxChars)) {\n throw new StandingBlockError(\"standing memory block requires hookMaxChars >= 1\");\n }\n\n const entries = validateEntries(input.entries);\n const ledger = new Map(input.ledger ?? []);\n if (entries.size === 0) {\n return {\n text: \"\",\n lines: [],\n ledger,\n bandCounts: { pinned: 0, fresh: 0, compressed: 0, dropped: 0 },\n };\n }\n\n const freshCutoff = input.nowMs - freshDays * 86_400_000;\n const layered: LayeredEntry[] = [];\n for (const entry of entries.values()) {\n let band: StandingBand;\n if (entry.pinned === true) {\n band = \"pinned\";\n } else if (\n typeof entry.lastChangedAt === \"string\" &&\n Date.parse(entry.lastChangedAt) >= freshCutoff &&\n Date.parse(entry.lastChangedAt) <= input.nowMs\n ) {\n band = \"fresh\";\n } else {\n band = \"compressed\";\n }\n if (band !== \"compressed\") {\n layered.push({ id: entry.id, band, line: `- ${entry.description}` });\n continue;\n }\n const key = standingHookLedgerKey(entry.description, hookMaxChars);\n const cached = ledger.get(key);\n const hook = cached ?? mechanicalHook(entry.description, hookMaxChars);\n if (cached === undefined) ledger.set(key, hook);\n layered.push({ id: entry.id, band, line: `- ${hook}` });\n }\n\n // Band rank, then id codepoint order. Never localeCompare: collation is\n // ICU-dependent and this text must be byte-identical across rebuilds.\n layered.sort(\n (a, b) =>\n BAND_RANK[a.band] - BAND_RANK[b.band] || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0),\n );\n\n const render = (keep: number, withMarker: boolean): { text: string; lines: string[] } => {\n const body = layered.slice(0, keep).map((item) => item.line);\n if (withMarker) body.push(STANDING_BLOCK_TRIMMED_MARKER);\n const lines = [STANDING_BLOCK_HEADER, \"\", ...body, \"\", STANDING_BLOCK_INSTRUCTION];\n return { text: lines.join(\"\\n\"), lines };\n };\n\n const pinnedCount = layered.filter((item) => item.band === \"pinned\").length;\n let keep = layered.length;\n let rendered = render(keep, false);\n // Mechanical trim: drop from the tail. The sort puts compressed lines\n // last, so oldest-band hooks go first and pinned lines are never reached.\n while (rendered.text.length > maxChars && keep > pinnedCount) {\n keep -= 1;\n rendered = render(keep, true);\n }\n if (rendered.text.length > maxChars) {\n throw new StandingBlockBudgetError(maxChars);\n }\n\n const volatility = lintStandingBlockVolatility(rendered.text);\n if (volatility.length > 0) {\n throw new StandingBlockVolatilityError(volatility);\n }\n\n const kept = layered.slice(0, keep);\n return {\n text: rendered.text,\n lines: rendered.lines,\n ledger,\n bandCounts: {\n pinned: kept.filter((item) => item.band === \"pinned\").length,\n fresh: kept.filter((item) => item.band === \"fresh\").length,\n compressed: kept.filter((item) => item.band === \"compressed\").length,\n dropped: layered.length - keep,\n },\n };\n}\n"],"mappings":"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","names":["keep"]}
|