@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
rebuildMemoryProjection
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BEXFNGQ3.js";
|
|
4
4
|
|
|
5
5
|
// src/convergence-refresh.ts
|
|
6
6
|
async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, getStorage, searchEnabled) {
|
|
@@ -32,4 +32,4 @@ async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, get
|
|
|
32
32
|
export {
|
|
33
33
|
refreshConvergedNamespaces
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-QRDSXR3V.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveCorpusNamespaceRoots
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XMIAU4CO.js";
|
|
4
4
|
import {
|
|
5
5
|
capabilityAllowsNamespace
|
|
6
6
|
} from "./chunk-MZWSOLMT.js";
|
|
@@ -200,4 +200,4 @@ async function readAggregateExtractionWatermark(options) {
|
|
|
200
200
|
export {
|
|
201
201
|
readAggregateExtractionWatermark
|
|
202
202
|
};
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
203
|
+
//# sourceMappingURL=chunk-QUVWFZOU.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-7T4TOGMS.js";
|
|
4
4
|
import {
|
|
5
5
|
defineOperation
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-5P2KNFJZ.js";
|
|
7
7
|
|
|
8
8
|
// src/external-wiki-access.ts
|
|
9
9
|
import { z } from "zod";
|
|
@@ -26,4 +26,4 @@ var externalWikiSearchOperation = defineOperation({
|
|
|
26
26
|
export {
|
|
27
27
|
externalWikiSearchOperation
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-R7FXPG4T.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// src/deep-recall-renderer.ts
|
|
2
|
+
function renderDeepRecallResult(result) {
|
|
3
|
+
if (!result.ok) {
|
|
4
|
+
return [`# Deep recall`, ``, `- error: ${result.error ?? "unknown"}`, ``].join("\n");
|
|
5
|
+
}
|
|
6
|
+
const lines = ["# Deep recall", ""];
|
|
7
|
+
if (result.entries.length === 0) {
|
|
8
|
+
lines.push("No memories retrieved.", "");
|
|
9
|
+
} else {
|
|
10
|
+
lines.push("## Memories", "");
|
|
11
|
+
for (const [index, entry] of result.entries.entries()) {
|
|
12
|
+
const via = entry.viaAnchor ? ` via anchor "${entry.viaAnchor}"` : "";
|
|
13
|
+
lines.push(
|
|
14
|
+
`${index + 1}. **${entry.memoryId}** (score ${entry.score.toFixed(3)}, origin ${entry.origin}${via})`
|
|
15
|
+
);
|
|
16
|
+
lines.push(` ${entry.content.replace(/\s+/g, " ").trim().slice(0, 400)}`);
|
|
17
|
+
}
|
|
18
|
+
lines.push("");
|
|
19
|
+
}
|
|
20
|
+
lines.push("## Trace", "");
|
|
21
|
+
if (result.trace.length === 0) {
|
|
22
|
+
lines.push("(empty)");
|
|
23
|
+
} else {
|
|
24
|
+
for (const step of result.trace) {
|
|
25
|
+
lines.push(
|
|
26
|
+
`- step ${step.step}: ${step.action} \u2014 ${step.detail} (workingSet=${step.workingSetSize}, frontier=${step.frontierSize}, ${step.durationMs}ms)`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
lines.push("");
|
|
31
|
+
return lines.join("\n");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
renderDeepRecallResult
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=chunk-RF2SMMPP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/deep-recall-renderer.ts"],"sourcesContent":["/**\n * Shared markdown renderer for deep recall (issue #2332).\n *\n * Rule 22 (AGENTS.md): never fork formatting — CLI text output, MCP text\n * output, and any later surface all render through this one module.\n * Deterministic: entries in result order, trace in step order.\n */\n\nimport type { DeepRecallResult } from \"./deep-recall.js\";\n\nexport function renderDeepRecallResult(result: DeepRecallResult): string {\n if (!result.ok) {\n return [`# Deep recall`, ``, `- error: ${result.error ?? \"unknown\"}`, ``].join(\"\\n\");\n }\n const lines: string[] = [\"# Deep recall\", \"\"];\n if (result.entries.length === 0) {\n lines.push(\"No memories retrieved.\", \"\");\n } else {\n lines.push(\"## Memories\", \"\");\n for (const [index, entry] of result.entries.entries()) {\n const via = entry.viaAnchor ? ` via anchor \"${entry.viaAnchor}\"` : \"\";\n lines.push(\n `${index + 1}. **${entry.memoryId}** (score ${entry.score.toFixed(3)}, origin ${entry.origin}${via})`,\n );\n lines.push(` ${entry.content.replace(/\\s+/g, \" \").trim().slice(0, 400)}`);\n }\n lines.push(\"\");\n }\n lines.push(\"## Trace\", \"\");\n if (result.trace.length === 0) {\n lines.push(\"(empty)\");\n } else {\n for (const step of result.trace) {\n lines.push(\n `- step ${step.step}: ${step.action} — ${step.detail} (workingSet=${step.workingSetSize}, frontier=${step.frontierSize}, ${step.durationMs}ms)`,\n );\n }\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n}\n"],"mappings":";AAUO,SAAS,uBAAuB,QAAkC;AACvE,MAAI,CAAC,OAAO,IAAI;AACd,WAAO,CAAC,iBAAiB,IAAI,YAAY,OAAO,SAAS,SAAS,IAAI,EAAE,EAAE,KAAK,IAAI;AAAA,EACrF;AACA,QAAM,QAAkB,CAAC,iBAAiB,EAAE;AAC5C,MAAI,OAAO,QAAQ,WAAW,GAAG;AAC/B,UAAM,KAAK,0BAA0B,EAAE;AAAA,EACzC,OAAO;AACL,UAAM,KAAK,eAAe,EAAE;AAC5B,eAAW,CAAC,OAAO,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACrD,YAAM,MAAM,MAAM,YAAY,gBAAgB,MAAM,SAAS,MAAM;AACnE,YAAM;AAAA,QACJ,GAAG,QAAQ,CAAC,OAAO,MAAM,QAAQ,aAAa,MAAM,MAAM,QAAQ,CAAC,CAAC,YAAY,MAAM,MAAM,GAAG,GAAG;AAAA,MACpG;AACA,YAAM,KAAK,MAAM,MAAM,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE;AAAA,IAC5E;AACA,UAAM,KAAK,EAAE;AAAA,EACf;AACA,QAAM,KAAK,YAAY,EAAE;AACzB,MAAI,OAAO,MAAM,WAAW,GAAG;AAC7B,UAAM,KAAK,SAAS;AAAA,EACtB,OAAO;AACL,eAAW,QAAQ,OAAO,OAAO;AAC/B,YAAM;AAAA,QACJ,UAAU,KAAK,IAAI,KAAK,KAAK,MAAM,WAAM,KAAK,MAAM,gBAAgB,KAAK,cAAc,cAAc,KAAK,YAAY,KAAK,KAAK,UAAU;AAAA,MAC5I;AAAA,IACF;AAAA,EACF;AACA,QAAM,KAAK,EAAE;AACb,SAAO,MAAM,KAAK,IAAI;AACxB;","names":[]}
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "./chunk-EEOUMG3J.js";
|
|
12
12
|
import {
|
|
13
13
|
iterateOfflineSyncSnapshotFileRecords
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-XJJYSX6F.js";
|
|
15
15
|
|
|
16
16
|
// src/access-offline-manifest.ts
|
|
17
17
|
import * as nodePath from "path";
|
|
@@ -49,4 +49,4 @@ async function createOfflineSyncManifestStream(orchestrator, namespace, userExcl
|
|
|
49
49
|
export {
|
|
50
50
|
createOfflineSyncManifestStream
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-RJ57OOCD.js.map
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import {
|
|
2
|
+
rankDeepRecallFrontier
|
|
3
|
+
} from "./chunk-HRATODNO.js";
|
|
4
|
+
import {
|
|
5
|
+
validateRefineRewrite
|
|
6
|
+
} from "./chunk-WTWQA7BB.js";
|
|
7
|
+
import {
|
|
8
|
+
selectExpandNodeIds
|
|
9
|
+
} from "./chunk-VZIAVM72.js";
|
|
10
|
+
import {
|
|
11
|
+
extractJsonCandidates,
|
|
12
|
+
stripCodeFences
|
|
13
|
+
} from "./chunk-RGMVMVMF.js";
|
|
14
|
+
import {
|
|
15
|
+
compareDeterministicStrings
|
|
16
|
+
} from "./chunk-G73MCJKL.js";
|
|
17
|
+
|
|
18
|
+
// src/deep-recall.ts
|
|
19
|
+
import { z } from "zod";
|
|
20
|
+
var PolicyActionSchema = z.object({
|
|
21
|
+
action: z.enum(["REFINE", "EXPAND", "STOP"]),
|
|
22
|
+
refinedQuery: z.string().optional().nullable(),
|
|
23
|
+
expandNodeIds: z.array(z.string()).optional().nullable(),
|
|
24
|
+
reason: z.string()
|
|
25
|
+
});
|
|
26
|
+
var MAX_SOURCE_MEMORY_IDS_PER_NODE = 5;
|
|
27
|
+
var EXPAND_SCORE_INHERITANCE = 0.8;
|
|
28
|
+
var STATE_WORKING_SET_ENTRIES = 12;
|
|
29
|
+
var STATE_ENTRY_SNIPPET_CHARS = 200;
|
|
30
|
+
var DeepRecallDeadlineExceeded = class extends Error {
|
|
31
|
+
constructor() {
|
|
32
|
+
super("deep recall total timeout reached");
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
async function withDeadline(work, deadlineMs, now) {
|
|
36
|
+
if (!Number.isFinite(deadlineMs)) return await work;
|
|
37
|
+
const remaining = deadlineMs - now();
|
|
38
|
+
if (remaining <= 0) throw new DeepRecallDeadlineExceeded();
|
|
39
|
+
const expiry = Promise.withResolvers();
|
|
40
|
+
const timer = setTimeout(() => expiry.reject(new DeepRecallDeadlineExceeded()), remaining);
|
|
41
|
+
try {
|
|
42
|
+
return await Promise.race([work, expiry.promise]);
|
|
43
|
+
} finally {
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function parsePolicyOutput(raw) {
|
|
48
|
+
if (raw === null) return null;
|
|
49
|
+
const candidates = [stripCodeFences(raw), ...extractJsonCandidates(raw)];
|
|
50
|
+
for (const candidate of candidates) {
|
|
51
|
+
if (candidate.trim().length === 0) continue;
|
|
52
|
+
try {
|
|
53
|
+
const parsed = PolicyActionSchema.safeParse(JSON.parse(candidate));
|
|
54
|
+
if (parsed.success) return parsed.data;
|
|
55
|
+
} catch {
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
function mergeIntoWorkingSet(workingSet, hits, origin, contentFor) {
|
|
61
|
+
for (const hit of hits) {
|
|
62
|
+
if (typeof hit.memoryId !== "string" || hit.memoryId.length === 0) continue;
|
|
63
|
+
if (typeof hit.score !== "number" || !Number.isFinite(hit.score)) continue;
|
|
64
|
+
const existing = workingSet.get(hit.memoryId);
|
|
65
|
+
if (existing && existing.score >= hit.score) continue;
|
|
66
|
+
workingSet.set(hit.memoryId, {
|
|
67
|
+
memoryId: hit.memoryId,
|
|
68
|
+
content: contentFor(hit.memoryId),
|
|
69
|
+
score: hit.score,
|
|
70
|
+
origin: existing ? existing.origin : origin,
|
|
71
|
+
...existing?.viaAnchor ? { viaAnchor: existing.viaAnchor } : {}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function buildFrontierIndex(graph) {
|
|
76
|
+
const memoryIdToNodeIds = /* @__PURE__ */ new Map();
|
|
77
|
+
const nodeIdToNode = /* @__PURE__ */ new Map();
|
|
78
|
+
for (const node of graph.nodes) {
|
|
79
|
+
nodeIdToNode.set(node.nodeId, node);
|
|
80
|
+
for (const memoryId of node.sourceMemoryIds ?? []) {
|
|
81
|
+
const list = memoryIdToNodeIds.get(memoryId) ?? [];
|
|
82
|
+
list.push(node.nodeId);
|
|
83
|
+
memoryIdToNodeIds.set(memoryId, list);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const nodeIdToAnchorIds = /* @__PURE__ */ new Map();
|
|
87
|
+
const anchorIdToAnchor = /* @__PURE__ */ new Map();
|
|
88
|
+
for (const anchor of graph.anchors) {
|
|
89
|
+
anchorIdToAnchor.set(anchor.anchorId, anchor);
|
|
90
|
+
for (const nodeRef of anchor.nodeRefs) {
|
|
91
|
+
const list = nodeIdToAnchorIds.get(nodeRef) ?? [];
|
|
92
|
+
list.push(anchor.anchorId);
|
|
93
|
+
nodeIdToAnchorIds.set(nodeRef, list);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { memoryIdToNodeIds, nodeIdToNode, nodeIdToAnchorIds, anchorIdToAnchor };
|
|
97
|
+
}
|
|
98
|
+
function nodeAddsNothing(node, workingSet) {
|
|
99
|
+
return (node.sourceMemoryIds ?? []).slice(0, MAX_SOURCE_MEMORY_IDS_PER_NODE).every((memoryId) => workingSet.has(memoryId));
|
|
100
|
+
}
|
|
101
|
+
function refreshFrontier(workingSet, graph, expandedNodeIds) {
|
|
102
|
+
const index = graph.index;
|
|
103
|
+
const byNodeId = /* @__PURE__ */ new Map();
|
|
104
|
+
for (const [memoryId, entry] of workingSet) {
|
|
105
|
+
for (const nodeId of index.memoryIdToNodeIds.get(memoryId) ?? []) {
|
|
106
|
+
for (const anchorId of index.nodeIdToAnchorIds.get(nodeId) ?? []) {
|
|
107
|
+
const anchor = index.anchorIdToAnchor.get(anchorId);
|
|
108
|
+
if (!anchor) continue;
|
|
109
|
+
for (const otherNodeRef of anchor.nodeRefs) {
|
|
110
|
+
if (otherNodeRef === nodeId) continue;
|
|
111
|
+
if (expandedNodeIds.has(otherNodeRef)) continue;
|
|
112
|
+
const otherNode = index.nodeIdToNode.get(otherNodeRef);
|
|
113
|
+
if (!otherNode || nodeAddsNothing(otherNode, workingSet)) continue;
|
|
114
|
+
const current = byNodeId.get(otherNodeRef);
|
|
115
|
+
if (current === void 0 || entry.score > current.parentScore) {
|
|
116
|
+
byNodeId.set(otherNodeRef, {
|
|
117
|
+
nodeId: otherNodeRef,
|
|
118
|
+
sharedAnchorCount: (current?.sharedAnchorCount ?? 0) + 1,
|
|
119
|
+
parentMemoryId: memoryId,
|
|
120
|
+
parentScore: entry.score,
|
|
121
|
+
anchorValue: anchor.anchorValue
|
|
122
|
+
});
|
|
123
|
+
} else {
|
|
124
|
+
current.sharedAnchorCount += 1;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const ranked = rankDeepRecallFrontier([...byNodeId.values()]);
|
|
131
|
+
return ranked.flatMap((rankedCandidate) => {
|
|
132
|
+
const candidate = byNodeId.get(rankedCandidate.nodeId);
|
|
133
|
+
const node = index.nodeIdToNode.get(rankedCandidate.nodeId);
|
|
134
|
+
if (!candidate || !node) return [];
|
|
135
|
+
return [
|
|
136
|
+
{
|
|
137
|
+
nodeId: candidate.nodeId,
|
|
138
|
+
title: node.title,
|
|
139
|
+
reason: `shares anchor "${candidate.anchorValue}" with ${candidate.parentMemoryId}`,
|
|
140
|
+
sharedAnchorCount: rankedCandidate.sharedAnchorCount,
|
|
141
|
+
parentMemoryId: candidate.parentMemoryId,
|
|
142
|
+
parentScore: candidate.parentScore,
|
|
143
|
+
anchorValue: candidate.anchorValue
|
|
144
|
+
}
|
|
145
|
+
];
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function renderStatePrompt(input) {
|
|
149
|
+
const lines = [
|
|
150
|
+
"You are guiding a multi-hop memory retrieval loop. Pick exactly one action.",
|
|
151
|
+
"REFINE when the retrieved memories look misaligned with the question (return a rewritten query).",
|
|
152
|
+
"EXPAND to follow named frontier nodes that plausibly hold the answer (return their nodeIds).",
|
|
153
|
+
"STOP when the working set is sufficient to answer.",
|
|
154
|
+
"",
|
|
155
|
+
`QUESTION: ${input.query}`,
|
|
156
|
+
`STEPS REMAINING: ${input.stepsRemaining}`,
|
|
157
|
+
"",
|
|
158
|
+
"WORKING SET (retrieved memories):"
|
|
159
|
+
];
|
|
160
|
+
const entries = [...input.workingSet.values()].sort((a, b) => b.score - a.score || compareDeterministicStrings(a.memoryId, b.memoryId)).slice(0, STATE_WORKING_SET_ENTRIES);
|
|
161
|
+
if (entries.length === 0) lines.push("(empty)");
|
|
162
|
+
for (const entry of entries) {
|
|
163
|
+
const snippet = entry.content.slice(0, STATE_ENTRY_SNIPPET_CHARS).replace(/\s+/g, " ");
|
|
164
|
+
lines.push(`- ${entry.memoryId} (score=${entry.score.toFixed(3)}, origin=${entry.origin}): ${snippet}`);
|
|
165
|
+
}
|
|
166
|
+
lines.push("", "FRONTIER (anchor-linked candidates not yet retrieved):");
|
|
167
|
+
if (input.frontier.length === 0) lines.push("(empty)");
|
|
168
|
+
for (const item of input.frontier) {
|
|
169
|
+
lines.push(`- ${item.nodeId}: ${item.title} \u2014 ${item.reason}`);
|
|
170
|
+
}
|
|
171
|
+
lines.push(
|
|
172
|
+
"",
|
|
173
|
+
'Respond with JSON only: {"action":"REFINE","refinedQuery":"...","reason":"..."}',
|
|
174
|
+
'or {"action":"EXPAND","expandNodeIds":["..."],"reason":"..."}',
|
|
175
|
+
'or {"action":"STOP","reason":"..."}'
|
|
176
|
+
);
|
|
177
|
+
return lines.join("\n");
|
|
178
|
+
}
|
|
179
|
+
function finalRank(entries) {
|
|
180
|
+
return [...entries].sort(
|
|
181
|
+
(a, b) => b.score - a.score || compareDeterministicStrings(a.memoryId, b.memoryId)
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
async function runBudgetedDeepRecall(deps, query) {
|
|
185
|
+
const cfg = deps.config;
|
|
186
|
+
const now = deps.nowMs ?? Date.now;
|
|
187
|
+
const startedMs = now();
|
|
188
|
+
const deadlineMs = cfg.totalTimeoutMs > 0 ? startedMs + cfg.totalTimeoutMs : Number.POSITIVE_INFINITY;
|
|
189
|
+
const trace = [];
|
|
190
|
+
const contentCache = /* @__PURE__ */ new Map();
|
|
191
|
+
const contentFor = (memoryId) => contentCache.get(memoryId) ?? "";
|
|
192
|
+
const workingSet = /* @__PURE__ */ new Map();
|
|
193
|
+
let graph = { index: buildFrontierIndex({ nodes: [], anchors: [] }) };
|
|
194
|
+
const expandedNodeIds = /* @__PURE__ */ new Set();
|
|
195
|
+
const hydrateOrDrop = async (memoryId) => {
|
|
196
|
+
const memory = await withDeadline(deps.loadMemory(memoryId), deadlineMs, now);
|
|
197
|
+
if (!memory || !memory.active) {
|
|
198
|
+
workingSet.delete(memoryId);
|
|
199
|
+
contentCache.delete(memoryId);
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
contentCache.set(memoryId, memory.content);
|
|
203
|
+
const entry = workingSet.get(memoryId);
|
|
204
|
+
if (entry) entry.content = memory.content;
|
|
205
|
+
};
|
|
206
|
+
let exhaustedDetail = null;
|
|
207
|
+
try {
|
|
208
|
+
const seedHits = await withDeadline(deps.searchSeed(query, cfg.maxResults), deadlineMs, now);
|
|
209
|
+
mergeIntoWorkingSet(workingSet, seedHits, "seed", contentFor);
|
|
210
|
+
} catch (err) {
|
|
211
|
+
if (!(err instanceof DeepRecallDeadlineExceeded)) {
|
|
212
|
+
return { ok: false, error: "backend_unavailable", entries: [], trace: [] };
|
|
213
|
+
}
|
|
214
|
+
exhaustedDetail = "total timeout reached during seed search";
|
|
215
|
+
}
|
|
216
|
+
if (exhaustedDetail === null) {
|
|
217
|
+
try {
|
|
218
|
+
graph = { index: buildFrontierIndex(await withDeadline(deps.loadGraph(), deadlineMs, now)) };
|
|
219
|
+
for (const memoryId of [...workingSet.keys()]) {
|
|
220
|
+
await hydrateOrDrop(memoryId);
|
|
221
|
+
}
|
|
222
|
+
} catch (err) {
|
|
223
|
+
if (!(err instanceof DeepRecallDeadlineExceeded)) throw err;
|
|
224
|
+
exhaustedDetail = "total timeout reached loading the graph or hydrating seeds";
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
let frontier = refreshFrontier(workingSet, graph, expandedNodeIds);
|
|
228
|
+
let currentQuery = query;
|
|
229
|
+
let refinesUsed = 0;
|
|
230
|
+
const pushStep = (step2, action, detail, stepStartMs) => {
|
|
231
|
+
trace.push({
|
|
232
|
+
step: step2,
|
|
233
|
+
action,
|
|
234
|
+
detail,
|
|
235
|
+
workingSetSize: workingSet.size,
|
|
236
|
+
frontierSize: frontier.length,
|
|
237
|
+
durationMs: Math.max(0, now() - stepStartMs)
|
|
238
|
+
});
|
|
239
|
+
};
|
|
240
|
+
if (exhaustedDetail !== null) {
|
|
241
|
+
pushStep(0, "BUDGET_EXHAUSTED", exhaustedDetail, startedMs);
|
|
242
|
+
} else if (cfg.maxSteps <= 0) {
|
|
243
|
+
pushStep(0, "STOP", "policy loop disabled (maxSteps=0)", startedMs);
|
|
244
|
+
}
|
|
245
|
+
let step = 0;
|
|
246
|
+
try {
|
|
247
|
+
while (exhaustedDetail === null && cfg.maxSteps > 0 && step < cfg.maxSteps) {
|
|
248
|
+
const stepStartMs = now();
|
|
249
|
+
if (now() >= deadlineMs) {
|
|
250
|
+
pushStep(step, "BUDGET_EXHAUSTED", "total timeout reached before policy call", stepStartMs);
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
const stepBudgetMs = cfg.stepTimeoutMs > 0 ? cfg.stepTimeoutMs : Number.POSITIVE_INFINITY;
|
|
254
|
+
const effectiveBudgetMs = Math.min(stepBudgetMs, deadlineMs - now());
|
|
255
|
+
const timeoutMs = Number.isFinite(effectiveBudgetMs) ? Math.max(1, effectiveBudgetMs) : 0;
|
|
256
|
+
const raw = await withDeadline(
|
|
257
|
+
deps.callPolicy(
|
|
258
|
+
renderStatePrompt({ query: currentQuery, workingSet, frontier, stepsRemaining: cfg.maxSteps - step }),
|
|
259
|
+
timeoutMs
|
|
260
|
+
),
|
|
261
|
+
deadlineMs,
|
|
262
|
+
now
|
|
263
|
+
);
|
|
264
|
+
const parsed = parsePolicyOutput(raw);
|
|
265
|
+
if (parsed === null) {
|
|
266
|
+
pushStep(step, "STOP", "invalid_policy_output", stepStartMs);
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
if (parsed.action === "STOP") {
|
|
270
|
+
pushStep(step, "STOP", parsed.reason || "policy stop", stepStartMs);
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
if (parsed.action === "REFINE") {
|
|
274
|
+
const rewrite = validateRefineRewrite({
|
|
275
|
+
currentQuery,
|
|
276
|
+
refinedQuery: parsed.refinedQuery ?? null,
|
|
277
|
+
refinesUsed
|
|
278
|
+
});
|
|
279
|
+
if (!rewrite.ok) {
|
|
280
|
+
pushStep(step, "STOP", rewrite.reason, stepStartMs);
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
currentQuery = rewrite.refinedQuery;
|
|
284
|
+
refinesUsed += 1;
|
|
285
|
+
try {
|
|
286
|
+
const refinedHits = await withDeadline(deps.searchSeed(currentQuery, cfg.maxResults), deadlineMs, now);
|
|
287
|
+
mergeIntoWorkingSet(workingSet, refinedHits, "refine", contentFor);
|
|
288
|
+
for (const hit of refinedHits) {
|
|
289
|
+
if (workingSet.has(hit.memoryId) && !contentCache.has(hit.memoryId)) {
|
|
290
|
+
await hydrateOrDrop(hit.memoryId);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
} catch (err) {
|
|
294
|
+
if (err instanceof DeepRecallDeadlineExceeded) throw err;
|
|
295
|
+
}
|
|
296
|
+
frontier = refreshFrontier(workingSet, graph, expandedNodeIds);
|
|
297
|
+
pushStep(step, "REFINE", currentQuery, stepStartMs);
|
|
298
|
+
step += 1;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const selection = cfg.maxExpandPerStep <= 0 ? { ok: true, nodeIds: [], truncated: false } : selectExpandNodeIds({
|
|
302
|
+
frontierIds: frontier.map((item) => item.nodeId),
|
|
303
|
+
requestedIds: parsed.expandNodeIds ?? [],
|
|
304
|
+
maxExpandPerStep: cfg.maxExpandPerStep
|
|
305
|
+
});
|
|
306
|
+
if (!selection.ok) {
|
|
307
|
+
pushStep(step, "STOP", "invalid_policy_output", stepStartMs);
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
const chosen = new Map(frontier.map((item) => [item.nodeId, item]));
|
|
311
|
+
for (const nodeId of selection.nodeIds) {
|
|
312
|
+
const item = chosen.get(nodeId);
|
|
313
|
+
const node = graph.index.nodeIdToNode.get(nodeId);
|
|
314
|
+
if (!item || !node) continue;
|
|
315
|
+
for (const memoryId of (node.sourceMemoryIds ?? []).slice(0, MAX_SOURCE_MEMORY_IDS_PER_NODE)) {
|
|
316
|
+
if (workingSet.has(memoryId)) continue;
|
|
317
|
+
const memory = await withDeadline(deps.loadMemory(memoryId), deadlineMs, now);
|
|
318
|
+
if (!memory || !memory.active) continue;
|
|
319
|
+
workingSet.set(memoryId, {
|
|
320
|
+
memoryId,
|
|
321
|
+
content: memory.content,
|
|
322
|
+
score: item.parentScore * EXPAND_SCORE_INHERITANCE,
|
|
323
|
+
origin: "expand",
|
|
324
|
+
viaAnchor: item.anchorValue
|
|
325
|
+
});
|
|
326
|
+
contentCache.set(memoryId, memory.content);
|
|
327
|
+
}
|
|
328
|
+
expandedNodeIds.add(nodeId);
|
|
329
|
+
}
|
|
330
|
+
frontier = refreshFrontier(workingSet, graph, expandedNodeIds);
|
|
331
|
+
pushStep(step, "EXPAND", selection.nodeIds.join(", "), stepStartMs);
|
|
332
|
+
step += 1;
|
|
333
|
+
}
|
|
334
|
+
} catch (err) {
|
|
335
|
+
if (!(err instanceof DeepRecallDeadlineExceeded)) throw err;
|
|
336
|
+
pushStep(step, "BUDGET_EXHAUSTED", "total timeout reached mid-step", startedMs);
|
|
337
|
+
}
|
|
338
|
+
if (cfg.maxSteps > 0 && step >= cfg.maxSteps && trace[trace.length - 1]?.action !== "STOP") {
|
|
339
|
+
pushStep(step, "BUDGET_EXHAUSTED", "maxSteps policy calls reached", startedMs);
|
|
340
|
+
const marker = trace[trace.length - 1];
|
|
341
|
+
if (marker) marker.durationMs = Math.max(0, now() - startedMs);
|
|
342
|
+
}
|
|
343
|
+
const entries = finalRank([...workingSet.values()]).map((entry) => ({ ...entry }));
|
|
344
|
+
return {
|
|
345
|
+
ok: true,
|
|
346
|
+
entries: cfg.maxResults > 0 ? entries.slice(0, cfg.maxResults) : [],
|
|
347
|
+
trace
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export {
|
|
352
|
+
runBudgetedDeepRecall
|
|
353
|
+
};
|
|
354
|
+
//# sourceMappingURL=chunk-S5G2LAL7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/deep-recall.ts"],"sourcesContent":["/**\n * Budgeted deep-recall loop (issue #2332, harmonic series P4).\n *\n * REFINE / EXPAND / STOP retrieval over the abstraction-node + cue-anchor\n * graph built by issue #2329, blended with QMD search. This is the deep\n * surface ONLY — never wired into `before_prompt_build` or any recall\n * section (that latency disqualifies the hot path; see the issue).\n *\n * The loop is dependency-injected: seeding, graph loading, memory loading,\n * and the policy LLM call arrive as `DeepRecallDeps`, so the loop is\n * deterministic under a scripted fake policy (tests) and thin when the\n * access service wires real deps. Pure decision helpers are reused from\n * the `recall-deep-*` primitives — never re-implemented here.\n */\n\nimport { z } from \"zod\";\nimport type { AbstractionNode } from \"./abstraction-nodes.js\";\nimport type { CueAnchor } from \"./cue-anchors.js\";\nimport { compareDeterministicStrings } from \"./deterministic-order.js\";\nimport { extractJsonCandidates, stripCodeFences } from \"./json-extract.js\";\nimport { rankDeepRecallFrontier } from \"./recall-deep-frontier.js\";\nimport { selectExpandNodeIds } from \"./recall-deep-expand-select.js\";\nimport { validateRefineRewrite } from \"./recall-deep-rewrite.js\";\nimport type { DeepRecallConfig } from \"./deep-recall-config.js\";\n\nexport type { DeepRecallConfig } from \"./deep-recall-config.js\";\n\nexport interface DeepRecallEntry {\n memoryId: string;\n /** Trimmed to 500 chars for state rendering; full content only in final output. */\n content: string;\n /** Seed similarity, or expansion inheritance (parent score * 0.8). */\n score: number;\n origin: \"seed\" | \"refine\" | \"expand\";\n /** anchorValue that linked the entry, when origin === \"expand\". */\n viaAnchor?: string;\n}\n\nexport interface DeepRecallFrontierItem {\n nodeId: string;\n title: string;\n /** e.g. `shares anchor \"<anchorValue>\" with <memoryId>`. */\n reason: string;\n sharedAnchorCount: number;\n /** Working-set memory the anchor was shared with; drives expansion scoring. */\n parentMemoryId: string;\n parentScore: number;\n anchorValue: string;\n}\n\nexport interface DeepRecallTraceStep {\n step: number;\n action: \"REFINE\" | \"EXPAND\" | \"STOP\" | \"BUDGET_EXHAUSTED\";\n /** Rewritten query, chosen nodeIds, or stop reason. */\n detail: string;\n workingSetSize: number;\n frontierSize: number;\n durationMs: number;\n}\n\nexport interface DeepRecallResult {\n /** false only for backend failure — NEVER conflated with empty (§22). */\n ok: boolean;\n error?: \"backend_unavailable\" | \"timeout\" | \"disabled\";\n entries: DeepRecallEntry[];\n trace: DeepRecallTraceStep[];\n}\n\nexport interface DeepRecallGraphSnapshot {\n nodes: AbstractionNode[];\n anchors: CueAnchor[];\n}\n\nexport interface DeepRecallSeedHit {\n memoryId: string;\n score: number;\n}\n\nexport type DeepRecallSeedResult =\n | { ok: true; results: DeepRecallSeedHit[] }\n | { ok: false; error: \"backend_unavailable\" };\n\nexport interface DeepRecallMemoryView {\n memoryId: string;\n content: string;\n active: boolean;\n}\n\nexport interface DeepRecallDeps {\n config: DeepRecallConfig;\n /** QMD (or equivalent) seed search. A thrown error means backend failure. */\n searchSeed(query: string, limit: number): Promise<DeepRecallSeedHit[]>;\n /** Nodes + anchors, loaded once per invocation. */\n loadGraph(): Promise<DeepRecallGraphSnapshot>;\n /** Namespace-scoped memory-by-id read; null when absent from the caller's namespace (§30). */\n loadMemory(memoryId: string): Promise<DeepRecallMemoryView | null>;\n /** Raw policy LLM output (JSON text); null when the call failed. */\n callPolicy(statePrompt: string, timeoutMs: number): Promise<string | null>;\n nowMs?(): number;\n}\n\nconst PolicyActionSchema = z.object({\n action: z.enum([\"REFINE\", \"EXPAND\", \"STOP\"]),\n refinedQuery: z.string().optional().nullable(),\n expandNodeIds: z.array(z.string()).optional().nullable(),\n reason: z.string(),\n});\n\ntype PolicyAction = z.infer<typeof PolicyActionSchema>;\n\nconst MAX_SOURCE_MEMORY_IDS_PER_NODE = 5;\nconst EXPAND_SCORE_INHERITANCE = 0.8;\nconst STATE_WORKING_SET_ENTRIES = 12;\nconst STATE_ENTRY_SNIPPET_CHARS = 200;\n\n/** Thrown when the shared whole-invocation deadline expires mid-await. */\nclass DeepRecallDeadlineExceeded extends Error {\n constructor() {\n super(\"deep recall total timeout reached\");\n }\n}\n\n/**\n * Race one dependency call against the SHARED whole-invocation deadline.\n *\n * `deadlineMs` is an absolute instant computed once per invocation, so every\n * await subtracts elapsed time instead of restarting the budget, and a stalled\n * seed search, graph load, or memory read can no longer outlive the documented\n * `totalTimeoutMs` just because the deadline is only *checked* between steps.\n * An infinite deadline (`totalTimeoutMs: 0`, a documented disable value) passes\n * the work through untouched — no timer, no wrapper.\n */\nasync function withDeadline<T>(work: Promise<T>, deadlineMs: number, now: () => number): Promise<T> {\n if (!Number.isFinite(deadlineMs)) return await work;\n const remaining = deadlineMs - now();\n if (remaining <= 0) throw new DeepRecallDeadlineExceeded();\n // The timer stays REFERENCED: it is the only thing keeping the loop alive\n // when the awaited dependency never settles, which is precisely the case the\n // deadline exists for. It is always cleared in the `finally`.\n const expiry = Promise.withResolvers<never>();\n const timer = setTimeout(() => expiry.reject(new DeepRecallDeadlineExceeded()), remaining);\n try {\n return await Promise.race([work, expiry.promise]);\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction parsePolicyOutput(raw: string | null): PolicyAction | null {\n if (raw === null) return null;\n const candidates = [stripCodeFences(raw), ...extractJsonCandidates(raw)];\n for (const candidate of candidates) {\n if (candidate.trim().length === 0) continue;\n try {\n const parsed = PolicyActionSchema.safeParse(JSON.parse(candidate));\n if (parsed.success) return parsed.data;\n } catch {\n // try the next candidate\n }\n }\n return null;\n}\n\ninterface WorkingEntry extends DeepRecallEntry {\n content: string;\n}\n\nfunction mergeIntoWorkingSet(\n workingSet: Map<string, WorkingEntry>,\n hits: readonly DeepRecallSeedHit[],\n origin: \"seed\" | \"refine\",\n contentFor: (memoryId: string) => string\n): void {\n for (const hit of hits) {\n if (typeof hit.memoryId !== \"string\" || hit.memoryId.length === 0) continue;\n if (typeof hit.score !== \"number\" || !Number.isFinite(hit.score)) continue;\n const existing = workingSet.get(hit.memoryId);\n // Duplicates keep the higher score and the earlier origin (§13: one\n // content form, one merge rule, everywhere).\n if (existing && existing.score >= hit.score) continue;\n workingSet.set(hit.memoryId, {\n memoryId: hit.memoryId,\n content: contentFor(hit.memoryId),\n score: hit.score,\n origin: existing ? existing.origin : origin,\n ...(existing?.viaAnchor ? { viaAnchor: existing.viaAnchor } : {}),\n });\n }\n}\n\ninterface FrontierIndex {\n memoryIdToNodeIds: Map<string, string[]>;\n nodeIdToNode: Map<string, AbstractionNode>;\n nodeIdToAnchorIds: Map<string, string[]>;\n anchorIdToAnchor: Map<string, CueAnchor>;\n}\n\nfunction buildFrontierIndex(graph: DeepRecallGraphSnapshot): FrontierIndex {\n const memoryIdToNodeIds = new Map<string, string[]>();\n const nodeIdToNode = new Map<string, AbstractionNode>();\n for (const node of graph.nodes) {\n nodeIdToNode.set(node.nodeId, node);\n for (const memoryId of node.sourceMemoryIds ?? []) {\n const list = memoryIdToNodeIds.get(memoryId) ?? [];\n list.push(node.nodeId);\n memoryIdToNodeIds.set(memoryId, list);\n }\n }\n const nodeIdToAnchorIds = new Map<string, string[]>();\n const anchorIdToAnchor = new Map<string, CueAnchor>();\n for (const anchor of graph.anchors) {\n anchorIdToAnchor.set(anchor.anchorId, anchor);\n for (const nodeRef of anchor.nodeRefs) {\n const list = nodeIdToAnchorIds.get(nodeRef) ?? [];\n list.push(anchor.anchorId);\n nodeIdToAnchorIds.set(nodeRef, list);\n }\n }\n return { memoryIdToNodeIds, nodeIdToNode, nodeIdToAnchorIds, anchorIdToAnchor };\n}\n\n/**\n * A candidate node adds nothing when every source memory the EXPAND path would\n * load is already in the working set (or when it has none): offering it as an\n * unretrieved candidate lets the policy burn steps re-expanding a node that can\n * only re-add what is already present.\n */\nfunction nodeAddsNothing(node: AbstractionNode, workingSet: ReadonlyMap<string, WorkingEntry>): boolean {\n return (node.sourceMemoryIds ?? [])\n .slice(0, MAX_SOURCE_MEMORY_IDS_PER_NODE)\n .every((memoryId) => workingSet.has(memoryId));\n}\n\n/**\n * Frontier refresh (after every working-set change): for each working-set\n * memory, anchors whose nodeRefs include a node listing that memory make\n * every OTHER referenced node a frontier candidate. Ranked by the shared\n * pure helper (shared-anchor count desc, nodeId asc — total comparator).\n *\n * Nodes in `expandedNodeIds` are dropped: a node EXPAND already followed is\n * not an unretrieved candidate, even when some of its source memories never\n * entered the working set (an inactive or foreign read is skipped), so\n * re-offering it would let the policy spend every remaining step adding\n * nothing.\n */\nfunction refreshFrontier(\n workingSet: ReadonlyMap<string, WorkingEntry>,\n graph: FrontierGraph,\n expandedNodeIds: ReadonlySet<string>\n): DeepRecallFrontierItem[] {\n const index = graph.index;\n interface Candidate {\n nodeId: string;\n sharedAnchorCount: number;\n parentMemoryId: string;\n parentScore: number;\n anchorValue: string;\n }\n const byNodeId = new Map<string, Candidate>();\n for (const [memoryId, entry] of workingSet) {\n for (const nodeId of index.memoryIdToNodeIds.get(memoryId) ?? []) {\n for (const anchorId of index.nodeIdToAnchorIds.get(nodeId) ?? []) {\n const anchor = index.anchorIdToAnchor.get(anchorId);\n if (!anchor) continue;\n for (const otherNodeRef of anchor.nodeRefs) {\n if (otherNodeRef === nodeId) continue;\n if (expandedNodeIds.has(otherNodeRef)) continue;\n const otherNode = index.nodeIdToNode.get(otherNodeRef);\n if (!otherNode || nodeAddsNothing(otherNode, workingSet)) continue;\n const current = byNodeId.get(otherNodeRef);\n if (current === undefined || entry.score > current.parentScore) {\n byNodeId.set(otherNodeRef, {\n nodeId: otherNodeRef,\n sharedAnchorCount: (current?.sharedAnchorCount ?? 0) + 1,\n parentMemoryId: memoryId,\n parentScore: entry.score,\n anchorValue: anchor.anchorValue,\n });\n } else {\n current.sharedAnchorCount += 1;\n }\n }\n }\n }\n }\n const ranked = rankDeepRecallFrontier([...byNodeId.values()]);\n return ranked.flatMap((rankedCandidate) => {\n const candidate = byNodeId.get(rankedCandidate.nodeId);\n const node = index.nodeIdToNode.get(rankedCandidate.nodeId);\n if (!candidate || !node) return [];\n return [\n {\n nodeId: candidate.nodeId,\n title: node.title,\n reason: `shares anchor \"${candidate.anchorValue}\" with ${candidate.parentMemoryId}`,\n sharedAnchorCount: rankedCandidate.sharedAnchorCount,\n parentMemoryId: candidate.parentMemoryId,\n parentScore: candidate.parentScore,\n anchorValue: candidate.anchorValue,\n },\n ];\n });\n}\n\ninterface FrontierGraph {\n index: FrontierIndex;\n}\n\n\nfunction renderStatePrompt(input: {\n query: string;\n workingSet: ReadonlyMap<string, WorkingEntry>;\n frontier: readonly DeepRecallFrontierItem[];\n stepsRemaining: number;\n}): string {\n const lines: string[] = [\n \"You are guiding a multi-hop memory retrieval loop. Pick exactly one action.\",\n \"REFINE when the retrieved memories look misaligned with the question (return a rewritten query).\",\n \"EXPAND to follow named frontier nodes that plausibly hold the answer (return their nodeIds).\",\n \"STOP when the working set is sufficient to answer.\",\n \"\",\n `QUESTION: ${input.query}`,\n `STEPS REMAINING: ${input.stepsRemaining}`,\n \"\",\n \"WORKING SET (retrieved memories):\",\n ];\n const entries = [...input.workingSet.values()]\n .sort((a, b) => b.score - a.score || compareDeterministicStrings(a.memoryId, b.memoryId))\n .slice(0, STATE_WORKING_SET_ENTRIES);\n if (entries.length === 0) lines.push(\"(empty)\");\n for (const entry of entries) {\n const snippet = entry.content.slice(0, STATE_ENTRY_SNIPPET_CHARS).replace(/\\s+/g, \" \");\n lines.push(`- ${entry.memoryId} (score=${entry.score.toFixed(3)}, origin=${entry.origin}): ${snippet}`);\n }\n lines.push(\"\", \"FRONTIER (anchor-linked candidates not yet retrieved):\");\n if (input.frontier.length === 0) lines.push(\"(empty)\");\n for (const item of input.frontier) {\n lines.push(`- ${item.nodeId}: ${item.title} — ${item.reason}`);\n }\n lines.push(\n \"\",\n 'Respond with JSON only: {\"action\":\"REFINE\",\"refinedQuery\":\"...\",\"reason\":\"...\"}',\n 'or {\"action\":\"EXPAND\",\"expandNodeIds\":[\"...\"],\"reason\":\"...\"}',\n 'or {\"action\":\"STOP\",\"reason\":\"...\"}',\n );\n return lines.join(\"\\n\");\n}\n\nfunction finalRank(entries: readonly DeepRecallEntry[]): DeepRecallEntry[] {\n return [...entries].sort(\n (a, b) => b.score - a.score || compareDeterministicStrings(a.memoryId, b.memoryId)\n );\n}\n\n/**\n * The budgeted loop. Seed (QMD + graph) -> policy steps -> ranked, capped\n * output. Only a SEED backend failure returns `ok: false`; timeout and\n * budget exhaustion mid-loop return the partial working set with\n * `ok: true` and a BUDGET_EXHAUSTED trace tail.\n */\nexport async function runBudgetedDeepRecall(deps: DeepRecallDeps, query: string): Promise<DeepRecallResult> {\n const cfg = deps.config;\n const now = deps.nowMs ?? Date.now;\n const startedMs = now();\n const deadlineMs = cfg.totalTimeoutMs > 0 ? startedMs + cfg.totalTimeoutMs : Number.POSITIVE_INFINITY;\n\n const trace: DeepRecallTraceStep[] = [];\n const contentCache = new Map<string, string>();\n const contentFor = (memoryId: string): string => contentCache.get(memoryId) ?? \"\";\n const workingSet = new Map<string, WorkingEntry>();\n let graph: FrontierGraph = { index: buildFrontierIndex({ nodes: [], anchors: [] }) };\n // Nodes already followed by EXPAND leave the frontier for good.\n const expandedNodeIds = new Set<string>();\n /**\n * Hydrate one working-set entry from `loadMemory`, DROPPING it when the read\n * is missing or reports a non-active memory: QMD can still index a memory\n * whose governance status moved out of the active set, and hydrating it\n * would surface content the active-set check excluded.\n */\n const hydrateOrDrop = async (memoryId: string): Promise<void> => {\n const memory = await withDeadline(deps.loadMemory(memoryId), deadlineMs, now);\n if (!memory || !memory.active) {\n workingSet.delete(memoryId);\n contentCache.delete(memoryId);\n return;\n }\n contentCache.set(memoryId, memory.content);\n const entry = workingSet.get(memoryId);\n if (entry) entry.content = memory.content;\n };\n // Pre-policy work (seed search, graph load, seed hydration) is bounded by the\n // SAME deadline as the policy calls; exhausting it here yields the partial\n // working set rather than blocking the later check from ever running.\n let exhaustedDetail: string | null = null;\n try {\n const seedHits = await withDeadline(deps.searchSeed(query, cfg.maxResults), deadlineMs, now);\n mergeIntoWorkingSet(workingSet, seedHits, \"seed\", contentFor);\n } catch (err) {\n if (!(err instanceof DeepRecallDeadlineExceeded)) {\n // Seed backend failure is the only ok:false path (§22: an empty index\n // proceeds; a thrown search does not).\n return { ok: false, error: \"backend_unavailable\", entries: [], trace: [] };\n }\n exhaustedDetail = \"total timeout reached during seed search\";\n }\n if (exhaustedDetail === null) {\n try {\n graph = { index: buildFrontierIndex(await withDeadline(deps.loadGraph(), deadlineMs, now)) };\n // Seed hydration also enforces the active set: a stale or non-active\n // QMD hit leaves the working set instead of being hydrated in place.\n for (const memoryId of [...workingSet.keys()]) {\n await hydrateOrDrop(memoryId);\n }\n } catch (err) {\n if (!(err instanceof DeepRecallDeadlineExceeded)) throw err;\n exhaustedDetail = \"total timeout reached loading the graph or hydrating seeds\";\n }\n }\n\n let frontier = refreshFrontier(workingSet, graph, expandedNodeIds);\n let currentQuery = query;\n let refinesUsed = 0;\n\n const pushStep = (step: number, action: DeepRecallTraceStep[\"action\"], detail: string, stepStartMs: number): void => {\n trace.push({\n step,\n action,\n detail,\n workingSetSize: workingSet.size,\n frontierSize: frontier.length,\n durationMs: Math.max(0, now() - stepStartMs),\n });\n };\n\n if (exhaustedDetail !== null) {\n // Pre-policy work already spent the whole-invocation budget: report the\n // partial working set (ok:true, §22) instead of starting a policy call\n // that cannot finish inside the deadline.\n pushStep(0, \"BUDGET_EXHAUSTED\", exhaustedDetail, startedMs);\n } else if (cfg.maxSteps <= 0) {\n // `maxSteps: 0` is a documented disable value (§33): seed-only retrieval,\n // with no policy call at all. The zero check dominates the step threshold\n // instead of relying on the loop condition falling through.\n pushStep(0, \"STOP\", \"policy loop disabled (maxSteps=0)\", startedMs);\n }\n let step = 0;\n try {\n while (exhaustedDetail === null && cfg.maxSteps > 0 && step < cfg.maxSteps) {\n const stepStartMs = now();\n if (now() >= deadlineMs) {\n pushStep(step, \"BUDGET_EXHAUSTED\", \"total timeout reached before policy call\", stepStartMs);\n break;\n }\n // Two independent axes bound the policy call: its own per-step timeout and\n // whatever is left of the shared deadline. `stepTimeoutMs: 0` disables only\n // its own axis (§33) — a finite total budget still applies, so the call can\n // never outlive `totalTimeoutMs`. `timeoutMs: 0` reaches the policy only\n // when BOTH axes are disabled.\n const stepBudgetMs = cfg.stepTimeoutMs > 0 ? cfg.stepTimeoutMs : Number.POSITIVE_INFINITY;\n const effectiveBudgetMs = Math.min(stepBudgetMs, deadlineMs - now());\n const timeoutMs = Number.isFinite(effectiveBudgetMs) ? Math.max(1, effectiveBudgetMs) : 0;\n const raw = await withDeadline(\n deps.callPolicy(\n renderStatePrompt({ query: currentQuery, workingSet, frontier, stepsRemaining: cfg.maxSteps - step }),\n timeoutMs\n ),\n deadlineMs,\n now\n );\n const parsed = parsePolicyOutput(raw);\n if (parsed === null) {\n pushStep(step, \"STOP\", \"invalid_policy_output\", stepStartMs);\n break;\n }\n if (parsed.action === \"STOP\") {\n pushStep(step, \"STOP\", parsed.reason || \"policy stop\", stepStartMs);\n break;\n }\n if (parsed.action === \"REFINE\") {\n const rewrite = validateRefineRewrite({\n currentQuery,\n refinedQuery: parsed.refinedQuery ?? null,\n refinesUsed,\n });\n if (!rewrite.ok) {\n pushStep(step, \"STOP\", rewrite.reason, stepStartMs);\n break;\n }\n currentQuery = rewrite.refinedQuery;\n refinesUsed += 1;\n try {\n const refinedHits = await withDeadline(deps.searchSeed(currentQuery, cfg.maxResults), deadlineMs, now);\n mergeIntoWorkingSet(workingSet, refinedHits, \"refine\", contentFor);\n for (const hit of refinedHits) {\n if (workingSet.has(hit.memoryId) && !contentCache.has(hit.memoryId)) {\n await hydrateOrDrop(hit.memoryId);\n }\n }\n } catch (err) {\n // Re-search failure mid-loop is partial, not fatal (§22): the loop\n // keeps what it has and the policy decides the next move. Deadline\n // expiry is NOT a partial failure — it ends the invocation.\n if (err instanceof DeepRecallDeadlineExceeded) throw err;\n }\n frontier = refreshFrontier(workingSet, graph, expandedNodeIds);\n pushStep(step, \"REFINE\", currentQuery, stepStartMs);\n step += 1;\n continue;\n }\n // EXPAND. A configured ceiling of 0 is a documented no-op limit (§33):\n // the action is honored but selects nothing.\n const selection =\n cfg.maxExpandPerStep <= 0\n ? { ok: true as const, nodeIds: [] as string[], truncated: false }\n : selectExpandNodeIds({\n frontierIds: frontier.map((item) => item.nodeId),\n requestedIds: parsed.expandNodeIds ?? [],\n maxExpandPerStep: cfg.maxExpandPerStep,\n });\n if (!selection.ok) {\n pushStep(step, \"STOP\", \"invalid_policy_output\", stepStartMs);\n break;\n }\n const chosen = new Map(frontier.map((item) => [item.nodeId, item]));\n for (const nodeId of selection.nodeIds) {\n const item = chosen.get(nodeId);\n const node = graph.index.nodeIdToNode.get(nodeId);\n if (!item || !node) continue;\n for (const memoryId of (node.sourceMemoryIds ?? []).slice(0, MAX_SOURCE_MEMORY_IDS_PER_NODE)) {\n if (workingSet.has(memoryId)) continue;\n const memory = await withDeadline(deps.loadMemory(memoryId), deadlineMs, now);\n // Only active memories enter the working set (§41); a null read\n // (foreign namespace, §30) skips the same way.\n if (!memory || !memory.active) continue;\n workingSet.set(memoryId, {\n memoryId,\n content: memory.content,\n score: item.parentScore * EXPAND_SCORE_INHERITANCE,\n origin: \"expand\",\n viaAnchor: item.anchorValue,\n });\n contentCache.set(memoryId, memory.content);\n }\n expandedNodeIds.add(nodeId);\n }\n frontier = refreshFrontier(workingSet, graph, expandedNodeIds);\n pushStep(step, \"EXPAND\", selection.nodeIds.join(\", \"), stepStartMs);\n step += 1;\n }\n } catch (err) {\n if (!(err instanceof DeepRecallDeadlineExceeded)) throw err;\n // A dependency call inside a step outran the shared deadline: the per-step\n // timeout is not the wall clock, so record exhaustion and keep the partial\n // working set. durationMs spans the whole invocation.\n pushStep(step, \"BUDGET_EXHAUSTED\", \"total timeout reached mid-step\", startedMs);\n }\n\n if (cfg.maxSteps > 0 && step >= cfg.maxSteps && trace[trace.length - 1]?.action !== \"STOP\") {\n pushStep(step, \"BUDGET_EXHAUSTED\", \"maxSteps policy calls reached\", startedMs);\n // durationMs for the exhaustion marker is the whole invocation so far.\n const marker = trace[trace.length - 1];\n if (marker) marker.durationMs = Math.max(0, now() - startedMs);\n }\n\n // Final output carries full content; the 200-char trim is state rendering only.\n const entries = finalRank([...workingSet.values()]).map((entry) => ({ ...entry }));\n return {\n ok: true,\n entries: cfg.maxResults > 0 ? entries.slice(0, cfg.maxResults) : [],\n trace,\n };\n}\n"],"mappings":"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","names":["step"]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
WHO_KNOWS_DEFAULT_LIMIT,
|
|
3
3
|
WHO_KNOWS_MAX_LIMIT,
|
|
4
4
|
validateWhoKnowsInput
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LUDXSSTW.js";
|
|
6
6
|
|
|
7
7
|
// src/who-knows-cli.ts
|
|
8
8
|
function extractWhoKnowsRawArgs(rest) {
|
|
@@ -74,4 +74,4 @@ export {
|
|
|
74
74
|
renderWhoKnowsText,
|
|
75
75
|
renderWhoKnows
|
|
76
76
|
};
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
77
|
+
//# sourceMappingURL=chunk-TRLCMLX7.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
|
|
3
3
|
SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-5P2KNFJZ.js";
|
|
5
5
|
import {
|
|
6
6
|
SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
|
|
7
7
|
} from "./chunk-EEOUMG3J.js";
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
parseSupportPassportModelJob,
|
|
344
344
|
SupportPassportModelBridge
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-V3HUBF7T.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
getOperation,
|
|
4
4
|
operationRequiresAuthorizedNamespace,
|
|
5
5
|
operationUsesPrincipalNamespace
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-5P2KNFJZ.js";
|
|
7
7
|
import {
|
|
8
8
|
assertOperationAuthorizationAllowed
|
|
9
9
|
} from "./chunk-MZWSOLMT.js";
|
|
@@ -60,4 +60,4 @@ export {
|
|
|
60
60
|
authorizationProbeNamespaces,
|
|
61
61
|
authorizationProbeRequiresPrincipalNamespace
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=chunk-
|
|
63
|
+
//# sourceMappingURL=chunk-VHAKBUBD.js.map
|
|
@@ -17,14 +17,14 @@ import {
|
|
|
17
17
|
} from "./chunk-4ZWCQJNM.js";
|
|
18
18
|
import {
|
|
19
19
|
normalizeQmdResultPath
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-JGXMA6HL.js";
|
|
21
21
|
import {
|
|
22
22
|
withholdToolScopedFromSharedNamespace
|
|
23
23
|
} from "./chunk-S2V7RUCL.js";
|
|
24
24
|
import {
|
|
25
25
|
SPECULATIVE_TTL_DAYS,
|
|
26
26
|
confidenceTier
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-OYV6RKPM.js";
|
|
28
28
|
import {
|
|
29
29
|
createMemorySnapshot
|
|
30
30
|
} from "./chunk-S2HLHAZ4.js";
|
|
@@ -11374,4 +11374,4 @@ export {
|
|
|
11374
11374
|
isValidBufferSurpriseEvent,
|
|
11375
11375
|
StorageManager3 as StorageManager
|
|
11376
11376
|
};
|
|
11377
|
-
//# sourceMappingURL=chunk-
|
|
11377
|
+
//# sourceMappingURL=chunk-VYD63IFH.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// src/recall-deep-expand-select.ts
|
|
2
|
+
var DEFAULT_MAX_EXPAND_PER_STEP = 3;
|
|
3
|
+
function selectExpandNodeIds(input) {
|
|
4
|
+
const max = input.maxExpandPerStep === void 0 ? DEFAULT_MAX_EXPAND_PER_STEP : input.maxExpandPerStep;
|
|
5
|
+
if (!Number.isInteger(max) || max < 1) {
|
|
6
|
+
throw new RangeError(
|
|
7
|
+
`maxExpandPerStep must be an integer >= 1; got ${JSON.stringify(max)}`
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
if (!Array.isArray(input.requestedIds)) {
|
|
11
|
+
return { ok: false, error: "invalid_policy_output", foreignIds: [] };
|
|
12
|
+
}
|
|
13
|
+
const frontier = new Set(input.frontierIds);
|
|
14
|
+
const seen = /* @__PURE__ */ new Set();
|
|
15
|
+
const foreign = /* @__PURE__ */ new Set();
|
|
16
|
+
const ordered = [];
|
|
17
|
+
for (const entry of input.requestedIds) {
|
|
18
|
+
if (typeof entry !== "string" || entry.trim().length === 0) {
|
|
19
|
+
foreign.add(String(entry));
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (!frontier.has(entry)) {
|
|
23
|
+
foreign.add(entry);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (seen.has(entry)) continue;
|
|
27
|
+
seen.add(entry);
|
|
28
|
+
ordered.push(entry);
|
|
29
|
+
}
|
|
30
|
+
if (foreign.size > 0) {
|
|
31
|
+
return {
|
|
32
|
+
ok: false,
|
|
33
|
+
error: "invalid_policy_output",
|
|
34
|
+
foreignIds: [...foreign].sort()
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const truncated = ordered.length > max;
|
|
38
|
+
return {
|
|
39
|
+
ok: true,
|
|
40
|
+
nodeIds: truncated ? ordered.slice(0, max) : ordered,
|
|
41
|
+
truncated
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export {
|
|
46
|
+
DEFAULT_MAX_EXPAND_PER_STEP,
|
|
47
|
+
selectExpandNodeIds
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=chunk-VZIAVM72.js.map
|