@remnic/core 10.0.91 → 10.0.93
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.js +334 -61
- package/dist/access-authorization-probe.js +2 -283
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.d.ts.map +1 -1
- package/dist/access-boundary.js +1 -282
- package/dist/access-cli.js +288 -304
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.js +3 -3
- package/dist/access-extraction-force-flush.js +334 -61
- package/dist/access-http-briefing.js +334 -62
- package/dist/access-http-query.js +334 -63
- package/dist/access-http.js +332 -114
- package/dist/access-identity-continuity-surface.js +334 -61
- package/dist/access-lcm-surface.js +334 -61
- package/dist/access-mcp-frames.d.ts +20 -6
- package/dist/access-mcp-frames.d.ts.map +1 -1
- package/dist/access-mcp-frames.js +1 -1
- package/dist/access-mcp.d.ts +5 -0
- package/dist/access-mcp.d.ts.map +1 -1
- package/dist/access-mcp.js +332 -89
- package/dist/access-namespace-preflight.js +2 -282
- package/dist/access-observe-transcript.js +3 -3
- package/dist/access-observe-write-category.js +6 -6
- package/dist/access-observe-write-surface.js +334 -61
- package/dist/access-offline-manifest.js +12 -11
- package/dist/access-operations-batch.js +332 -66
- package/dist/access-operations.js +332 -75
- package/dist/access-recall-concurrency.js +334 -61
- package/dist/access-recall-diagnostics.js +6 -5
- package/dist/access-recall-response.js +334 -61
- package/dist/access-recall-surface.js +334 -61
- package/dist/access-schema.js +2 -2
- package/dist/access-service.d.ts +1 -0
- package/dist/access-service.d.ts.map +1 -1
- package/dist/access-service.js +337 -64
- package/dist/access-surface-catalog.js +6 -283
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-context-transform.js +1 -1
- package/dist/active-memory-bridge.js +3 -2
- package/dist/active-recall.js +36 -37
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/journal-extract.d.ts +13 -1
- package/dist/activity/journal-extract.d.ts.map +1 -1
- package/dist/{auto-sync-3AZW7MXI.js → auto-sync-BO5YZKM6.js} +13 -15
- package/dist/{auto-sync-3AZW7MXI.js.map → auto-sync-BO5YZKM6.js.map} +1 -1
- package/dist/briefing.js +20 -20
- package/dist/buffer.js +16 -16
- package/dist/calibration.js +10 -10
- package/dist/{capsule-merge-2IIXFXN5.js → capsule-merge-6IDAYTKG.js} +6 -6
- package/dist/causal-consolidation.js +23 -23
- package/dist/{chunk-QL7RHYK6.js → chunk-2LMA22UU.js} +5 -5
- package/dist/{chunk-RGUUBAT5.js → chunk-2WCLTWV2.js} +3 -3
- package/dist/{chunk-RSK2WIEM.js → chunk-2YODOG2O.js} +2 -2
- package/dist/{chunk-WYG5UNDY.js → chunk-3AUDELZL.js} +2 -2
- package/dist/{chunk-OFVCFKDH.js → chunk-3CYOCE6U.js} +3 -3
- package/dist/{chunk-6HM6HARE.js → chunk-3FBAEPCU.js} +2 -2
- package/dist/{chunk-PIITB2YZ.js → chunk-3ZS3NUEI.js} +4 -4
- package/dist/{chunk-V4XE263I.js → chunk-43AA5FVD.js} +1 -1
- package/dist/chunk-43AA5FVD.js.map +1 -0
- package/dist/{chunk-ANZZLRUX.js → chunk-4IVRQMZW.js} +2 -2
- package/dist/{chunk-63E37JCN.js → chunk-4RAJT5L2.js} +4 -4
- package/dist/{chunk-45VUHDV2.js → chunk-5CO5G4MN.js} +2 -2
- package/dist/{chunk-PUEO37QG.js → chunk-5YT2IIFX.js} +729 -17
- package/dist/chunk-5YT2IIFX.js.map +1 -0
- package/dist/{chunk-P5VZSSYL.js → chunk-622V2AZA.js} +233 -40
- package/dist/chunk-622V2AZA.js.map +1 -0
- package/dist/{chunk-3UMDRGFS.js → chunk-65HWAQ4F.js} +3 -3
- package/dist/{chunk-T67LUYCR.js → chunk-77NTFICT.js} +5 -5
- package/dist/chunk-A2WFUMUN.js +86 -0
- package/dist/chunk-A2WFUMUN.js.map +1 -0
- package/dist/{chunk-UE6RRXMF.js → chunk-A4F7OIC5.js} +2 -2
- package/dist/chunk-AHA5VQGP.js +117 -0
- package/dist/chunk-AHA5VQGP.js.map +1 -0
- package/dist/{chunk-AOFEMUHG.js → chunk-ATG2PQ4V.js} +56 -5
- package/dist/chunk-ATG2PQ4V.js.map +1 -0
- package/dist/{chunk-63O7LVMN.js → chunk-B33YWUJV.js} +3 -3
- package/dist/{chunk-QVMOCJRV.js → chunk-B377OKUP.js} +2 -2
- package/dist/{chunk-IUKYFTGW.js → chunk-B3DR2JBZ.js} +140 -125
- package/dist/chunk-B3DR2JBZ.js.map +1 -0
- package/dist/{chunk-ZT6WPSII.js → chunk-BGHCSLE5.js} +2 -2
- package/dist/{chunk-YYOMGOHB.js → chunk-BOK6BN5M.js} +2 -2
- package/dist/{chunk-OH7QLI6W.js → chunk-BPPUH5JM.js} +5 -5
- package/dist/{chunk-EV76IZ37.js → chunk-BTI4C4MA.js} +2 -2
- package/dist/{chunk-O6ZSWHVR.js → chunk-C2KE5DMD.js} +4 -4
- package/dist/{chunk-47F6WWLQ.js → chunk-C73N66PR.js} +2 -2
- package/dist/{chunk-3XIWW4TB.js → chunk-CGJYL633.js} +2 -2
- package/dist/{chunk-WRT7GJ2D.js → chunk-CIWMTNHW.js} +4 -4
- package/dist/{chunk-O55EKIEC.js → chunk-D3ZKHLN2.js} +2 -2
- package/dist/{chunk-CD4BCCNP.js → chunk-DJ7WVEWX.js} +2 -2
- package/dist/{chunk-RO7RUBLD.js → chunk-EFL24KOI.js} +2 -2
- package/dist/{chunk-4CJTQHEG.js → chunk-ESLOLCD4.js} +3 -3
- package/dist/{chunk-Z4Q6USKJ.js → chunk-ETBVCRVL.js} +4 -4
- package/dist/{chunk-VILPVT4S.js → chunk-EZ47HOJ6.js} +4 -4
- package/dist/{chunk-EFYN5I7Z.js → chunk-F4QFU5IZ.js} +2 -2
- package/dist/{chunk-T6OZW2WR.js → chunk-FA7SLQ5X.js} +7 -1
- package/dist/chunk-FA7SLQ5X.js.map +1 -0
- package/dist/{chunk-SHUBTAY2.js → chunk-FMKILENU.js} +14 -14
- package/dist/{chunk-YLXETSAH.js → chunk-GCZJ7XRI.js} +2 -2
- package/dist/{chunk-J4MMPQ7Q.js → chunk-GQXOBKPL.js} +7 -9
- package/dist/{chunk-J4MMPQ7Q.js.map → chunk-GQXOBKPL.js.map} +1 -1
- package/dist/{chunk-UDKWFDV2.js → chunk-HLUHEMN4.js} +27 -3
- package/dist/chunk-HLUHEMN4.js.map +1 -0
- package/dist/{chunk-QFEDITXM.js → chunk-JNDMIAJ4.js} +2 -2
- package/dist/chunk-JTSSSR4L.js +359 -0
- package/dist/chunk-JTSSSR4L.js.map +1 -0
- package/dist/{chunk-5KBIOI4G.js → chunk-JVBAPAWZ.js} +217 -13
- package/dist/chunk-JVBAPAWZ.js.map +1 -0
- package/dist/{chunk-E5PPE4VA.js → chunk-K2VRKCPA.js} +2 -2
- package/dist/{chunk-MKRYQROF.js → chunk-LGEHAQHK.js} +4 -4
- package/dist/{chunk-7HTUYFR3.js → chunk-LLPMMMWG.js} +27 -10
- package/dist/chunk-LLPMMMWG.js.map +1 -0
- package/dist/{chunk-XYTQJD7F.js → chunk-LMJVP5CM.js} +2 -2
- package/dist/{chunk-JC36FPQ5.js → chunk-LPV72KRQ.js} +2 -2
- package/dist/{chunk-2LCRG2YV.js → chunk-M2XR6B6V.js} +2 -2
- package/dist/{chunk-GGRRF4PZ.js → chunk-MDPT6QFK.js} +1 -1
- package/dist/{chunk-GGRRF4PZ.js.map → chunk-MDPT6QFK.js.map} +1 -1
- package/dist/{chunk-VPQFK63H.js → chunk-MH632KPO.js} +2 -2
- package/dist/{chunk-EQ4U73UH.js → chunk-MLAMXQAW.js} +14 -2
- package/dist/chunk-MLAMXQAW.js.map +1 -0
- package/dist/{chunk-ZU5JDLOH.js → chunk-MMRTPH3J.js} +2 -2
- package/dist/{chunk-ZZ67UTQX.js → chunk-MUX7IL77.js} +2 -2
- package/dist/{chunk-RYWROSL5.js → chunk-NAQ4A5IX.js} +7 -7
- package/dist/{chunk-TVIVY7KU.js → chunk-NED7IR7B.js} +4 -4
- package/dist/{chunk-ADYP7HXE.js → chunk-NHVAX7MH.js} +3 -3
- package/dist/{chunk-TG3R2SID.js → chunk-NMGHGTVR.js} +5 -5
- package/dist/{chunk-YCNIGRRF.js → chunk-NS7U4ZYU.js} +13 -117
- package/dist/chunk-NS7U4ZYU.js.map +1 -0
- package/dist/{chunk-NGHDW6UU.js → chunk-NUQEREIP.js} +2 -2
- package/dist/{chunk-5IIQU4JZ.js → chunk-OB72KNMF.js} +4 -4
- package/dist/{chunk-7L3TODI7.js → chunk-OJXJWNFY.js} +2 -2
- package/dist/{chunk-66L5ZRJC.js → chunk-P3WRNWWM.js} +157 -4
- package/dist/chunk-P3WRNWWM.js.map +1 -0
- package/dist/{chunk-E6M225BJ.js → chunk-PC5DRBGD.js} +18 -8
- package/dist/chunk-PC5DRBGD.js.map +1 -0
- package/dist/{chunk-EURPSF4Y.js → chunk-PH5ZQM35.js} +2 -2
- package/dist/{chunk-BMWMTAQF.js → chunk-PRAUN6PN.js} +3 -3
- package/dist/{chunk-RWGRSKN5.js → chunk-PT4DZDJA.js} +2 -2
- package/dist/{chunk-7EPY3IQL.js → chunk-PZJQ46DH.js} +2 -2
- package/dist/{chunk-AH637HZ5.js → chunk-QDESY76F.js} +3 -3
- package/dist/{chunk-I6QGI65T.js → chunk-QRMG4HK4.js} +3 -3
- package/dist/{chunk-ZU3NJNO7.js → chunk-QSF5SJAM.js} +4 -4
- package/dist/{chunk-5IYOKDM4.js → chunk-R23JWJD3.js} +5 -5
- package/dist/{chunk-EWJZZDRG.js → chunk-R4BBGPI2.js} +219 -219
- package/dist/chunk-R4BBGPI2.js.map +1 -0
- package/dist/{chunk-LJQFJF4J.js → chunk-RM2YUFH6.js} +6 -6
- package/dist/{chunk-IPT2OY4B.js → chunk-RQFXZYTF.js} +35 -33
- package/dist/chunk-RQFXZYTF.js.map +1 -0
- package/dist/{chunk-AP6NCP3V.js → chunk-S3S72HRM.js} +8 -6
- package/dist/chunk-S3S72HRM.js.map +1 -0
- package/dist/{chunk-6QMWECO5.js → chunk-SGQPR5SX.js} +7 -7
- package/dist/{chunk-ZGFLIK5H.js → chunk-SPAKBUJY.js} +2 -2
- package/dist/{chunk-ER7XANP3.js → chunk-SQ3GEIEL.js} +4 -4
- package/dist/{chunk-5UCMYPVF.js → chunk-SVT5IA2H.js} +2 -2
- package/dist/{chunk-HVKUCT3W.js → chunk-T4KY6UYF.js} +5 -3
- package/dist/{chunk-HVKUCT3W.js.map → chunk-T4KY6UYF.js.map} +1 -1
- package/dist/{chunk-FRSHF6FU.js → chunk-TJ4F6H4H.js} +3 -3
- package/dist/{chunk-R6HMAIKM.js → chunk-TOSPNM4T.js} +2 -2
- package/dist/{chunk-NJJMVS5Y.js → chunk-TRQE3RYR.js} +5 -5
- package/dist/{chunk-RMXS4I66.js → chunk-TVDJEUV5.js} +2 -2
- package/dist/{chunk-PLCYKAWH.js → chunk-TYRWSE4B.js} +2 -2
- package/dist/{chunk-YS2GHSWN.js → chunk-UBEKET2V.js} +389 -39
- package/dist/chunk-UBEKET2V.js.map +1 -0
- package/dist/{chunk-IQWUACVG.js → chunk-UHMHJX5G.js} +3 -3
- package/dist/{chunk-YODUDA6R.js → chunk-UN4RVUG2.js} +22 -22
- package/dist/{chunk-KZSGBWOJ.js → chunk-V2KGDESV.js} +2 -2
- package/dist/{chunk-E6Z4FBX6.js → chunk-V2QSNFCT.js} +2 -2
- package/dist/{chunk-BCCG7VWM.js → chunk-V65H7MI6.js} +396 -13
- package/dist/chunk-V65H7MI6.js.map +1 -0
- package/dist/chunk-W54Z2MOP.js +4500 -0
- package/dist/chunk-W54Z2MOP.js.map +1 -0
- package/dist/{chunk-N74SGESS.js → chunk-WKSQTMU7.js} +2 -2
- package/dist/{chunk-RIZ5NUNN.js → chunk-WQ4XKIOX.js} +4 -4
- package/dist/{chunk-WWK6J6SE.js → chunk-WQURALGV.js} +4996 -2748
- package/dist/chunk-WQURALGV.js.map +1 -0
- package/dist/{chunk-QEYTRFR3.js → chunk-X26YOFGS.js} +2 -2
- package/dist/{chunk-ITHZFHST.js → chunk-X2BVB74H.js} +2 -2
- package/dist/{chunk-GNXGJBCA.js → chunk-XIYLWEXC.js} +2 -2
- package/dist/{chunk-IBJ6U753.js → chunk-XKZBZOKV.js} +4 -4
- package/dist/{chunk-7O2MC42R.js → chunk-XNRLRNQF.js} +2 -2
- package/dist/{chunk-65AUYLU3.js → chunk-XPXHQI6N.js} +2 -2
- package/dist/{chunk-JBCCWVU2.js → chunk-XRDYRWZI.js} +2 -2
- package/dist/chunk-XRWWCW4H.js +102 -0
- package/dist/chunk-XRWWCW4H.js.map +1 -0
- package/dist/chunk-YKJBSMMP.js +67137 -0
- package/dist/chunk-YKJBSMMP.js.map +1 -0
- package/dist/{chunk-2JSDPUKD.js → chunk-YMFPFXEX.js} +2 -2
- package/dist/{chunk-645WOU5I.js → chunk-ZDZJNXL6.js} +4 -4
- package/dist/{chunk-6TCXIRP5.js → chunk-ZKE4CO6B.js} +4 -4
- package/dist/{chunk-KEPXC4KN.js → chunk-ZSE774RV.js} +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +305 -187
- package/dist/coding/export-okf-codegraph.js +29 -29
- package/dist/compounding/engine.js +23 -24
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +36 -37
- package/dist/connectors/codex-materialize-runner.js +20 -20
- package/dist/connectors/index.js +21 -21
- package/dist/connectors/live/framework.d.ts +7 -0
- package/dist/connectors/live/framework.d.ts.map +1 -1
- package/dist/connectors/live/google-drive.d.ts +17 -3
- package/dist/connectors/live/google-drive.d.ts.map +1 -1
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.js +5 -5
- package/dist/contradiction/index.js +7 -6
- package/dist/{contradiction-scan-P2MHYFVG.js → contradiction-scan-IBPYGQZF.js} +4 -3
- package/dist/convergence-refresh.js +22 -22
- package/dist/corpus-watermark.js +23 -23
- package/dist/deep-recall-http-glue.js +2 -2
- package/dist/deep-recall-policy-llm.js +4 -4
- package/dist/direct-answer-wiring.js +2 -2
- package/dist/embedding-fallback.js +1 -1
- package/dist/entity-retrieval.js +21 -21
- package/dist/eval-trajectory-store.js +2 -2
- package/dist/eval-trajectory.js +2 -2
- package/dist/event-order-recall.js +2 -2
- package/dist/explicit-capture.d.ts +3 -2
- package/dist/explicit-capture.d.ts.map +1 -1
- package/dist/explicit-capture.js +530 -6
- package/dist/explicit-cue-recall.js +2 -2
- package/dist/external-wiki-access.js +2 -283
- package/dist/extraction-faithfulness.js +4 -4
- package/dist/extraction-judge.js +5 -5
- package/dist/extraction-normalization.js +1 -1
- package/dist/extraction-quote-grounding.d.ts.map +1 -1
- package/dist/extraction-quote-grounding.js +1 -1
- package/dist/extraction-source-grounding-rules.js +2 -2
- package/dist/extraction-source-grounding.js +3 -3
- package/dist/extraction.js +43 -44
- package/dist/fallback-llm-codex-subscription.js +2 -2
- package/dist/fallback-llm.js +3 -3
- package/dist/{first-start-migration-QFI7B5SH.js → first-start-migration-FILJH3RO.js} +6 -5
- package/dist/{first-start-migration-QFI7B5SH.js.map → first-start-migration-FILJH3RO.js.map} +1 -1
- package/dist/focused-list-recall.js +2 -2
- package/dist/harmonic-retrieval.js +20 -20
- package/dist/index.js +776 -797
- package/dist/lcm/index.js +2 -2
- package/dist/live-connectors-runner.d.ts +2 -0
- package/dist/live-connectors-runner.d.ts.map +1 -1
- package/dist/live-connectors-runner.js +3 -4
- package/dist/local-llm-config.js +2 -2
- package/dist/local-llm-helpers.d.ts +4 -0
- package/dist/local-llm-helpers.d.ts.map +1 -1
- package/dist/local-llm-helpers.js +3 -1
- package/dist/local-llm.d.ts +4 -1
- package/dist/local-llm.d.ts.map +1 -1
- package/dist/local-llm.js +4 -4
- package/dist/location/index.js +27 -29
- package/dist/maintenance/memory-governance.js +20 -20
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +20 -20
- package/dist/maintenance/rebuild-memory-projection-runner.js +22 -22
- package/dist/maintenance/rebuild-memory-projection.js +21 -21
- package/dist/memory-browse-operations.js +2 -283
- package/dist/memory-browse.js +8 -7
- package/dist/memory-controller.js +2 -2
- package/dist/memory-subject.js +2 -2
- package/dist/namespaces/migrate.js +21 -21
- package/dist/namespaces/search.js +5 -5
- package/dist/namespaces/storage.js +20 -20
- package/dist/offline-sync-changeset-generations.js +1 -1
- package/dist/offline-sync-embedding-generation.js +1 -1
- package/dist/offline-sync-impression-drain.js +6 -6
- package/dist/offline-sync-snapshot-stream.js +1 -1
- package/dist/offline-sync.js +1 -1
- package/dist/operator-doctor-corpus.js +24 -24
- package/dist/operator-toolkit.js +58 -61
- package/dist/orchestration/backlog-scheduler.js +279 -295
- package/dist/orchestration/backlog-scheduler.js.map +1 -1
- package/dist/orchestration/buffer-drain-runner.js +279 -295
- package/dist/orchestration/extraction-run.d.ts +4 -0
- package/dist/orchestration/extraction-run.d.ts.map +1 -1
- package/dist/orchestration/fact-dedup-window.d.ts +1 -1
- package/dist/orchestration/fact-dedup-window.d.ts.map +1 -1
- package/dist/orchestration/maintenance.js +39 -42
- package/dist/orchestrator.d.ts +11 -11
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +291 -308
- package/dist/page-versioning.js +3 -3
- package/dist/qmd-daemon-session.js +2 -2
- package/dist/qmd.js +3 -3
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.js +2 -2
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-navigation-operations.js +2 -283
- package/dist/recall-navigation.js +334 -61
- package/dist/recall-planner-llm.js +3 -3
- package/dist/recall-state-view-admission.js +6 -6
- package/dist/recall-why-service.js +10 -9
- package/dist/recall-why.js +4 -3
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/manifest.js +3 -3
- package/dist/{resolution-N7H3F2E4.js → resolution-OVVIF7ZY.js} +8 -7
- package/dist/response-guidance-recall.js +2 -2
- package/dist/resume-bundles.js +40 -41
- package/dist/salvage-envelope.js +4 -4
- package/dist/search/factory.js +4 -4
- package/dist/search/index.js +4 -4
- package/dist/semantic-consolidation.js +23 -23
- package/dist/semantic-rule-promotion.js +20 -20
- package/dist/semantic-rule-verifier.js +20 -20
- package/dist/shared-context/manager.js +2 -3
- package/dist/source-agent-qualifier.js +32 -33
- package/dist/standup/build.js +20 -20
- package/dist/{state-store-I5HLZTZT.js → state-store-EEAX2MBS.js} +2 -2
- package/dist/storage/content-hash-index.d.ts +10 -0
- package/dist/storage/content-hash-index.d.ts.map +1 -1
- package/dist/storage.js +19 -19
- package/dist/subject-config.js +3 -3
- package/dist/summarizer.d.ts +4 -1
- package/dist/summarizer.d.ts.map +1 -1
- package/dist/summarizer.js +6 -6
- package/dist/support-passport/index.js +53 -297
- package/dist/targeted-fact-recall.js +2 -2
- package/dist/tier-routing.js +3 -2
- package/dist/{tier-stats-FQGQSFET.js → tier-stats-FXEUJN73.js} +6 -5
- package/dist/{tier-stats-FQGQSFET.js.map → tier-stats-FXEUJN73.js.map} +1 -1
- package/dist/transcript.js +2 -2
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/export-okf.js +20 -20
- package/dist/types.d.ts +10 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/verified-recall.js +20 -20
- package/dist/wearables/memory-gen.d.ts +5 -1
- package/dist/wearables/memory-gen.d.ts.map +1 -1
- package/dist/wearables/service.d.ts.map +1 -1
- package/dist/who-knows-cli.js +21 -21
- package/dist/who-knows.js +20 -20
- package/dist/write-envelope.js +3 -3
- package/package.json +2 -2
- package/src/access-boundary.ts +5 -1
- package/src/access-category-alias.test.ts +5 -0
- package/src/access-mcp-frames.test.ts +60 -5
- package/src/access-mcp-frames.ts +72 -18
- package/src/access-mcp.test.ts +66 -2
- package/src/access-mcp.ts +19 -13
- package/src/access-service-coding-write.test.ts +7 -0
- package/src/access-service.ts +3 -0
- package/src/activity/journal-extract-storage.test.ts +31 -0
- package/src/activity/journal-extract.test.ts +1 -0
- package/src/activity/journal-extract.ts +24 -3
- package/src/cli.ts +1 -2
- package/src/config.test.ts +17 -0
- package/src/config.ts +25 -7
- package/src/connectors/live/framework.ts +8 -0
- package/src/connectors/live/google-drive.test.ts +74 -0
- package/src/connectors/live/google-drive.ts +138 -11
- package/src/explicit-capture.test.ts +109 -17
- package/src/explicit-capture.ts +90 -37
- package/src/extraction-quote-grounding.test.ts +20 -0
- package/src/extraction-quote-grounding.ts +21 -11
- package/src/fact-dedup-window.test.ts +37 -0
- package/src/live-connectors-runner.ts +3 -0
- package/src/live-connectors-secretref.test.ts +126 -0
- package/src/local-llm-helpers.ts +12 -0
- package/src/local-llm-shutdown.test.ts +194 -0
- package/src/local-llm.ts +32 -30
- package/src/orchestration/extraction-run.ts +12 -3
- package/src/orchestration/fact-dedup-window.ts +5 -1
- package/src/orchestrator-connector-dedup.test.ts +9 -5
- package/src/orchestrator.ts +52 -55
- package/src/storage/content-hash-index.ts +27 -2
- package/src/storage-fact-hash-publish-failure.test.ts +87 -0
- package/src/summarizer-shutdown.test.ts +195 -0
- package/src/summarizer.ts +15 -2
- package/src/types.ts +10 -10
- package/src/wearables/memory-gen.test.ts +20 -0
- package/src/wearables/memory-gen.ts +14 -7
- package/src/wearables/service.ts +14 -1
- package/src/wearables/storage-io.test.ts +25 -0
- package/dist/chunk-27XYV2XL.js +0 -43
- package/dist/chunk-27XYV2XL.js.map +0 -1
- package/dist/chunk-5KBIOI4G.js.map +0 -1
- package/dist/chunk-66L5ZRJC.js.map +0 -1
- package/dist/chunk-7HTUYFR3.js.map +0 -1
- package/dist/chunk-AOFEMUHG.js.map +0 -1
- package/dist/chunk-AP6NCP3V.js.map +0 -1
- package/dist/chunk-APYY5CX3.js +0 -335
- package/dist/chunk-APYY5CX3.js.map +0 -1
- package/dist/chunk-ATPWMT2E.js +0 -223
- package/dist/chunk-ATPWMT2E.js.map +0 -1
- package/dist/chunk-BCCG7VWM.js.map +0 -1
- package/dist/chunk-E6M225BJ.js.map +0 -1
- package/dist/chunk-EQ4U73UH.js.map +0 -1
- package/dist/chunk-ETSJD5IV.js +0 -361
- package/dist/chunk-ETSJD5IV.js.map +0 -1
- package/dist/chunk-EWJZZDRG.js.map +0 -1
- package/dist/chunk-FHGWKODN.js +0 -2300
- package/dist/chunk-FHGWKODN.js.map +0 -1
- package/dist/chunk-GRTKLWYX.js +0 -621
- package/dist/chunk-GRTKLWYX.js.map +0 -1
- package/dist/chunk-IGLJNHOX.js +0 -62
- package/dist/chunk-IGLJNHOX.js.map +0 -1
- package/dist/chunk-IPT2OY4B.js.map +0 -1
- package/dist/chunk-IUKYFTGW.js.map +0 -1
- package/dist/chunk-KUIRDD74.js +0 -3991
- package/dist/chunk-KUIRDD74.js.map +0 -1
- package/dist/chunk-MVMRUGBH.js +0 -1919
- package/dist/chunk-MVMRUGBH.js.map +0 -1
- package/dist/chunk-ODL4ZTNI.js +0 -3644
- package/dist/chunk-ODL4ZTNI.js.map +0 -1
- package/dist/chunk-OGXXGHW6.js +0 -223
- package/dist/chunk-OGXXGHW6.js.map +0 -1
- package/dist/chunk-P5VZSSYL.js.map +0 -1
- package/dist/chunk-PPCLZ4JU.js +0 -28
- package/dist/chunk-PPCLZ4JU.js.map +0 -1
- package/dist/chunk-PUEO37QG.js.map +0 -1
- package/dist/chunk-RRTVGD3J.js +0 -792
- package/dist/chunk-RRTVGD3J.js.map +0 -1
- package/dist/chunk-STSLB4HT.js +0 -18793
- package/dist/chunk-STSLB4HT.js.map +0 -1
- package/dist/chunk-T6OZW2WR.js.map +0 -1
- package/dist/chunk-TRBGGJKZ.js +0 -32218
- package/dist/chunk-TRBGGJKZ.js.map +0 -1
- package/dist/chunk-UDKWFDV2.js.map +0 -1
- package/dist/chunk-V4XE263I.js.map +0 -1
- package/dist/chunk-V7IZKJI3.js +0 -22
- package/dist/chunk-V7IZKJI3.js.map +0 -1
- package/dist/chunk-VMVVSZTD.js +0 -61
- package/dist/chunk-VMVVSZTD.js.map +0 -1
- package/dist/chunk-VNUOAXWP.js +0 -203
- package/dist/chunk-VNUOAXWP.js.map +0 -1
- package/dist/chunk-WLBEZZK5.js +0 -729
- package/dist/chunk-WLBEZZK5.js.map +0 -1
- package/dist/chunk-WUUES6CU.js +0 -25
- package/dist/chunk-WUUES6CU.js.map +0 -1
- package/dist/chunk-WWK6J6SE.js.map +0 -1
- package/dist/chunk-XICOH5HT.js +0 -346
- package/dist/chunk-XICOH5HT.js.map +0 -1
- package/dist/chunk-YCNIGRRF.js.map +0 -1
- package/dist/chunk-YS2GHSWN.js.map +0 -1
- package/dist/chunk-ZCLEYJPB.js +0 -10143
- package/dist/chunk-ZCLEYJPB.js.map +0 -1
- /package/dist/{capsule-merge-2IIXFXN5.js.map → capsule-merge-6IDAYTKG.js.map} +0 -0
- /package/dist/{chunk-QL7RHYK6.js.map → chunk-2LMA22UU.js.map} +0 -0
- /package/dist/{chunk-RGUUBAT5.js.map → chunk-2WCLTWV2.js.map} +0 -0
- /package/dist/{chunk-RSK2WIEM.js.map → chunk-2YODOG2O.js.map} +0 -0
- /package/dist/{chunk-WYG5UNDY.js.map → chunk-3AUDELZL.js.map} +0 -0
- /package/dist/{chunk-OFVCFKDH.js.map → chunk-3CYOCE6U.js.map} +0 -0
- /package/dist/{chunk-6HM6HARE.js.map → chunk-3FBAEPCU.js.map} +0 -0
- /package/dist/{chunk-PIITB2YZ.js.map → chunk-3ZS3NUEI.js.map} +0 -0
- /package/dist/{chunk-ANZZLRUX.js.map → chunk-4IVRQMZW.js.map} +0 -0
- /package/dist/{chunk-63E37JCN.js.map → chunk-4RAJT5L2.js.map} +0 -0
- /package/dist/{chunk-45VUHDV2.js.map → chunk-5CO5G4MN.js.map} +0 -0
- /package/dist/{chunk-3UMDRGFS.js.map → chunk-65HWAQ4F.js.map} +0 -0
- /package/dist/{chunk-T67LUYCR.js.map → chunk-77NTFICT.js.map} +0 -0
- /package/dist/{chunk-UE6RRXMF.js.map → chunk-A4F7OIC5.js.map} +0 -0
- /package/dist/{chunk-63O7LVMN.js.map → chunk-B33YWUJV.js.map} +0 -0
- /package/dist/{chunk-QVMOCJRV.js.map → chunk-B377OKUP.js.map} +0 -0
- /package/dist/{chunk-ZT6WPSII.js.map → chunk-BGHCSLE5.js.map} +0 -0
- /package/dist/{chunk-YYOMGOHB.js.map → chunk-BOK6BN5M.js.map} +0 -0
- /package/dist/{chunk-OH7QLI6W.js.map → chunk-BPPUH5JM.js.map} +0 -0
- /package/dist/{chunk-EV76IZ37.js.map → chunk-BTI4C4MA.js.map} +0 -0
- /package/dist/{chunk-O6ZSWHVR.js.map → chunk-C2KE5DMD.js.map} +0 -0
- /package/dist/{chunk-47F6WWLQ.js.map → chunk-C73N66PR.js.map} +0 -0
- /package/dist/{chunk-3XIWW4TB.js.map → chunk-CGJYL633.js.map} +0 -0
- /package/dist/{chunk-WRT7GJ2D.js.map → chunk-CIWMTNHW.js.map} +0 -0
- /package/dist/{chunk-O55EKIEC.js.map → chunk-D3ZKHLN2.js.map} +0 -0
- /package/dist/{chunk-CD4BCCNP.js.map → chunk-DJ7WVEWX.js.map} +0 -0
- /package/dist/{chunk-RO7RUBLD.js.map → chunk-EFL24KOI.js.map} +0 -0
- /package/dist/{chunk-4CJTQHEG.js.map → chunk-ESLOLCD4.js.map} +0 -0
- /package/dist/{chunk-Z4Q6USKJ.js.map → chunk-ETBVCRVL.js.map} +0 -0
- /package/dist/{chunk-VILPVT4S.js.map → chunk-EZ47HOJ6.js.map} +0 -0
- /package/dist/{chunk-EFYN5I7Z.js.map → chunk-F4QFU5IZ.js.map} +0 -0
- /package/dist/{chunk-SHUBTAY2.js.map → chunk-FMKILENU.js.map} +0 -0
- /package/dist/{chunk-YLXETSAH.js.map → chunk-GCZJ7XRI.js.map} +0 -0
- /package/dist/{chunk-QFEDITXM.js.map → chunk-JNDMIAJ4.js.map} +0 -0
- /package/dist/{chunk-E5PPE4VA.js.map → chunk-K2VRKCPA.js.map} +0 -0
- /package/dist/{chunk-MKRYQROF.js.map → chunk-LGEHAQHK.js.map} +0 -0
- /package/dist/{chunk-XYTQJD7F.js.map → chunk-LMJVP5CM.js.map} +0 -0
- /package/dist/{chunk-JC36FPQ5.js.map → chunk-LPV72KRQ.js.map} +0 -0
- /package/dist/{chunk-2LCRG2YV.js.map → chunk-M2XR6B6V.js.map} +0 -0
- /package/dist/{chunk-VPQFK63H.js.map → chunk-MH632KPO.js.map} +0 -0
- /package/dist/{chunk-ZU5JDLOH.js.map → chunk-MMRTPH3J.js.map} +0 -0
- /package/dist/{chunk-ZZ67UTQX.js.map → chunk-MUX7IL77.js.map} +0 -0
- /package/dist/{chunk-RYWROSL5.js.map → chunk-NAQ4A5IX.js.map} +0 -0
- /package/dist/{chunk-TVIVY7KU.js.map → chunk-NED7IR7B.js.map} +0 -0
- /package/dist/{chunk-ADYP7HXE.js.map → chunk-NHVAX7MH.js.map} +0 -0
- /package/dist/{chunk-TG3R2SID.js.map → chunk-NMGHGTVR.js.map} +0 -0
- /package/dist/{chunk-NGHDW6UU.js.map → chunk-NUQEREIP.js.map} +0 -0
- /package/dist/{chunk-5IIQU4JZ.js.map → chunk-OB72KNMF.js.map} +0 -0
- /package/dist/{chunk-7L3TODI7.js.map → chunk-OJXJWNFY.js.map} +0 -0
- /package/dist/{chunk-EURPSF4Y.js.map → chunk-PH5ZQM35.js.map} +0 -0
- /package/dist/{chunk-BMWMTAQF.js.map → chunk-PRAUN6PN.js.map} +0 -0
- /package/dist/{chunk-RWGRSKN5.js.map → chunk-PT4DZDJA.js.map} +0 -0
- /package/dist/{chunk-7EPY3IQL.js.map → chunk-PZJQ46DH.js.map} +0 -0
- /package/dist/{chunk-AH637HZ5.js.map → chunk-QDESY76F.js.map} +0 -0
- /package/dist/{chunk-I6QGI65T.js.map → chunk-QRMG4HK4.js.map} +0 -0
- /package/dist/{chunk-ZU3NJNO7.js.map → chunk-QSF5SJAM.js.map} +0 -0
- /package/dist/{chunk-5IYOKDM4.js.map → chunk-R23JWJD3.js.map} +0 -0
- /package/dist/{chunk-LJQFJF4J.js.map → chunk-RM2YUFH6.js.map} +0 -0
- /package/dist/{chunk-6QMWECO5.js.map → chunk-SGQPR5SX.js.map} +0 -0
- /package/dist/{chunk-ZGFLIK5H.js.map → chunk-SPAKBUJY.js.map} +0 -0
- /package/dist/{chunk-ER7XANP3.js.map → chunk-SQ3GEIEL.js.map} +0 -0
- /package/dist/{chunk-5UCMYPVF.js.map → chunk-SVT5IA2H.js.map} +0 -0
- /package/dist/{chunk-FRSHF6FU.js.map → chunk-TJ4F6H4H.js.map} +0 -0
- /package/dist/{chunk-R6HMAIKM.js.map → chunk-TOSPNM4T.js.map} +0 -0
- /package/dist/{chunk-NJJMVS5Y.js.map → chunk-TRQE3RYR.js.map} +0 -0
- /package/dist/{chunk-RMXS4I66.js.map → chunk-TVDJEUV5.js.map} +0 -0
- /package/dist/{chunk-PLCYKAWH.js.map → chunk-TYRWSE4B.js.map} +0 -0
- /package/dist/{chunk-IQWUACVG.js.map → chunk-UHMHJX5G.js.map} +0 -0
- /package/dist/{chunk-YODUDA6R.js.map → chunk-UN4RVUG2.js.map} +0 -0
- /package/dist/{chunk-KZSGBWOJ.js.map → chunk-V2KGDESV.js.map} +0 -0
- /package/dist/{chunk-E6Z4FBX6.js.map → chunk-V2QSNFCT.js.map} +0 -0
- /package/dist/{chunk-N74SGESS.js.map → chunk-WKSQTMU7.js.map} +0 -0
- /package/dist/{chunk-RIZ5NUNN.js.map → chunk-WQ4XKIOX.js.map} +0 -0
- /package/dist/{chunk-QEYTRFR3.js.map → chunk-X26YOFGS.js.map} +0 -0
- /package/dist/{chunk-ITHZFHST.js.map → chunk-X2BVB74H.js.map} +0 -0
- /package/dist/{chunk-GNXGJBCA.js.map → chunk-XIYLWEXC.js.map} +0 -0
- /package/dist/{chunk-IBJ6U753.js.map → chunk-XKZBZOKV.js.map} +0 -0
- /package/dist/{chunk-7O2MC42R.js.map → chunk-XNRLRNQF.js.map} +0 -0
- /package/dist/{chunk-65AUYLU3.js.map → chunk-XPXHQI6N.js.map} +0 -0
- /package/dist/{chunk-JBCCWVU2.js.map → chunk-XRDYRWZI.js.map} +0 -0
- /package/dist/{chunk-2JSDPUKD.js.map → chunk-YMFPFXEX.js.map} +0 -0
- /package/dist/{chunk-645WOU5I.js.map → chunk-ZDZJNXL6.js.map} +0 -0
- /package/dist/{chunk-6TCXIRP5.js.map → chunk-ZKE4CO6B.js.map} +0 -0
- /package/dist/{chunk-KEPXC4KN.js.map → chunk-ZSE774RV.js.map} +0 -0
- /package/dist/{contradiction-scan-P2MHYFVG.js.map → contradiction-scan-IBPYGQZF.js.map} +0 -0
- /package/dist/{resolution-N7H3F2E4.js.map → resolution-OVVIF7ZY.js.map} +0 -0
- /package/dist/{state-store-I5HLZTZT.js.map → state-store-EEAX2MBS.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/access-operations-batch.ts"],"sourcesContent":["/**\n * Batch migration of remaining access-surface handlers through the boundary\n * (issue #1525 / #1668). Each operation routes MCP/HTTP/CLI dispatch through\n * the shared validation + error-mapping layer in access-boundary.ts.\n *\n * Strict per-tool Zod schemas replace the earlier permissive looseSchema (#1668).\n * Each schema validates known field types; .passthrough() tolerates MCP client\n * context injection (cwd/projectTag/sessionKey) without silent type coercion.\n * The stripNulls preprocessor handles the OpenAI-schema null-for-absent gotcha.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { z } from \"zod\";\nimport type { DreamsPhase, RecallDisclosure, RecallPlanMode } from \"./types.js\";\nimport type { RemnicChatGptMemoryInspectorInput } from \"./mcp-memory-inspector-app.js\";\nimport { defineOperation } from \"./access-boundary.js\";\nimport { EngramAccessForbiddenError, rejectReservedArgumentKey } from \"./access-errors.js\";\nimport {\n type ObserveRequest,\n observeRequestSchema,\n type RecallRequest,\n recallRequestSchema,\n retainedCategoryAlias,\n suggestionSubmitRequestSchema,\n} from \"./access-schema.js\";\nimport { EngramAccessInputError, type EngramAccessService, type EngramAccessBriefingRequest } from \"./access-service.js\";\nimport { enforceNamespaceAllowList, tokenCapabilityStore } from \"./access-token-capabilities.js\";\nimport { projectTagProjectId } from \"./coding/coding-namespace.js\";\nimport {\n parseNamespacePreflightWriteOp,\n resolveAuthorizedNamespaceWritablePreflight,\n type EngramAccessNamespaceWritableRequest,\n} from \"./access-namespace-preflight.js\";\nimport { expandTildePath } from \"./utils/path.js\";\nimport { resolvePrincipal } from \"./namespaces/principal.js\";\nimport {\n parseSharedWriteOutputControls,\n type SharedWriteOutputControls,\n} from \"./shared-context/write-output-controls.js\";\nimport { getRecallTimingStatus, isRecallTimingsOperator } from \"./recall-timings.js\";\nimport { parseDeepRecallMaxSteps } from \"./deep-recall-config.js\";\nimport { validateBriefingFormat } from \"./briefing.js\";\nimport {\n buildChatGptMemoryInspectorActionRequest,\n buildChatGptMemoryInspectorResult,\n} from \"./mcp-memory-inspector-app.js\";\nimport { listPairs, isDefaultReviewNamespace, readPair } from \"./contradiction/contradiction-review.js\";\nimport { executeResolution, isValidResolutionVerb } from \"./contradiction/resolution.js\";\nimport { runContradictionScan } from \"./contradiction/contradiction-scan.js\";\nimport { runPreferenceDriftScan } from \"./preferences/preference-drift.js\";\nimport { runGraphEdgeDecayMaintenanceAcrossNamespaces } from \"./maintenance/graph-edge-decay.js\";\nimport { normalizeDreamsStatusWindowHours } from \"./maintenance/dreams-ledger.js\";\n\n// ---------------------------------------------------------------------------\n// Shared helpers\n// ---------------------------------------------------------------------------\n\n// Object.create(null): a plain {} lets a copied own `__proto__` member invoke\n// the prototype setter, so an inherited field could reach the zod parse\n// (issue #3225 B1).\nfunction stripNulls(data: unknown): unknown {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned = Object.create(null);\n for (const [key, value] of Object.entries(obj)) {\n rejectReservedArgumentKey(key);\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n}\n\nfunction strictSchema<T extends z.ZodRawShape>(shape: T): z.ZodType<Record<string, unknown>> {\n return z.preprocess(stripNulls, z.object(shape).passthrough()) as unknown as z.ZodType<Record<string, unknown>>;\n}\n\n/**\n * stripNulls, but keys listed in `preserve` keep their null values. Used by\n * boundary schemas whose wire contract treats an explicit `null` as a\n * meaningful value (e.g. recall `codingContext: null` clears the session\n * context — it must not be collapsed into \"absent\").\n */\nfunction stripNullsExcept(data: unknown, preserve: readonly string[]): unknown {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const cleaned = Object.create(null);\n for (const [key, value] of Object.entries(data as Record<string, unknown>)) {\n rejectReservedArgumentKey(key);\n if (value !== null || preserve.includes(key)) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n}\n\n\nfunction optStr(v: unknown): string | undefined { return typeof v === \"string\" ? v : undefined; }\nfunction reqStr(v: unknown, field: string): string {\n if (typeof v !== \"string\" || v.length === 0) throw new EngramAccessInputError(field + \" is required and must be a non-empty string\");\n return v;\n}\nfunction defStr(v: unknown, d: string): string { return typeof v === \"string\" ? v : d; }\nfunction optNum(v: unknown): number | undefined { return typeof v === \"number\" && Number.isFinite(v) ? v : undefined; }\nfunction optBool(v: unknown): boolean | undefined { return typeof v === \"boolean\" ? v : undefined; }\nfunction optStrArr(v: unknown): string[] | undefined { return Array.isArray(v) && v.every((x) => typeof x === \"string\") ? v : undefined; }\n\nconst S = {\n str: z.string().optional(),\n num: z.number().optional(),\n // Accept numbers and numeric strings (MCP clients sometimes send \"7\" for 7).\n flexNum: z.union([z.number(), z.string()]).optional(),\n bool: z.boolean().optional(),\n strArr: z.array(z.string()).optional(),\n};\n\n// === RECALL ===\n// Issue #2482: the boundary validates against the SAME canonical zod schema\n// the HTTP transport uses (recallRequestSchema). No parallel field list, no\n// silent defaults — a missing `query` or a bad enum is a 400 at the boundary.\n// `codingContext: null` survives the null-strip (explicit session-context\n// clear); every other null is the MCP null-for-absent idiom.\ndefineOperation({\n name: \"recall\",\n description: \"Semantic recall.\",\n schema: z.preprocess((data) => stripNullsExcept(data, [\"codingContext\"]), recallRequestSchema) as unknown as z.ZodType<RecallRequest>,\n handler: async (input, ctx) => ({\n result: await ctx.service.recall({\n ...input,\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),\n ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}),\n }),\n }),\n});\ndefineOperation({ name: \"recall_explain\", description: \"Explain recall plan.\", schema: strictSchema({ sessionKey: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.recallExplain({ sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"set_coding_context\", description: \"Set coding context.\", schema: z.preprocess((data) => stripNullsExcept(data, [\"codingContext\"]), z.object({ sessionKey: S.str, codingContext: z.union([z.null(), z.object({ projectId: S.str, branch: z.union([z.string(), z.null()]).optional(), rootPath: S.str, defaultBranch: z.union([z.string(), z.null()]).optional() }).passthrough()]).optional(), projectTag: S.str }).passthrough()) as unknown as z.ZodType<Record<string, unknown>>, // codingContext: null = clear context (preserved).\n handler: async (input, ctx) => {\n const sessionKey = defStr(input.sessionKey, \"\");\n const projectTag = optStr(input.projectTag);\n const hasProjectTag = projectTag !== undefined && projectTag.trim().length > 0;\n const hasCodingContext = \"codingContext\" in input;\n if (!hasCodingContext && hasProjectTag) { const tag = projectTag!.trim(); const pid = projectTagProjectId(tag); ctx.service.setCodingContext({ sessionKey, codingContext: { projectId: pid, branch: null, rootPath: pid, defaultBranch: null } }); return { result: { ok: true } }; }\n if (!hasCodingContext && !hasProjectTag) throw new EngramAccessInputError(\"set_coding_context requires either codingContext or projectTag\");\n const rawCtx = (input as Record<string, unknown>).codingContext;\n let codingContext: { projectId: string; branch: string | null; rootPath: string; defaultBranch: string | null } | null = null;\n if (rawCtx !== null) { if (typeof rawCtx !== \"object\") throw new EngramAccessInputError(\"codingContext must be an object or null\"); const o = rawCtx as Record<string, unknown>; const branch = o.branch === null ? null : optStr(o.branch); const dB = o.defaultBranch === null ? null : optStr(o.defaultBranch); if (branch === undefined) throw new EngramAccessInputError(\"codingContext.branch must be a string or null\"); if (dB === undefined) throw new EngramAccessInputError(\"codingContext.defaultBranch must be a string or null\"); codingContext = { projectId: defStr(o.projectId, \"\"), branch, rootPath: defStr(o.rootPath, \"\"), defaultBranch: dB }; }\n ctx.service.setCodingContext({ sessionKey, codingContext });\n return { result: { ok: true } };\n },\n});\ndefineOperation({ name: \"recall_tier_explain\", description: \"Explain recall tiers.\", schema: strictSchema({ sessionKey: S.str, namespace: S.str }), handler: async (input, ctx) => { const sk = optStr(input.sessionKey); const ns = optStr(input.namespace); return { result: await ctx.service.recallTierExplain(sk && sk.length > 0 ? sk : undefined, ns && ns.length > 0 ? ns : undefined, ctx.authenticatedPrincipal) }; } });\ndefineOperation({ name: \"recall_xray\", description: \"X-ray recall.\", schema: strictSchema({ query: S.str, sessionKey: S.str, namespace: S.str, budget: z.unknown().optional(), disclosure: S.str }),\n handler: async (input, ctx) => {\n let budget: number | undefined;\n if (input.budget !== undefined) { const p = typeof input.budget === \"number\" ? input.budget : typeof input.budget === \"string\" ? Number(input.budget) : undefined; if (p === undefined || !Number.isFinite(p) || p <= 0 || !Number.isInteger(p)) throw new EngramAccessInputError(\"recall_xray: budget expects a positive integer\"); budget = p; }\n const dr = optStr(input.disclosure);\n return { result: await ctx.service.recallXray({ query: defStr(input.query, \"\"), sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), budget, authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, ...(dr && dr !== \"\" ? { disclosure: dr as RecallDisclosure } : {}), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };\n },\n});\ndefineOperation({ name: \"recall_why\", description: \"Diagnose why a query did not recall an expected memory (#3033). Read-only.\", schema: strictSchema({ query: S.str, expect: S.str, sessionKey: S.str, namespace: S.str }),\n handler: async (input, ctx) => {\n // A supplied-but-blank `expect` is a caller mistake: forward it so the\n // service rejects it, matching the HTTP route's 400 (checklist #39).\n const expect = optStr(input.expect);\n return { result: await ctx.service.recallWhy({ query: defStr(input.query, \"\"), ...(expect !== undefined ? { expect } : {}), sessionKey: optStr(input.sessionKey), namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal, sourceConnector: ctx.sourceConnector, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };\n },\n});\ndefineOperation({ name: \"who_knows\", description: \"Rank entities by demonstrated expertise for a topic (#2057).\", schema: strictSchema({ topic: S.str, limit: S.flexNum, namespace: S.str }),\n handler: async (input, ctx) => {\n const topic = defStr(input.topic, \"\");\n let limit: number | undefined;\n if (input.limit !== undefined) { const p = typeof input.limit === \"number\" ? input.limit : Number(input.limit); if (!Number.isInteger(p) || p < 1) throw new EngramAccessInputError(\"who_knows: limit expects a positive integer\"); limit = p; }\n return { result: await ctx.service.whoKnows({ topic, ...(limit !== undefined ? { limit } : {}), namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) };\n },\n});\ndefineOperation({ name: \"promotion_candidates\", description: \"List agent-subject reuse-signaled promotion candidates (#2372).\", schema: strictSchema({ namespace: S.str, targetNamespace: S.str, limit: S.flexNum }),\n handler: async (input, ctx) => {\n let limit: number | undefined;\n if (input.limit !== undefined) { const p = typeof input.limit === \"number\" ? input.limit : Number(input.limit); if (!Number.isInteger(p) || p < 1 || p > 100) throw new EngramAccessInputError(\"promotion_candidates: limit expects an integer in [1, 100]\"); limit = p; }\n return { result: await ctx.service.promotionCandidates({ ...(limit !== undefined ? { limit } : {}), namespace: optStr(input.namespace), targetNamespace: optStr(input.targetNamespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) };\n },\n});\ndefineOperation({ name: \"namespace_writable\", description: \"Read-only preflight: is a namespace writable for the caller's principal?\", allowedByOps: [\"namespace_writable\", \"observe\", \"memory_store\"], schema: strictSchema({ namespace: S.str, sessionKey: S.str, op: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => {\n const writeOp = parseNamespacePreflightWriteOp(optStr(input.op));\n const namespace = optStr(input.namespace);\n const request: EngramAccessNamespaceWritableRequest = {\n sessionKey: optStr(input.sessionKey),\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n cwd: optStr(input.cwd),\n projectTag: optStr(input.projectTag),\n ...(namespace ? { namespace } : {}),\n };\n return {\n result: await resolveAuthorizedNamespaceWritablePreflight(\n tokenCapabilityStore.getStore(),\n request,\n ctx.service.configRef.defaultNamespace,\n writeOp,\n (preflightRequest) => ctx.service.namespaceWritablePreflight(preflightRequest),\n ),\n };\n} });\n\n// === WEARABLES ===\ndefineOperation({ name: \"wearables_status\", description: \"Wearables status.\", schema: strictSchema({ namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.wearablesStatus({ authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }) }) });\ndefineOperation({ name: \"wearables_sync\", description: \"Sync wearables.\", schema: strictSchema({ source: S.str, date: S.str, days: S.flexNum, forceMemories: S.bool, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => { const summaries = await ctx.service.wearablesSync({ source: optStr(input.source), date: optStr(input.date), days: typeof input.days === \"number\" ? input.days : typeof input.days === \"string\" && Number.isFinite(Number(input.days)) ? Number(input.days) : undefined, forceMemories: optBool(input.forceMemories), authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }); return { result: { summaries } }; } });\ndefineOperation({ name: \"transcript_day\", description: \"Transcript for a day.\", schema: strictSchema({ date: S.str, source: S.str, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => { const d = defStr(input.date, \"\"); if (d.trim().length === 0) throw new EngramAccessInputError(\"transcript_day: date is required (YYYY-MM-DD)\"); const transcripts = await ctx.service.wearablesTranscriptDay({ date: d, source: optStr(input.source), authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }); return { result: { transcripts } }; } });\ndefineOperation({ name: \"transcript_search\", description: \"Search transcripts.\", schema: strictSchema({ query: S.str, source: S.str, from: S.str, to: S.str, limit: S.flexNum, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => { const q = defStr(input.query, \"\"); if (q.trim().length === 0) throw new EngramAccessInputError(\"transcript_search: query is required\"); const results = await ctx.service.wearablesTranscriptSearch({ query: q, source: optStr(input.source), from: optStr(input.from), to: optStr(input.to), limit: typeof input.limit === \"number\" ? input.limit : typeof input.limit === \"string\" && Number.isFinite(Number(input.limit)) ? Number(input.limit) : undefined, authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }); return { result: { results } }; } });\ndefineOperation({ name: \"transcript_memories\", description: \"Transcript memories.\", schema: strictSchema({ source: S.str, date: S.str, limit: S.flexNum, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => { const memories = await ctx.service.wearablesTranscriptMemories({ source: optStr(input.source), date: optStr(input.date), limit: typeof input.limit === \"number\" ? input.limit : typeof input.limit === \"string\" && Number.isFinite(Number(input.limit)) ? Number(input.limit) : undefined, authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }); return { result: { memories } }; } });\n\n// === MEETINGS (issue #1900) ===\ndefineOperation({ name: \"meetings_list\", description: \"List stored meeting records (all days, or one day).\", schema: strictSchema({ date: S.str, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => { const d = optStr(input.date); return { result: await ctx.service.meetingsList(d && d.length > 0 ? d : undefined, { authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }) }; } });\ndefineOperation({ name: \"meetings_get\", description: \"Get a stored meeting record by id.\", schema: strictSchema({ id: S.str, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.meetingsGet(reqStr(input.id, \"id\"), { authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }) }) });\ndefineOperation({ name: \"meetings_build\", description: \"Detect + fuse + store a day's meetings.\", schema: strictSchema({ date: S.str, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.meetingsBuild(reqStr(input.date, \"date\"), { authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey) }) }) });\n// === DEEP RECALL (issue #2332) — budgeted REFINE/EXPAND/STOP retrieval ===\ndefineOperation({ name: \"deep_recall\", description: \"Budgeted multi-hop deep recall over the anchor graph.\", schema: strictSchema({ query: S.str, maxSteps: S.flexNum, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => {\n const q = defStr(input.query, \"\");\n if (q.trim().length === 0) throw new EngramAccessInputError(\"deep_recall: query is required\");\n // Strict boundary parse (issue #2915): `\"abc\"` must NOT silently become the\n // configured default and `\"\"` must NOT become 0 — both are rejected.\n let maxSteps: number | undefined;\n try {\n maxSteps = parseDeepRecallMaxSteps(input.maxSteps);\n } catch (err) {\n throw new EngramAccessInputError(`deep_recall: ${err instanceof Error ? err.message : String(err)}`);\n }\n return { result: await ctx.service.deepRecall({ query: q, maxSteps, authenticatedPrincipal: ctx.authenticatedPrincipal, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey), ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) };\n} });\n\n// === ACTION CONFIDENCE + INSPECTOR + CAPSULE ===\ndefineOperation({ name: \"action_confidence\", description: \"Action confidence.\", schema: strictSchema({ intendedAction: S.str, confidence: S.num, risk: S.str, contextReadiness: S.str, currentContextScopes: S.strArr, userRules: z.array(z.unknown()).optional(), retrievedMemories: z.array(z.unknown()).optional() }), handler: async (input, ctx) => { const req: Record<string, unknown> = {}; if (input.intendedAction !== undefined) req.intendedAction = optStr(input.intendedAction); if (input.confidence !== undefined) req.confidence = optNum(input.confidence); if (input.risk !== undefined) req.risk = optStr(input.risk) as \"low\" | \"medium\" | \"high\" | \"irreversible\" | \"restricted\" | undefined; if (input.contextReadiness !== undefined) req.contextReadiness = optStr(input.contextReadiness) as \"none\" | \"partial\" | \"sufficient\" | undefined; if (input.currentContextScopes !== undefined) req.currentContextScopes = optStrArr(input.currentContextScopes); if (input.userRules !== undefined) req.userRules = input.userRules; if (input.retrievedMemories !== undefined) req.retrievedMemories = input.retrievedMemories; return { result: await ctx.service.actionConfidence(req) }; } });\ndefineOperation({ name: \"chatgpt_memory_inspector\", description: \"Memory inspector.\", schema: strictSchema({ query: S.str, sessionKey: S.str, namespace: S.str, currentContextScopes: S.strArr, allowUnverifiedPreview: S.bool }),\n handler: async (input, ctx) => {\n const q = defStr(input.query, \"\");\n if (q.trim().length === 0) throw new EngramAccessInputError(\"chatgpt_memory_inspector requires a non-empty query string\");\n const ii: RemnicChatGptMemoryInspectorInput = { query: q.trim() };\n if (typeof input.sessionKey === \"string\" && input.sessionKey.trim().length > 0) ii.sessionKey = input.sessionKey;\n if (typeof input.namespace === \"string\" && input.namespace.trim().length > 0) ii.namespace = input.namespace;\n if (input.currentContextScopes !== undefined) ii.currentContextScopes = input.currentContextScopes as string[];\n if (input.allowUnverifiedPreview !== undefined) ii.allowUnverifiedPreview = input.allowUnverifiedPreview as boolean;\n const rsk = ii.sessionKey ?? (ctx.authenticatedPrincipal ? \"remnic:chatgpt-memory-inspector:\" + randomUUID() : undefined);\n const xr = await ctx.service.recallXray({ query: ii.query, sessionKey: rsk, namespace: ii.namespace, currentContextScopes: ii.currentContextScopes, authenticatedPrincipal: ctx.authenticatedPrincipal, ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}), mode: \"full\", disclosure: \"chunk\", includeRecall: true, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) });\n const x = xr.snapshotFound === true ? (xr.snapshot ?? null) : null;\n const r = xr.recall ?? { query: ii.query, namespace: ii.namespace ?? x?.namespace ?? \"global\", context: \"\", count: 0, memoryIds: [], results: [], fallbackUsed: false, sourcesUsed: [], disclosure: \"chunk\" as const };\n const ac = await ctx.service.actionConfidence(buildChatGptMemoryInspectorActionRequest(ii, r, x));\n return { result: buildChatGptMemoryInspectorResult(ii, r, x, ac) };\n },\n});\ndefineOperation({ name: \"day_summary\", description: \"Day summary.\", schema: strictSchema({ memories: S.str, includeLocation: S.bool, sessionKey: S.str, namespace: S.str, timeZone: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => { const req: Record<string, unknown> = {}; if (input.memories !== undefined) req.memories = optStr(input.memories); if (input.includeLocation !== undefined) req.includeLocation = optBool(input.includeLocation); if (input.sessionKey !== undefined) req.sessionKey = optStr(input.sessionKey); if (input.namespace !== undefined) req.namespace = optStr(input.namespace); if (input.timeZone !== undefined) req.timeZone = optStr(input.timeZone); const summary = await ctx.service.daySummary(req); return { result: summary ?? {} }; } });\ndefineOperation({ name: \"capsule_export\", description: \"Export capsule.\", schema: strictSchema({ name: S.str, namespace: S.str, since: S.str, includeKinds: S.strArr, peerIds: S.strArr, includeTranscripts: S.bool, encrypt: S.bool, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.capsuleExport({ name: optStr(input.name) ?? \"\", namespace: optStr(input.namespace), since: optStr(input.since), includeKinds: optStrArr(input.includeKinds), peerIds: optStrArr(input.peerIds), includeTranscripts: optBool(input.includeTranscripts as unknown), encrypt: optBool(input.encrypt as unknown), principal: ctx.authenticatedPrincipal } as unknown as Parameters<EngramAccessService[\"capsuleExport\"]>[0]) }) });\ndefineOperation({ name: \"capsule_import\", description: \"Import capsule.\", schema: strictSchema({ archivePath: S.str, namespace: S.str, mode: S.str, passphrase: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.capsuleImport({ archivePath: expandTildePath(optStr(input.archivePath) ?? \"\"), namespace: optStr(input.namespace), mode: optStr(input.mode) as \"skip\" | \"overwrite\" | \"fork\" | undefined, passphrase: optStr(input.passphrase), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"capsule_list\", description: \"List capsules.\", schema: strictSchema({ namespace: S.str, sessionKey: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => {\n const rp = ctx.authenticatedPrincipal ?? (typeof input.sessionKey === \"string\" && input.sessionKey.length > 0 && ctx.service.configRef ? resolvePrincipal(input.sessionKey, ctx.service.configRef) : undefined);\n return { result: await ctx.service.capsuleList({ namespace: optStr(input.namespace), principal: rp }) };\n} });\n\n// === GOVERNANCE ===\ndefineOperation({ name: \"memory_governance_run\", description: \"Run governance.\", schema: strictSchema({ namespace: S.str, mode: S.str, recentDays: S.num, maxMemories: S.num, batchSize: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.governanceRun({ namespace: optStr(input.namespace), mode: optStr(input.mode) === \"apply\" ? \"apply\" : \"shadow\", recentDays: optNum(input.recentDays), maxMemories: optNum(input.maxMemories), batchSize: optNum(input.batchSize), authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"entity_synthesis_run\", description: \"Bulk-drain the entity synthesis queue (issue #2136).\", schema: strictSchema({ namespace: S.str, maxEntities: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.entitySynthesisRun({ namespace: optStr(input.namespace), maxEntities: input.maxEntities === undefined ? undefined : (input.maxEntities as number), authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"procedure_mining_run\", description: \"Run procedure mining.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.procedureMiningRun({ namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"pattern_reinforcement_run\", description: \"Run pattern reinforcement.\", schema: strictSchema({ namespace: S.str, force: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.patternReinforcementRun({ namespace: optStr(input.namespace), force: input.force === true, authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"procedural_stats\", description: \"Procedural stats.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.procedureStats({ namespace: optStr(input.namespace) }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"procedure_library_maintenance\", description: \"Run procedure library maintenance (issue #2370): shadow-first merge / repair-flag / retire from outcome telemetry. apply=true plus procedural.maintenance.enabled required for writes.\", schema: strictSchema({ namespace: S.str, apply: S.bool, dryRun: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.procedureLibraryMaintenance({ namespace: optStr(input.namespace), apply: input.apply === true, dryRun: input.dryRun === true, authenticatedPrincipal: ctx.authenticatedPrincipal }, ctx.authenticatedPrincipal) }) });\n\n// === MEMORY/ENTITY/OBSERVE/LCM ===\ndefineOperation({ name: \"memory_timeline\", description: \"Memory timeline.\", schema: strictSchema({ memoryId: S.str, namespace: S.str, limit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.memoryTimeline(optStr(input.memoryId) ?? \"\", optStr(input.namespace), optNum(input.limit) ?? 200, ctx.authenticatedPrincipal) }) });\n// Issue #2482/#2829: suggestion_submit validates through the canonical\n// suggestionSubmitRequestSchema — the SAME schema the HTTP transport and the\n// MCP wire parse use, category alias transform included. The raw spelling\n// survives on `ctx.rawInput` for the coercion note.\ndefineOperation({\n name: \"suggestion_submit\",\n description: \"Submit suggestion.\",\n schema: z.preprocess((data) => stripNullsExcept(data, [\"codingContext\"]), suggestionSubmitRequestSchema),\n handler: async (input, ctx) => {\n const rawCategory = retainedCategoryAlias(ctx.rawInput);\n return {\n result: await ctx.service.suggestionSubmit({\n ...input,\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),\n ...(rawCategory ? { rawCategory } : {}),\n }),\n };\n },\n});\ndefineOperation({ name: \"entity_get\", description: \"Get entity.\", schema: strictSchema({ name: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.entityGet(optStr(input.name) ?? \"\", optStr(input.namespace), ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"review_queue_list\", description: \"List review queue.\", schema: strictSchema({ runId: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.reviewQueue(optStr(input.runId) ?? \"\", optStr(input.namespace), ctx.authenticatedPrincipal) }) });\n// Issue #2482: observe validates through the canonical observeRequestSchema\n// (same as HTTP/MCP wire validation). Nullable wire fields (parts /\n// sourceFormat) map to undefined for the service's cleaned message form.\ndefineOperation({\n name: \"observe\",\n description: \"Observe messages.\",\n schema: z.preprocess(stripNulls, observeRequestSchema) as unknown as z.ZodType<ObserveRequest>,\n handler: async (input, ctx) => ({\n result: await ctx.service.observe(\n {\n sessionKey: input.sessionKey,\n messages: input.messages.map((message) => ({\n role: message.role,\n content: message.content,\n ...(message.parts ? { parts: message.parts } : {}),\n ...(message.rawContent !== undefined ? { rawContent: message.rawContent } : {}),\n ...(message.sourceFormat ? { sourceFormat: message.sourceFormat } : {}),\n })),\n skipExtraction: input.skipExtraction === true,\n idempotencyKey: input.idempotencyKey,\n namespace: input.namespace,\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n cwd: input.cwd,\n projectTag: input.projectTag,\n ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),\n },\n ctx.hooks?.enforceWriteQuota ? { enforceWriteQuota: ctx.hooks.enforceWriteQuota } : undefined,\n ),\n }),\n});\ndefineOperation({ name: \"lcm_search\", description: \"Search LCM.\", schema: strictSchema({ query: S.str, sessionKey: S.str, sessionPrefix: S.str, namespace: S.str, limit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.lcmSearch({ query: defStr(input.query, \"\"), sessionKey: optStr(input.sessionKey), sessionPrefix: optStr(input.sessionPrefix), namespace: optStr(input.namespace), limit: optNum(input.limit), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"lcm_compaction_flush\", description: \"Flush LCM compaction.\", schema: strictSchema({ sessionKey: S.str, namespace: S.str, cwd: S.str, projectTag: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.lcmCompactionFlush({ sessionKey: optStr(input.sessionKey) ?? \"\", namespace: optStr(input.namespace), cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), authenticatedPrincipal: ctx.authenticatedPrincipal, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) }) });\ndefineOperation({ name: \"extraction_force_flush\", description: \"Force-drain a session extraction buffer.\", schema: strictSchema({ sessionKey: S.str, namespace: S.str, cwd: S.str, projectTag: S.str, deadlineMs: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.extractionForceFlush({ sessionKey: optStr(input.sessionKey) ?? \"\", namespace: optStr(input.namespace), cwd: optStr(input.cwd), projectTag: optStr(input.projectTag), deadlineMs: optNum(input.deadlineMs), authenticatedPrincipal: ctx.authenticatedPrincipal, onCommitted: ctx.hooks?.recordWriteCommit, ...(ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}) }) }) });\ndefineOperation({ name: \"lcm_compaction_record\", description: \"Record LCM compaction.\", schema: strictSchema({ sessionKey: S.str, namespace: S.str, tokensBefore: S.num, tokensAfter: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.lcmCompactionRecord({ sessionKey: optStr(input.sessionKey) ?? \"\", namespace: optStr(input.namespace), tokensBefore: optNum(input.tokensBefore) ?? 0, tokensAfter: optNum(input.tokensAfter) ?? 0, authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });\n\n// === CONTINUITY/IDENTITY ===\ndefineOperation({ name: \"continuity_audit_generate\", description: \"Continuity audit.\", fleetWide: true, schema: strictSchema({ period: S.str, key: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.continuityAuditGenerate({ period: optStr(input.period) === \"monthly\" ? \"monthly\" : optStr(input.period) === \"weekly\" ? \"weekly\" : undefined, key: optStr(input.key) }) }) });\ndefineOperation({ name: \"continuity_incident_open\", description: \"Open incident.\", schema: strictSchema({ symptom: S.str, namespace: S.str, triggerWindow: S.str, suspectedCause: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.continuityIncidentOpen({ symptom: optStr(input.symptom) ?? \"\", namespace: optStr(input.namespace), triggerWindow: optStr(input.triggerWindow), suspectedCause: optStr(input.suspectedCause), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"continuity_incident_close\", description: \"Close incident.\", schema: strictSchema({ id: S.str, namespace: S.str, fixApplied: S.str, verificationResult: S.str, preventiveRule: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.continuityIncidentClose({ id: optStr(input.id) ?? \"\", namespace: optStr(input.namespace), fixApplied: optStr(input.fixApplied) ?? \"\", verificationResult: optStr(input.verificationResult) ?? \"\", preventiveRule: optStr(input.preventiveRule), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"continuity_incident_list\", description: \"List incidents.\", schema: strictSchema({ state: S.str, namespace: S.str, limit: S.num }), handler: async (input, ctx) => { const st = optStr(input.state); return { result: await ctx.service.continuityIncidentList({ state: st === \"closed\" ? \"closed\" : st === \"all\" ? \"all\" : st === \"open\" ? \"open\" : undefined, namespace: optStr(input.namespace), limit: optNum(input.limit), principal: ctx.authenticatedPrincipal }) }; } });\ndefineOperation({ name: \"continuity_loop_add_or_update\", description: \"Add/update loop.\", schema: strictSchema({ id: S.str, cadence: S.str, purpose: S.str, status: S.str, killCondition: S.str, namespace: S.str, lastReviewed: S.str, notes: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.continuityLoopAddOrUpdate({ id: optStr(input.id) ?? \"\", cadence: (optStr(input.cadence) as \"daily\" | \"weekly\" | \"monthly\" | \"quarterly\") ?? \"weekly\", purpose: optStr(input.purpose) ?? \"\", status: (optStr(input.status) as \"active\" | \"paused\" | \"retired\") ?? \"active\", killCondition: optStr(input.killCondition) ?? \"\", namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal, lastReviewed: optStr(input.lastReviewed), notes: optStr(input.notes) }) }) });\ndefineOperation({ name: \"continuity_loop_review\", description: \"Review loop.\", schema: strictSchema({ id: S.str, namespace: S.str, status: S.str, notes: S.str, reviewedAt: S.str }), handler: async (input, ctx) => { const st = optStr(input.status); return { result: await ctx.service.continuityLoopReview({ id: optStr(input.id) ?? \"\", namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal, status: st === \"active\" || st === \"paused\" || st === \"retired\" ? st as \"active\" | \"paused\" | \"retired\" : undefined, notes: optStr(input.notes), reviewedAt: optStr(input.reviewedAt) }) }; } });\ndefineOperation({ name: \"identity_anchor_get\", description: \"Get identity anchor.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.identityAnchorGet({ namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"identity_anchor_update\", description: \"Update identity anchor.\", schema: strictSchema({ namespace: S.str, identityTraits: S.str, communicationPreferences: S.str, operatingPrinciples: S.str, continuityNotes: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.identityAnchorUpdate({ namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal, identityTraits: optStr(input.identityTraits), communicationPreferences: optStr(input.communicationPreferences), operatingPrinciples: optStr(input.operatingPrinciples), continuityNotes: optStr(input.continuityNotes) }) }) });\ndefineOperation({ name: \"memory_identity\", description: \"Memory identity.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.memoryIdentity({ namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }) });\n\n// === WORK/SHARED ===\n// SAFETY: optStr yields undefined or a string; workTask rejects any action\n// string outside its union with an input error before touching a store.\ndefineOperation({ name: \"work_task\", description: \"Manage work task.\", fleetWide: true, schema: strictSchema({ action: S.str, id: S.str, title: S.str, description: S.str, status: S.str, priority: S.str, owner: S.str, assignee: S.str, projectId: S.str, tags: S.strArr, dueAt: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.workTask({ action: (optStr(input.action) as \"update\" | \"list\" | \"get\" | \"create\" | \"delete\" | \"transition\") ?? \"list\", id: optStr(input.id), title: optStr(input.title), description: optStr(input.description), status: optStr(input.status), priority: optStr(input.priority), owner: optStr(input.owner), assignee: optStr(input.assignee), projectId: optStr(input.projectId), tags: optStrArr(input.tags), dueAt: optStr(input.dueAt) }) }) });\n// SAFETY: optStr yields undefined or a string; workProject rejects any action\n// string outside its union with an input error before touching a store.\ndefineOperation({ name: \"work_project\", description: \"Manage work project.\", fleetWide: true, schema: strictSchema({ action: S.str, id: S.str, name: S.str, description: S.str, status: S.str, owner: S.str, tags: S.strArr, taskId: S.str, projectId: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.workProject({ action: (optStr(input.action) as \"update\" | \"list\" | \"get\" | \"create\" | \"delete\" | \"link_task\") ?? \"list\", id: optStr(input.id), name: optStr(input.name), description: optStr(input.description), status: optStr(input.status), owner: optStr(input.owner), tags: optStrArr(input.tags), taskId: optStr(input.taskId), projectId: optStr(input.projectId) }) }) });\n// SAFETY: optStr yields undefined or a string; workBoard rejects any action\n// string outside its union with an input error before touching a store.\ndefineOperation({ name: \"work_board\", description: \"Manage work board.\", fleetWide: true, schema: strictSchema({ action: S.str, projectId: S.str, snapshotJson: S.str, linkToMemory: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.workBoard({ action: (optStr(input.action) as \"export_markdown\" | \"export_snapshot\" | \"import_snapshot\") ?? \"export_markdown\", projectId: optStr(input.projectId) ?? \"\", snapshotJson: optStr(input.snapshotJson) ?? \"\", linkToMemory: input.linkToMemory === true }) }) });\n// Issue #2920: the envelope controls (authority/expiresAt/supersedes) are\n// parsed by the ONE canonical surface module shared with the OpenClaw tool\n// (write-output-controls.ts); semantics stay in composeWriteEnvelope. A\n// client-supplied principal/namespace is rejected here — identity and\n// scoping are server-resolved (ctx.authenticatedPrincipal).\ndefineOperation({\n name: \"shared_context_write_output\",\n description: \"Write shared output.\",\n schema: strictSchema({ agentId: S.str, title: S.str, content: S.str, authority: S.str, expiresAt: S.str, supersedes: S.str }),\n handler: async (input, ctx) => {\n let controls: SharedWriteOutputControls;\n try {\n controls = parseSharedWriteOutputControls(input);\n } catch (error) {\n throw new EngramAccessInputError(error instanceof Error ? error.message : String(error));\n }\n return {\n result: await ctx.service.sharedContextWriteOutput({\n agentId: optStr(input.agentId) ?? \"\",\n title: optStr(input.title) ?? \"\",\n content: optStr(input.content) ?? \"\",\n ...controls,\n principal: ctx.authenticatedPrincipal,\n }),\n };\n },\n});\ndefineOperation({ name: \"shared_feedback_record\", description: \"Record shared feedback.\", schema: strictSchema({ agent: S.str, decision: S.str, reason: S.str, date: S.str, learning: S.str, outcome: S.str, severity: S.str, confidence: S.num, workflow: S.str, tags: S.strArr, evidenceWindowStart: S.str, evidenceWindowEnd: S.str, refs: S.strArr }), handler: async (input, ctx) => { const sv = optStr(input.severity); return { result: await ctx.service.sharedFeedbackRecord({ agent: optStr(input.agent) ?? \"\", decision: (optStr(input.decision) as \"rejected\" | \"approved\" | \"approved_with_feedback\") ?? \"approved\", reason: optStr(input.reason) ?? \"\", date: optStr(input.date), learning: optStr(input.learning), outcome: optStr(input.outcome), severity: sv === \"low\" || sv === \"medium\" || sv === \"high\" ? sv as \"low\" | \"medium\" | \"high\" : undefined, confidence: optNum(input.confidence), workflow: optStr(input.workflow), tags: optStrArr(input.tags), evidenceWindowStart: optStr(input.evidenceWindowStart), evidenceWindowEnd: optStr(input.evidenceWindowEnd), refs: optStrArr(input.refs) }) }; } });\ndefineOperation({ name: \"shared_priorities_append\", description: \"Append priorities.\", schema: strictSchema({ agentId: S.str, text: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.sharedPrioritiesAppend({ agentId: optStr(input.agentId) ?? \"\", text: optStr(input.text) ?? \"\" }) }) });\ndefineOperation({ name: \"shared_context_cross_signals_run\", description: \"Run cross signals.\", fleetWide: true, schema: strictSchema({ date: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.sharedContextCrossSignalsRun({ date: optStr(input.date) }) }) });\ndefineOperation({ name: \"shared_context_curate_daily\", description: \"Curate daily.\", fleetWide: true, schema: strictSchema({ date: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.sharedContextCurateDaily({ date: optStr(input.date) }) }) });\ndefineOperation({ name: \"compounding_weekly_synthesize\", description: \"Weekly synthesize.\", fleetWide: true, schema: strictSchema({ weekId: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.compoundingWeeklySynthesize({ weekId: optStr(input.weekId) }) }) });\ndefineOperation({ name: \"compounding_promote_candidate\", description: \"Promote candidate.\", fleetWide: true, schema: strictSchema({ weekId: S.str, candidateId: S.str, dryRun: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.compoundingPromoteCandidate({ weekId: optStr(input.weekId) ?? \"\", candidateId: optStr(input.candidateId) ?? \"\", dryRun: input.dryRun === true }) }) });\ndefineOperation({ name: \"compression_guidelines_optimize\", description: \"Optimize guidelines.\", fleetWide: true, schema: strictSchema({ dryRun: S.bool, eventLimit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.compressionGuidelinesOptimize({ dryRun: input.dryRun === true, eventLimit: optNum(input.eventLimit) }) }) });\ndefineOperation({ name: \"compression_guidelines_activate\", description: \"Activate guidelines.\", fleetWide: true, schema: strictSchema({ expectedContentHash: S.str, expectedGuidelineVersion: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.compressionGuidelinesActivate({ expectedContentHash: optStr(input.expectedContentHash), expectedGuidelineVersion: optNum(input.expectedGuidelineVersion) }) }) });\n\n// === MEMORY DEBUG/GRAPH/FEEDBACK ===\ndefineOperation({ name: \"memory_profile\", description: \"Memory profile.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.memoryProfile(optStr(input.namespace), ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"memory_entities_list\", description: \"List entities.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.memoryEntitiesList(optStr(input.namespace), ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"memory_questions\", description: \"Memory questions.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.memoryQuestions(optStr(input.namespace), ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"memory_last_recall\", description: \"Last recall.\", schema: strictSchema({ sessionKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.lastRecallSnapshot(optStr(input.sessionKey)) }) });\ndefineOperation({ name: \"memory_intent_debug\", description: \"Debug intent.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.intentDebug(optStr(input.namespace)) }) });\ndefineOperation({ name: \"memory_qmd_debug\", description: \"Debug QMD.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.qmdDebug(optStr(input.namespace)) }) });\ndefineOperation({ name: \"memory_graph_explain\", description: \"Explain graph.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.graphExplainLastRecall(optStr(input.namespace)) }) });\ndefineOperation({ name: \"graph_snapshot\", description: \"Graph snapshot.\", schema: strictSchema({ namespace: S.str, limit: S.num, since: S.str, focusNodeId: S.str, categories: S.strArr }), handler: async (input, ctx) => ({ result: await ctx.service.graphSnapshot({ namespace: optStr(input.namespace), limit: optNum(input.limit), since: optStr(input.since), focusNodeId: optStr(input.focusNodeId), categories: optStrArr(input.categories) }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"memory_feedback\", description: \"Record feedback.\", schema: strictSchema({ memoryId: S.str, vote: S.str, note: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.memoryFeedback({ memoryId: optStr(input.memoryId) ?? \"\", vote: optStr(input.vote) === \"down\" ? \"down\" : \"up\", note: optStr(input.note) }) }) });\ndefineOperation({ name: \"memory_promote\", description: \"Promote memory.\", schema: strictSchema({ memoryId: S.str, namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.memoryPromote({ memoryId: optStr(input.memoryId) ?? \"\", namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"memory_outcome\", description: \"Record outcome.\", schema: strictSchema({ memoryId: S.str, outcome: S.str, namespace: S.str, sessionKey: S.str, timestamp: S.str }), handler: async (input, ctx) => { const o = optStr(input.outcome); if (o !== \"success\" && o !== \"failure\") throw new EngramAccessInputError(\"memory_outcome: outcome must be \\\"success\\\" or \\\"failure\\\"; got \" + JSON.stringify(o)); return { result: await ctx.service.memoryOutcome({ memoryId: optStr(input.memoryId) ?? \"\", outcome: o, namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey), timestamp: optStr(input.timestamp), principal: ctx.authenticatedPrincipal }) }; } });\ndefineOperation({ name: \"memory_action_apply\", description: \"Apply action.\", schema: strictSchema({ action: S.str, outcome: S.str, reason: S.str, memoryId: S.str, namespace: S.str, sessionKey: S.str, content: S.str, category: S.str, linkTargetId: S.str, linkType: S.str, linkStrength: S.num, artifactType: S.str, execute: S.bool, sourcePrompt: S.str, dryRun: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.memoryActionApply({ action: optStr(input.action) ?? \"\", outcome: optStr(input.outcome), reason: optStr(input.reason), memoryId: optStr(input.memoryId) ?? \"\", namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey), content: optStr(input.content), category: optStr(input.category), linkTargetId: optStr(input.linkTargetId), linkType: optStr(input.linkType), linkStrength: optNum(input.linkStrength), artifactType: optStr(input.artifactType), execute: optBool(input.execute), sourcePrompt: optStr(input.sourcePrompt), dryRun: input.dryRun === true, principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"context_checkpoint\", description: \"Context checkpoint.\", schema: strictSchema({ sessionKey: S.str, context: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.contextCheckpoint({ sessionKey: optStr(input.sessionKey) ?? \"\", context: optStr(input.context) ?? \"\", namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({\n name: \"briefing\", description: \"Daily briefing.\",\n schema: strictSchema({ since: S.str, focus: S.str, namespace: S.str, includeLocation: S.bool, format: S.str, maxFollowups: S.num }),\n handler: async (input, ctx) => {\n const rf = optStr(input.format);\n const fe = validateBriefingFormat(rf);\n if (fe) throw new EngramAccessInputError(fe);\n // SAFETY: validateBriefingFormat rejects every format except json, markdown, or undefined.\n const request: EngramAccessBriefingRequest = {\n since: optStr(input.since), focus: optStr(input.focus), namespace: optStr(input.namespace),\n includeLocation: optBool(input.includeLocation), format: rf as \"json\" | \"markdown\" | undefined,\n maxFollowups: optNum(input.maxFollowups), principal: ctx.authenticatedPrincipal,\n };\n if (ctx.abortSignal) request.abortSignal = ctx.abortSignal;\n return { result: await ctx.service.briefing(request) };\n },\n});\n\n// === CONTRADICTION/REVIEW ===\ndefineOperation({ name: \"review_list\", description: \"List review pairs.\", schema: strictSchema({ filter: S.str, namespace: S.str, limit: S.num }),\n handler: async (input, ctx) => {\n const VF = new Set([\"all\", \"unresolved\", \"contradicts\", \"independent\", \"duplicates\", \"needs-user\"]);\n const rf = optStr(input.filter) ?? \"unresolved\";\n if (!VF.has(rf)) throw new EngramAccessInputError(\"Invalid filter '\" + rf + \"'. Valid: \" + [...VF].join(\", \"));\n const ns = optStr(input.namespace);\n const resolved = await ctx.service.getReadableStorageForNamespace(ns, ctx.authenticatedPrincipal);\n const rn = ctx.service.configRef.namespacesEnabled ? resolved.namespace : undefined;\n const iun = Boolean(rn && isDefaultReviewNamespace(ctx.service.configRef.defaultNamespace, ns, rn));\n return { result: await listPairs(ctx.service.memoryDir, { filter: rf as \"all\" | \"unresolved\" | \"contradicts\" | \"independent\" | \"duplicates\" | \"needs-user\", namespace: rn, includeUnscopedForNamespace: iun, limit: optNum(input.limit) ?? 50 }) };\n },\n});\ndefineOperation({ name: \"review_resolve\", description: \"Resolve pair.\", schema: strictSchema({ pairId: S.str, verb: S.str, mergedMemoryId: S.str, mergedContent: S.str }),\n handler: async (input, ctx) => {\n const pid = defStr(input.pairId, \"\"); const vb = defStr(input.verb, \"\");\n if (!pid) throw new EngramAccessInputError(\"pairId is required\");\n if (!vb) throw new EngramAccessInputError(\"verb is required\");\n if (!isValidResolutionVerb(vb)) throw new EngramAccessInputError(\"Invalid verb: \" + vb);\n // Per-token namespace enforcement (issue #1850 round 9): review_resolve\n // selects its target BY pairId, so the affected namespace comes from the\n // record — NOT a request param that the MCP-over-HTTP tools/call gate\n // (toolAcceptsNamespace) already enforces (this tool's schema carries no\n // `namespace` property). A namespace-scoped bearer must not mutate a\n // contradiction pair in a namespace outside its allow-list. Load the pair\n // to learn its namespace, enforce the token's scope via the SAME\n // effective-namespace chokepoint the HTTP review/resolve route uses\n // (enforceNamespaceAllowList maps undefined → default, so a scoped token\n // whose allow-list INCLUDES the default can resolve a legacy pair), and\n // fail closed BEFORE dispatching the (mutating) resolution. A missing pair\n // falls through to executeResolution's existing not-found result. No-op for\n // unrestricted/legacy tokens. Mirrors access-http.ts review/resolve exactly.\n const targetPair = readPair(ctx.service.memoryDir, pid);\n if (targetPair) {\n enforceNamespaceAllowList(\n tokenCapabilityStore.getStore(),\n targetPair.namespace,\n ctx.service.configRef?.defaultNamespace,\n );\n }\n return { result: await executeResolution(ctx.service.memoryDir, ctx.service.storageRef, pid, vb, { mergedMemoryId: optStr(input.mergedMemoryId), mergedContent: optStr(input.mergedContent), storageForNamespace: async (namespace) => { const r = await ctx.service.getWritableStorageForNamespace(namespace, ctx.authenticatedPrincipal); return r.storage; }, onMergedMemoryWritten: () => {} }) };\n },\n});\ndefineOperation({ name: \"contradiction_scan_run\", description: \"Run scan.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await runContradictionScan({ storage: ctx.service.storageRef, config: ctx.service.configRef, memoryDir: ctx.service.memoryDir, embeddingLookupFactory: ctx.service.embeddingLookupFactoryRef, storageForNamespace: (ns) => ctx.service.getWritableStorageForNamespace(ns ?? undefined, ctx.authenticatedPrincipal), localLlm: ctx.service.localLlmRef, fallbackLlm: ctx.service.fallbackLlmRef, namespace: optStr(input.namespace) }) }) });\ndefineOperation({ name: \"preference_drift_scan\", description: \"Run preference drift scan.\", schema: strictSchema({ namespace: S.str, apply: S.bool }), handler: async (input, ctx) => ({ result: await runPreferenceDriftScan({ storage: ctx.service.storageRef, config: ctx.service.configRef, memoryDir: ctx.service.memoryDir, embeddingLookupFactory: ctx.service.embeddingLookupFactoryRef, storageForNamespace: (ns) => ctx.service.getWritableStorageForNamespace(ns ?? undefined, ctx.authenticatedPrincipal), localLlm: ctx.service.localLlmRef, fallbackLlm: ctx.service.fallbackLlmRef, namespace: optStr(input.namespace), apply: input.apply === true }) }) });\ndefineOperation({ name: \"graph_edge_decay_run\", description: \"Run edge decay.\", fleetWide: true, schema: strictSchema({ dryRun: S.bool }), handler: async (input, ctx) => { const cfg = ctx.service.configRef; if (!cfg.graphEdgeDecayEnabled) return { result: { ranAt: new Date().toISOString(), disabled: true, reason: \"graphEdgeDecayEnabled is false\" } }; return { result: { results: await runGraphEdgeDecayMaintenanceAcrossNamespaces(ctx.service.memoryDir, { windowMs: cfg.graphEdgeDecayWindowMs, perWindow: cfg.graphEdgeDecayPerWindow, floor: cfg.graphEdgeDecayFloor, visibilityThreshold: cfg.graphEdgeDecayVisibilityThreshold, dryRun: input.dryRun === true, namespacesEnabled: cfg.namespacesEnabled === true, defaultNamespace: cfg.defaultNamespace }) } }; } });\n\n// === SUMMARIZE/PROFILING/PEERS/CONSOLE/DREAMS ===\ndefineOperation({ name: \"memory_summarize_hourly\", description: \"Hourly summarize.\", fleetWide: true, schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.memorySummarizeHourly() }) });\ndefineOperation({ name: \"conversation_index_update\", description: \"Update conv index.\", fleetWide: true, schema: strictSchema({ sessionKey: S.str, hours: S.num, embed: S.bool }), handler: async (input, ctx) => { if (input.sessionKey !== undefined && typeof input.sessionKey !== \"string\") throw new EngramAccessInputError(\"sessionKey must be a string when provided\"); return { result: await ctx.service.conversationIndexUpdate({ sessionKey: optStr(input.sessionKey), hours: optNum(input.hours), embed: optBool(input.embed) }) }; } });\ndefineOperation({ name: \"profiling_report\", description: \"Profiling report.\", schema: strictSchema({ format: S.str, limit: S.num }), handler: async (input, ctx) => { if (input.format !== undefined && typeof input.format !== \"string\") throw new EngramAccessInputError(\"format must be a string when provided\"); if (input.limit !== undefined && typeof input.limit !== \"number\") throw new EngramAccessInputError(\"limit must be a number when provided\"); return { result: await ctx.service.profilingReport({ format: optStr(input.format), limit: optNum(input.limit) }) }; } });\ndefineOperation({ name: \"live_connectors_run\", description: \"Run connectors.\", fleetWide: true, schema: strictSchema({ force: S.bool }), handler: async (input, ctx) => ({ result: await ctx.service.liveConnectorsRun({ authenticatedPrincipal: ctx.authenticatedPrincipal, force: input.force === true }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"peer_list\", description: \"List peers.\", fleetWide: true, schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.peerList() }) });\ndefineOperation({ name: \"peer_get\", description: \"Get peer.\", fleetWide: true, schema: strictSchema({ id: S.str }), handler: async (input, ctx) => { const id = defStr(input.id, \"\"); if (!id) throw new EngramAccessInputError(\"peer_get: id is required\"); return { result: await ctx.service.peerGet(id) }; } });\ndefineOperation({ name: \"peer_set\", description: \"Set peer.\", fleetWide: true, schema: strictSchema({ id: S.str, kind: S.str, displayName: S.str, notes: S.str }), handler: async (input, ctx) => { const id = defStr(input.id, \"\"); if (!id) throw new EngramAccessInputError(\"peer_set: id is required\"); return { result: await ctx.service.peerSet({ id, kind: optStr(input.kind), displayName: optStr(input.displayName), notes: optStr(input.notes) }) }; } });\ndefineOperation({ name: \"peer_delete\", description: \"Delete peer.\", fleetWide: true, schema: strictSchema({ id: S.str }), handler: async (input, ctx) => { const id = defStr(input.id, \"\"); if (!id) throw new EngramAccessInputError(\"peer_delete: id is required\"); return { result: await ctx.service.peerDelete(id) }; } });\ndefineOperation({ name: \"peer_profile_get\", description: \"Get peer profile.\", fleetWide: true, schema: strictSchema({ id: S.str }), handler: async (input, ctx) => { const id = defStr(input.id, \"\"); if (!id) throw new EngramAccessInputError(\"peer_profile_get: id is required\"); return { result: await ctx.service.peerProfileGet(id) }; } });\ndefineOperation({ name: \"peer_forget\", description: \"Forget peer.\", fleetWide: true, schema: strictSchema({ id: S.str, confirm: S.str }), handler: async (input, ctx) => { const id = defStr(input.id, \"\"); if (!id) throw new EngramAccessInputError(\"peer_forget: id is required\"); const c = optStr(input.confirm) ?? \"\"; if (c !== \"yes\") throw new EngramAccessInputError(\"peer_forget: confirm must be 'yes' to prevent accidental data loss\"); return { result: await ctx.service.peerForget(id, { confirm: \"yes\" }) }; } });\ndefineOperation({ name: \"console_state\", description: \"Console state.\", schema: strictSchema({ namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.consoleState(optStr(input.namespace), ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"dreams_status\", description: \"Dreams status.\", schema: strictSchema({ windowHours: S.num, namespace: S.str }), handler: async (input, ctx) => { let wh = 24; try { wh = normalizeDreamsStatusWindowHours(input.windowHours); } catch { throw new EngramAccessInputError(\"dreams_status: windowHours must be a positive integer. Got: \" + String(input.windowHours)); } return { result: await ctx.service.dreamsStatus({ windowHours: wh, namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }; } });\ndefineOperation({ name: \"dreams_run\", description: \"Run dreams.\", schema: strictSchema({ phase: S.str, dryRun: S.bool, namespace: S.str }), handler: async (input, ctx) => { const VP = [\"lightSleep\", \"rem\", \"deepSleep\"]; const ph = optStr(input.phase) ?? \"\"; if (!ph || !VP.includes(ph)) throw new EngramAccessInputError(\"dreams_run: phase must be one of: \" + VP.join(\", \")); if (input.dryRun !== undefined && typeof input.dryRun !== \"boolean\") throw new EngramAccessInputError(\"dreams_run: dryRun must be boolean\"); return { result: await ctx.service.dreamsRun({ phase: ph as DreamsPhase, dryRun: input.dryRun === true, namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }; } });\n\ndefineOperation({ name: \"correction_pending\", description: \"List pending corrections (HTTP GET).\", schema: strictSchema({ namespace: S.str, sessionKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.correctionListPending({ namespace: optStr(input.namespace), sessionKey: optStr(input.sessionKey), principal: ctx.authenticatedPrincipal }) }) });\n\n// === HTTP-ONLY ===\ndefineOperation({ name: \"offline_sync_snapshot\", description: \"Offline sync snapshot.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.offlineSyncSnapshot() }) });\ndefineOperation({ name: \"offline_sync_files\", description: \"Offline sync files.\", schema: strictSchema({ paths: S.strArr, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.offlineSyncFiles({ paths: optStrArr(input.paths) ?? [], namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"offline_sync_file_content\", description: \"Read file content.\", schema: strictSchema({ path: S.str, namespace: S.str, offset: S.num, length: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.offlineSyncFileContent({ path: optStr(input.path) ?? \"\", namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal, offset: optNum(input.offset), length: optNum(input.length) }) }) });\ndefineOperation({ name: \"offline_sync_apply_file_content\", description: \"Apply file content.\", schema: strictSchema({ sourceId: S.str, path: S.str, sha256: S.str, bytes: S.num, mtimeMs: S.num, offset: S.num, baseSha256: S.str, content: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.offlineSyncApplyFileContent({ sourceId: optStr(input.sourceId) ?? \"\", path: optStr(input.path) ?? \"\", sha256: optStr(input.sha256) ?? \"\", bytes: optNum(input.bytes) ?? 0, mtimeMs: optNum(input.mtimeMs) ?? 0, offset: optNum(input.offset), baseSha256: optStr(input.baseSha256), content: Buffer.from(defStr(input.content, \"\"), \"base64\"), namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"offline_sync_apply\", description: \"Apply sync.\", schema: strictSchema({ changeset: z.unknown().optional(), namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.offlineSyncApply({ changeset: input.changeset, namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"lcm_status\", description: \"LCM status.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.lcmStatus() }) });\ndefineOperation({ name: \"memory_list\", description: \"List memories.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.memoryBrowse() }) });\ndefineOperation({\n name: \"recall_timings\",\n description: \"List recent recall timings.\",\n schema: strictSchema({}),\n handler: async (_input, ctx) => {\n if (\n !isRecallTimingsOperator(\n ctx.service.configRef,\n ctx.authenticatedPrincipal,\n ctx.operatorPrincipal,\n )\n ) {\n throw new EngramAccessForbiddenError(\"recall timings require the configured operator principal\");\n }\n return { result: getRecallTimingStatus(ctx.service.configRef) };\n },\n});\ndefineOperation({ name: \"entity_list\", description: \"List entities.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.entityList({}, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"maintenance_status\", description: \"Maintenance status.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.maintenance() }) });\ndefineOperation({ name: \"quality_status\", description: \"Quality status.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.quality() }) });\ndefineOperation({ name: \"trust_zones_status\", description: \"Trust-zone status.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.trustZoneStatus() }) });\ndefineOperation({ name: \"trust_zones_records\", description: \"Browse trust-zone records.\", schema: strictSchema({ namespace: S.str, limit: S.num, offset: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.trustZoneBrowse({ namespace: optStr(input.namespace), limit: optNum(input.limit), offset: optNum(input.offset) }, ctx.authenticatedPrincipal) }) });\ndefineOperation({ name: \"review_disposition\", description: \"Review disposition.\", schema: strictSchema({ memoryId: S.str, status: S.str, reasonCode: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.reviewDisposition({ memoryId: optStr(input.memoryId) ?? \"\", status: (optStr(input.status) ?? \"archived\") as never, reasonCode: optStr(input.reasonCode) ?? \"\", namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"review_deck_list\", description: \"List review deck.\", schema: strictSchema({ namespace: S.str, cursor: S.str, limit: S.num }), handler: async (input, ctx) => ({ result: await ctx.service.reviewDeckList({ namespace: optStr(input.namespace), principal: ctx.authenticatedPrincipal, cursor: optStr(input.cursor), limit: optNum(input.limit) ?? 1 }) }) });\ndefineOperation({ name: \"review_deck_action\", description: \"Apply review deck action.\", schema: strictSchema({ itemId: S.str, revision: S.str, action: S.str, correctionText: S.str, idempotencyKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.reviewDeckAction({ schemaVersion: 1, itemId: reqStr(input.itemId, \"itemId\"), revision: reqStr(input.revision, \"revision\"), action: reqStr(input.action, \"action\") as \"keep\", idempotencyKey: reqStr(input.idempotencyKey, \"idempotencyKey\"), ...(optStr(input.correctionText) ? { correctionText: optStr(input.correctionText)! } : {}) } as never, { principal: ctx.authenticatedPrincipal, signal: ctx.abortSignal }) }) });\ndefineOperation({ name: \"review_deck_undo\", description: \"Undo review deck action.\", schema: strictSchema({ receiptId: S.str, expectedRevision: S.str, idempotencyKey: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.reviewDeckUndo({ schemaVersion: 1, receiptId: reqStr(input.receiptId, \"receiptId\"), expectedRevision: reqStr(input.expectedRevision, \"expectedRevision\"), idempotencyKey: reqStr(input.idempotencyKey, \"idempotencyKey\") }, { principal: ctx.authenticatedPrincipal, signal: ctx.abortSignal }) }) });\ndefineOperation({ name: \"trust_zones_promote\", description: \"Promote trust-zone.\", schema: strictSchema({ recordId: S.str, targetZone: S.str, promotionReason: S.str, dryRun: S.bool, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.trustZonePromote({ recordId: optStr(input.recordId) ?? \"\", targetZone: (optStr(input.targetZone) ?? \"working\") as never, promotionReason: optStr(input.promotionReason) ?? \"\", dryRun: input.dryRun === true, namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"trust_zones_demo_seed\", description: \"Demo seed.\", schema: strictSchema({ scenario: S.str, dryRun: S.bool, namespace: S.str }), handler: async (input, ctx) => ({ result: await ctx.service.trustZoneDemoSeed({ scenario: optStr(input.scenario), dryRun: input.dryRun === true, namespace: optStr(input.namespace), authenticatedPrincipal: ctx.authenticatedPrincipal }) }) });\ndefineOperation({ name: \"citations_observed\", description: \"Record citations.\", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { ok: true } }) });\ndefineOperation({ name: \"contradiction_detail\", description: \"Contradiction detail.\", schema: strictSchema({ id: S.str, namespace: S.str }), handler: async (input, ctx) => ({ result: await listPairs(ctx.service.memoryDir, { filter: \"all\" as const, namespace: optStr(input.namespace), includeUnscopedForNamespace: false, limit: 1 }) }) });\ndefineOperation({ name: \"offline_sync_snapshot_stream\", description: \"SSE stream.\", schema: strictSchema({}), handler: async (_i, ctx) => ({ result: await ctx.service.offlineSyncSnapshotStream() }) });\ndefineOperation({ name: \"graph_events\", description: \"SSE graph events.\", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { stream: \"sse\" } }) });\ndefineOperation({ name: \"chat_message\", description: \"Chat message.\", schema: strictSchema({ message: S.str, chatSessionId: S.str }), handler: async (_i, _ctx) => ({ result: { ok: true } }) });\ndefineOperation({ name: \"chat_events\", description: \"SSE chat events.\", schema: strictSchema({}), handler: async (_i, _ctx) => ({ result: { stream: \"sse\" } }) });\ndefineOperation({ 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 } }) });\n"],"mappings":"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","names":[]}
|
package/dist/chunk-IGLJNHOX.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// src/access-mcp-frames.ts
|
|
2
|
-
var MCP_STDIO_MAX_FRAME_BYTES = 131072;
|
|
3
|
-
var TOO_LARGE = { kind: "too-large" };
|
|
4
|
-
var McpFrameReader = class {
|
|
5
|
-
buffer = Buffer.alloc(0);
|
|
6
|
-
/** Body bytes of a refused oversized frame that have not arrived yet. */
|
|
7
|
-
skipBytes = 0;
|
|
8
|
-
/** Buffer length when `next` last stopped on an incomplete frame. */
|
|
9
|
-
waitingBytes = 0;
|
|
10
|
-
push(chunk) {
|
|
11
|
-
const dropped = Math.min(this.skipBytes, chunk.length);
|
|
12
|
-
this.skipBytes -= dropped;
|
|
13
|
-
const kept = chunk.subarray(dropped);
|
|
14
|
-
if (kept.length > 0) this.buffer = Buffer.concat([this.buffer, kept]);
|
|
15
|
-
}
|
|
16
|
-
/** True when bytes arrived after `next` last examined the buffer. */
|
|
17
|
-
hasUnread() {
|
|
18
|
-
return this.buffer.length > this.waitingBytes;
|
|
19
|
-
}
|
|
20
|
-
next() {
|
|
21
|
-
this.waitingBytes = 0;
|
|
22
|
-
const headerEnd = this.buffer.indexOf("\r\n\r\n");
|
|
23
|
-
if (headerEnd < 0) {
|
|
24
|
-
if (this.buffer.length <= MCP_STDIO_MAX_FRAME_BYTES) return this.wait();
|
|
25
|
-
return this.discardBuffer();
|
|
26
|
-
}
|
|
27
|
-
if (headerEnd > MCP_STDIO_MAX_FRAME_BYTES) return this.discardBuffer();
|
|
28
|
-
const headers = this.buffer.subarray(0, headerEnd).toString("utf-8").split("\r\n");
|
|
29
|
-
const lengthHeader = headers.find((line) => line.toLowerCase().startsWith("content-length:"));
|
|
30
|
-
const contentLength = lengthHeader ? Number.parseInt(lengthHeader.split(":")[1]?.trim() ?? "0", 10) : NaN;
|
|
31
|
-
if (!Number.isFinite(contentLength) || contentLength < 0) {
|
|
32
|
-
this.buffer = Buffer.alloc(0);
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
const bodyStart = headerEnd + 4;
|
|
36
|
-
if (contentLength > MCP_STDIO_MAX_FRAME_BYTES) {
|
|
37
|
-
const rest = this.buffer.subarray(bodyStart);
|
|
38
|
-
this.skipBytes = Math.max(0, contentLength - rest.length);
|
|
39
|
-
this.buffer = rest.subarray(Math.min(contentLength, rest.length));
|
|
40
|
-
return TOO_LARGE;
|
|
41
|
-
}
|
|
42
|
-
const bodyEnd = bodyStart + contentLength;
|
|
43
|
-
if (this.buffer.length < bodyEnd) return this.wait();
|
|
44
|
-
const text = this.buffer.subarray(bodyStart, bodyEnd).toString("utf-8");
|
|
45
|
-
this.buffer = this.buffer.subarray(bodyEnd);
|
|
46
|
-
return { kind: "body", text };
|
|
47
|
-
}
|
|
48
|
-
wait() {
|
|
49
|
-
this.waitingBytes = this.buffer.length;
|
|
50
|
-
return null;
|
|
51
|
-
}
|
|
52
|
-
discardBuffer() {
|
|
53
|
-
this.buffer = Buffer.alloc(0);
|
|
54
|
-
return TOO_LARGE;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export {
|
|
59
|
-
MCP_STDIO_MAX_FRAME_BYTES,
|
|
60
|
-
McpFrameReader
|
|
61
|
-
};
|
|
62
|
-
//# sourceMappingURL=chunk-IGLJNHOX.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/access-mcp-frames.ts"],"sourcesContent":["/**\n * Content-Length framing for the MCP stdio transport.\n *\n * `push` appends raw bytes. `next` returns one frame at a time and `null` when\n * the buffered bytes hold no complete frame yet. The header and the body are\n * each bounded to MCP_STDIO_MAX_FRAME_BYTES, which matches the HTTP access\n * default `maxBodyBytes`, so a peer cannot grow the buffer without limit.\n */\nexport const MCP_STDIO_MAX_FRAME_BYTES = 131072;\n\nexport type McpFrame = { kind: \"body\"; text: string } | { kind: \"too-large\" };\n\nconst TOO_LARGE: McpFrame = { kind: \"too-large\" };\n\nexport class McpFrameReader {\n private buffer = Buffer.alloc(0);\n /** Body bytes of a refused oversized frame that have not arrived yet. */\n private skipBytes = 0;\n /** Buffer length when `next` last stopped on an incomplete frame. */\n private waitingBytes = 0;\n\n push(chunk: Buffer): void {\n const dropped = Math.min(this.skipBytes, chunk.length);\n this.skipBytes -= dropped;\n const kept = chunk.subarray(dropped);\n if (kept.length > 0) this.buffer = Buffer.concat([this.buffer, kept]);\n }\n\n /** True when bytes arrived after `next` last examined the buffer. */\n hasUnread(): boolean {\n return this.buffer.length > this.waitingBytes;\n }\n\n next(): McpFrame | null {\n this.waitingBytes = 0;\n const headerEnd = this.buffer.indexOf(\"\\r\\n\\r\\n\");\n if (headerEnd < 0) {\n if (this.buffer.length <= MCP_STDIO_MAX_FRAME_BYTES) return this.wait();\n return this.discardBuffer();\n }\n if (headerEnd > MCP_STDIO_MAX_FRAME_BYTES) return this.discardBuffer();\n\n const headers = this.buffer.subarray(0, headerEnd).toString(\"utf-8\").split(\"\\r\\n\");\n const lengthHeader = headers.find((line) => line.toLowerCase().startsWith(\"content-length:\"));\n const contentLength = lengthHeader ? Number.parseInt(lengthHeader.split(\":\")[1]?.trim() ?? \"0\", 10) : NaN;\n if (!Number.isFinite(contentLength) || contentLength < 0) {\n this.buffer = Buffer.alloc(0);\n return null;\n }\n\n const bodyStart = headerEnd + 4;\n if (contentLength > MCP_STDIO_MAX_FRAME_BYTES) {\n const rest = this.buffer.subarray(bodyStart);\n this.skipBytes = Math.max(0, contentLength - rest.length);\n this.buffer = rest.subarray(Math.min(contentLength, rest.length));\n return TOO_LARGE;\n }\n const bodyEnd = bodyStart + contentLength;\n if (this.buffer.length < bodyEnd) return this.wait();\n const text = this.buffer.subarray(bodyStart, bodyEnd).toString(\"utf-8\");\n this.buffer = this.buffer.subarray(bodyEnd);\n return { kind: \"body\", text };\n }\n\n private wait(): null {\n this.waitingBytes = this.buffer.length;\n return null;\n }\n\n private discardBuffer(): McpFrame {\n this.buffer = Buffer.alloc(0);\n return TOO_LARGE;\n }\n}\n"],"mappings":";AAQO,IAAM,4BAA4B;AAIzC,IAAM,YAAsB,EAAE,MAAM,YAAY;AAEzC,IAAM,iBAAN,MAAqB;AAAA,EAClB,SAAS,OAAO,MAAM,CAAC;AAAA;AAAA,EAEvB,YAAY;AAAA;AAAA,EAEZ,eAAe;AAAA,EAEvB,KAAK,OAAqB;AACxB,UAAM,UAAU,KAAK,IAAI,KAAK,WAAW,MAAM,MAAM;AACrD,SAAK,aAAa;AAClB,UAAM,OAAO,MAAM,SAAS,OAAO;AACnC,QAAI,KAAK,SAAS,EAAG,MAAK,SAAS,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,EACtE;AAAA;AAAA,EAGA,YAAqB;AACnB,WAAO,KAAK,OAAO,SAAS,KAAK;AAAA,EACnC;AAAA,EAEA,OAAwB;AACtB,SAAK,eAAe;AACpB,UAAM,YAAY,KAAK,OAAO,QAAQ,UAAU;AAChD,QAAI,YAAY,GAAG;AACjB,UAAI,KAAK,OAAO,UAAU,0BAA2B,QAAO,KAAK,KAAK;AACtE,aAAO,KAAK,cAAc;AAAA,IAC5B;AACA,QAAI,YAAY,0BAA2B,QAAO,KAAK,cAAc;AAErE,UAAM,UAAU,KAAK,OAAO,SAAS,GAAG,SAAS,EAAE,SAAS,OAAO,EAAE,MAAM,MAAM;AACjF,UAAM,eAAe,QAAQ,KAAK,CAAC,SAAS,KAAK,YAAY,EAAE,WAAW,iBAAiB,CAAC;AAC5F,UAAM,gBAAgB,eAAe,OAAO,SAAS,aAAa,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK,KAAK,KAAK,EAAE,IAAI;AACtG,QAAI,CAAC,OAAO,SAAS,aAAa,KAAK,gBAAgB,GAAG;AACxD,WAAK,SAAS,OAAO,MAAM,CAAC;AAC5B,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,YAAY;AAC9B,QAAI,gBAAgB,2BAA2B;AAC7C,YAAM,OAAO,KAAK,OAAO,SAAS,SAAS;AAC3C,WAAK,YAAY,KAAK,IAAI,GAAG,gBAAgB,KAAK,MAAM;AACxD,WAAK,SAAS,KAAK,SAAS,KAAK,IAAI,eAAe,KAAK,MAAM,CAAC;AAChE,aAAO;AAAA,IACT;AACA,UAAM,UAAU,YAAY;AAC5B,QAAI,KAAK,OAAO,SAAS,QAAS,QAAO,KAAK,KAAK;AACnD,UAAM,OAAO,KAAK,OAAO,SAAS,WAAW,OAAO,EAAE,SAAS,OAAO;AACtE,SAAK,SAAS,KAAK,OAAO,SAAS,OAAO;AAC1C,WAAO,EAAE,MAAM,QAAQ,KAAK;AAAA,EAC9B;AAAA,EAEQ,OAAa;AACnB,SAAK,eAAe,KAAK,OAAO;AAChC,WAAO;AAAA,EACT;AAAA,EAEQ,gBAA0B;AAChC,SAAK,SAAS,OAAO,MAAM,CAAC;AAC5B,WAAO;AAAA,EACT;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/local-llm.ts"],"sourcesContent":["import { log } from \"./logger.js\";\nimport { isUnsupportedJsonSchemaError } from \"./fallback-llm-codex-subscription.js\";\nimport { estimateTokenCount } from \"./token-estimate.js\";\nimport type { PluginConfig } from \"./types.js\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport type { ModelRegistry } from \"./model-registry.js\";\nimport { launchProcessSync } from \"./runtime/child-process.js\";\nimport { mergeEnv, readEnvVar } from \"./runtime/env.js\";\nimport { resolveLocalLlmCapabilities } from \"./capabilities.js\";\nimport { resolvePipelineProcessingCapabilities } from \"./capabilities.js\";\nimport { ChatTransport } from \"./local-llm-transport.js\";\nimport { LocalLlmRateLimitSession, resolveRateLimitSettings } from \"./local-llm-rate-limit.js\";\nimport {\n extractNonRecoverableBackendReason,\n extractNonRecoverableBackendReasonFromErrorText,\n isAbortError,\n probeFetch,\n resolveUnavailableVerdict,\n type ProbeFetchResult,\n normalizeBackendTripReason,\n waitForRetryBackoff,\n SingleFlightProbe,\n type LocalLlmChatCompletionOptions,\n type LocalLlmChatCompletionResult,\n} from \"./local-llm-helpers.js\";\nimport { NativeSchemaGate, type LocalLlmChatRequestBody } from \"./local-llm-native-schema.js\";\nimport {\n isObjectRecord,\n orderedLocalServers,\n type LocalLlmType,\n} from \"./local-llm-servers.js\";\n\nexport type { LocalLlmType } from \"./local-llm-servers.js\";\n\n/** Trim trailing slash characters without backtracking regex. */\nfunction trimTrailingSlashes(s: string): string {\n let end = s.length;\n while (end > 0 && s[end - 1] === \"/\") end--;\n return s.substring(0, end);\n}\n\nfunction stripTrailingV1Path(s: string): string {\n return s.endsWith(\"/v1\") ? s.slice(0, -3) : s;\n}\n\nfunction isLlamaCppPropsResponse(value: unknown): boolean {\n return (\n isObjectRecord(value) &&\n isObjectRecord(value.default_generation_settings) &&\n typeof value.total_slots === \"number\" &&\n (\n typeof value.model_path === \"string\" ||\n typeof value.chat_template === \"string\" ||\n typeof value.build_info === \"string\"\n )\n );\n}\n\nfunction isLlamaCppModelsResponse(value: unknown): boolean {\n if (!isObjectRecord(value) || !Array.isArray(value.data)) {\n return false;\n }\n return value.data.some((entry) => {\n if (!isObjectRecord(entry)) return false;\n if (entry.owned_by === \"llamacpp\") return true;\n if (typeof entry.id === \"string\" && entry.id.endsWith(\".gguf\")) return true;\n const meta = entry.meta;\n return (\n isObjectRecord(meta) &&\n (\"n_ctx_train\" in meta || \"n_params\" in meta || \"vocab_type\" in meta)\n );\n });\n}\n\nfunction isLmStudioApiV1ModelsResponse(value: unknown): boolean {\n if (!isObjectRecord(value) || !Array.isArray(value.models)) {\n return false;\n }\n return value.models.some((entry) => {\n if (!isObjectRecord(entry)) return false;\n return (\n typeof entry.key === \"string\" &&\n typeof entry.display_name === \"string\" &&\n (\n typeof entry.format === \"string\" ||\n typeof entry.max_context_length === \"number\" ||\n Array.isArray(entry.loaded_instances)\n )\n );\n });\n}\n\nfunction isLmStudioApiV0ModelsResponse(value: unknown): boolean {\n if (!isObjectRecord(value) || !Array.isArray(value.data)) {\n return false;\n }\n return value.data.some((entry) => {\n if (!isObjectRecord(entry)) return false;\n return (\n typeof entry.id === \"string\" &&\n typeof entry.publisher === \"string\" &&\n (\n typeof entry.compatibility_type === \"string\" ||\n typeof entry.max_context_length === \"number\" ||\n typeof entry.state === \"string\"\n )\n );\n });\n}\n\nfunction isLmStudioNativeModelsResponse(value: unknown): boolean {\n return isLmStudioApiV1ModelsResponse(value) || isLmStudioApiV0ModelsResponse(value);\n}\n\n/**\n * Backends known to honor `chat_template_kwargs: { enable_thinking: false }`\n * on OpenAI-compatible `/v1/chat/completions`. LM Studio, vLLM, and\n * llama.cpp forward this field to the jinja chat template, where thinking-capable\n * models (Qwen 3.5, Gemma 4, DeepSeek) suppress reasoning tokens.\n *\n * Strict OpenAI-compatible backends (standard OpenAI, Azure OpenAI, some\n * proxies) reject unknown request fields with 400 — which trips the\n * `localLlm400*` cooldown path. `LocalLlmClient` therefore only injects\n * the kwarg when the detected backend is in this set; unknown / `generic`\n * / `ollama` / `mlx` fail open (no injection, no 400 risk). Issue #548.\n */\nconst THINKING_COMPATIBLE_BACKENDS: ReadonlySet<LocalLlmType> = new Set([\n \"lmstudio\",\n \"vllm\",\n \"llamacpp\",\n]);\n\nconst THINKING_SUPPRESSED_OPERATIONS: ReadonlySet<string> = new Set([\n \"extraction\",\n \"extraction-judge\",\n \"extraction-faithfulness\",\n \"contradiction-judge\",\n \"contradiction_verification\",\n \"link_suggestion\",\n \"memory_summarization\",\n \"proactive_extraction\",\n \"lcm-summarize\",\n \"day_summary\",\n \"hourly_summary\",\n \"hourly_summary_extended\",\n \"correction-classify\",\n]);\n\nexport interface LocalModelInfo {\n id: string;\n contextWindow?: number;\n maxTokens?: number;\n}\n\nexport type LocalLlmRequestPriority = \"recall-critical\" | \"background\";\n\n// LocalLlmChatCompletionOptions and LocalLlmChatCompletionResult live in\n// local-llm-helpers.ts so this file stays under its size ceiling (#1995).\ninterface LocalLlmQueuedRequest {\n messages: Array<{ role: string; content: string }>;\n options: LocalLlmChatCompletionOptions;\n priority: LocalLlmRequestPriority;\n enqueuedAtMs: number;\n resolve: (value: LocalLlmChatCompletionResult | null) => void;\n}\n\nconst LOCAL_LLM_GLOBAL_BACKEND_STATE = \"__openclawEngramLocalLlmBackendState\";\n\ntype LocalLlmBackendState = {\n untilMs: number;\n reason: string;\n};\n/**\n * Local LLM client for OpenAI-compatible endpoints (LM Studio, Ollama, MLX, etc.)\n *\n * Based on openclaw-tactician's provider detection patterns for consistency.\n * Provides privacy-preserving, cost-effective LLM operations with\n * graceful fallback to cloud providers when local LLM is unavailable.\n */\nexport class LocalLlmClient {\n private config: PluginConfig;\n private isAvailable: boolean | null = null;\n private lastHealthCheck: number = 0;\n private readonly availabilityProbe = new SingleFlightProbe();\n private detectedType: LocalLlmType | null = null;\n private cachedModelInfo: LocalModelInfo | null = null;\n private cachedLmsContext: number | null = null;\n private lastLmsCheck: number = 0;\n private consecutive400s: number = 0;\n private cooldownUntilMs: number = 0;\n private modelRegistry?: ModelRegistry;\n private readonly nativeSchemaGate = new NativeSchemaGate(() => this.modelRegistry);\n private _disableThinking: boolean = false;\n private readonly requestQueues: Record<LocalLlmRequestPriority, LocalLlmQueuedRequest[]> = {\n \"recall-critical\": [],\n background: [],\n };\n private readonly queueProcessing = new Set<LocalLlmRequestPriority>();\n private queueDrainScheduled: boolean = false;\n private static readonly HEALTH_CHECK_INTERVAL_MS = 60000; // 1 minute\n private static readonly LMS_CACHE_INTERVAL_MS = 30000; // 30 seconds\n private readonly chatTransport = new ChatTransport();\n\n constructor(config: PluginConfig, modelRegistry?: ModelRegistry) {\n this.config = config;\n this.modelRegistry = modelRegistry;\n }\n\n /**\n * Request thinking/reasoning suppression on the next chat completion.\n *\n * When `true`, the client will inject\n * `chat_template_kwargs: { enable_thinking: false }` into the request\n * body — **but only when the detected backend is known to support it**\n * (LM Studio, vLLM; see `THINKING_COMPATIBLE_BACKENDS`). Strict\n * OpenAI-compat backends reject unknown fields with 400; on those the\n * client fails open (thinking runs normally). This is the safe\n * default for Remnic extraction-style operations: measurable latency\n * win on thinking-capable backends, zero risk on others. Consolidation\n * operations keep thinking enabled unless explicitly added to\n * `THINKING_SUPPRESSED_OPERATIONS`. Issues #548 and #979.\n */\n set disableThinking(value: boolean) {\n this._disableThinking = value;\n }\n\n private resolveHomeDir(): string {\n return this.config.localLlmHomeDir || readEnvVar(\"HOME\") || os.homedir();\n }\n\n private buildRequestHeaders(base: Record<string, string> = {}): Record<string, string> {\n const headers: Record<string, string> = {\n ...base,\n ...(this.config.localLlmHeaders ?? {}),\n };\n if (this.config.localLlmApiKey && this.config.localLlmAuthHeader !== false) {\n headers.Authorization = `Bearer ${this.config.localLlmApiKey}`;\n }\n return headers;\n }\n\n\n /**\n * Set the ModelRegistry for caching detected capabilities\n */\n setModelRegistry(registry: ModelRegistry): void {\n this.modelRegistry = registry;\n }\n\n /**\n * Get the detected server type (null if not detected)\n */\n getDetectedType(): LocalLlmType | null {\n return this.detectedType;\n }\n\n private getBackendKey(): string {\n return trimTrailingSlashes(\n this.config.localLlmUrl.replace(\"localhost\", \"127.0.0.1\"),\n ).replace(/\\/v1$/, \"\");\n }\n\n private getGlobalBackendState(): Map<string, LocalLlmBackendState> {\n const globalAny = globalThis as typeof globalThis & {\n [LOCAL_LLM_GLOBAL_BACKEND_STATE]?: Map<string, LocalLlmBackendState>;\n };\n if (!globalAny[LOCAL_LLM_GLOBAL_BACKEND_STATE]) {\n globalAny[LOCAL_LLM_GLOBAL_BACKEND_STATE] = new Map();\n }\n return globalAny[LOCAL_LLM_GLOBAL_BACKEND_STATE];\n }\n\n private getTrippedBackendState(now: number): LocalLlmBackendState | null {\n const state = this.getGlobalBackendState().get(this.getBackendKey()) ?? null;\n if (!state) return null;\n if (state.untilMs <= now) {\n this.getGlobalBackendState().delete(this.getBackendKey());\n this.lastHealthCheck = 0;\n return null;\n }\n return state;\n }\n\n private markBackendUnavailable(reason: string, durationMs: number): void {\n const normalizedReason = normalizeBackendTripReason(reason);\n if (durationMs > 0) {\n const untilMs = Date.now() + durationMs;\n this.getGlobalBackendState().set(this.getBackendKey(), { untilMs, reason: normalizedReason });\n } else {\n this.getGlobalBackendState().delete(this.getBackendKey());\n }\n this.isAvailable = false;\n this.lastHealthCheck = 0;\n log.warn(\n `local LLM backend unavailable for ${durationMs}ms: model=${this.config.localLlmModel} reason=${normalizedReason}`,\n );\n }\n\n\n /**\n * Fetch with timeout for health checks. Body lives in the sibling helper so\n * this file stays under its size ceiling (issue #1995).\n */\n private async fetchWithTimeout(\n url: string,\n timeoutMs: number = 2000,\n headers?: Record<string, string>,\n signal?: AbortSignal,\n ): Promise<ProbeFetchResult> {\n return await probeFetch(url, {\n timeoutMs,\n headers: this.buildRequestHeaders({ Accept: \"application/json\", ...(headers ?? {}) }),\n signal,\n });\n }\n\n private async probeLmStudioNativeModels(\n probeBaseUrl: string,\n signal?: AbortSignal,\n ): Promise<{ matched: boolean; unauthorized: boolean }> {\n let unauthorized = false;\n for (const endpoint of [\"/api/v1/models\", \"/api/v0/models\"]) {\n if (signal?.aborted) return { matched: false, unauthorized };\n const probe = await this.fetchWithTimeout(`${probeBaseUrl}${endpoint}`, 2000, undefined, signal);\n if (signal?.aborted) return { matched: false, unauthorized };\n if (probe.ok && isLmStudioNativeModelsResponse(probe.data)) {\n return { matched: true, unauthorized };\n }\n if (probe.status === 401 || probe.status === 403) {\n unauthorized = true;\n }\n }\n return { matched: false, unauthorized };\n }\n\n /**\n * Check if local LLM is available\n * Uses 127.0.0.1 instead of localhost to avoid DNS issues (consistent with tactician)\n */\n async checkAvailability(signal?: AbortSignal): Promise<boolean> {\n if (signal?.aborted) return false;\n // Cache health check results for 1 minute\n const now = Date.now();\n const trippedState = this.getTrippedBackendState(now);\n if (trippedState) {\n this.isAvailable = false;\n this.lastHealthCheck = 0;\n log.info(\n `local LLM availability: backend circuit open for ${Math.max(0, trippedState.untilMs - now)}ms (${trippedState.reason})`,\n );\n return false;\n }\n if (this.isAvailable !== null && now - this.lastHealthCheck < LocalLlmClient.HEALTH_CHECK_INTERVAL_MS) {\n return this.isAvailable;\n }\n return await this.availabilityProbe.run((probeSignal) => this.probeAvailability(probeSignal), signal);\n }\n\n private async probeAvailability(signal?: AbortSignal): Promise<boolean> {\n const now = Date.now();\n // Probe server-native endpoints from the server root even when users configure\n // the OpenAI-compatible `/v1` base URL for chat completions.\n const configuredBaseUrl = trimTrailingSlashes(\n this.config.localLlmUrl.replace(\"localhost\", \"127.0.0.1\"),\n );\n const probeBaseUrl = stripTrailingV1Path(configuredBaseUrl);\n let sawUnauthorizedProbe = false;\n // A probe that TIMED OUT says the event loop was busy, not that the backend\n // is down (issue #2210). Tracked separately so a loaded daemon cannot cache\n // itself into a blackout.\n let sawAbortedProbe = false;\n // Several server shapes share a probe URL (LiteLLM and Ollama both use\n // `/`); fetch each URL once per pass.\n const probed = new Map<string, ProbeFetchResult>();\n const probeOnce = async (url: string): Promise<ProbeFetchResult> => {\n const cached = probed.get(url);\n if (cached) return cached;\n const result = await this.fetchWithTimeout(url, 2000, undefined, signal);\n probed.set(url, result);\n return result;\n };\n\n // Try to detect which server type is running\n if (signal?.aborted) return false;\n for (const serverConfig of orderedLocalServers(configuredBaseUrl)) {\n const healthUrl = `${probeBaseUrl}${serverConfig.healthEndpoint}`;\n log.debug(`checking ${serverConfig.type} at ${healthUrl}`);\n\n const result = await probeOnce(healthUrl);\n if (result.aborted) sawAbortedProbe = true;\n if (signal?.aborted) return false;\n if (result.ok && serverConfig.detectFn(result.data)) {\n if (serverConfig.type === \"mlx\") {\n const lmStudioProbe = await this.probeLmStudioNativeModels(probeBaseUrl, signal);\n if (signal?.aborted) return false;\n if (lmStudioProbe.unauthorized) {\n sawUnauthorizedProbe = true;\n }\n if (lmStudioProbe.matched) {\n this.isAvailable = true;\n this.detectedType = \"lmstudio\";\n this.lastHealthCheck = now;\n log.info(`detected lmstudio at ${configuredBaseUrl}`);\n return true;\n }\n }\n if (serverConfig.type === \"llamacpp\") {\n let sawLlamaCppSignal = false;\n const propsProbe = await this.fetchWithTimeout(`${probeBaseUrl}/props`, 2000, undefined, signal);\n if (propsProbe.aborted) sawAbortedProbe = true;\n if (signal?.aborted) return false;\n if (propsProbe.ok && isLlamaCppPropsResponse(propsProbe.data)) {\n sawLlamaCppSignal = true;\n }\n if (propsProbe.status === 401 || propsProbe.status === 403) {\n sawUnauthorizedProbe = true;\n }\n\n const modelsUrl = `${probeBaseUrl}${serverConfig.modelsEndpoint}`;\n const modelsProbe = await this.fetchWithTimeout(modelsUrl, 2000, undefined, signal);\n if (modelsProbe.aborted) sawAbortedProbe = true;\n if (signal?.aborted) return false;\n if (modelsProbe.ok && isLlamaCppModelsResponse(modelsProbe.data)) {\n sawLlamaCppSignal = true;\n }\n if (modelsProbe.status === 401 || modelsProbe.status === 403) {\n sawUnauthorizedProbe = true;\n continue;\n }\n\n const authConfigured =\n Boolean(this.config.localLlmApiKey) &&\n this.config.localLlmAuthHeader !== false;\n if (!sawLlamaCppSignal || (authConfigured && !modelsProbe.ok)) {\n continue;\n }\n }\n this.isAvailable = true;\n this.detectedType = serverConfig.type;\n this.lastHealthCheck = now;\n log.info(`detected ${serverConfig.type} at ${configuredBaseUrl}`);\n return true;\n }\n if (result.status === 401 || result.status === 403) {\n sawUnauthorizedProbe = true;\n }\n }\n if (signal?.aborted) return false;\n\n // Generic check if specific detection failed\n try {\n const modelsUrl = `${probeBaseUrl}/v1/models`;\n const result = await this.fetchWithTimeout(modelsUrl, 2000, undefined, signal);\n if (result.aborted) sawAbortedProbe = true;\n if (signal?.aborted) return false;\n if (result.ok) {\n this.isAvailable = true;\n this.detectedType = \"generic\";\n this.lastHealthCheck = now;\n log.info(`detected generic OpenAI-compatible server at ${configuredBaseUrl}`);\n return true;\n }\n if (result.status === 401 || result.status === 403) {\n sawUnauthorizedProbe = true;\n }\n } catch {\n // Fall through to unavailable\n }\n\n const wasAvailable = this.isAvailable;\n this.detectedType = null;\n if (sawUnauthorizedProbe) {\n log.warn(\n `local LLM availability probe was unauthorized at ${configuredBaseUrl}; verify localLlmApiKey and localLlmAuthHeader settings`,\n );\n }\n const verdict = resolveUnavailableVerdict({\n baseUrl: configuredBaseUrl,\n sawAbortedProbe,\n wasAvailable,\n });\n this.isAvailable = verdict.cacheVerdict ? false : null;\n this.lastHealthCheck = verdict.cacheVerdict ? now : 0;\n if (verdict.warning) log.warn(verdict.warning);\n log.debug(\"local LLM not available at\", configuredBaseUrl);\n return false;\n }\n\n /**\n * Try to get context window from LM Studio settings.json as fallback.\n * This reads the defaultContextLength setting which is what LM Studio uses\n * when loading models without explicit context configuration.\n */\n private getContextFromLmStudioSettings(): number | null {\n try {\n const homeDir = this.resolveHomeDir();\n const settingsPath = `${homeDir}/.cache/lm-studio/settings.json`;\n\n if (!fs.existsSync(settingsPath)) {\n log.debug(`LM Studio settings: file not found at ${settingsPath}`);\n return null;\n }\n\n const content = fs.readFileSync(settingsPath, \"utf-8\");\n const settings = JSON.parse(content) as {\n defaultContextLength?: {\n type?: string;\n value?: number;\n };\n };\n\n if (settings.defaultContextLength?.value) {\n const contextWindow = settings.defaultContextLength.value;\n log.debug(`LM Studio settings: found default context length: ${contextWindow}`);\n return contextWindow;\n }\n\n return null;\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n log.debug(`LM Studio settings: failed to read - ${errorMsg}`);\n return null;\n }\n }\n\n /**\n * Try to get context window from LMS CLI (LM Studio specific).\n * Uses --json flag for reliable parsing.\n * Returns null if LMS CLI is not available or model not found.\n */\n private getContextFromLmsCli(modelId: string): number | null {\n try {\n // Check if lms CLI exists in common locations.\n // HOME may be absent in launchd environments, so prefer the resolved helper.\n const homeDir = this.resolveHomeDir();\n const lmsPaths = [\n this.config.localLmsCliPath || \"\",\n `${homeDir}/.cache/lm-studio/bin/lms`,\n \"/usr/local/bin/lms\",\n \"/opt/homebrew/bin/lms\",\n ];\n\n const lmsPath = lmsPaths.find((p) => p.length > 0 && fs.existsSync(p));\n if (!lmsPath) {\n log.debug(`LMS CLI: not found in standard locations (checked: ${lmsPaths.join(\", \")})`);\n return null;\n }\n\n // Run lms ps --json to get loaded models with context\n // Use spawnSync with shell and explicit PATH to ensure lms can find its dependencies\n log.debug(`LMS CLI: running: ${lmsPath} ps --json`);\n const existingPath = readEnvVar(\"PATH\") || \"\";\n const result = launchProcessSync(lmsPath, [\"ps\", \"--json\"], {\n encoding: \"utf-8\",\n timeout: 5000,\n shell: false, // Don't use shell for JSON output - more reliable\n env: mergeEnv({\n PATH: `${this.config.localLmsBinDir || `${homeDir}/.cache/lm-studio/bin`}:/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:${existingPath}`,\n HOME: homeDir,\n }),\n });\n\n if (result.error) {\n log.debug(`LMS CLI: spawn error - ${result.error.message}`);\n return null;\n }\n\n if (result.stderr && result.stderr.trim()) {\n log.debug(`LMS CLI: stderr - ${result.stderr.slice(0, 200)}`);\n }\n\n const output = result.stdout || \"\";\n if (!output.trim()) {\n log.debug(\"LMS CLI: empty output - LM Studio may not be running or no models loaded\");\n return null;\n }\n\n // Parse JSON output\n let models: Array<{\n identifier?: string;\n modelKey?: string;\n contextLength?: number;\n maxContextLength?: number;\n }>;\n\n try {\n models = JSON.parse(output) as typeof models;\n } catch (parseErr) {\n log.debug(`LMS CLI: JSON parse error - ${parseErr}`);\n return null;\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n log.debug(\"LMS CLI: no models loaded\");\n return null;\n }\n\n // Find the model matching our configured model ID\n const model = models.find((m) =>\n m.identifier === modelId ||\n m.modelKey === modelId ||\n (m.identifier?.includes(modelId.replace(/@\\d+bit$/, \"\")))\n );\n\n if (!model) {\n log.debug(`LMS CLI: model \"${modelId}\" not found in loaded models: ${models.map(m => m.identifier).join(\", \")}`);\n return null;\n }\n\n // Use contextLength (actual configured) or fall back to maxContextLength (model max)\n const contextWindow = model.contextLength || model.maxContextLength;\n\n if (contextWindow) {\n log.info(`LMS CLI detected context window: ${contextWindow} for ${modelId} (max: ${model.maxContextLength})`);\n return contextWindow;\n }\n\n return null;\n } catch (err) {\n // LMS CLI not available or failed\n const errorMsg = err instanceof Error ? err.message : String(err);\n log.debug(`LMS CLI: failed - ${errorMsg}`);\n return null;\n }\n }\n\n /**\n * Get full model info from LMS CLI including context length and max context length.\n * Returns null if LMS CLI is unavailable or model not found.\n */\n private getLmsModelInfo(modelId: string): { contextLength: number; maxContextLength: number; identifier: string } | null {\n try {\n const result = launchProcessSync(\"lms\", [\"ps\", \"--json\"], {\n encoding: \"utf-8\",\n timeout: 5000,\n shell: false,\n });\n\n if (result.error) {\n return null;\n }\n\n const output = result.stdout || \"\";\n if (!output.trim()) {\n return null;\n }\n\n let models: Array<{\n identifier?: string;\n modelKey?: string;\n contextLength?: number;\n maxContextLength?: number;\n }>;\n\n try {\n models = JSON.parse(output) as typeof models;\n } catch {\n return null;\n }\n\n if (!Array.isArray(models) || models.length === 0) {\n return null;\n }\n\n const model = models.find((m) =>\n m.identifier === modelId ||\n m.modelKey === modelId ||\n (m.identifier?.includes(modelId.replace(/@\\d+bit$/, \"\")))\n );\n\n if (!model || !model.contextLength) {\n return null;\n }\n\n return {\n contextLength: model.contextLength,\n maxContextLength: model.maxContextLength || model.contextLength,\n identifier: model.identifier || modelId,\n };\n } catch {\n return null;\n }\n }\n\n /**\n * Get context window for the configured model, using cache if available.\n * This method caches the result to avoid repeated LMS CLI calls.\n * Order: ModelRegistry (persistent) -> memory cache -> LMS CLI -> settings.json\n */\n getCachedContextWindow(modelId: string): number | null {\n const now = Date.now();\n\n // 1. Check ModelRegistry for persisted context window\n if (this.modelRegistry) {\n const caps = this.modelRegistry.getCapabilities(modelId);\n if (caps.source === \"lmstudio\" && caps.contextWindow) {\n log.debug(`ModelRegistry: using persisted LM Studio context: ${caps.contextWindow}`);\n // Also update memory cache\n this.cachedLmsContext = caps.contextWindow;\n this.lastLmsCheck = now;\n return caps.contextWindow;\n }\n }\n\n // 2. Return in-memory cached value if still valid\n if (this.cachedLmsContext && now - this.lastLmsCheck < LocalLlmClient.LMS_CACHE_INTERVAL_MS) {\n log.debug(`LMS CLI: returning in-memory cached context: ${this.cachedLmsContext}`);\n return this.cachedLmsContext;\n }\n\n // 3. Try LMS CLI (authoritative source)\n const lmsInfo = this.getLmsModelInfo(modelId);\n if (lmsInfo?.contextLength) {\n this.cachedLmsContext = lmsInfo.contextLength;\n this.lastLmsCheck = now;\n // Calculate appropriate output tokens based on context size\n // Use 12.5% of context window, capped at 16K (generous but safe)\n const calculatedOutputTokens = Math.min(Math.floor(lmsInfo.contextLength / 8), 16384);\n const outputTokens = Math.max(calculatedOutputTokens, 4096); // Minimum 4K\n // Persist to ModelRegistry with detected capabilities\n if (this.modelRegistry) {\n this.modelRegistry.setCapabilities(modelId, {\n maxPositionEmbeddings: lmsInfo.maxContextLength || lmsInfo.contextLength,\n contextWindow: lmsInfo.contextLength,\n supportsExtendedContext: (lmsInfo.maxContextLength || lmsInfo.contextLength) > 65536,\n typicalOutputTokens: outputTokens,\n source: \"lmstudio\",\n });\n log.info(`LMS CLI: Stored capabilities for ${modelId}: ${lmsInfo.contextLength} context, ${outputTokens} output tokens`);\n }\n return lmsInfo.contextLength;\n }\n\n // Legacy: Try LMS CLI context only (fallback)\n const legacyContext = this.getContextFromLmsCli(modelId);\n if (legacyContext) {\n this.cachedLmsContext = legacyContext;\n this.lastLmsCheck = now;\n // Persist to ModelRegistry with calculated output tokens\n if (this.modelRegistry) {\n const calculatedOutputTokens = Math.min(Math.floor(legacyContext / 8), 16384);\n const outputTokens = Math.max(calculatedOutputTokens, 4096);\n this.modelRegistry.setCapabilities(modelId, {\n maxPositionEmbeddings: legacyContext,\n contextWindow: legacyContext,\n supportsExtendedContext: false,\n typicalOutputTokens: outputTokens,\n source: \"lmstudio\",\n });\n }\n return legacyContext;\n }\n\n // 4. Fall back to LM Studio settings.json\n const settingsContext = this.getContextFromLmStudioSettings();\n if (settingsContext) {\n log.info(`LM Studio settings: using default context: ${settingsContext}`);\n this.cachedLmsContext = settingsContext;\n this.lastLmsCheck = now;\n return settingsContext;\n }\n\n return null;\n }\n\n /**\n * Clear the LMS context cache. Call this when the model changes.\n */\n clearContextCache(): void {\n this.cachedLmsContext = null;\n this.lastLmsCheck = 0;\n log.debug(\"LMS CLI: context cache cleared\");\n }\n\n private remainingCooldownMs(now: number = Date.now()): number {\n return Math.max(0, this.cooldownUntilMs - now);\n }\n\n private scheduleQueueDrain(): void {\n if (this.queueDrainScheduled) return;\n this.queueDrainScheduled = true;\n\n queueMicrotask(() => {\n this.queueDrainScheduled = false;\n this.startAvailableQueuedRequests();\n });\n }\n\n /** True when a background-priority request occupies or awaits this client's local lane (issue #2011). */\n isBackgroundLaneContended(): boolean {\n return this.queueProcessing.has(\"background\") || this.requestQueues.background.length > 0;\n }\n\n private dequeueQueuedRequest(priority: LocalLlmRequestPriority): LocalLlmQueuedRequest | null {\n const next = this.requestQueues[priority].shift();\n return next ?? null;\n }\n\n private failOpenQueuedRequestsForCooldown(): number {\n let dropped = 0;\n for (const priority of [\"recall-critical\", \"background\"] as const) {\n while (this.requestQueues[priority].length > 0) {\n const queued = this.requestQueues[priority].shift();\n queued?.resolve(null);\n dropped += 1;\n }\n }\n return dropped;\n }\n\n private startAvailableQueuedRequests(): void {\n if (!this.queueProcessing.has(\"recall-critical\")) {\n const nextCritical = this.dequeueQueuedRequest(\"recall-critical\");\n if (nextCritical) {\n this.queueProcessing.add(\"recall-critical\");\n void this.runQueuedRequest(nextCritical);\n }\n }\n\n if (!this.queueProcessing.has(\"background\")) {\n const nextBackground = this.dequeueQueuedRequest(\"background\");\n if (nextBackground) {\n this.queueProcessing.add(\"background\");\n void this.runQueuedRequest(nextBackground);\n }\n }\n }\n\n private async runQueuedRequest(next: LocalLlmQueuedRequest): Promise<void> {\n try {\n if (next.options.signal?.aborted) {\n next.resolve(null);\n return;\n }\n const remainingCooldownMs = this.remainingCooldownMs();\n if (remainingCooldownMs > 0) {\n const additionalDropped = this.failOpenQueuedRequestsForCooldown();\n log.warn(\n `local LLM: cooldown active (${remainingCooldownMs}ms remaining), dropping ${additionalDropped + 1} queued request(s) fail-open`,\n );\n next.resolve(null);\n return;\n }\n\n let result: LocalLlmChatCompletionResult | null = null;\n try {\n result = await this.runChatCompletionRequest(next.messages, next.options, {\n priority: next.priority,\n enqueuedAtMs: next.enqueuedAtMs,\n });\n } catch (err) {\n log.warn(`local LLM queue drain failed open: ${next.options.redactProviderErrors ? \"provider error details redacted\" : err instanceof Error ? err.message : String(err)}`);\n }\n next.resolve(result);\n } finally {\n this.queueProcessing.delete(next.priority);\n if (this.requestQueues[\"recall-critical\"].length > 0 || this.requestQueues.background.length > 0) {\n this.scheduleQueueDrain();\n }\n }\n }\n\n private async runChatCompletionRequest(\n messages: Array<{ role: string; content: string }>,\n options: LocalLlmChatCompletionOptions,\n queueMeta?: { priority: LocalLlmRequestPriority; enqueuedAtMs: number },\n ): Promise<LocalLlmChatCompletionResult | null> {\n log.debug(\n `local LLM chatCompletion: localLlmEnabled=${resolveLocalLlmCapabilities(this.config).localLlm}, model=${this.config.localLlmModel}`,\n );\n\n const operation = options.operation ?? \"unspecified\";\n const startedAtMs = Date.now();\n if (queueMeta) {\n log.debug(\n `local LLM queue start: priority=${queueMeta.priority} waitMs=${startedAtMs - queueMeta.enqueuedAtMs} op=${operation}`,\n );\n }\n\n try {\n if (options.signal?.aborted) return null;\n const isAvailable = await this.checkAvailability(options.signal);\n if (!isAvailable) {\n log.debug(\n `local LLM: checkAvailability returned false for ${this.config.localLlmUrl}`,\n );\n return null;\n }\n\n const promptChars = messages.reduce((sum, m) => sum + (m.content?.length ?? 0), 0);\n const requestModel = options.model ?? this.config.localLlmModel;\n const requestBody: LocalLlmChatRequestBody = {\n model: requestModel,\n messages,\n temperature: options.temperature ?? 0.7,\n // Use max_tokens consistent with cloud models\n max_tokens: options.maxTokens ?? 4096,\n stream: false,\n };\n this.nativeSchemaGate.attach(requestBody, options, requestModel);\n\n // Suppress thinking/reasoning for operations that benefit from terse,\n // structured output. Thinking-capable models (Qwen 3.5, Gemma 4,\n // DeepSeek) default to thinking-on via their chat template; sending\n // `chat_template_kwargs: { enable_thinking: false }` tells the template\n // to skip reasoning tokens. Consolidation operations on the main client\n // intentionally keep thinking enabled so entity resolution and\n // deduplication can use the model's reasoning path. Fast-tier callers can\n // still force suppression per request to preserve their low-latency\n // contract.\n //\n // Gate the injection on detected backend support (issue #548,\n // Codex P1 on PR #550): `chat_template_kwargs` is an LM Studio /\n // vLLM / llama.cpp extension, not part of standard OpenAI chat\n // completions. Strict OpenAI-compatible backends reject\n // unknown fields with 400, which trips the 400-cooldown path and\n // can effectively disable local extraction. Fail open when the\n // backend hasn't been positively identified as thinking-capable.\n const shouldSuppressThinking =\n options.forceDisableThinking === true ||\n ((options.disableThinking ?? this._disableThinking) &&\n THINKING_SUPPRESSED_OPERATIONS.has(operation));\n if (\n shouldSuppressThinking &&\n this.detectedType !== null &&\n THINKING_COMPATIBLE_BACKENDS.has(this.detectedType)\n ) {\n requestBody.chat_template_kwargs = { enable_thinking: false };\n } else if (shouldSuppressThinking && this.detectedType === \"ollama\") {\n // Ollama's /v1 endpoint silently drops `chat_template_kwargs` AND\n // `enable_thinking` — the ONLY field it maps to think-off is\n // `reasoning_effort` (\"none\" → ThinkValue{false} in openai.go;\n // verified against Ollama 0.32.0 source and live probes,\n // issue #1996). Without this, thinking-capable models (Gemma 4,\n // Qwen 3.5+) burn 1,700-2,000 reasoning tokens per extraction on\n // Ollama, exceed the client timeout, and retry forever. The effort\n // is configurable via `localLlmReasoningEffort` (default \"none\");\n // an empty value disables injection (pre-#1996 behavior).\n const effort = this.config.localLlmReasoningEffort;\n if (effort) {\n requestBody.reasoning_effort = effort;\n }\n }\n\n // Normalize URL (use 127.0.0.1 instead of localhost)\n const baseUrl = trimTrailingSlashes(\n this.config.localLlmUrl.replace(\"localhost\", \"127.0.0.1\"),\n );\n const chatUrl = baseUrl.endsWith(\"/v1\")\n ? `${baseUrl}/chat/completions`\n : `${baseUrl}/v1/chat/completions`;\n\n let requestBodyJson = JSON.stringify(requestBody);\n log.debug(\n `local LLM: sending request to ${chatUrl} with model ${this.config.localLlmModel}`,\n );\n // Avoid logging request bodies by default (can contain sensitive user content).\n log.debug(`local LLM: request body length=${requestBodyJson.length}`);\n\n const effectiveTimeoutMs =\n typeof options.timeoutMs === \"number\"\n ? Math.min(this.config.localLlmTimeoutMs, options.timeoutMs)\n : this.config.localLlmTimeoutMs;\n const maxAttempts = 1 + Math.max(0, this.config.localLlmRetry5xxCount);\n // COS-447: rate-limit responses (429/503/408, LiteLLM cooldown) get\n // their own retry budget with exponential full-jitter backoff, and a\n // process-wide semaphore caps concurrent HTTP attempts across clients.\n // Waits are bounded by the request timeout so a short caller budget\n // (e.g. rerankTimeoutMs) is never stretched by a long cooldown.\n const rateLimit = new LocalLlmRateLimitSession(chatUrl, resolveRateLimitSettings(this.config),\n (queueMeta?.priority ?? options.priority) === \"recall-critical\", effectiveTimeoutMs);\n let lastRateLimitDelayMs: number | null = null;\n let response: Response | null = null, responseBody = \"\";\n let lastAbortError: Error | null = null;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n response = null;\n responseBody = \"\";\n // Wait out the shared endpoint backoff, then take a concurrency slot.\n const gate = await rateLimit.beforeAttempt(options.signal);\n if (gate.kind === \"skip\") {\n log.warn(gate.reason === \"queue\"\n ? `local LLM concurrency queue exceeded the ${effectiveTimeoutMs}ms request budget; skipping request (op=${operation})`\n : `local LLM rate-limit backoff active (${gate.remainingMs}ms remaining); skipping request (op=${operation})`);\n if (options.failureDiag)\n options.failureDiag.lastError = Object.assign(new Error(\"local LLM rate limited\"), { status: 429 });\n return null;\n }\n if (gate.kind === \"aborted\") return null;\n const attemptAbort = new AbortController();\n const onCallerAbort = (): void => {\n attemptAbort.abort(options.signal?.reason);\n };\n if (options.signal) {\n if (options.signal.aborted) {\n onCallerAbort();\n } else {\n options.signal.addEventListener(\"abort\", onCallerAbort, { once: true });\n }\n }\n const attemptTimeout = setTimeout(() => attemptAbort.abort(), effectiveTimeoutMs);\n try {\n response = await this.chatTransport.post({\n url: chatUrl,\n headers: this.buildRequestHeaders({ \"Content-Type\": \"application/json\" }),\n body: requestBodyJson,\n signal: attemptAbort.signal,\n budgetMs: this.config.localLlmTimeoutMs,\n });\n responseBody = await response.text();\n if (\n response.status === 400 &&\n requestBody.response_format &&\n isUnsupportedJsonSchemaError(`400 ${responseBody}`)\n ) {\n this.nativeSchemaGate.rememberRejection(requestModel);\n // Match gateway degradation without extending this attempt's deadline.\n delete requestBody.response_format;\n requestBodyJson = JSON.stringify(requestBody);\n log.debug(\"local LLM rejected native JSON schema; retrying without it\");\n response = null;\n response = await this.chatTransport.post({\n url: chatUrl,\n headers: this.buildRequestHeaders({ \"Content-Type\": \"application/json\" }),\n body: requestBodyJson,\n signal: attemptAbort.signal,\n budgetMs: this.config.localLlmTimeoutMs,\n });\n responseBody = await response.text();\n }\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (options.signal?.aborted) {\n response = null;\n lastAbortError = error;\n break;\n }\n if (response && !response.ok) {\n log.debug(`local LLM failed to read ${response.status} response body: ${options.redactProviderErrors ? \"details redacted\" : error.message}`);\n } else {\n response = null;\n if (!isAbortError(err)) throw err;\n lastAbortError = error;\n if (attempt >= maxAttempts) break;\n const backoffMs = this.config.localLlmRetryBackoffMs * attempt;\n log.warn(\n `local LLM request aborted: op=${operation} attempt=${attempt}/${maxAttempts} timeoutMs=${effectiveTimeoutMs} model=${this.config.localLlmModel}; retrying after ${backoffMs}ms`,\n );\n if (!(await waitForRetryBackoff(backoffMs, options.signal))) return null;\n continue;\n }\n } finally {\n clearTimeout(attemptTimeout);\n options.signal?.removeEventListener(\"abort\", onCallerAbort);\n gate.release();\n }\n\n if (response.ok) {\n rateLimit.onSuccess();\n break;\n }\n if (response.status >= 500 && attempt < maxAttempts) {\n const nonRecoverableReason =\n extractNonRecoverableBackendReasonFromErrorText(responseBody);\n if (nonRecoverableReason) {\n this.markBackendUnavailable(\n nonRecoverableReason,\n this.config.localLlm400CooldownMs,\n );\n this.consecutive400s = 0;\n return null;\n }\n }\n const decision = rateLimit.onResponse(response.status, response.headers?.get(\"retry-after\"), responseBody);\n lastRateLimitDelayMs = decision.kind === \"not-rate-limited\" ? null : decision.delayMs;\n if (decision.kind === \"give-up\") break;\n if (decision.kind === \"retry\") {\n log.warn(`local LLM rate limited: ${response.status}; backing off ${decision.delayMs}ms before retry ${decision.retry}/${rateLimit.settings.retryCount} (op=${operation}, serverHintMs=${decision.hintMs ?? \"none\"}, consecutive=${decision.consecutive})`);\n attempt -= 1; // own retry budget; the loop top waits out the backoff\n continue;\n }\n if (response.status < 500 || attempt >= maxAttempts) break;\n\n const backoffMs = this.config.localLlmRetryBackoffMs * attempt;\n log.warn(\n `local LLM request got ${response.status}; retrying (attempt ${attempt + 1}/${maxAttempts}) after ${backoffMs}ms`,\n );\n if (!(await waitForRetryBackoff(backoffMs, options.signal))) return null;\n }\n log.debug(\n `local LLM: received response, status=${response?.status}, ok=${response?.ok}`,\n );\n if (!response) {\n if (lastAbortError) {\n log.warn(\n `local LLM request aborted after ${maxAttempts} attempt(s): op=${operation} timeoutMs=${effectiveTimeoutMs} model=${this.config.localLlmModel} promptChars=${promptChars} durationMs=${Date.now() - startedAtMs}${queueMeta ? ` waitMs=${startedAtMs - queueMeta.enqueuedAtMs}` : \"\"}`,\n );\n } else {\n log.warn(\n `local LLM request failed: no response object (op=${operation} model=${this.config.localLlmModel} durationMs=${Date.now() - startedAtMs})`,\n );\n }\n return null;\n }\n\n if (!response.ok) {\n if (lastRateLimitDelayMs !== null)\n log.warn(`local LLM rate-limit retries exhausted: op=${operation} retries=${rateLimit.retryCount} nextBackoffMs=${lastRateLimitDelayMs}`);\n let reason = \"\";\n try {\n const parsed = JSON.parse(responseBody) as { error?: { message?: string } };\n reason = parsed?.error?.message ? ` — ${parsed.error.message}` : \"\";\n } catch {\n if (!options.redactProviderErrors) log.debug(`local LLM error body: ${responseBody.slice(0, 500)}`);\n }\n log.warn(\n `local LLM request failed: ${response.status}${options.redactProviderErrors ? \"\" : ` ${response.statusText}${reason}`} ` +\n `(op=${operation}, model=${this.config.localLlmModel}, url=${chatUrl}, promptChars=${promptChars}, maxTokens=${requestBody.max_tokens as number})`,\n );\n const nonRecoverableReason =\n extractNonRecoverableBackendReason(reason) ??\n extractNonRecoverableBackendReasonFromErrorText(responseBody);\n if (nonRecoverableReason) {\n this.markBackendUnavailable(\n nonRecoverableReason,\n this.config.localLlm400CooldownMs,\n );\n this.consecutive400s = 0;\n return null;\n }\n if (response.status === 400) {\n this.consecutive400s += 1;\n if (this.consecutive400s >= this.config.localLlm400TripThreshold) {\n this.cooldownUntilMs = Date.now() + this.config.localLlm400CooldownMs;\n log.warn(\n `local LLM: entering cooldown for ${this.config.localLlm400CooldownMs}ms ` +\n `after ${this.consecutive400s} consecutive 400 responses`,\n );\n this.consecutive400s = 0;\n }\n } else {\n this.consecutive400s = 0;\n }\n if (options.failureDiag)\n options.failureDiag.lastError = Object.assign(new Error(\"local LLM http failure\"), {\n status: response.status,\n });\n return null;\n }\n this.consecutive400s = 0;\n this.nativeSchemaGate.recordSuccess(requestBody, requestModel);\n\n const data = JSON.parse(responseBody) as {\n choices?: Array<{\n message?: { content?: string; reasoning_content?: string };\n }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n log.debug(\n `local LLM response: choices=${data.choices?.length}, usage=${JSON.stringify(data.usage)}`,\n );\n\n // Thinking models (e.g. Qwen 3.5) may put their response in\n // `reasoning_content` and leave `content` empty. Fall back to\n // reasoning_content so engram still gets a usable result.\n const msg = data.choices?.[0]?.message;\n const content = msg?.content || msg?.reasoning_content || \"\";\n if (!content) {\n log.warn(`local LLM returned empty content.${options.redactProviderErrors ? \"\" : ` choices=${JSON.stringify(data.choices)?.slice(0, 200)}`}`);\n return null;\n }\n\n // Estimate tokens if not provided by local LLM\n const usage = data.usage\n ? {\n promptTokens: data.usage.prompt_tokens ?? 0,\n completionTokens: data.usage.completion_tokens ?? 0,\n totalTokens: data.usage.total_tokens ?? 0,\n }\n : this.estimateTokens(messages, content);\n\n const durationMs = Date.now() - startedAtMs;\n if (resolvePipelineProcessingCapabilities(this.config).slowLog && durationMs >= this.config.slowLogThresholdMs) {\n const promptChars = messages.reduce((sum, m) => sum + (m.content?.length ?? 0), 0);\n const op = options.operation ? ` op=${options.operation}` : \"\";\n log.warn(\n `SLOW local LLM:${op} durationMs=${durationMs} model=${this.config.localLlmModel} url=${chatUrl} promptChars=${promptChars} outputTokens=${usage.completionTokens} totalTokens=${usage.totalTokens}`,\n );\n }\n\n log.debug(\"local LLM: request succeeded, tokens:\", usage.totalTokens);\n return { content, usage };\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n const durationMs = Date.now() - startedAtMs;\n if (isAbortError(err)) {\n log.warn(\n `local LLM request aborted: op=${operation} timeoutMs=${options.timeoutMs ?? this.config.localLlmTimeoutMs} model=${this.config.localLlmModel} durationMs=${durationMs} error=${options.redactProviderErrors ? \"provider error details redacted\" : errMsg}`,\n );\n return null;\n }\n log.warn(`local LLM request error: op=${operation} error=${options.redactProviderErrors ? \"provider error details redacted\" : errMsg}`);\n this.isAvailable = false; // Mark as unavailable on non-abort errors\n const nonRecoverableReason = extractNonRecoverableBackendReason(errMsg);\n if (nonRecoverableReason) {\n this.markBackendUnavailable(\n nonRecoverableReason,\n this.config.localLlm400CooldownMs,\n );\n }\n return null;\n } finally {\n if (queueMeta) {\n const finishedAtMs = Date.now();\n const waitMs = startedAtMs - queueMeta.enqueuedAtMs;\n log.debug(\n `local LLM queue finish: priority=${queueMeta.priority} waitMs=${waitMs} runMs=${finishedAtMs - startedAtMs} totalMs=${finishedAtMs - queueMeta.enqueuedAtMs} op=${operation}`,\n );\n }\n }\n }\n\n /**\n * Query the local LLM server for loaded model information.\n * Returns null if unavailable or if the model is not found.\n */\n async getLoadedModelInfo(): Promise<LocalModelInfo | null> {\n const baseUrl = trimTrailingSlashes(\n this.config.localLlmUrl.replace(\"localhost\", \"127.0.0.1\"),\n );\n\n // Handle URL construction - localLlmUrl may already include /v1\n const modelsUrl = baseUrl.endsWith(\"/v1\")\n ? `${baseUrl}/models`\n : `${baseUrl}/v1/models`;\n log.debug(`Fetching model info from ${modelsUrl}`);\n\n try {\n const result = await this.fetchWithTimeout(modelsUrl, 3000);\n if (!result.ok) {\n if (result.status === 401 || result.status === 403) {\n log.warn(\n `Local LLM: unauthorized while fetching models from ${modelsUrl}; verify localLlmApiKey and localLlmAuthHeader settings`,\n );\n }\n log.warn(`Local LLM: Failed to fetch models from ${modelsUrl} - server returned error`);\n return null;\n }\n if (!result.data) {\n log.warn(`Local LLM: No data returned from ${modelsUrl}`);\n return null;\n }\n\n const data = result.data as {\n data?: Array<{\n id?: string;\n object?: string;\n owned_by?: string;\n // LM Studio specific fields\n max_context_length?: number;\n max_tokens?: number;\n // Ollama specific\n name?: string;\n details?: {\n parameter_size?: string;\n family?: string;\n };\n }>;\n };\n\n if (!Array.isArray(data.data) || data.data.length === 0) {\n log.warn(\"Local LLM returned no models\");\n return null;\n }\n\n // Verbose model listings are noisy on every gateway restart. Keep it debug-only.\n const modelIds = data.data.map((m) => m.id).filter(Boolean);\n log.debug(\n `Local LLM: Found ${modelIds.length} model(s). First 10: ${modelIds.slice(0, 10).join(\", \")}`,\n );\n\n // Find the model matching our configured model ID\n const configuredModel = this.config.localLlmModel;\n let model = data.data.find((m) => m.id === configuredModel);\n\n // If not found by exact match, try partial match (handle suffixes like @4bit)\n if (!model) {\n model = data.data.find((m) =>\n configuredModel.includes(m.id || \"\") ||\n (m.id || \"\").includes(configuredModel.replace(/@\\d+bit$/, \"\"))\n );\n }\n\n // If still not found, use the first loaded model and warn\n if (!model) {\n model = data.data[0];\n const availablePreview = data.data\n .map((m) => m.id)\n .filter(Boolean)\n .slice(0, 10)\n .join(\", \");\n log.warn(\n `Configured model \"${configuredModel}\" not found in local LLM. ` +\n `Using \"${model.id}\" instead. Available (first 10): ${availablePreview}`\n );\n }\n\n // Extract context window - try multiple field names\n let contextWindow = model.max_context_length || model.max_tokens;\n\n // If API doesn't report context window, try LMS CLI (LM Studio specific)\n if (!contextWindow) {\n log.info(\"Local LLM: API did not report context window, trying LMS CLI...\");\n const lmsContext = this.getCachedContextWindow(model.id || \"\");\n if (lmsContext) {\n contextWindow = lmsContext;\n }\n }\n\n this.cachedModelInfo = {\n id: model.id || \"unknown\",\n contextWindow: contextWindow,\n maxTokens: model.max_tokens,\n };\n\n log.info(\n `Local LLM model detected: ${this.cachedModelInfo.id}, ` +\n `context window: ${contextWindow?.toLocaleString() || \"unknown (may use default)\"}`\n );\n\n return this.cachedModelInfo;\n } catch (err) {\n log.warn(`Failed to fetch model info: ${err}`);\n return null;\n }\n }\n\n /**\n * Check if the configured model is available and get its actual context window.\n * Warns if there's a mismatch between expected and actual context.\n */\n async validateModelConfig(expectedContextWindow?: number): Promise<{\n available: boolean;\n actualContextWindow?: number;\n warnings: string[];\n }> {\n const warnings: string[] = [];\n\n const modelInfo = await this.getLoadedModelInfo();\n if (!modelInfo) {\n return { available: false, warnings: [\"Could not query local LLM for model info\"] };\n }\n\n // If we have expected context and the server reports one, check for mismatch\n if (expectedContextWindow && modelInfo.contextWindow) {\n if (modelInfo.contextWindow < expectedContextWindow) {\n warnings.push(\n `Context window mismatch: Model ${modelInfo.id} supports ${modelInfo.contextWindow.toLocaleString()} tokens, ` +\n `but engram is configured for ${expectedContextWindow.toLocaleString()}. ` +\n `Set localLlmMaxContext: ${modelInfo.contextWindow} in config to avoid errors.`\n );\n }\n }\n\n // Warn if server doesn't report context window (common with some local LLM setups)\n if (!modelInfo.contextWindow) {\n warnings.push(\n `Local LLM server did not report context window for ${modelInfo.id}. ` +\n `If you get \"context length exceeded\" errors, set localLlmMaxContext in config.`\n );\n }\n\n return {\n available: true,\n actualContextWindow: modelInfo.contextWindow,\n warnings,\n };\n }\n\n /**\n * Make a chat completion request to local LLM\n */\n async chatCompletion(\n messages: Array<{ role: string; content: string }>,\n options: LocalLlmChatCompletionOptions = {},\n ): Promise<LocalLlmChatCompletionResult | null> {\n if (!resolveLocalLlmCapabilities(this.config).localLlm) {\n log.debug(\"local LLM: disabled, returning null\");\n return null;\n }\n\n const remainingMs = this.remainingCooldownMs();\n if (remainingMs > 0) {\n log.debug(`local LLM: cooldown active (${remainingMs}ms remaining), skipping request`);\n return null;\n }\n if (options.priority) {\n const priority = options.priority;\n return await new Promise<LocalLlmChatCompletionResult | null>((resolve) => {\n let settled = false;\n let onAbort: (() => void) | undefined;\n const finish = (value: LocalLlmChatCompletionResult | null): void => {\n if (settled) return;\n settled = true;\n if (onAbort) options.signal?.removeEventListener(\"abort\", onAbort);\n resolve(value);\n };\n const queued: LocalLlmQueuedRequest = {\n messages,\n options,\n priority,\n enqueuedAtMs: Date.now(),\n resolve: finish,\n };\n onAbort = () => {\n const queue = this.requestQueues[priority];\n const index = queue.indexOf(queued);\n if (index >= 0) queue.splice(index, 1);\n finish(null);\n };\n this.requestQueues[priority].push(queued);\n if (options.signal?.aborted) onAbort();\n else if (options.signal) options.signal.addEventListener(\"abort\", onAbort, { once: true });\n this.scheduleQueueDrain();\n });\n }\n\n return await this.runChatCompletionRequest(messages, options);\n }\n /**\n * Estimate tokens when local LLM does not return usage stats.\n */\n private estimateTokens(\n messages: Array<{ role: string; content: string }>,\n response: string\n ): { promptTokens: number; completionTokens: number; totalTokens: number } {\n const promptTokens = messages.reduce((sum, message) => sum + estimateTokenCount(message.content), 0);\n const completionTokens = estimateTokenCount(response);\n\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n };\n }\n\n /**\n * Try local LLM first, fallback to cloud provider if configured\n */\n async withFallback<T>(\n localOperation: () => Promise<T | null>,\n fallbackOperation: () => Promise<T>,\n operationName: string\n ): Promise<T> {\n // Try local LLM first if enabled\n if (resolveLocalLlmCapabilities(this.config).localLlm) {\n const localResult = await localOperation();\n if (localResult !== null) {\n log.debug(`${operationName}: used local LLM`);\n return localResult;\n }\n\n // Local failed or unavailable\n if (this.config.localLlmFallback) {\n log.info(`${operationName}: local LLM unavailable, falling back to cloud`);\n } else {\n throw new Error(`${operationName}: local LLM unavailable and fallback disabled`);\n }\n }\n\n // Use fallback (cloud provider)\n return fallbackOperation();\n }\n}\n"],"mappings":"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","names":["backoffMs","promptChars"]}
|