@remnic/core 9.69.33 → 9.69.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +13 -11
- package/dist/access-admin-ops-surface.js +61 -56
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +62 -57
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +61 -56
- package/dist/access-cli.js +129 -125
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-coding-context-resolution.js +3 -3
- package/dist/access-extraction-force-flush.d.ts +13 -11
- package/dist/access-extraction-force-flush.js +61 -56
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +13 -11
- package/dist/access-http-briefing.js +62 -57
- package/dist/access-http-lcm-compaction.d.ts +13 -11
- package/dist/access-http-lifecycle-flush.d.ts +13 -11
- package/dist/access-http-offline-stream.d.ts +13 -11
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +63 -58
- package/dist/access-http.d.ts +14 -12
- package/dist/access-http.js +82 -78
- package/dist/access-identity-continuity-surface.d.ts +11 -9
- package/dist/access-identity-continuity-surface.js +61 -56
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +61 -56
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +70 -66
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +61 -56
- package/dist/access-observe-transcript.d.ts +11 -9
- package/dist/access-observe-transcript.js +3 -3
- package/dist/access-observe-write-surface.d.ts +15 -13
- package/dist/access-observe-write-surface.js +61 -56
- package/dist/access-offline-manifest.d.ts +47 -11
- package/dist/access-offline-manifest.js +18 -16
- package/dist/access-operations-batch.js +64 -60
- package/dist/access-operations.d.ts +14 -12
- package/dist/access-operations.js +69 -65
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +61 -56
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +61 -56
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +61 -56
- package/dist/access-schema.d.ts +55 -13
- package/dist/access-schema.js +15 -1
- package/dist/{access-service-CJQoQvRa.d.ts → access-service-WUm2LnXZ.d.ts} +52 -50
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +61 -56
- package/dist/access-surface-catalog.d.ts +13 -11
- package/dist/access-surface-catalog.js +63 -58
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +12 -10
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +2 -1
- package/dist/adapters/index.d.ts +46 -1
- package/dist/adapters/index.js +10 -6
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +2 -1
- package/dist/artifact-search.d.ts +2 -1
- package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
- package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +11 -9
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +25 -24
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +11 -10
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/calibration.js +3 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
- package/dist/{catalog-8O9KY9eA.d.ts → catalog-BaCx29iv.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +26 -25
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
- package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
- package/dist/chunk-255PC37A.js.map +1 -0
- package/dist/{chunk-7BMXZCOT.js → chunk-2AU4D4HQ.js} +3 -3
- package/dist/{chunk-LTIZHLV7.js → chunk-2JCA2PQT.js} +2 -2
- package/dist/{chunk-XXIHX75O.js → chunk-2UZ5ZH6W.js} +3 -3
- package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
- package/dist/chunk-326KUXIR.js.map +1 -0
- package/dist/{chunk-P3SB5BNT.js → chunk-34QW2LK2.js} +2 -2
- package/dist/{chunk-EONF76DT.js → chunk-36UBSLFN.js} +2 -2
- package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
- package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
- package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
- package/dist/{chunk-TCUKRAMK.js → chunk-4JVQRFZD.js} +7 -7
- package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
- package/dist/chunk-4MIS4CQW.js.map +1 -0
- package/dist/{chunk-PYLL63BF.js → chunk-4PB2MBY6.js} +9 -9
- package/dist/{chunk-UUQG7HAD.js → chunk-4WCNPQQ5.js} +4 -4
- package/dist/{chunk-UGPUYIET.js → chunk-5A7ZUOBA.js} +220 -399
- package/dist/chunk-5A7ZUOBA.js.map +1 -0
- package/dist/chunk-5HYUUFMQ.js +1280 -0
- package/dist/chunk-5HYUUFMQ.js.map +1 -0
- package/dist/{chunk-H4VH5VIB.js → chunk-5QBDLMGG.js} +2 -2
- package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
- package/dist/{chunk-DGGB65KC.js → chunk-5THU7NFP.js} +3 -3
- package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
- package/dist/chunk-65RENJGB.js.map +1 -0
- package/dist/{chunk-BPJNF7J2.js → chunk-6CCRSQWT.js} +2 -2
- package/dist/{chunk-XXE5P6HJ.js → chunk-6XYC7NM4.js} +2 -2
- package/dist/{chunk-J7HFPA6O.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-I5DZ3WGR.js → chunk-757NP436.js} +3 -3
- package/dist/{chunk-2C3S7J2S.js → chunk-7CAY3YKP.js} +741 -28
- package/dist/chunk-7CAY3YKP.js.map +1 -0
- package/dist/{chunk-E6TDQRF6.js → chunk-7J2CGXG3.js} +2 -2
- package/dist/{chunk-BUTCAMJM.js → chunk-A2YQL2FF.js} +5 -5
- package/dist/chunk-A5UQ52YQ.js +211 -0
- package/dist/chunk-A5UQ52YQ.js.map +1 -0
- package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
- package/dist/{chunk-R3HKWWUB.js → chunk-A7WOWDZK.js} +2 -2
- package/dist/{chunk-6N3TQFZU.js → chunk-AIKTQVV3.js} +3 -3
- package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
- package/dist/{chunk-W27OW7AB.js → chunk-APFKZVJS.js} +2 -2
- package/dist/{chunk-B325AGLK.js → chunk-AQIRQUCP.js} +2 -2
- package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
- package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
- package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
- package/dist/chunk-BRZWWUCJ.js +13 -0
- package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
- package/dist/{chunk-N57A4KPV.js → chunk-C2BFTYD7.js} +2 -2
- package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
- package/dist/{chunk-Q726HSJO.js → chunk-CRUFVJOX.js} +16 -15
- package/dist/chunk-CRUFVJOX.js.map +1 -0
- package/dist/{chunk-X35W4S3L.js → chunk-D3IZCN5P.js} +4 -4
- package/dist/{chunk-44T3Y7SZ.js → chunk-EJIEQOPB.js} +5 -5
- package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
- package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
- package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-N2ZNPHA3.js → chunk-IFFLUCCU.js} +2 -2
- package/dist/{chunk-RHQMKJFG.js → chunk-ISYZ5DUI.js} +51 -47
- package/dist/{chunk-RHQMKJFG.js.map → chunk-ISYZ5DUI.js.map} +1 -1
- package/dist/{chunk-PFFZWDPE.js → chunk-JZDH2ZZK.js} +3 -3
- package/dist/{chunk-TX2UTLXC.js → chunk-K6IPSW5B.js} +2 -2
- package/dist/{chunk-4MHYKEOM.js → chunk-KDJHLOZP.js} +10 -10
- package/dist/{chunk-KCB7F4J7.js → chunk-KYGOQV37.js} +2 -2
- package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
- package/dist/chunk-L2QLDZJC.js.map +1 -0
- package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
- package/dist/chunk-LAVJC57X.js.map +1 -0
- package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
- package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
- package/dist/chunk-LSLCFCCQ.js.map +1 -0
- package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
- package/dist/{chunk-PL7FYKHT.js → chunk-MMG5K6XJ.js} +2 -2
- package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
- package/dist/{chunk-E6JA6XWY.js → chunk-ND2O2PVN.js} +1013 -1317
- package/dist/chunk-ND2O2PVN.js.map +1 -0
- package/dist/chunk-NPNSKE76.js +220 -0
- package/dist/chunk-NPNSKE76.js.map +1 -0
- package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
- package/dist/{chunk-DB5TGMLZ.js → chunk-OZUXKUPD.js} +6 -4
- package/dist/{chunk-DB5TGMLZ.js.map → chunk-OZUXKUPD.js.map} +1 -1
- package/dist/chunk-PCEYGOSL.js +66 -0
- package/dist/chunk-PCEYGOSL.js.map +1 -0
- package/dist/{chunk-LSYDG6MJ.js → chunk-PEXW2JCK.js} +2 -2
- package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
- package/dist/chunk-PWPIERBM.js.map +1 -0
- package/dist/chunk-Q4AUIFUA.js +111 -0
- package/dist/chunk-Q4AUIFUA.js.map +1 -0
- package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
- package/dist/chunk-Q6LCCIZN.js.map +1 -0
- package/dist/{chunk-MOZXTRC2.js → chunk-QF4J3KMV.js} +19 -19
- package/dist/{chunk-JGHXXQ2G.js → chunk-QLJ6762U.js} +2 -2
- package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
- package/dist/{chunk-CETXNLEX.js → chunk-RQO3J4MR.js} +2 -2
- package/dist/{chunk-5NANRSCD.js → chunk-RR7G2X7C.js} +5 -5
- package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
- package/dist/{chunk-EQHDH4C2.js → chunk-S76KRJDG.js} +3 -3
- package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
- package/dist/chunk-SHEHQBCG.js.map +1 -0
- package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
- package/dist/{chunk-MFDTVQJX.js → chunk-SZWEDG3H.js} +12 -6
- package/dist/chunk-SZWEDG3H.js.map +1 -0
- package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
- package/dist/{chunk-JSN44KIB.js → chunk-T2YFZ27G.js} +9 -9
- package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
- package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
- package/dist/chunk-TLHNF6GA.js +647 -0
- package/dist/chunk-TLHNF6GA.js.map +1 -0
- package/dist/{chunk-NB5BCFUY.js → chunk-TWYTGIBR.js} +4 -4
- package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
- package/dist/chunk-UBG4GAEP.js.map +1 -0
- package/dist/{chunk-MWFGUESQ.js → chunk-UEZKN6VR.js} +2 -2
- package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
- package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
- package/dist/chunk-VELCIWJZ.js.map +1 -0
- package/dist/{chunk-PBGVVDLY.js → chunk-VIZR45AN.js} +2 -2
- package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
- package/dist/{chunk-JTH2SE6B.js → chunk-W5BLTZZJ.js} +8 -8
- package/dist/chunk-W6IJMWTZ.js +72 -0
- package/dist/chunk-W6IJMWTZ.js.map +1 -0
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-MN3LK3KN.js → chunk-X424T5JQ.js} +2 -2
- package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
- package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
- package/dist/chunk-XQU3CPF2.js.map +1 -0
- package/dist/chunk-XW2T4QAW.js +1 -0
- package/dist/{chunk-D223ZDQV.js → chunk-YEDVOYL2.js} +2 -2
- package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
- package/dist/chunk-YEN4TREG.js.map +1 -0
- package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
- package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
- package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
- package/dist/{chunk-OQDPBRQ6.js → chunk-Z7YDVHDI.js} +2 -2
- package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
- package/dist/chunk-ZEFVK7XC.js.map +1 -0
- package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
- package/dist/{chunk-HV7OY4DM.js → chunk-ZMKYCFJ7.js} +640 -199
- package/dist/chunk-ZMKYCFJ7.js.map +1 -0
- package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
- package/dist/{cli-D57e2Mqt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +11 -4
- package/dist/cli-fallback.js +5 -1
- package/dist/cli.d.ts +15 -13
- package/dist/cli.js +102 -98
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +31 -29
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +2 -1
- package/dist/compat/checks.js +2 -2
- package/dist/compat/codex-cli-fallback.d.ts +1 -1
- package/dist/compat/codex-cli-fallback.js +5 -1
- package/dist/compat/codex-cli-fallback.js.map +1 -1
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +26 -25
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +12 -10
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +25 -24
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +27 -26
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +4 -3
- package/dist/contradiction/index.js +5 -5
- package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +27 -26
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.js +2 -2
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +28 -27
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-http-glue.d.ts +13 -11
- package/dist/deep-recall-http-glue.js +12 -2
- package/dist/deep-recall-mcp-tools.d.ts +13 -11
- package/dist/deep-recall-policy-llm.d.ts +2 -1
- package/dist/deep-recall-policy-llm.js +4 -3
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +25 -24
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/explicit-capture.d.ts +11 -9
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +13 -11
- package/dist/external-wiki-access.js +62 -57
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +13 -11
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-faithfulness.js +4 -3
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-judge.js +5 -4
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +36 -34
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/fallback-llm.js +3 -2
- package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
- package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
- package/dist/graph-append-error.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-jsonl.d.ts +2 -1
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph.d.ts +2 -1
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-BTAsSkPG.d.ts → index-BNluTxBp.d.ts} +2 -2
- package/dist/index.d.ts +302 -245
- package/dist/index.js +307 -205
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +4 -4
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +4 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +28 -27
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +25 -24
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +25 -24
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +26 -25
- package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
- package/dist/mcp-memory-inspector-app.d.ts +13 -11
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +13 -11
- package/dist/memory-subject.d.ts +13 -11
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/migrate/from-engram.js +2 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +26 -25
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +25 -24
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/network/tailscale.js +2 -2
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +6 -6
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +29 -28
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +43 -41
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +43 -38
- package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
- package/dist/orchestrator.d.ts +11 -9
- package/dist/orchestrator.js +133 -127
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/{public-http-h-yWu9rj.d.ts → public-http-L-IymRBN.d.ts} +1 -1
- package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Mj508lHA.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-planner-llm.js +3 -2
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +56 -0
- package/dist/recall-state-view-admission.js +39 -0
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.d.ts +18 -1
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.d.ts +1 -1
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +1 -0
- package/dist/recall-state-view.js +1 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +9 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +11 -2
- package/dist/reconcile/cursor.js +6 -4
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +37 -2
- package/dist/reconcile/manifest.js +15 -5
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
- package/dist/resolution-OHJZG45O.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +13 -11
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/runtime/child-process.d.ts +1 -1
- package/dist/runtime/child-process.js +1 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +7 -7
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +11 -11
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +26 -25
- package/dist/semantic-rule-promotion.js +25 -24
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +25 -24
- package/dist/{service-BbuVh1eS.d.ts → service-ZQkJ52cz.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +2 -1
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +34 -32
- package/dist/standup/build.js +25 -24
- package/dist/{storage-BBLLuVTF.d.ts → storage-CU_hZUgP.d.ts} +67 -6
- package/dist/storage.d.ts +4 -3
- package/dist/storage.js +24 -23
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +49 -15
- package/dist/support-passport/index.js +69 -60
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tier-routing.js +2 -2
- package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-import.js +1 -1
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +26 -25
- package/dist/transfer/types.d.ts +24 -24
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-igV4-sbB.d.ts → types-BGxTvLBO.d.ts} +58 -13
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +25 -24
- package/dist/who-knows-cli.d.ts +13 -11
- package/dist/who-knows-cli.js +26 -25
- package/dist/who-knows.d.ts +13 -11
- package/dist/who-knows.js +25 -24
- package/dist/write-envelope.d.ts +4 -2
- package/dist/write-envelope.js +3 -1
- package/package.json +2 -2
- package/src/access-category-alias.test.ts +216 -0
- package/src/access-mcp.test.ts +73 -0
- package/src/access-mcp.ts +6 -6
- package/src/access-observe-write-surface.ts +19 -4
- package/src/access-offline-manifest.ts +297 -16
- package/src/access-recall-surface.ts +5 -5
- package/src/access-schema.ts +76 -7
- package/src/access-service.ts +11 -2
- package/src/activity/config.test.ts +124 -1
- package/src/activity/config.ts +150 -18
- package/src/activity/index.ts +3 -0
- package/src/activity/journal-extract-storage.test.ts +129 -0
- package/src/activity/journal-extract.test.ts +314 -0
- package/src/activity/journal-extract.ts +247 -0
- package/src/activity/journal-heading.test.ts +24 -1
- package/src/activity/journal-heading.ts +36 -0
- package/src/activity/journal-read.test.ts +242 -0
- package/src/activity/journal-read.ts +183 -0
- package/src/activity/journal-source.test.ts +15 -15
- package/src/activity/journal-source.ts +21 -14
- package/src/activity/journal-state.lock-worker.ts +30 -0
- package/src/activity/journal-state.test.ts +144 -0
- package/src/activity/journal-state.ts +107 -0
- package/src/activity/journal-strip.test.ts +106 -52
- package/src/activity/journal-strip.ts +35 -10
- package/src/activity/journal-vault-integration.test.ts +230 -0
- package/src/activity/journal-vault-provenance.test.ts +9 -7
- package/src/activity/journal-vault-provenance.ts +4 -10
- package/src/activity/journal-vault-read.test.ts +3 -2
- package/src/activity/journal-vault-read.ts +9 -139
- package/src/activity/journal.test.ts +74 -23
- package/src/activity/runner.test.ts +116 -1
- package/src/activity/runner.ts +25 -0
- package/src/activity/scheduler.ts +4 -0
- package/src/activity/store.test.ts +18 -0
- package/src/activity/store.ts +14 -0
- package/src/activity/sync-registration.ts +4 -0
- package/src/activity/timeline/analysis-metadata.ts +2 -0
- package/src/activity/timeline/analysis-provider.ts +140 -0
- package/src/activity/timeline/analysis-run.test.ts +419 -0
- package/src/activity/timeline/analysis-run.ts +106 -0
- package/src/activity/timeline/analysis.ts +66 -37
- package/src/activity/timeline/corrections.ts +9 -0
- package/src/activity/timeline/index.ts +3 -0
- package/src/activity/timeline/query.test.ts +71 -0
- package/src/activity/timeline/query.ts +57 -8
- package/src/activity/timeline/regenerate.test.ts +505 -0
- package/src/activity/timeline/regenerate.ts +373 -0
- package/src/activity/types.ts +40 -5
- package/src/adapters/grok-opencode.test.ts +146 -0
- package/src/adapters/grok.ts +53 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/opencode.ts +52 -0
- package/src/adapters/registry.ts +4 -0
- package/src/cli-fallback.ts +13 -4
- package/src/config.test.ts +3 -1
- package/src/config.ts +4 -0
- package/src/dedup/merge.test.ts +732 -25
- package/src/fallback-llm.test.ts +53 -0
- package/src/fallback-llm.ts +12 -0
- package/src/index.ts +2 -0
- package/src/local-llm.ts +3 -1
- package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
- package/src/orchestration/extraction-persist-deps.ts +9 -0
- package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
- package/src/orchestration/extraction-persist-promotion.ts +42 -3
- package/src/orchestration/extraction-persist.ts +3 -3
- package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
- package/src/orchestration/harmonic-construction-persist.ts +34 -6
- package/src/orchestration/maintenance.ts +1 -0
- package/src/orchestration/orchestrator-helpers.ts +6 -0
- package/src/orchestration/recall-entry.ts +16 -0
- package/src/orchestration/recall-internal-deps.ts +14 -0
- package/src/orchestration/recall-internal.ts +41 -58
- package/src/orchestration/recall-result-formatter.ts +11 -1
- package/src/orchestration/recall-search-pipeline.ts +121 -11
- package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
- package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
- package/src/orchestration/semantic-merge-persist.ts +121 -16
- package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
- package/src/orchestrator.ts +7 -35
- package/src/providers/codex-subscription.test.ts +666 -0
- package/src/providers/codex-subscription.ts +743 -0
- package/src/recall-disclosure.test.ts +20 -0
- package/src/recall-state-view-admission.ts +114 -0
- package/src/recall-state-view-asof.test.ts +176 -0
- package/src/recall-state-view-call.test.ts +175 -0
- package/src/recall-state-view-config.test.ts +16 -0
- package/src/recall-state-view-widen.test.ts +70 -0
- package/src/recall-state-view-widen.ts +28 -7
- package/src/recall-state-view-wire.ts +3 -1
- package/src/recall-state-view-zero-diff.test.ts +20 -11
- package/src/recall-state-view.test.ts +142 -0
- package/src/recall-state-view.ts +72 -24
- package/src/recall-xray-renderer.test.ts +27 -0
- package/src/recall-xray-renderer.ts +4 -0
- package/src/recall-xray.ts +13 -0
- package/src/reconcile/cursor.ts +23 -33
- package/src/reconcile/manifest.ts +96 -11
- package/src/reconcile-identity-cache.test.ts +378 -0
- package/src/runtime/child-process.ts +1 -1
- package/src/storage/cas-revision-host.ts +75 -0
- package/src/storage/cas-revision-store.test.ts +459 -0
- package/src/storage/cas-revision-store.ts +661 -0
- package/src/storage/deletion-revision-store.ts +80 -6
- package/src/storage/tombstone-blocked-capture-index.ts +15 -0
- package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
- package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
- package/src/storage-contract/failure-semantics.test.ts +1 -1
- package/src/storage-frontmatter-cas.test.ts +698 -1
- package/src/storage-replay.test.ts +166 -3
- package/src/storage.ts +41 -41
- package/src/support-passport/card-projection.ts +82 -33
- package/src/temporal-supersession.test.ts +10 -10
- package/src/types.ts +7 -7
- package/src/write-envelope.ts +1 -1
- package/dist/chunk-22FVR2KE.js.map +0 -1
- package/dist/chunk-2C3S7J2S.js.map +0 -1
- package/dist/chunk-2JVJ7UHC.js.map +0 -1
- package/dist/chunk-2QSZNTDO.js +0 -56
- package/dist/chunk-2QSZNTDO.js.map +0 -1
- package/dist/chunk-3QQTXYZ6.js.map +0 -1
- package/dist/chunk-5VCDKQWQ.js +0 -560
- package/dist/chunk-5VCDKQWQ.js.map +0 -1
- package/dist/chunk-A7XEPMQ6.js.map +0 -1
- package/dist/chunk-BLUYQFRH.js.map +0 -1
- package/dist/chunk-E6JA6XWY.js.map +0 -1
- package/dist/chunk-EEOUMG3J.js.map +0 -1
- package/dist/chunk-FDLDOEO6.js.map +0 -1
- package/dist/chunk-FYDW33ZB.js +0 -13
- package/dist/chunk-H272ZPQ3.js.map +0 -1
- package/dist/chunk-HV7OY4DM.js.map +0 -1
- package/dist/chunk-HVAEXYPL.js.map +0 -1
- package/dist/chunk-JEIXTYVG.js.map +0 -1
- package/dist/chunk-LRICZIGN.js +0 -52
- package/dist/chunk-LRICZIGN.js.map +0 -1
- package/dist/chunk-MFDTVQJX.js.map +0 -1
- package/dist/chunk-N7RWREIQ.js.map +0 -1
- package/dist/chunk-O75CRYGF.js.map +0 -1
- package/dist/chunk-Q726HSJO.js.map +0 -1
- package/dist/chunk-QOIOACIE.js.map +0 -1
- package/dist/chunk-SEDEKFYQ.js +0 -1
- package/dist/chunk-SO7SV523.js.map +0 -1
- package/dist/chunk-TLPZ6MKZ.js.map +0 -1
- package/dist/chunk-UGPUYIET.js.map +0 -1
- package/src/activity/journal-mode.test.ts +0 -32
- package/src/activity/journal-mode.ts +0 -20
- /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
- /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
- /package/dist/{chunk-7BMXZCOT.js.map → chunk-2AU4D4HQ.js.map} +0 -0
- /package/dist/{chunk-LTIZHLV7.js.map → chunk-2JCA2PQT.js.map} +0 -0
- /package/dist/{chunk-XXIHX75O.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
- /package/dist/{chunk-P3SB5BNT.js.map → chunk-34QW2LK2.js.map} +0 -0
- /package/dist/{chunk-EONF76DT.js.map → chunk-36UBSLFN.js.map} +0 -0
- /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
- /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
- /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
- /package/dist/{chunk-TCUKRAMK.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-PYLL63BF.js.map → chunk-4PB2MBY6.js.map} +0 -0
- /package/dist/{chunk-UUQG7HAD.js.map → chunk-4WCNPQQ5.js.map} +0 -0
- /package/dist/{chunk-H4VH5VIB.js.map → chunk-5QBDLMGG.js.map} +0 -0
- /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
- /package/dist/{chunk-DGGB65KC.js.map → chunk-5THU7NFP.js.map} +0 -0
- /package/dist/{chunk-BPJNF7J2.js.map → chunk-6CCRSQWT.js.map} +0 -0
- /package/dist/{chunk-XXE5P6HJ.js.map → chunk-6XYC7NM4.js.map} +0 -0
- /package/dist/{chunk-J7HFPA6O.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-I5DZ3WGR.js.map → chunk-757NP436.js.map} +0 -0
- /package/dist/{chunk-E6TDQRF6.js.map → chunk-7J2CGXG3.js.map} +0 -0
- /package/dist/{chunk-BUTCAMJM.js.map → chunk-A2YQL2FF.js.map} +0 -0
- /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-R3HKWWUB.js.map → chunk-A7WOWDZK.js.map} +0 -0
- /package/dist/{chunk-6N3TQFZU.js.map → chunk-AIKTQVV3.js.map} +0 -0
- /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
- /package/dist/{chunk-W27OW7AB.js.map → chunk-APFKZVJS.js.map} +0 -0
- /package/dist/{chunk-B325AGLK.js.map → chunk-AQIRQUCP.js.map} +0 -0
- /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
- /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
- /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
- /package/dist/{chunk-N57A4KPV.js.map → chunk-C2BFTYD7.js.map} +0 -0
- /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
- /package/dist/{chunk-X35W4S3L.js.map → chunk-D3IZCN5P.js.map} +0 -0
- /package/dist/{chunk-44T3Y7SZ.js.map → chunk-EJIEQOPB.js.map} +0 -0
- /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
- /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
- /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-N2ZNPHA3.js.map → chunk-IFFLUCCU.js.map} +0 -0
- /package/dist/{chunk-PFFZWDPE.js.map → chunk-JZDH2ZZK.js.map} +0 -0
- /package/dist/{chunk-TX2UTLXC.js.map → chunk-K6IPSW5B.js.map} +0 -0
- /package/dist/{chunk-4MHYKEOM.js.map → chunk-KDJHLOZP.js.map} +0 -0
- /package/dist/{chunk-KCB7F4J7.js.map → chunk-KYGOQV37.js.map} +0 -0
- /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
- /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
- /package/dist/{chunk-PL7FYKHT.js.map → chunk-MMG5K6XJ.js.map} +0 -0
- /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
- /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
- /package/dist/{chunk-LSYDG6MJ.js.map → chunk-PEXW2JCK.js.map} +0 -0
- /package/dist/{chunk-MOZXTRC2.js.map → chunk-QF4J3KMV.js.map} +0 -0
- /package/dist/{chunk-JGHXXQ2G.js.map → chunk-QLJ6762U.js.map} +0 -0
- /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
- /package/dist/{chunk-CETXNLEX.js.map → chunk-RQO3J4MR.js.map} +0 -0
- /package/dist/{chunk-5NANRSCD.js.map → chunk-RR7G2X7C.js.map} +0 -0
- /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
- /package/dist/{chunk-EQHDH4C2.js.map → chunk-S76KRJDG.js.map} +0 -0
- /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
- /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
- /package/dist/{chunk-JSN44KIB.js.map → chunk-T2YFZ27G.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-TFA6HPOA.js.map} +0 -0
- /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
- /package/dist/{chunk-NB5BCFUY.js.map → chunk-TWYTGIBR.js.map} +0 -0
- /package/dist/{chunk-MWFGUESQ.js.map → chunk-UEZKN6VR.js.map} +0 -0
- /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
- /package/dist/{chunk-PBGVVDLY.js.map → chunk-VIZR45AN.js.map} +0 -0
- /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
- /package/dist/{chunk-JTH2SE6B.js.map → chunk-W5BLTZZJ.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-MN3LK3KN.js.map → chunk-X424T5JQ.js.map} +0 -0
- /package/dist/{chunk-5BCNEBEN.js.map → chunk-XPJNT6PI.js.map} +0 -0
- /package/dist/{chunk-SEDEKFYQ.js.map → chunk-XW2T4QAW.js.map} +0 -0
- /package/dist/{chunk-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
- /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
- /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
- /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
- /package/dist/{chunk-OQDPBRQ6.js.map → chunk-Z7YDVHDI.js.map} +0 -0
- /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
- /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
- /package/dist/{contradiction-scan-NOYMFG66.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
- /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
- /package/dist/{resolution-VKATP2HT.js.map → recall-state-view-admission.js.map} +0 -0
- /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production timeline/activity regenerate flow (issue #2050).
|
|
3
|
+
*
|
|
4
|
+
* Builds deterministic cards, optionally runs analysis once, and persists
|
|
5
|
+
* the day. Analysis failure keeps the deterministic cards. Concurrent
|
|
6
|
+
* callers share one in-flight run. Surfaces (sync, CLI) call this function.
|
|
7
|
+
*/
|
|
8
|
+
import { randomBytes } from "node:crypto";
|
|
9
|
+
import { mkdirSync, readdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
|
|
12
|
+
import { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig } from "../../fallback-llm.js";
|
|
13
|
+
import { LocalLlmClient } from "../../local-llm.js";
|
|
14
|
+
import type { PluginConfig } from "../../types.js";
|
|
15
|
+
import {
|
|
16
|
+
activityDateInTimezone,
|
|
17
|
+
activityDayWindow,
|
|
18
|
+
hashActivityBody,
|
|
19
|
+
isValidActivityDate,
|
|
20
|
+
} from "../digest.js";
|
|
21
|
+
import type { ActivitySnapshot, ActivityTimelineAnalysisConfig } from "../types.js";
|
|
22
|
+
import { applyTimelineCorrections, correctionsForCards, TimelineCorrectionStore } from "./corrections.js";
|
|
23
|
+
import { buildTimelineDay } from "./build.js";
|
|
24
|
+
import { runTimelineCardAnalysis, type TimelineAnalysisRunResult } from "./analysis-run.js";
|
|
25
|
+
import type {
|
|
26
|
+
TimelineAnalysisLocalLlm,
|
|
27
|
+
TimelineAnalysisRemoteLlm,
|
|
28
|
+
} from "./analysis-provider.js";
|
|
29
|
+
import type { AnalysisFailure } from "./analysis-failure.js";
|
|
30
|
+
import type { AnalysisRunMetadata } from "./analysis-metadata.js";
|
|
31
|
+
import type { TimelineAnalysisStatus } from "./analysis.js";
|
|
32
|
+
import type { TimelineCard, TimelineCorrection, TimelineObservation } from "./types.js";
|
|
33
|
+
|
|
34
|
+
export const TIMELINE_DAY_FORMAT_VERSION = 1;
|
|
35
|
+
export const TIMELINE_DAY_DIR = path.join("activity", "timeline");
|
|
36
|
+
|
|
37
|
+
export interface TimelineAnalysisClients {
|
|
38
|
+
localLlm?: TimelineAnalysisLocalLlm | null;
|
|
39
|
+
remoteLlm?: TimelineAnalysisRemoteLlm | null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface RegenerateTimelineDayInput {
|
|
43
|
+
date: string;
|
|
44
|
+
timezone: string;
|
|
45
|
+
memoryDir: string;
|
|
46
|
+
store: { listSnapshotsForDay: (machine: string | null, startUtc: string, endUtc: string) => ActivitySnapshot[] };
|
|
47
|
+
timelineEnabled: boolean;
|
|
48
|
+
analysis: ActivityTimelineAnalysisConfig;
|
|
49
|
+
deps?: TimelineAnalysisClients;
|
|
50
|
+
pluginConfig?: PluginConfig;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
corrections?: readonly TimelineCorrection[];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Persisted day status. "pending" is the prewrite marker for an enabled run
|
|
57
|
+
* whose analysis has not completed: a crash after the deterministic prewrite
|
|
58
|
+
* must not read as terminal on the next run.
|
|
59
|
+
*/
|
|
60
|
+
export type PersistedTimelineDayStatus = TimelineAnalysisStatus | "pending" | "timeline_disabled";
|
|
61
|
+
|
|
62
|
+
export interface PersistedTimelineDay {
|
|
63
|
+
formatVersion: number;
|
|
64
|
+
date: string;
|
|
65
|
+
timezone: string;
|
|
66
|
+
sourceHash: string;
|
|
67
|
+
status: PersistedTimelineDayStatus;
|
|
68
|
+
cards: TimelineCard[];
|
|
69
|
+
metadata?: AnalysisRunMetadata;
|
|
70
|
+
failure?: AnalysisFailure;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface RegenerateTimelineDayResult {
|
|
74
|
+
status: PersistedTimelineDayStatus;
|
|
75
|
+
cards: TimelineCard[];
|
|
76
|
+
path: string;
|
|
77
|
+
written: boolean;
|
|
78
|
+
analyzed: boolean;
|
|
79
|
+
metadata?: AnalysisRunMetadata;
|
|
80
|
+
failure?: AnalysisFailure;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const inflight = new Map<string, Promise<RegenerateTimelineDayResult>>();
|
|
84
|
+
|
|
85
|
+
function requireToken(value: string, name: string): string {
|
|
86
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
87
|
+
throw new TypeError(`${name} must be a non-empty string`);
|
|
88
|
+
}
|
|
89
|
+
return value.trim();
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function timelineDayPath(memoryDir: string, date: string): string {
|
|
93
|
+
const root = requireToken(memoryDir, "memoryDir");
|
|
94
|
+
if (!isValidActivityDate(date)) {
|
|
95
|
+
throw new RangeError("date must be a real YYYY-MM-DD day");
|
|
96
|
+
}
|
|
97
|
+
return path.join(path.resolve(root), TIMELINE_DAY_DIR, `${date}.json`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export function snapshotToObservation(snapshot: ActivitySnapshot): TimelineObservation | null {
|
|
101
|
+
if (typeof snapshot.id !== "number") return null;
|
|
102
|
+
return {
|
|
103
|
+
id: snapshot.id,
|
|
104
|
+
machine: snapshot.machine,
|
|
105
|
+
capturedAtUtc: snapshot.capturedAtUtc,
|
|
106
|
+
app: snapshot.app,
|
|
107
|
+
windowTitle: snapshot.windowTitle,
|
|
108
|
+
...(snapshot.browserUrl === undefined ? {} : { browserUrl: snapshot.browserUrl }),
|
|
109
|
+
contentHash: snapshot.contentHash,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Local calendar days covering [fromMs, toMs), oldest first. Capped at 3660 days. */
|
|
114
|
+
export function localDatesForUtcRange(fromMs: number, toMs: number, timezone: string): string[] {
|
|
115
|
+
if (!Number.isFinite(fromMs) || !Number.isFinite(toMs) || toMs <= fromMs) return [];
|
|
116
|
+
const dates: string[] = [];
|
|
117
|
+
let date = activityDateInTimezone(new Date(fromMs), timezone);
|
|
118
|
+
const last = activityDateInTimezone(new Date(toMs - 1), timezone);
|
|
119
|
+
while (dates.length < 3660) {
|
|
120
|
+
dates.push(date);
|
|
121
|
+
if (date === last) break;
|
|
122
|
+
const { endUtc } = activityDayWindow(date, timezone);
|
|
123
|
+
date = activityDateInTimezone(new Date(Date.parse(endUtc)), timezone);
|
|
124
|
+
}
|
|
125
|
+
return dates;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/** Persisted local days already on disk (YYYY-MM-DD), regardless of store state. */
|
|
129
|
+
export function listPersistedTimelineDates(memoryDir: string): string[] {
|
|
130
|
+
let entries: readonly string[];
|
|
131
|
+
try {
|
|
132
|
+
entries = readdirSync(path.join(path.resolve(requireToken(memoryDir, "memoryDir")), TIMELINE_DAY_DIR));
|
|
133
|
+
} catch {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
const dates: string[] = [];
|
|
137
|
+
for (const entry of entries) {
|
|
138
|
+
const day = entry.endsWith(".json") ? entry.slice(0, -".json".length) : entry;
|
|
139
|
+
if (isValidActivityDate(day)) dates.push(day);
|
|
140
|
+
}
|
|
141
|
+
return dates.sort();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Local days a CLI window must load. Bounded windows keep the explicit
|
|
146
|
+
* from/to span. An unbounded search loads every day the snapshot store or a
|
|
147
|
+
* persisted day file covers (plus today), so historical cards enter the
|
|
148
|
+
* search pool instead of only the current day.
|
|
149
|
+
*/
|
|
150
|
+
export function resolveTimelineLoadDates(input: {
|
|
151
|
+
window: { from?: string; to?: string };
|
|
152
|
+
timezone: string;
|
|
153
|
+
today: string;
|
|
154
|
+
store: { snapshotCaptureExtent(): { firstUtc: string; lastUtc: string } | null };
|
|
155
|
+
persistedDates: readonly string[];
|
|
156
|
+
}): string[] {
|
|
157
|
+
const { window, timezone, today, store, persistedDates } = input;
|
|
158
|
+
if (window.from !== undefined || window.to !== undefined) {
|
|
159
|
+
const fromMs = window.from === undefined ? Date.now() : Date.parse(window.from);
|
|
160
|
+
const toMs = window.to === undefined ? fromMs + 1 : Date.parse(window.to);
|
|
161
|
+
if (!Number.isFinite(fromMs) || !Number.isFinite(toMs)) return [];
|
|
162
|
+
return localDatesForUtcRange(fromMs, toMs > fromMs ? toMs : fromMs + 1, timezone);
|
|
163
|
+
}
|
|
164
|
+
const days = new Set<string>(persistedDates);
|
|
165
|
+
days.add(today);
|
|
166
|
+
const extent = store.snapshotCaptureExtent();
|
|
167
|
+
if (extent !== null) {
|
|
168
|
+
const firstMs = Date.parse(extent.firstUtc);
|
|
169
|
+
const lastMs = Date.parse(extent.lastUtc);
|
|
170
|
+
if (Number.isFinite(firstMs) && Number.isFinite(lastMs) && lastMs >= firstMs) {
|
|
171
|
+
for (const day of localDatesForUtcRange(firstMs, lastMs + 1, timezone)) days.add(day);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return [...days].sort();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function timelineAnalysisClientsFromConfig(config: PluginConfig): TimelineAnalysisClients {
|
|
178
|
+
return {
|
|
179
|
+
localLlm: new LocalLlmClient(config),
|
|
180
|
+
remoteLlm: new FallbackLlmClient(
|
|
181
|
+
config.gatewayConfig,
|
|
182
|
+
fallbackLlmRuntimeContextFromConfig(config),
|
|
183
|
+
),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function resolveClients(input: RegenerateTimelineDayInput): TimelineAnalysisClients {
|
|
188
|
+
if (input.deps !== undefined) return input.deps;
|
|
189
|
+
if (input.pluginConfig !== undefined) return timelineAnalysisClientsFromConfig(input.pluginConfig);
|
|
190
|
+
return {};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function sourceHash(input: {
|
|
194
|
+
observations: readonly TimelineObservation[];
|
|
195
|
+
analysis: ActivityTimelineAnalysisConfig;
|
|
196
|
+
corrections: readonly TimelineCorrection[];
|
|
197
|
+
}): string {
|
|
198
|
+
return hashActivityBody(
|
|
199
|
+
JSON.stringify({
|
|
200
|
+
observations: input.observations.map((observation) => ({
|
|
201
|
+
id: observation.id,
|
|
202
|
+
contentHash: observation.contentHash,
|
|
203
|
+
capturedAtUtc: observation.capturedAtUtc,
|
|
204
|
+
})),
|
|
205
|
+
analysis: {
|
|
206
|
+
enabled: input.analysis.enabled,
|
|
207
|
+
provider: input.analysis.provider ?? null,
|
|
208
|
+
model: input.analysis.model ?? null,
|
|
209
|
+
timeoutMs: input.analysis.timeoutMs ?? null,
|
|
210
|
+
preferences: input.analysis.preferences ?? null,
|
|
211
|
+
},
|
|
212
|
+
corrections: input.corrections,
|
|
213
|
+
}),
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function readPersisted(filePath: string): PersistedTimelineDay | null {
|
|
218
|
+
try {
|
|
219
|
+
const parsed = JSON.parse(readFileSync(filePath, "utf8")) as PersistedTimelineDay;
|
|
220
|
+
if (parsed?.formatVersion !== TIMELINE_DAY_FORMAT_VERSION || !Array.isArray(parsed.cards)) {
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
return parsed;
|
|
224
|
+
} catch (error) {
|
|
225
|
+
if (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT") {
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function persistDay(filePath: string, payload: PersistedTimelineDay): boolean {
|
|
233
|
+
const text = `${JSON.stringify(payload)}\n`;
|
|
234
|
+
try {
|
|
235
|
+
if (readFileSync(filePath, "utf8") === text) return false;
|
|
236
|
+
} catch (error) {
|
|
237
|
+
if (!(typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT")) {
|
|
238
|
+
throw error;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
mkdirSync(path.dirname(filePath), { recursive: true, mode: 0o700 });
|
|
242
|
+
const tmpPath = `${filePath}.${process.pid}.${randomBytes(8).toString("hex")}.tmp`;
|
|
243
|
+
writeFileSync(tmpPath, text, { encoding: "utf8", mode: 0o600 });
|
|
244
|
+
try {
|
|
245
|
+
renameSync(tmpPath, filePath);
|
|
246
|
+
} catch (error) {
|
|
247
|
+
try {
|
|
248
|
+
unlinkSync(tmpPath);
|
|
249
|
+
} catch {
|
|
250
|
+
// Best-effort cleanup of the temp file.
|
|
251
|
+
}
|
|
252
|
+
throw error;
|
|
253
|
+
}
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function toResult(
|
|
258
|
+
filePath: string,
|
|
259
|
+
written: boolean,
|
|
260
|
+
analyzed: boolean,
|
|
261
|
+
day: Pick<PersistedTimelineDay, "status" | "cards" | "metadata" | "failure">,
|
|
262
|
+
): RegenerateTimelineDayResult {
|
|
263
|
+
return {
|
|
264
|
+
status: day.status,
|
|
265
|
+
cards: day.cards,
|
|
266
|
+
path: filePath,
|
|
267
|
+
written,
|
|
268
|
+
analyzed,
|
|
269
|
+
...(day.metadata === undefined ? {} : { metadata: day.metadata }),
|
|
270
|
+
...(day.failure === undefined ? {} : { failure: day.failure }),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* A cached day is final when its persisted status matches the request:
|
|
276
|
+
* completed results (ok, or an explicit provider/output failure) are terminal
|
|
277
|
+
* for the same source hash, so unchanged scheduled syncs and CLI reads never
|
|
278
|
+
* repeat provider spend. A "pending" prewrite, or a "disabled" file under an
|
|
279
|
+
* enabled request (legacy prewrite or interrupted run), is rebuilt so a later
|
|
280
|
+
* enabled config can still analyze.
|
|
281
|
+
*/
|
|
282
|
+
function isCachedDayFinal(status: PersistedTimelineDayStatus, analysisEnabled: boolean): boolean {
|
|
283
|
+
if (analysisEnabled) {
|
|
284
|
+
return status === "ok" || status === "provider_failed" || status === "invalid_output";
|
|
285
|
+
}
|
|
286
|
+
return status === "disabled";
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
async function regenerateUncached(input: RegenerateTimelineDayInput): Promise<RegenerateTimelineDayResult> {
|
|
290
|
+
const date = requireToken(input.date, "date");
|
|
291
|
+
const timezone = requireToken(input.timezone, "timezone");
|
|
292
|
+
const filePath = timelineDayPath(input.memoryDir, date);
|
|
293
|
+
if (!input.timelineEnabled) {
|
|
294
|
+
return toResult(filePath, false, false, { status: "timeline_disabled", cards: [] });
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
const { startUtc, endUtc } = activityDayWindow(date, timezone);
|
|
298
|
+
const observations = input.store
|
|
299
|
+
.listSnapshotsForDay(null, startUtc, endUtc)
|
|
300
|
+
.map(snapshotToObservation)
|
|
301
|
+
.filter((observation): observation is TimelineObservation => observation !== null);
|
|
302
|
+
|
|
303
|
+
let corrections = input.corrections;
|
|
304
|
+
let opened: TimelineCorrectionStore | undefined;
|
|
305
|
+
if (corrections === undefined) {
|
|
306
|
+
opened = TimelineCorrectionStore.open(input.memoryDir);
|
|
307
|
+
corrections = opened.list();
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
const rawCards = buildTimelineDay({ date, timezone, observations }).cards;
|
|
311
|
+
corrections = correctionsForCards(rawCards, corrections);
|
|
312
|
+
const built = applyTimelineCorrections(rawCards, corrections);
|
|
313
|
+
const hash = sourceHash({ observations, analysis: input.analysis, corrections });
|
|
314
|
+
const prior = readPersisted(filePath);
|
|
315
|
+
if (prior !== null && prior.sourceHash === hash && isCachedDayFinal(prior.status, input.analysis.enabled)) {
|
|
316
|
+
return toResult(filePath, false, false, prior);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const deterministic: PersistedTimelineDay = {
|
|
320
|
+
formatVersion: TIMELINE_DAY_FORMAT_VERSION,
|
|
321
|
+
date,
|
|
322
|
+
timezone,
|
|
323
|
+
sourceHash: hash,
|
|
324
|
+
status: input.analysis.enabled ? "pending" : "disabled",
|
|
325
|
+
cards: built,
|
|
326
|
+
};
|
|
327
|
+
persistDay(filePath, deterministic);
|
|
328
|
+
|
|
329
|
+
if (!input.analysis.enabled) {
|
|
330
|
+
return toResult(filePath, true, false, deterministic);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
const deps = resolveClients(input);
|
|
334
|
+
const analyzed: TimelineAnalysisRunResult = await runTimelineCardAnalysis({
|
|
335
|
+
date,
|
|
336
|
+
timezone,
|
|
337
|
+
cards: built,
|
|
338
|
+
observations,
|
|
339
|
+
corrections,
|
|
340
|
+
config: input.analysis,
|
|
341
|
+
deps,
|
|
342
|
+
...(input.signal === undefined ? {} : { signal: input.signal }),
|
|
343
|
+
});
|
|
344
|
+
const next: PersistedTimelineDay = {
|
|
345
|
+
formatVersion: TIMELINE_DAY_FORMAT_VERSION,
|
|
346
|
+
date,
|
|
347
|
+
timezone,
|
|
348
|
+
sourceHash: hash,
|
|
349
|
+
status: analyzed.status,
|
|
350
|
+
cards: analyzed.cards,
|
|
351
|
+
...(analyzed.metadata === undefined ? {} : { metadata: analyzed.metadata }),
|
|
352
|
+
...(analyzed.failure === undefined ? {} : { failure: analyzed.failure }),
|
|
353
|
+
};
|
|
354
|
+
persistDay(filePath, next);
|
|
355
|
+
return toResult(filePath, true, analyzed.status === "ok", next);
|
|
356
|
+
} finally {
|
|
357
|
+
opened?.close();
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/** Build, optionally analyze once, and persist one local day of timeline cards. */
|
|
362
|
+
export async function regenerateTimelineDay(
|
|
363
|
+
input: RegenerateTimelineDayInput,
|
|
364
|
+
): Promise<RegenerateTimelineDayResult> {
|
|
365
|
+
const key = `${path.resolve(requireToken(input.memoryDir, "memoryDir"))}\0${input.date}`;
|
|
366
|
+
const pending = inflight.get(key);
|
|
367
|
+
if (pending !== undefined) return pending;
|
|
368
|
+
const run = regenerateUncached(input).finally(() => {
|
|
369
|
+
if (inflight.get(key) === run) inflight.delete(key);
|
|
370
|
+
});
|
|
371
|
+
inflight.set(key, run);
|
|
372
|
+
return run;
|
|
373
|
+
}
|
package/src/activity/types.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import type { ImportanceLevel } from "../types.js";
|
|
15
|
+
import type { JournalSource } from "./journal-source.js";
|
|
15
16
|
|
|
16
17
|
export type ActivityExtractionMode = "off" | "smart";
|
|
17
18
|
|
|
@@ -96,13 +97,22 @@ export interface ActivitySourceConfig {
|
|
|
96
97
|
token?: string;
|
|
97
98
|
}
|
|
98
99
|
|
|
99
|
-
/** Opt-in daily journal settings (issue #1984). Default off. */
|
|
100
|
+
/** Opt-in daily journal settings (issue #1984; vault read-back #1987). Default off. */
|
|
100
101
|
export interface ActivityTimelineJournalConfig {
|
|
101
102
|
enabled: boolean;
|
|
102
|
-
/** Where the journal text is read from (
|
|
103
|
-
source:
|
|
104
|
-
/**
|
|
105
|
-
|
|
103
|
+
/** Where the journal text is read from: the memoryDir day file (default) or the vault daily note. */
|
|
104
|
+
source: JournalSource;
|
|
105
|
+
/** Review-only journal extraction gate (issue #1987): "off" | "review". No auto mode by design. */
|
|
106
|
+
extractionMode: ActivityJournalExtractionMode;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Journal extraction is review-only by design (#1984 decision): no "auto". */
|
|
110
|
+
export type ActivityJournalExtractionMode = "off" | "review";
|
|
111
|
+
|
|
112
|
+
/** Vault daily-note read-back settings (issue #1987). */
|
|
113
|
+
export interface ActivityTimelineVaultReadbackConfig {
|
|
114
|
+
/** Heading whose section is the user's journal; arbitrary user-chosen text. */
|
|
115
|
+
journalSection: string;
|
|
106
116
|
}
|
|
107
117
|
|
|
108
118
|
/** Section ownership strategy for vault publishing (issue #1985). */
|
|
@@ -144,6 +154,7 @@ export interface ActivityTimelineVaultConfig {
|
|
|
144
154
|
};
|
|
145
155
|
/** Markers strategy: heading under which missing marker pairs are inserted; empty = never insert. */
|
|
146
156
|
insertUnderHeading: string;
|
|
157
|
+
readback: ActivityTimelineVaultReadbackConfig;
|
|
147
158
|
wikilinks: { places: boolean; placesFolder: string };
|
|
148
159
|
properties: { mode: VaultPropertiesMode; prefix: string };
|
|
149
160
|
autoPublish: boolean;
|
|
@@ -156,9 +167,33 @@ export interface ActivityTimelineQaConfig {
|
|
|
156
167
|
maxRangeDays: number;
|
|
157
168
|
}
|
|
158
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Opt-in AI analysis over deterministic timeline cards (issue #2050).
|
|
172
|
+
* Default off; gated independently of `activity.timeline.enabled`, capture,
|
|
173
|
+
* and memory creation. When disabled, zero provider calls and zero analysis
|
|
174
|
+
* artifacts occur.
|
|
175
|
+
*/
|
|
176
|
+
export interface ActivityTimelineAnalysisConfig {
|
|
177
|
+
enabled: boolean;
|
|
178
|
+
/**
|
|
179
|
+
* Explicit provider id: `"local"` routes to the local LLM client; any other
|
|
180
|
+
* identifier routes to the configured remote provider registry. Required
|
|
181
|
+
* when enabled. A single provider segment only — `/` is rejected at parse.
|
|
182
|
+
* At most 120 characters so accepted config cannot fail metadata validation.
|
|
183
|
+
*/
|
|
184
|
+
provider?: string;
|
|
185
|
+
/** Model id. Required when enabled. May include `/`. At most 120 characters. */
|
|
186
|
+
model?: string;
|
|
187
|
+
/** Per-request timeout in ms. Positive integer. */
|
|
188
|
+
timeoutMs?: number;
|
|
189
|
+
/** Free-form user preferences passed to the prompt (no secrets). */
|
|
190
|
+
preferences?: string[];
|
|
191
|
+
}
|
|
192
|
+
|
|
159
193
|
/** Opt-in timeline-card derivation settings (issue #2049). Default off. */
|
|
160
194
|
export interface ActivityTimelineConfig {
|
|
161
195
|
enabled: boolean;
|
|
196
|
+
analysis: ActivityTimelineAnalysisConfig;
|
|
162
197
|
journal: ActivityTimelineJournalConfig;
|
|
163
198
|
qa: ActivityTimelineQaConfig;
|
|
164
199
|
vault: ActivityTimelineVaultConfig;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import { AdapterRegistry } from "./registry.js";
|
|
5
|
+
import { GrokAdapter } from "./grok.js";
|
|
6
|
+
import { OpenCodeAdapter } from "./opencode.js";
|
|
7
|
+
import type { AdapterContext } from "./types.js";
|
|
8
|
+
|
|
9
|
+
function context(overrides: Partial<AdapterContext> = {}): AdapterContext {
|
|
10
|
+
return { headers: {}, ...overrides };
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
test("GrokAdapter matches clientInfo names containing grok", () => {
|
|
14
|
+
const adapter = new GrokAdapter();
|
|
15
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "grok" } })), true);
|
|
16
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "grok-cli" } })), true);
|
|
17
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "Grok-Desktop" } })), true);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("GrokAdapter matches User-Agent and configured client-id headers", () => {
|
|
21
|
+
const adapter = new GrokAdapter();
|
|
22
|
+
assert.equal(adapter.matches(context({ headers: { "user-agent": "grok/4.6" } })), true);
|
|
23
|
+
assert.equal(
|
|
24
|
+
adapter.matches(context({ headers: { "X-Engram-Client-Id": "grok" } })),
|
|
25
|
+
true,
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("GrokAdapter rejects unrelated clients", () => {
|
|
30
|
+
const adapter = new GrokAdapter();
|
|
31
|
+
assert.equal(adapter.matches(context()), false);
|
|
32
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "claude-code" } })), false);
|
|
33
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "codex-mcp-client" } })), false);
|
|
34
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "opencode" } })), false);
|
|
35
|
+
assert.equal(
|
|
36
|
+
adapter.matches(context({ headers: { "X-Engram-Client-Id": "codex" } })),
|
|
37
|
+
false,
|
|
38
|
+
);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("GrokAdapter resolves identity with adapter-owned principal and header namespace", () => {
|
|
42
|
+
const adapter = new GrokAdapter();
|
|
43
|
+
assert.deepEqual(
|
|
44
|
+
adapter.resolveIdentity(context({
|
|
45
|
+
headers: {
|
|
46
|
+
"mcp-session-id": "sess-grok-1",
|
|
47
|
+
"x-engram-namespace": "my-project",
|
|
48
|
+
},
|
|
49
|
+
})),
|
|
50
|
+
{
|
|
51
|
+
namespace: "my-project",
|
|
52
|
+
principal: "grok",
|
|
53
|
+
sessionKey: "sess-grok-1",
|
|
54
|
+
adapterId: "grok",
|
|
55
|
+
},
|
|
56
|
+
);
|
|
57
|
+
assert.deepEqual(
|
|
58
|
+
adapter.resolveIdentity(context({ sessionKey: "session-1" })).principal,
|
|
59
|
+
"grok",
|
|
60
|
+
);
|
|
61
|
+
// Default namespace when no explicit header is present.
|
|
62
|
+
assert.equal(
|
|
63
|
+
adapter.resolveIdentity(context()).namespace,
|
|
64
|
+
"grok",
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test("OpenCodeAdapter matches clientInfo, User-Agent, and configured client-id headers", () => {
|
|
69
|
+
const adapter = new OpenCodeAdapter();
|
|
70
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "opencode" } })), true);
|
|
71
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "OpenCode/1.0" } })), true);
|
|
72
|
+
assert.equal(adapter.matches(context({ headers: { "user-agent": "opencode/2.3.0" } })), true);
|
|
73
|
+
assert.equal(
|
|
74
|
+
adapter.matches(context({ headers: { "X-Engram-Client-Id": "opencode" } })),
|
|
75
|
+
true,
|
|
76
|
+
);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test("OpenCodeAdapter rejects unrelated clients", () => {
|
|
80
|
+
const adapter = new OpenCodeAdapter();
|
|
81
|
+
assert.equal(adapter.matches(context()), false);
|
|
82
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "claude-code" } })), false);
|
|
83
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "codex-mcp-client" } })), false);
|
|
84
|
+
assert.equal(adapter.matches(context({ clientInfo: { name: "grok" } })), false);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test("OpenCodeAdapter resolves identity with adapter-owned principal", () => {
|
|
88
|
+
const adapter = new OpenCodeAdapter();
|
|
89
|
+
const resolved = adapter.resolveIdentity(context({
|
|
90
|
+
headers: { "mcp-session-id": "sess-oc-1" },
|
|
91
|
+
}));
|
|
92
|
+
assert.deepEqual(resolved, {
|
|
93
|
+
namespace: "opencode",
|
|
94
|
+
principal: "opencode",
|
|
95
|
+
sessionKey: "sess-oc-1",
|
|
96
|
+
adapterId: "opencode",
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("default registry registers grok and opencode adapters in order", () => {
|
|
101
|
+
const registry = new AdapterRegistry();
|
|
102
|
+
assert.deepEqual(registry.list(), [
|
|
103
|
+
"hermes",
|
|
104
|
+
"replit",
|
|
105
|
+
"codex",
|
|
106
|
+
"claude-code",
|
|
107
|
+
"grok",
|
|
108
|
+
"opencode",
|
|
109
|
+
]);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("issue #2782 reproduction: Grok headers resolve a transport principal without a session key", () => {
|
|
113
|
+
const registry = new AdapterRegistry();
|
|
114
|
+
const resolved = registry.resolve({
|
|
115
|
+
headers: {
|
|
116
|
+
"x-engram-client-id": "grok",
|
|
117
|
+
"x-engram-principal": "grok",
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
assert.ok(resolved, "expected the Grok adapter to resolve the request");
|
|
121
|
+
assert.equal(resolved.principal, "grok");
|
|
122
|
+
assert.equal(resolved.adapterId, "grok");
|
|
123
|
+
assert.equal(resolved.sessionKey, undefined);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("issue #2782 reproduction: OpenCode headers resolve a transport principal without a session key", () => {
|
|
127
|
+
const registry = new AdapterRegistry();
|
|
128
|
+
const resolved = registry.resolve({
|
|
129
|
+
headers: { "x-engram-client-id": "opencode" },
|
|
130
|
+
clientInfo: { name: "opencode" },
|
|
131
|
+
});
|
|
132
|
+
assert.ok(resolved, "expected the OpenCode adapter to resolve the request");
|
|
133
|
+
assert.equal(resolved.principal, "opencode");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test("adapters never adopt X-Engram-Principal as their own resolution source", () => {
|
|
137
|
+
const registry = new AdapterRegistry();
|
|
138
|
+
for (const clientId of ["grok", "opencode"]) {
|
|
139
|
+
const resolved = registry.resolve({
|
|
140
|
+
headers: { "x-engram-client-id": clientId, "x-engram-principal": "spoofed-principal" },
|
|
141
|
+
});
|
|
142
|
+
assert.ok(resolved);
|
|
143
|
+
assert.equal(resolved.principal, clientId);
|
|
144
|
+
assert.notEqual(resolved.principal, "spoofed-principal");
|
|
145
|
+
}
|
|
146
|
+
});
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { headerValue, type AdapterContext, type EngramAdapter, type ResolvedIdentity } from "./types.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Grok adapter.
|
|
5
|
+
*
|
|
6
|
+
* Detection: Grok clients identify themselves with a clientInfo name
|
|
7
|
+
* containing "grok" in the MCP initialize handshake, and send
|
|
8
|
+
* User-Agent: grok/<version> on HTTP requests. The exact clientInfo
|
|
9
|
+
* name is not yet stable across Grok surfaces (desktop app, CLI), so
|
|
10
|
+
* detection uses a contains-match for forward compatibility.
|
|
11
|
+
*
|
|
12
|
+
* User-configured identification is also supported via headers:
|
|
13
|
+
* "headers": { "X-Engram-Client-Id": "grok" }
|
|
14
|
+
*
|
|
15
|
+
* Principal overrides are intentionally handled only by the HTTP server's
|
|
16
|
+
* trustPrincipalHeader gate. Adapters must not independently trust
|
|
17
|
+
* X-Engram-Principal.
|
|
18
|
+
*/
|
|
19
|
+
export class GrokAdapter implements EngramAdapter {
|
|
20
|
+
readonly id = "grok";
|
|
21
|
+
|
|
22
|
+
matches(context: AdapterContext): boolean {
|
|
23
|
+
// Primary: MCP clientInfo from initialize handshake
|
|
24
|
+
const clientName = context.clientInfo?.name?.toLowerCase() ?? "";
|
|
25
|
+
if (clientName.includes("grok")) return true;
|
|
26
|
+
|
|
27
|
+
// Fallback: User-Agent header ("grok/<version>")
|
|
28
|
+
const ua = headerValue(context.headers, "user-agent");
|
|
29
|
+
if (ua && ua.toLowerCase().startsWith("grok/")) return true;
|
|
30
|
+
|
|
31
|
+
// Fallback: user-configured client identifier header
|
|
32
|
+
const clientId = headerValue(context.headers, "x-engram-client-id");
|
|
33
|
+
if (clientId?.toLowerCase() === "grok") return true;
|
|
34
|
+
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
resolveIdentity(context: AdapterContext): ResolvedIdentity {
|
|
39
|
+
// MCP session ID (standard MCP header, server-assigned)
|
|
40
|
+
const mcpSessionId = headerValue(context.headers, "mcp-session-id");
|
|
41
|
+
|
|
42
|
+
// Namespace: explicit header > default
|
|
43
|
+
const namespace = headerValue(context.headers, "x-engram-namespace")
|
|
44
|
+
|| "grok";
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
namespace,
|
|
48
|
+
principal: "grok",
|
|
49
|
+
sessionKey: mcpSessionId ?? context.sessionKey,
|
|
50
|
+
adapterId: this.id,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
package/src/adapters/index.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export type { AdapterContext, EngramAdapter, ResolvedIdentity } from "./types.js";
|
|
2
2
|
export { ClaudeCodeAdapter } from "./claude-code.js";
|
|
3
3
|
export { CodexAdapter } from "./codex.js";
|
|
4
|
+
export { GrokAdapter } from "./grok.js";
|
|
5
|
+
export { OpenCodeAdapter } from "./opencode.js";
|
|
4
6
|
export { ReplitAdapter } from "./replit.js";
|
|
5
7
|
export { HermesAdapter } from "./hermes.js";
|
|
6
8
|
export { AdapterRegistry } from "./registry.js";
|