@remnic/core 9.69.32 → 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 +64 -59
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +65 -60
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +64 -59
- package/dist/access-cli.js +140 -136
- 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 +64 -59
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +13 -11
- package/dist/access-http-briefing.js +65 -60
- 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 +66 -61
- package/dist/access-http.d.ts +14 -12
- package/dist/access-http.js +86 -82
- package/dist/access-identity-continuity-surface.d.ts +11 -9
- package/dist/access-identity-continuity-surface.js +64 -59
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +64 -59
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +73 -69
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-BsvmyENS.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 +64 -59
- 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 +64 -59
- package/dist/access-offline-manifest.d.ts +47 -11
- package/dist/access-offline-manifest.js +18 -16
- package/dist/access-operations-batch.js +67 -63
- package/dist/access-operations.d.ts +18 -16
- package/dist/access-operations.js +72 -68
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +64 -59
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +64 -59
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +64 -59
- package/dist/access-schema.d.ts +138 -96
- package/dist/access-schema.js +15 -1
- package/dist/{access-service-CCpOuS46.d.ts → access-service-WUm2LnXZ.d.ts} +110 -108
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +64 -59
- package/dist/access-surface-catalog.d.ts +13 -11
- package/dist/access-surface-catalog.js +66 -61
- 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 +14 -12
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +56 -0
- package/dist/activity/digest.js +32 -0
- package/dist/adapters/index.d.ts +46 -1
- package/dist/adapters/index.js +13 -9
- package/dist/adapters/registry.js +3 -3
- 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 +28 -27
- 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 +12 -11
- 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-CDZLyiXL.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 +29 -28
- 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-IY2FVXM6.js → chunk-2AU4D4HQ.js} +3 -3
- package/dist/{chunk-QDY6KYTN.js → chunk-2JCA2PQT.js} +3 -3
- package/dist/{chunk-RSVEP77Y.js → chunk-2UZ5ZH6W.js} +3 -3
- package/dist/{chunk-XQ2Q43XD.js → chunk-326KUXIR.js} +15 -648
- package/dist/chunk-326KUXIR.js.map +1 -0
- package/dist/{chunk-NWWXSJX5.js → chunk-34QW2LK2.js} +2 -2
- package/dist/{chunk-S7DPKM5W.js → chunk-353C5UNV.js} +1 -1
- package/dist/{chunk-GQOMZ3MK.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-7VJXIDOC.js → chunk-4JVQRFZD.js} +9 -9
- package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
- package/dist/chunk-4MIS4CQW.js.map +1 -0
- package/dist/{chunk-WHBVXTUI.js → chunk-4PB2MBY6.js} +9 -9
- package/dist/{chunk-TEYN7ZYF.js → chunk-4WCNPQQ5.js} +4 -4
- package/dist/{chunk-Z4PCVRTN.js → chunk-5A7ZUOBA.js} +217 -396
- 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-RBGREYVJ.js → chunk-5QBDLMGG.js} +2 -2
- package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
- package/dist/{chunk-LPECRQO4.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-LWA7MDVO.js → chunk-6CCRSQWT.js} +2 -2
- package/dist/{chunk-TIT2C6WX.js → chunk-6XYC7NM4.js} +2 -2
- package/dist/{chunk-FHQSPTPZ.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-PV36INNL.js → chunk-757NP436.js} +3 -3
- package/dist/{chunk-WJBZMNNS.js → chunk-7CAY3YKP.js} +742 -29
- package/dist/chunk-7CAY3YKP.js.map +1 -0
- package/dist/{chunk-6H5JYDOM.js → chunk-7J2CGXG3.js} +2 -2
- package/dist/{chunk-FBMYGNOC.js → chunk-A2YQL2FF.js} +6 -6
- 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-MPYD657E.js → chunk-A7WOWDZK.js} +2 -2
- package/dist/{chunk-C4OTC6WY.js → chunk-AIKTQVV3.js} +3 -3
- package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
- package/dist/{chunk-VP67GZ7T.js → chunk-APFKZVJS.js} +2 -2
- package/dist/{chunk-M75RYSHS.js → chunk-AQIRQUCP.js} +2 -2
- package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
- package/dist/{chunk-PSPABFN2.js → chunk-BD7JTBYP.js} +4 -4
- 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-MFJBANPX.js → chunk-C2BFTYD7.js} +2 -2
- package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
- package/dist/{chunk-Q3O3VKRB.js → chunk-CRUFVJOX.js} +16 -15
- package/dist/chunk-CRUFVJOX.js.map +1 -0
- package/dist/{chunk-AOCP6JA7.js → chunk-D3IZCN5P.js} +4 -4
- package/dist/{chunk-ROKKIMON.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-ROGRI25A.js → chunk-I3H5LFOI.js} +2 -2
- package/dist/{chunk-S65WXHNK.js → chunk-IFFLUCCU.js} +2 -2
- package/dist/{chunk-MYMNC6O5.js → chunk-ISYZ5DUI.js} +64 -60
- package/dist/{chunk-MYMNC6O5.js.map → chunk-ISYZ5DUI.js.map} +1 -1
- package/dist/{chunk-D5LORF7A.js → chunk-JZDH2ZZK.js} +3 -3
- package/dist/{chunk-2GPE5UCR.js → chunk-K6IPSW5B.js} +2 -2
- package/dist/{chunk-HG6HXVHQ.js → chunk-KDJHLOZP.js} +10 -10
- package/dist/{chunk-I27RSQRR.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-DITMGZOL.js → chunk-MMG5K6XJ.js} +2 -2
- package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
- package/dist/{chunk-CZYYJZB6.js → chunk-ND2O2PVN.js} +1014 -1318
- 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-MKWKYHXJ.js → chunk-OB3XMWX5.js} +4 -4
- package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
- package/dist/{chunk-GTWHVXPA.js → chunk-OZUXKUPD.js} +6 -4
- package/dist/{chunk-GTWHVXPA.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-47DEYNMR.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-42SDNZCU.js → chunk-QF4J3KMV.js} +19 -19
- package/dist/{chunk-SB6PSOP7.js → chunk-QLJ6762U.js} +2 -2
- package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
- package/dist/{chunk-PHNAB54Q.js → chunk-RQO3J4MR.js} +2 -2
- package/dist/{chunk-5N53UBH2.js → chunk-RR7G2X7C.js} +5 -5
- package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
- package/dist/{chunk-GY5WZBA6.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-SQJ3SDIW.js → chunk-SZWEDG3H.js} +13 -7
- package/dist/chunk-SZWEDG3H.js.map +1 -0
- package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
- package/dist/{chunk-QMGXMJ2O.js → chunk-T2YFZ27G.js} +9 -9
- package/dist/{chunk-LEPOP46W.js → chunk-TFA6HPOA.js} +4 -4
- 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-ZNJSBIP4.js → chunk-TNSCIPBQ.js} +4 -4
- package/dist/{chunk-YUMDFDUA.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-EZZV7OQL.js → chunk-UEZKN6VR.js} +2 -2
- package/dist/{chunk-HY55QQD7.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-CBCNKKZD.js → chunk-VIZR45AN.js} +2 -2
- package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
- package/dist/{chunk-ITPS5DDH.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-FGGYSN4P.js → chunk-X424T5JQ.js} +2 -2
- package/dist/{chunk-NAXDPKVM.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-VED2YHUD.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-565C6ZFO.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-GVG3JYBI.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-NEEdq5Rt.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 +110 -106
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +34 -32
- 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 +29 -28
- 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 +14 -12
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +28 -27
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +30 -29
- 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 +30 -29
- 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 +31 -30
- 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-CQPCu0o5.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 +28 -27
- 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 +65 -60
- 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 +40 -38
- 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-C9VXenR8.d.ts → index-BNluTxBp.d.ts} +2 -2
- package/dist/index.d.ts +963 -945
- package/dist/index.js +323 -221
- 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 +7 -7
- 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 +33 -32
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +28 -27
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -27
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +29 -28
- package/dist/{maintenance-C14sorKa.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 +29 -28
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +11 -11
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +28 -27
- 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 +32 -31
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +48 -46
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +47 -42
- package/dist/{orchestrator-kqSzGv7e.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
- package/dist/orchestrator.d.ts +11 -9
- package/dist/orchestrator.js +144 -138
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-DRUwHb1X.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-CW3l0g3P.d.ts → public-http-L-IymRBN.d.ts} +1 -1
- package/dist/{qmd-BVWlg1YS.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-admission.js.map +1 -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 +15 -13
- 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/schemas.d.ts +176 -176
- package/dist/{scope-profiles-Vl00B1KU.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 +10 -10
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +14 -14
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-BC9-GFuT.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +29 -28
- package/dist/semantic-rule-promotion.js +28 -27
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +28 -27
- package/dist/{service-BOy6dHfc.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 +8 -7
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +38 -36
- package/dist/standup/build.js +29 -28
- package/dist/{storage-BLJRnFi6.d.ts → storage-CU_hZUgP.d.ts} +67 -6
- package/dist/storage.d.ts +4 -3
- package/dist/storage.js +27 -26
- 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 +72 -63
- 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 +29 -28
- package/dist/transfer/types.d.ts +102 -102
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-YY-eKKU7.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 +28 -27
- package/dist/who-knows-cli.d.ts +13 -11
- package/dist/who-knows-cli.js +29 -28
- package/dist/who-knows.d.ts +13 -11
- package/dist/who-knows.js +28 -27
- package/dist/write-envelope.d.ts +4 -2
- package/dist/write-envelope.js +3 -1
- package/package.json +12 -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-2JVJ7UHC.js.map +0 -1
- package/dist/chunk-3QQTXYZ6.js.map +0 -1
- package/dist/chunk-4UDQUPT5.js +0 -560
- package/dist/chunk-4UDQUPT5.js.map +0 -1
- package/dist/chunk-A7XEPMQ6.js.map +0 -1
- package/dist/chunk-AU7Q3LSC.js +0 -56
- package/dist/chunk-AU7Q3LSC.js.map +0 -1
- package/dist/chunk-BLUYQFRH.js.map +0 -1
- package/dist/chunk-CZYYJZB6.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-GVG3JYBI.js.map +0 -1
- package/dist/chunk-H272ZPQ3.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-N7RWREIQ.js.map +0 -1
- package/dist/chunk-O75CRYGF.js.map +0 -1
- package/dist/chunk-Q3O3VKRB.js.map +0 -1
- package/dist/chunk-SEDEKFYQ.js +0 -1
- package/dist/chunk-SO7SV523.js.map +0 -1
- package/dist/chunk-SQJ3SDIW.js.map +0 -1
- package/dist/chunk-TLPZ6MKZ.js.map +0 -1
- package/dist/chunk-WJBZMNNS.js.map +0 -1
- package/dist/chunk-XQ2Q43XD.js.map +0 -1
- package/dist/chunk-Z4PCVRTN.js.map +0 -1
- package/src/activity/journal-mode.test.ts +0 -32
- package/src/activity/journal-mode.ts +0 -20
- /package/dist/{chunk-SEDEKFYQ.js.map → activity/digest.js.map} +0 -0
- /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-IY2FVXM6.js.map → chunk-2AU4D4HQ.js.map} +0 -0
- /package/dist/{chunk-QDY6KYTN.js.map → chunk-2JCA2PQT.js.map} +0 -0
- /package/dist/{chunk-RSVEP77Y.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
- /package/dist/{chunk-NWWXSJX5.js.map → chunk-34QW2LK2.js.map} +0 -0
- /package/dist/{chunk-S7DPKM5W.js.map → chunk-353C5UNV.js.map} +0 -0
- /package/dist/{chunk-GQOMZ3MK.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-7VJXIDOC.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-WHBVXTUI.js.map → chunk-4PB2MBY6.js.map} +0 -0
- /package/dist/{chunk-TEYN7ZYF.js.map → chunk-4WCNPQQ5.js.map} +0 -0
- /package/dist/{chunk-RBGREYVJ.js.map → chunk-5QBDLMGG.js.map} +0 -0
- /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
- /package/dist/{chunk-LPECRQO4.js.map → chunk-5THU7NFP.js.map} +0 -0
- /package/dist/{chunk-LWA7MDVO.js.map → chunk-6CCRSQWT.js.map} +0 -0
- /package/dist/{chunk-TIT2C6WX.js.map → chunk-6XYC7NM4.js.map} +0 -0
- /package/dist/{chunk-FHQSPTPZ.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-PV36INNL.js.map → chunk-757NP436.js.map} +0 -0
- /package/dist/{chunk-6H5JYDOM.js.map → chunk-7J2CGXG3.js.map} +0 -0
- /package/dist/{chunk-FBMYGNOC.js.map → chunk-A2YQL2FF.js.map} +0 -0
- /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-MPYD657E.js.map → chunk-A7WOWDZK.js.map} +0 -0
- /package/dist/{chunk-C4OTC6WY.js.map → chunk-AIKTQVV3.js.map} +0 -0
- /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
- /package/dist/{chunk-VP67GZ7T.js.map → chunk-APFKZVJS.js.map} +0 -0
- /package/dist/{chunk-M75RYSHS.js.map → chunk-AQIRQUCP.js.map} +0 -0
- /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
- /package/dist/{chunk-PSPABFN2.js.map → chunk-BD7JTBYP.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-MFJBANPX.js.map → chunk-C2BFTYD7.js.map} +0 -0
- /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
- /package/dist/{chunk-AOCP6JA7.js.map → chunk-D3IZCN5P.js.map} +0 -0
- /package/dist/{chunk-ROKKIMON.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-ROGRI25A.js.map → chunk-I3H5LFOI.js.map} +0 -0
- /package/dist/{chunk-S65WXHNK.js.map → chunk-IFFLUCCU.js.map} +0 -0
- /package/dist/{chunk-D5LORF7A.js.map → chunk-JZDH2ZZK.js.map} +0 -0
- /package/dist/{chunk-2GPE5UCR.js.map → chunk-K6IPSW5B.js.map} +0 -0
- /package/dist/{chunk-HG6HXVHQ.js.map → chunk-KDJHLOZP.js.map} +0 -0
- /package/dist/{chunk-I27RSQRR.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-DITMGZOL.js.map → chunk-MMG5K6XJ.js.map} +0 -0
- /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
- /package/dist/{chunk-MKWKYHXJ.js.map → chunk-OB3XMWX5.js.map} +0 -0
- /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
- /package/dist/{chunk-47DEYNMR.js.map → chunk-PEXW2JCK.js.map} +0 -0
- /package/dist/{chunk-42SDNZCU.js.map → chunk-QF4J3KMV.js.map} +0 -0
- /package/dist/{chunk-SB6PSOP7.js.map → chunk-QLJ6762U.js.map} +0 -0
- /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
- /package/dist/{chunk-PHNAB54Q.js.map → chunk-RQO3J4MR.js.map} +0 -0
- /package/dist/{chunk-5N53UBH2.js.map → chunk-RR7G2X7C.js.map} +0 -0
- /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
- /package/dist/{chunk-GY5WZBA6.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-QMGXMJ2O.js.map → chunk-T2YFZ27G.js.map} +0 -0
- /package/dist/{chunk-LEPOP46W.js.map → chunk-TFA6HPOA.js.map} +0 -0
- /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
- /package/dist/{chunk-ZNJSBIP4.js.map → chunk-TNSCIPBQ.js.map} +0 -0
- /package/dist/{chunk-YUMDFDUA.js.map → chunk-TWYTGIBR.js.map} +0 -0
- /package/dist/{chunk-EZZV7OQL.js.map → chunk-UEZKN6VR.js.map} +0 -0
- /package/dist/{chunk-HY55QQD7.js.map → chunk-UJX4I26O.js.map} +0 -0
- /package/dist/{chunk-CBCNKKZD.js.map → chunk-VIZR45AN.js.map} +0 -0
- /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
- /package/dist/{chunk-ITPS5DDH.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-FGGYSN4P.js.map → chunk-X424T5JQ.js.map} +0 -0
- /package/dist/{chunk-NAXDPKVM.js.map → chunk-XPJNT6PI.js.map} +0 -0
- /package/dist/{contradiction-scan-NOYMFG66.js.map → chunk-XW2T4QAW.js.map} +0 -0
- /package/dist/{chunk-VED2YHUD.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-565C6ZFO.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/{resolution-VKATP2HT.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/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RECONCILE_MANIFEST_FORMAT,
|
|
3
|
+
RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
4
|
+
buildReconcileManifestFile,
|
|
5
|
+
citationTemplateFingerprint,
|
|
6
|
+
isCachedIdentityReusable,
|
|
7
|
+
isReconcileMemoryIdentity
|
|
8
|
+
} from "./chunk-UBG4GAEP.js";
|
|
9
|
+
import {
|
|
10
|
+
offlineSyncStorageForSnapshot
|
|
11
|
+
} from "./chunk-C6KRO3SU.js";
|
|
12
|
+
import {
|
|
13
|
+
createPersistedSupportPassportPrivateFileExclusion
|
|
14
|
+
} from "./chunk-PWPIERBM.js";
|
|
15
|
+
import {
|
|
16
|
+
iterateOfflineSyncSnapshotFileRecords
|
|
17
|
+
} from "./chunk-WQZZDN5M.js";
|
|
18
|
+
|
|
19
|
+
// src/access-offline-manifest.ts
|
|
20
|
+
import * as nodePath from "path";
|
|
21
|
+
function planServerIdentityCacheWrite(input) {
|
|
22
|
+
const entries = input.streamCompleted ? [...input.persisted.values()].filter((entry) => input.yieldedPaths.has(entry.path)) : [...input.persisted.values()];
|
|
23
|
+
return { shouldWrite: input.cacheDirty || entries.length !== input.persisted.size, entries };
|
|
24
|
+
}
|
|
25
|
+
function serverIdentityCachePath(storageDir) {
|
|
26
|
+
return nodePath.join(storageDir, ".remnic", "state", "converge-identity-cache.json");
|
|
27
|
+
}
|
|
28
|
+
async function loadServerIdentityCache(storageDir, citationTemplate) {
|
|
29
|
+
const cache = /* @__PURE__ */ new Map();
|
|
30
|
+
try {
|
|
31
|
+
const raw = JSON.parse(
|
|
32
|
+
await import("fs/promises").then((fs) => fs.readFile(serverIdentityCachePath(storageDir), "utf8"))
|
|
33
|
+
);
|
|
34
|
+
if (raw.citationTemplate !== citationTemplateFingerprint(citationTemplate)) return cache;
|
|
35
|
+
for (const candidate of raw.files ?? []) {
|
|
36
|
+
const entry = candidate;
|
|
37
|
+
if (typeof entry?.path !== "string" || typeof entry.sha256 !== "string") continue;
|
|
38
|
+
if (entry.memory !== void 0 && !isReconcileMemoryIdentity(entry.memory)) continue;
|
|
39
|
+
if (entry.statIdentity !== void 0 && typeof entry.statIdentity !== "string") continue;
|
|
40
|
+
if (entry.excluded !== void 0 && typeof entry.excluded !== "boolean") continue;
|
|
41
|
+
if (entry.normalizerVersion !== void 0 && typeof entry.normalizerVersion !== "number") continue;
|
|
42
|
+
if (entry.identityResolutionVersion !== void 0 && typeof entry.identityResolutionVersion !== "number") {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
cache.set(entry.path, {
|
|
46
|
+
path: entry.path,
|
|
47
|
+
sha256: entry.sha256,
|
|
48
|
+
...entry.memory ? { memory: entry.memory } : {},
|
|
49
|
+
...entry.memory ? {} : {
|
|
50
|
+
...typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {},
|
|
51
|
+
...typeof entry.identityResolutionVersion === "number" ? { identityResolutionVersion: entry.identityResolutionVersion } : {}
|
|
52
|
+
},
|
|
53
|
+
...entry.statIdentity !== void 0 && entry.excluded !== void 0 ? { statIdentity: entry.statIdentity, excluded: entry.excluded } : {}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
} catch {
|
|
57
|
+
}
|
|
58
|
+
return cache;
|
|
59
|
+
}
|
|
60
|
+
var serverIdentityCacheWriteLocks = /* @__PURE__ */ new Map();
|
|
61
|
+
async function withServerIdentityCacheWriteLock(cachePath, write) {
|
|
62
|
+
const previous = serverIdentityCacheWriteLocks.get(cachePath) ?? Promise.resolve();
|
|
63
|
+
const next = previous.then(write, write);
|
|
64
|
+
serverIdentityCacheWriteLocks.set(cachePath, next);
|
|
65
|
+
try {
|
|
66
|
+
await next;
|
|
67
|
+
} finally {
|
|
68
|
+
if (serverIdentityCacheWriteLocks.get(cachePath) === next) {
|
|
69
|
+
serverIdentityCacheWriteLocks.delete(cachePath);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function mergeServerIdentityCacheEntries(fs, cachePath, entries, citationTemplate, dropped = /* @__PURE__ */ new Set()) {
|
|
74
|
+
const merged = new Map(entries.map((entry) => [entry.path, entry]));
|
|
75
|
+
try {
|
|
76
|
+
const raw = JSON.parse(await fs.readFile(cachePath, "utf8"));
|
|
77
|
+
if (raw.citationTemplate === citationTemplateFingerprint(citationTemplate)) {
|
|
78
|
+
for (const candidate of raw.files ?? []) {
|
|
79
|
+
const entry = candidate;
|
|
80
|
+
if (typeof entry?.path !== "string" || typeof entry.sha256 !== "string") continue;
|
|
81
|
+
if (entry.memory !== void 0 && !isReconcileMemoryIdentity(entry.memory)) continue;
|
|
82
|
+
if (dropped.has(entry.path) || merged.has(entry.path)) continue;
|
|
83
|
+
merged.set(entry.path, {
|
|
84
|
+
path: entry.path,
|
|
85
|
+
sha256: entry.sha256,
|
|
86
|
+
...entry.memory ? { memory: entry.memory } : {},
|
|
87
|
+
...entry.memory ? {} : {
|
|
88
|
+
...typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {},
|
|
89
|
+
...typeof entry.identityResolutionVersion === "number" ? { identityResolutionVersion: entry.identityResolutionVersion } : {}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
} catch {
|
|
95
|
+
}
|
|
96
|
+
return [...merged.values()];
|
|
97
|
+
}
|
|
98
|
+
async function createOfflineSyncManifestStream(orchestrator, namespace, userExcludeRegexps, options, parseMemory) {
|
|
99
|
+
const storage = await offlineSyncStorageForSnapshot(orchestrator, namespace);
|
|
100
|
+
const citationTemplate = orchestrator.config.inlineSourceAttributionFormat;
|
|
101
|
+
const identityCache = await loadServerIdentityCache(storage.dir, citationTemplate);
|
|
102
|
+
const classificationUpdates = /* @__PURE__ */ new Map();
|
|
103
|
+
const snapshotFiles = iterateOfflineSyncSnapshotFileRecords({
|
|
104
|
+
root: storage.dir,
|
|
105
|
+
includeContent: false,
|
|
106
|
+
includeTranscripts: options.includeTranscripts !== false,
|
|
107
|
+
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
108
|
+
signal: options.signal,
|
|
109
|
+
userExcludeRegexps,
|
|
110
|
+
excludeFile: createPersistedSupportPassportPrivateFileExclusion(storage, identityCache, classificationUpdates)
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
namespace,
|
|
114
|
+
format: RECONCILE_MANIFEST_FORMAT,
|
|
115
|
+
schemaVersion: RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
116
|
+
files: (async function* () {
|
|
117
|
+
let cacheDirty = false;
|
|
118
|
+
let streamCompleted = false;
|
|
119
|
+
const persistedEntries = new Map(identityCache);
|
|
120
|
+
const yieldedPaths = /* @__PURE__ */ new Set();
|
|
121
|
+
const flush = async () => {
|
|
122
|
+
const { shouldWrite, entries } = planServerIdentityCacheWrite({
|
|
123
|
+
persisted: persistedEntries,
|
|
124
|
+
yieldedPaths,
|
|
125
|
+
streamCompleted,
|
|
126
|
+
cacheDirty
|
|
127
|
+
});
|
|
128
|
+
if (!shouldWrite) return;
|
|
129
|
+
try {
|
|
130
|
+
const fs = await import("fs/promises");
|
|
131
|
+
const cachePath = serverIdentityCachePath(storage.dir);
|
|
132
|
+
await withServerIdentityCacheWriteLock(cachePath, async () => {
|
|
133
|
+
const written = new Set(entries.map((entry) => entry.path));
|
|
134
|
+
const dropped = streamCompleted ? new Set([...identityCache.keys()].filter((pathName) => !written.has(pathName))) : /* @__PURE__ */ new Set();
|
|
135
|
+
const merged = await mergeServerIdentityCacheEntries(
|
|
136
|
+
fs,
|
|
137
|
+
cachePath,
|
|
138
|
+
entries,
|
|
139
|
+
citationTemplate,
|
|
140
|
+
dropped
|
|
141
|
+
);
|
|
142
|
+
await fs.mkdir(nodePath.dirname(cachePath), { recursive: true });
|
|
143
|
+
const tmp = `${cachePath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
|
|
144
|
+
await fs.writeFile(
|
|
145
|
+
tmp,
|
|
146
|
+
JSON.stringify({ citationTemplate: citationTemplateFingerprint(citationTemplate), files: merged })
|
|
147
|
+
);
|
|
148
|
+
await fs.rename(tmp, cachePath);
|
|
149
|
+
});
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
try {
|
|
154
|
+
const applyClassification = (path, sha256) => {
|
|
155
|
+
const classification = classificationUpdates.get(path);
|
|
156
|
+
if (classification === void 0) return;
|
|
157
|
+
const entry = persistedEntries.get(path) ?? { path, sha256 };
|
|
158
|
+
if (entry.statIdentity === classification.statIdentity && entry.excluded === classification.excluded) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
persistedEntries.set(path, {
|
|
162
|
+
...entry,
|
|
163
|
+
...entry.memory ? { memory: entry.memory } : {},
|
|
164
|
+
statIdentity: classification.statIdentity,
|
|
165
|
+
excluded: classification.excluded
|
|
166
|
+
});
|
|
167
|
+
cacheDirty = true;
|
|
168
|
+
};
|
|
169
|
+
for await (const file of snapshotFiles) {
|
|
170
|
+
yieldedPaths.add(file.path);
|
|
171
|
+
const cached = identityCache.get(file.path);
|
|
172
|
+
if (cached !== void 0 && cached.sha256.toLowerCase() === file.sha256.toLowerCase() && isCachedIdentityReusable(cached)) {
|
|
173
|
+
applyClassification(file.path, file.sha256);
|
|
174
|
+
yield {
|
|
175
|
+
...file,
|
|
176
|
+
...cached.memory ? { memory: cached.memory } : {
|
|
177
|
+
normalizerVersion: cached.normalizerVersion,
|
|
178
|
+
identityResolutionVersion: cached.identityResolutionVersion
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const built = await buildReconcileManifestFile(
|
|
184
|
+
file,
|
|
185
|
+
async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),
|
|
186
|
+
parseMemory,
|
|
187
|
+
citationTemplate
|
|
188
|
+
);
|
|
189
|
+
const previous = persistedEntries.get(built.path);
|
|
190
|
+
if (previous?.sha256 !== built.sha256 || built.memory !== void 0 && previous?.memory !== built.memory) {
|
|
191
|
+
cacheDirty = true;
|
|
192
|
+
}
|
|
193
|
+
if (built.memory === void 0 && built.normalizerVersion === void 0) {
|
|
194
|
+
yield built;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
persistedEntries.set(built.path, {
|
|
198
|
+
path: built.path,
|
|
199
|
+
sha256: built.sha256,
|
|
200
|
+
...built.memory !== void 0 ? { memory: built.memory } : {
|
|
201
|
+
normalizerVersion: built.normalizerVersion,
|
|
202
|
+
identityResolutionVersion: built.identityResolutionVersion
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
applyClassification(built.path, built.sha256);
|
|
206
|
+
yield built;
|
|
207
|
+
}
|
|
208
|
+
streamCompleted = true;
|
|
209
|
+
} finally {
|
|
210
|
+
await flush();
|
|
211
|
+
}
|
|
212
|
+
})()
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export {
|
|
217
|
+
planServerIdentityCacheWrite,
|
|
218
|
+
createOfflineSyncManifestStream
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=chunk-NPNSKE76.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/access-offline-manifest.ts"],"sourcesContent":["import * as nodePath from \"node:path\";\nimport { offlineSyncStorageForSnapshot } from \"./offline-sync-impression-drain.js\";\nimport { iterateOfflineSyncSnapshotFileRecords } from \"./offline-sync.js\";\nimport type { Orchestrator } from \"./orchestrator.js\";\nimport {\n CONTENT_HASH_NORMALIZER_VERSION,\n IDENTITY_RESOLUTION_VERSION,\n RECONCILE_MANIFEST_FORMAT,\n RECONCILE_MANIFEST_SCHEMA_VERSION,\n type ReconcileManifest,\n type ReconcileManifestFile,\n type ReconcileMemoryIdentity,\n type ReconcileMemoryParser,\n buildReconcileManifestFile,\n citationTemplateFingerprint,\n isCachedIdentityReusable,\n isReconcileMemoryIdentity,\n} from \"./reconcile/manifest.js\";\nimport { createPersistedSupportPassportPrivateFileExclusion } from \"./support-passport/card-projection.js\";\n\nexport interface OfflineSyncManifestRequest {\n includeTranscripts?: boolean;\n signal?: AbortSignal;\n}\n\nexport interface OfflineSyncManifestStreamResponse extends Omit<ReconcileManifest, \"files\"> {\n namespace: string;\n files: AsyncIterable<ReconcileManifestFile>;\n}\n\nexport interface ServerIdentityCacheEntry {\n path: string;\n sha256: string;\n memory?: ReconcileMemoryIdentity;\n /** Stamped on sha-only entries so an upgrade re-parses them. */\n normalizerVersion?: number;\n identityResolutionVersion?: number;\n /** Stat identity the exclusion classification was computed against. */\n statIdentity?: string;\n /** Persisted support-passport private-memory classification for statIdentity. */\n excluded?: boolean;\n}\n\n/**\n * Decide what the manifest stream should persist, and whether a write is\n * needed at all.\n *\n * A write is required whenever the persisted set changed — an identity was\n * rebuilt, or an entry was dropped because its file lost its identity — and\n * also when a completed walk leaves entries for paths it never saw, which are\n * files that have since been deleted. Skipping the write in that last case\n * would strand those entries on disk forever.\n *\n * Pruning is gated on the walk completing: an aborted or partially consumed\n * stream has simply not observed the remaining paths, so it may only add.\n */\nexport function planServerIdentityCacheWrite(input: {\n persisted: ReadonlyMap<string, ServerIdentityCacheEntry>;\n yieldedPaths: ReadonlySet<string>;\n streamCompleted: boolean;\n cacheDirty: boolean;\n}): { shouldWrite: boolean; entries: ServerIdentityCacheEntry[] } {\n const entries = input.streamCompleted\n ? [...input.persisted.values()].filter((entry) => input.yieldedPaths.has(entry.path))\n : [...input.persisted.values()];\n return { shouldWrite: input.cacheDirty || entries.length !== input.persisted.size, entries };\n}\n\n/**\n * The cache lives under `.remnic/` rather than `state/`: snapshot enumeration\n * excludes internal `.remnic/` paths structurally (`isInternalRemnicStatePath`),\n * whereas `state/` is only filtered by an allowlist of known node-local\n * artifacts. Under `state/` this node-local cache would be advertised as a peer\n * file, so convergence would transfer the cache itself — and the stream rewrites\n * it during finalization, so the advertised digest could go stale mid-transfer.\n */\nfunction serverIdentityCachePath(storageDir: string): string {\n return nodePath.join(storageDir, \".remnic\", \"state\", \"converge-identity-cache.json\");\n}\n\nasync function loadServerIdentityCache(\n storageDir: string,\n citationTemplate?: string\n): Promise<Map<string, ServerIdentityCacheEntry>> {\n const cache = new Map<string, ServerIdentityCacheEntry>();\n try {\n const raw = JSON.parse(\n await import(\"node:fs/promises\").then((fs) => fs.readFile(serverIdentityCachePath(storageDir), \"utf8\"))\n ) as {\n citationTemplate?: string;\n files?: unknown[];\n };\n // Identities are derived after stripping inline attribution for a specific\n // citation template; entries written under a different one would produce\n // wrong contentHash values for unchanged files.\n if (raw.citationTemplate !== citationTemplateFingerprint(citationTemplate)) return cache;\n for (const candidate of raw.files ?? []) {\n const entry = candidate as Partial<ServerIdentityCacheEntry> | null;\n if (typeof entry?.path !== \"string\" || typeof entry.sha256 !== \"string\") continue;\n if (entry.memory !== undefined && !isReconcileMemoryIdentity(entry.memory)) continue;\n if (entry.statIdentity !== undefined && typeof entry.statIdentity !== \"string\") continue;\n if (entry.excluded !== undefined && typeof entry.excluded !== \"boolean\") continue;\n if (entry.normalizerVersion !== undefined && typeof entry.normalizerVersion !== \"number\") continue;\n if (entry.identityResolutionVersion !== undefined && typeof entry.identityResolutionVersion !== \"number\") {\n continue;\n }\n cache.set(entry.path, {\n path: entry.path,\n sha256: entry.sha256,\n ...(entry.memory ? { memory: entry.memory } : {}),\n ...(entry.memory\n ? {}\n : {\n ...(typeof entry.normalizerVersion === \"number\" ? { normalizerVersion: entry.normalizerVersion } : {}),\n ...(typeof entry.identityResolutionVersion === \"number\"\n ? { identityResolutionVersion: entry.identityResolutionVersion }\n : {}),\n }),\n ...(entry.statIdentity !== undefined && entry.excluded !== undefined\n ? { statIdentity: entry.statIdentity, excluded: entry.excluded }\n : {}),\n });\n }\n } catch {\n // missing or corrupt cache: cold build\n }\n return cache;\n}\n\nconst serverIdentityCacheWriteLocks = new Map<string, Promise<void>>();\n\n/** Serialize cache replacements per path: overlapping manifest streams for one\n * namespace would otherwise each publish a whole-file snapshot, and the slower\n * stream built from older filesystem state would overwrite the newer one. */\nasync function withServerIdentityCacheWriteLock(cachePath: string, write: () => Promise<void>): Promise<void> {\n const previous = serverIdentityCacheWriteLocks.get(cachePath) ?? Promise.resolve();\n const next = previous.then(write, write);\n serverIdentityCacheWriteLocks.set(cachePath, next);\n try {\n await next;\n } finally {\n if (serverIdentityCacheWriteLocks.get(cachePath) === next) {\n serverIdentityCacheWriteLocks.delete(cachePath);\n }\n }\n}\n\n/** Union of the entries being written and the current on-disk set; on conflict\n * the write wins (it reflects the newer run). Callers hold the write lock. */\nasync function mergeServerIdentityCacheEntries(\n fs: typeof import(\"node:fs/promises\"),\n cachePath: string,\n entries: readonly ServerIdentityCacheEntry[],\n citationTemplate: string | undefined,\n dropped: ReadonlySet<string> = new Set()\n): Promise<ServerIdentityCacheEntry[]> {\n const merged = new Map(entries.map((entry) => [entry.path, entry]));\n try {\n const raw = JSON.parse(await fs.readFile(cachePath, \"utf8\")) as {\n citationTemplate?: string;\n files?: unknown[];\n };\n if (raw.citationTemplate === citationTemplateFingerprint(citationTemplate)) {\n for (const candidate of raw.files ?? []) {\n const entry = candidate as Partial<ServerIdentityCacheEntry> | null;\n if (typeof entry?.path !== \"string\" || typeof entry.sha256 !== \"string\") continue;\n if (entry.memory !== undefined && !isReconcileMemoryIdentity(entry.memory)) continue;\n if (dropped.has(entry.path) || merged.has(entry.path)) continue;\n merged.set(entry.path, {\n path: entry.path,\n sha256: entry.sha256,\n ...(entry.memory ? { memory: entry.memory } : {}),\n ...(entry.memory\n ? {}\n : {\n ...(typeof entry.normalizerVersion === \"number\" ? { normalizerVersion: entry.normalizerVersion } : {}),\n ...(typeof entry.identityResolutionVersion === \"number\"\n ? { identityResolutionVersion: entry.identityResolutionVersion }\n : {}),\n }),\n });\n }\n }\n } catch {\n // missing or unreadable current cache: the write set stands alone\n }\n return [...merged.values()];\n}\n\nexport async function createOfflineSyncManifestStream(\n orchestrator: Orchestrator,\n namespace: string,\n userExcludeRegexps: RegExp[],\n options: OfflineSyncManifestRequest,\n parseMemory: ReconcileMemoryParser\n): Promise<OfflineSyncManifestStreamResponse> {\n const storage = await offlineSyncStorageForSnapshot(orchestrator, namespace);\n const citationTemplate = orchestrator.config.inlineSourceAttributionFormat;\n const identityCache = await loadServerIdentityCache(storage.dir, citationTemplate);\n // The exclusion callback runs before every yield; without the persisted\n // classification it would read and parse every candidate file, defeating the\n // warm-cache skip entirely.\n const classificationUpdates = new Map<string, { statIdentity: string; excluded: boolean }>();\n const snapshotFiles = iterateOfflineSyncSnapshotFileRecords({\n root: storage.dir,\n includeContent: false,\n includeTranscripts: options.includeTranscripts !== false,\n readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),\n signal: options.signal,\n userExcludeRegexps,\n excludeFile: createPersistedSupportPassportPrivateFileExclusion(storage, identityCache, classificationUpdates),\n });\n return {\n namespace,\n format: RECONCILE_MANIFEST_FORMAT,\n schemaVersion: RECONCILE_MANIFEST_SCHEMA_VERSION,\n files: (async function* () {\n // Any change to the persisted set, not just a rebuilt identity: a file\n // that lost its identity, or a completed walk that must prune vanished\n // paths, also has to reach disk or the removal is lost forever.\n let cacheDirty = false;\n let streamCompleted = false;\n // Seeded with every previously cached entry so a partially consumed\n // stream (client disconnect, abort) can only add to the cache. Writing\n // just this run's rebuilds would drop every cache hit, so one edit to a\n // large corpus would shrink the cache to that single entry and force a\n // near-cold rebuild on the next request.\n const persistedEntries = new Map(identityCache);\n const yieldedPaths = new Set<string>();\n const flush = async (): Promise<void> => {\n const { shouldWrite, entries } = planServerIdentityCacheWrite({\n persisted: persistedEntries,\n yieldedPaths,\n streamCompleted,\n cacheDirty,\n });\n if (!shouldWrite) return;\n try {\n const fs = await import(\"node:fs/promises\");\n const cachePath = serverIdentityCachePath(storage.dir);\n await withServerIdentityCacheWriteLock(cachePath, async () => {\n // Merge with whatever is on disk NOW: a concurrent stream for the\n // same namespace may have published newer entries after this\n // request loaded its snapshot, and a blind whole-file replace\n // would discard them.\n const written = new Set(entries.map((entry) => entry.path));\n const dropped = streamCompleted\n ? new Set([...identityCache.keys()].filter((pathName) => !written.has(pathName)))\n : new Set<string>();\n const merged = await mergeServerIdentityCacheEntries(\n fs,\n cachePath,\n entries,\n citationTemplate,\n dropped\n );\n await fs.mkdir(nodePath.dirname(cachePath), { recursive: true });\n const tmp = `${cachePath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;\n await fs.writeFile(\n tmp,\n JSON.stringify({ citationTemplate: citationTemplateFingerprint(citationTemplate), files: merged })\n );\n await fs.rename(tmp, cachePath);\n });\n } catch {\n // cache persistence is best-effort\n }\n };\n try {\n const applyClassification = (path: string, sha256: string): void => {\n const classification = classificationUpdates.get(path);\n if (classification === undefined) return;\n const entry = persistedEntries.get(path) ?? { path, sha256 };\n if (entry.statIdentity === classification.statIdentity && entry.excluded === classification.excluded) {\n return;\n }\n persistedEntries.set(path, {\n ...entry,\n ...(entry.memory ? { memory: entry.memory } : {}),\n statIdentity: classification.statIdentity,\n excluded: classification.excluded,\n });\n cacheDirty = true;\n };\n for await (const file of snapshotFiles) {\n yieldedPaths.add(file.path);\n const cached = identityCache.get(file.path);\n if (\n cached !== undefined &&\n cached.sha256.toLowerCase() === file.sha256.toLowerCase() &&\n isCachedIdentityReusable(cached)\n ) {\n applyClassification(file.path, file.sha256);\n yield {\n ...file,\n ...(cached.memory\n ? { memory: cached.memory }\n : {\n normalizerVersion: cached.normalizerVersion,\n identityResolutionVersion: cached.identityResolutionVersion,\n }),\n };\n continue;\n }\n const built = await buildReconcileManifestFile(\n file,\n async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),\n parseMemory,\n citationTemplate\n );\n // Negative results persist too: a memory-shaped file that parses\n // without an identity would otherwise be re-read on every warm run.\n const previous = persistedEntries.get(built.path);\n if (previous?.sha256 !== built.sha256 || (built.memory !== undefined && previous?.memory !== built.memory)) {\n cacheDirty = true;\n }\n if (built.memory === undefined && built.normalizerVersion === undefined) {\n // Read failed: do not persist a negative identity for this SHA.\n yield built;\n continue;\n }\n persistedEntries.set(built.path, {\n path: built.path,\n sha256: built.sha256,\n ...(built.memory !== undefined\n ? { memory: built.memory }\n : {\n normalizerVersion: built.normalizerVersion,\n identityResolutionVersion: built.identityResolutionVersion,\n }),\n });\n applyClassification(built.path, built.sha256);\n yield built;\n }\n streamCompleted = true;\n } finally {\n await flush();\n }\n })(),\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import {
|
|
2
|
+
scanMemoryDir
|
|
3
|
+
} from "./chunk-4O6WRBGE.js";
|
|
1
4
|
import {
|
|
2
5
|
isSearchAborted,
|
|
3
6
|
throwIfSearchAborted
|
|
4
7
|
} from "./chunk-GUMZC2BO.js";
|
|
5
|
-
import {
|
|
6
|
-
scanMemoryDir
|
|
7
|
-
} from "./chunk-4O6WRBGE.js";
|
|
8
8
|
import {
|
|
9
9
|
reportSearchDegradation,
|
|
10
10
|
resolveEnsureCollectionArgs
|
|
@@ -253,4 +253,4 @@ function isMeilisearchIndexNotFoundError(err) {
|
|
|
253
253
|
export {
|
|
254
254
|
MeilisearchBackend
|
|
255
255
|
};
|
|
256
|
-
//# sourceMappingURL=chunk-
|
|
256
|
+
//# sourceMappingURL=chunk-OB3XMWX5.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
expandScopeProfileReadNamespaces,
|
|
3
3
|
resolveScopeProfilePlan
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-MNIPH6LD.js";
|
|
5
5
|
import {
|
|
6
6
|
canReadNamespace,
|
|
7
7
|
canWriteNamespace,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
combineNamespaces,
|
|
23
23
|
lcmReadSessionIdsForNamespaces,
|
|
24
24
|
resolveCodingNamespaceOverlay
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-3Q3N35W7.js";
|
|
26
26
|
|
|
27
27
|
// src/scopes/scope-plan.ts
|
|
28
28
|
import path from "path";
|
|
@@ -204,4 +204,4 @@ export {
|
|
|
204
204
|
resolveWritableNamespaceValue,
|
|
205
205
|
resolveScopedWritableNamespaceValue
|
|
206
206
|
};
|
|
207
|
-
//# sourceMappingURL=chunk-
|
|
207
|
+
//# sourceMappingURL=chunk-OQQXGYMX.js.map
|
|
@@ -5,18 +5,20 @@ import {
|
|
|
5
5
|
rejectSymlinkPath,
|
|
6
6
|
renderFrontmatter,
|
|
7
7
|
writeBundleFile
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-UJX4I26O.js";
|
|
9
9
|
import {
|
|
10
10
|
parseOaiMemCitation
|
|
11
11
|
} from "./chunk-D24OXEPB.js";
|
|
12
12
|
import {
|
|
13
13
|
resolveNamespaceChildRoot
|
|
14
14
|
} from "./chunk-3UXOZBHV.js";
|
|
15
|
+
import {
|
|
16
|
+
StorageManager
|
|
17
|
+
} from "./chunk-ZMKYCFJ7.js";
|
|
15
18
|
import {
|
|
16
19
|
OKF_PROFILE_TYPE,
|
|
17
|
-
StorageManager,
|
|
18
20
|
okfTypeForMemory
|
|
19
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-PCEYGOSL.js";
|
|
20
22
|
import {
|
|
21
23
|
normalizeProjectionPreview
|
|
22
24
|
} from "./chunk-SCU65EZI.js";
|
|
@@ -270,4 +272,4 @@ export {
|
|
|
270
272
|
exportOkfBundle,
|
|
271
273
|
firstHeading
|
|
272
274
|
};
|
|
273
|
-
//# sourceMappingURL=chunk-
|
|
275
|
+
//# sourceMappingURL=chunk-OZUXKUPD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transfer/export-okf.ts"],"sourcesContent":["import { mkdirSync, rmSync } from \"node:fs\";\nimport { mkdtemp } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseOaiMemCitation } from \"../citations.js\";\nimport { inferMemoryStatus } from \"../memory-lifecycle-ledger-utils.js\";\nimport { normalizeProjectionPreview } from \"../memory-projection-format.js\";\nimport { lintOkfDir } from \"../okf/lint.js\";\nimport { okfTypeForMemory, OKF_PROFILE_TYPE } from \"../okf/type-mapping.js\";\nimport { resolveNamespaceChildRoot } from \"../namespaces/path.js\";\nimport {\n OKF_EXPORT_VERSION,\n publishBundle,\n renderFrontmatter,\n rejectSymlinkPath,\n writeBundleFile,\n} from \"../okf/render.js\";\n// Re-exported for the existing `@remnic/core/export-okf` consumers and tests\n// (one public surface; the value itself now lives in okf/render.ts).\nexport { OKF_EXPORT_VERSION };\nimport { StorageManager } from \"../storage.js\";\nimport type { MemoryFile, MemoryLink, MemoryStatus } from \"../types.js\";\n\n// Shared bundle mechanics (frontmatter, publish, symlink guard, file write)\n// live in ../okf/render.ts — one source of truth for every OKF exporter.\nexport const OKF_LOG_TRUNCATION_MARKER = \"<!-- okf-log-truncated -->\";\nexport const DEFAULT_OKF_LOG_MAX_ENTRIES = 500;\n\nconst MEMORY_STATUSES: readonly MemoryStatus[] = [\n \"active\",\n \"pending_review\",\n \"rejected\",\n \"quarantined\",\n \"superseded\",\n \"archived\",\n \"forgotten\",\n];\n\nexport interface ExportOkfOptions {\n memoryDir: string;\n /**\n * Optional namespace segment. Resolved here, once, through the shared\n * containment guard: both CLI entry points used to join the raw operator\n * value onto `memoryDir/namespaces`, so `--namespace ../../..` escaped the\n * namespace root and exported an arbitrary tree (rule 9 — one resolver, not\n * a per-caller guard).\n */\n namespace?: string;\n outDir: string;\n includeStatus?: readonly string[];\n includeCategories?: readonly string[];\n excludeTags?: readonly string[];\n includeProfile?: boolean;\n includeWearables?: boolean;\n includeLog?: boolean;\n logMaxEntries?: number;\n force?: boolean;\n}\n\nexport interface ExportOkfResult {\n exported: number;\n excluded: number;\n byCategory: Record<string, number>;\n plaintextWarning: boolean;\n}\n\nexport function parseIncludeStatus(raw: unknown): MemoryStatus[] {\n const values = splitCsv(raw);\n if (values.length === 0) return [\"active\"];\n const allowed = new Set<string>(MEMORY_STATUSES);\n for (const value of values) {\n if (!allowed.has(value)) {\n throw new Error(`invalid --include-status ${value}; allowed: ${MEMORY_STATUSES.join(\", \")}`);\n }\n }\n return values as MemoryStatus[];\n}\n\nexport async function exportOkfBundle(opts: ExportOkfOptions): Promise<ExportOkfResult> {\n const outDir = path.resolve(opts.outDir);\n rejectSymlinkPath(outDir);\n const namespace = (opts.namespace ?? \"\").trim();\n const memoryDir = namespace\n ? resolveNamespaceChildRoot(opts.memoryDir, namespace, \"--namespace\")\n : opts.memoryDir;\n const includeStatus = new Set(parseIncludeStatus(opts.includeStatus));\n const includeCategories = opts.includeCategories?.length ? new Set(opts.includeCategories) : null;\n const excludeTags = new Set(opts.excludeTags ?? []);\n const storage = new StorageManager(memoryDir);\n const memories = await storage.readAllMemories();\n const included: MemoryFile[] = [];\n let excluded = 0;\n for (const memory of memories) {\n const rel = toRel(memory.path, memoryDir);\n if (!opts.includeWearables && rel.startsWith(\"wearables/\")) {\n excluded += 1;\n continue;\n }\n const status = inferMemoryStatus(memory.frontmatter, memory.path);\n if (!includeStatus.has(status)) {\n excluded += 1;\n continue;\n }\n if (includeCategories && !includeCategories.has(memory.frontmatter.category)) {\n excluded += 1;\n continue;\n }\n if ((memory.frontmatter.tags ?? []).some((tag) => excludeTags.has(tag))) {\n excluded += 1;\n continue;\n }\n included.push(memory);\n }\n included.sort((a, b) => toRel(a.path, memoryDir).localeCompare(toRel(b.path, memoryDir)));\n\n // Stage inside the destination's parent, not the OS temp dir: publishBundle\n // finishes with a rename, and a rename across filesystems fails with EXDEV\n // whenever --out lives on a different mount than /tmp.\n mkdirSync(path.dirname(outDir), { recursive: true });\n const staging = await mkdtemp(path.join(path.dirname(outDir), \".remnic-okf-export-\"));\n const byCategory: Record<string, number> = {};\n const idToRel = new Map<string, string>();\n for (const memory of included) {\n const rel = toRel(memory.path, memoryDir);\n idToRel.set(memory.frontmatter.id, rel);\n }\n for (const memory of included) {\n const rel = toRel(memory.path, memoryDir);\n const rendered = renderMemory(memory, rel, idToRel);\n writeBundleFile(staging, rel, rendered);\n const category = memory.frontmatter.category;\n byCategory[category] = (byCategory[category] ?? 0) + 1;\n }\n\n if (opts.includeProfile) {\n try {\n const profile = await storage.readProfile();\n if (profile) {\n writeBundleFile(\n staging,\n \"profile.md\",\n renderFrontmatter({\n type: OKF_PROFILE_TYPE,\n title: \"User Profile\",\n timestamp: new Date(0).toISOString(),\n }) + profile.replace(/^\\uFEFF/, \"\"),\n );\n }\n } catch {\n // Profile is optional even when requested.\n }\n }\n\n if (opts.includeLog) {\n const events = await storage.readAllMemoryLifecycleEvents();\n writeBundleFile(staging, \"log.md\", renderLog(events, idToRel, opts.logMaxEntries ?? DEFAULT_OKF_LOG_MAX_ENTRIES));\n }\n\n writeIndexes(staging, included, memoryDir);\n const lint = lintOkfDir(staging);\n const blocking = lint.findings.filter((f) => f.code !== \"skipped_encrypted\" && f.code !== \"reserved_basename\");\n if (blocking.length > 0) {\n rmSync(staging, { recursive: true, force: true });\n throw new Error(`OKF export failed lint: ${blocking.map((f) => `${f.file}: ${f.message}`).join(\"; \")}`);\n }\n\n publishBundle(staging, outDir, opts.force === true);\n return {\n exported: included.length,\n excluded,\n byCategory,\n plaintextWarning: true,\n };\n}\n\n\nfunction renderMemory(memory: MemoryFile, rel: string, idToRel: Map<string, string>): string {\n const fm = memory.frontmatter;\n const title = firstHeading(memory.content) ?? `${humanize(fm.category)} ${fm.created.slice(0, 10)}`;\n const type = fm.type ?? okfTypeForMemory(fm);\n const fields: Record<string, unknown> = {\n ...fm,\n type,\n title,\n description: normalizeProjectionPreview(memory.content),\n tags: fm.tags ?? [],\n timestamp: fm.updated,\n };\n if (fm.artifactType) fields.resource = rel;\n let body = memory.content.trim();\n const citation = parseOaiMemCitation(body);\n if (citation) {\n const start = body.indexOf(\"<oai-mem-citation>\");\n const end = body.indexOf(\"</oai-mem-citation>\");\n if (start >= 0 && end > start) {\n body = `${body.slice(0, start).trimEnd()}\\n\\n${body.slice(end + \"</oai-mem-citation>\".length).trimStart()}`.trim();\n }\n const lines = citation.entries.map((entry, index) => `${index + 1}. [${entry.path}](${entry.path})`);\n body = `${body}\\n\\n# Citations\\n\\n${lines.join(\"\\n\")}\\n`;\n }\n const links = fm.links ?? [];\n if (links.length > 0) {\n body += `\\n# Related\\n\\n${links.map((link) => renderRelated(link, idToRel)).join(\"\\n\")}\\n`;\n }\n return renderFrontmatter(fields) + body + (body.endsWith(\"\\n\") ? \"\" : \"\\n\");\n}\n\nfunction renderRelated(link: MemoryLink, idToRel: Map<string, string>): string {\n const target = idToRel.get(link.targetId) ?? link.targetId;\n const href = target.startsWith(\"/\") ? target : `/${target}`;\n return `- ${link.linkType}: [${link.targetId}](${href})`;\n}\n\nfunction writeIndexes(root: string, memories: MemoryFile[], memoryDir: string): void {\n const groups = new Map<string, MemoryFile[]>();\n for (const memory of memories) {\n const rel = toRel(memory.path, memoryDir);\n const dir = path.posix.dirname(rel);\n const key = dir === \".\" ? \"\" : dir.split(\"/\")[0] ?? \"\";\n const list = groups.get(key) ?? [];\n list.push(memory);\n groups.set(key, list);\n }\n const sections = [...groups.keys()].sort().map((key) => {\n const heading = key === \"\" ? \"Root\" : humanize(key);\n const lines = (groups.get(key) ?? [])\n .sort((a, b) => toRel(a.path, memoryDir).localeCompare(toRel(b.path, memoryDir)))\n .map((memory) => {\n const rel = toRel(memory.path, memoryDir);\n const title = firstHeading(memory.content) ?? memory.frontmatter.id;\n const description = normalizeProjectionPreview(memory.content);\n return `* [${title}](/${rel}) - ${description}`;\n });\n return `## ${heading}\\n\\n${lines.join(\"\\n\")}`;\n });\n writeBundleFile(root, \"index.md\", `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n${sections.join(\"\\n\\n\")}\\n`);\n}\n\nfunction renderLog(\n events: Array<{ timestamp?: string; type?: string; action?: string; memoryId?: string }>,\n idToRel: Map<string, string>,\n maxEntries: number,\n): string {\n const sorted = [...events].sort((a, b) => String(b.timestamp ?? \"\").localeCompare(String(a.timestamp ?? \"\")));\n const truncated = sorted.length > maxEntries;\n const kept = sorted.slice(0, maxEntries);\n const byDay = new Map<string, typeof kept>();\n for (const event of kept) {\n const day = String(event.timestamp ?? \"\").slice(0, 10) || \"unknown\";\n const list = byDay.get(day) ?? [];\n list.push(event);\n byDay.set(day, list);\n }\n const days = [...byDay.keys()].sort((a, b) => b.localeCompare(a));\n const parts = [\"# Log\", \"\"];\n for (const day of days) {\n parts.push(`## ${day}`, \"\");\n for (const event of byDay.get(day) ?? []) {\n const action = boldAction(event.type ?? event.action ?? \"Update\");\n const id = event.memoryId;\n const rel = id ? idToRel.get(id) : undefined;\n const target = rel ? `[${id}](/${rel})` : id ?? \"\";\n parts.push(`- **${action}** ${target}`.trimEnd());\n }\n parts.push(\"\");\n }\n if (truncated) parts.push(OKF_LOG_TRUNCATION_MARKER, \"\");\n return `${parts.join(\"\\n\")}\\n`;\n}\n\nfunction boldAction(raw: string): string {\n const lower = raw.toLowerCase();\n if (lower.includes(\"create\") || lower.includes(\"add\")) return \"Creation\";\n if (lower.includes(\"deprecat\") || lower.includes(\"delete\") || lower.includes(\"archiv\")) return \"Deprecation\";\n return \"Update\";\n}\n\n\nexport function firstHeading(content: string): string | undefined {\n for (const line of content.split(\"\\n\")) {\n // `\\S` makes the capture boundary disjoint from `\\s+`, so the regex\n // cannot backtrack across split points — `\\s+(.+)` was superlinear on\n // whitespace-heavy lines (CodeQL js/polynomial-redos). `.` still excludes\n // \\r\\u2028\\u2029, preserving the skip-line behavior on those lines.\n const match = /^#\\s+(\\S.*)$/.exec(line.trim());\n if (match) return match[1]!.trim();\n }\n return undefined;\n}\n\nfunction humanize(value: string): string {\n return value.replace(/[_-]/g, \" \").replace(/\\b\\w/g, (ch) => ch.toUpperCase());\n}\n\n\n\nfunction splitCsv(raw: unknown): string[] {\n if (raw === undefined || raw === null || raw === \"\") return [];\n const parts = Array.isArray(raw) ? raw.map(String) : String(raw).split(\",\");\n return parts.map((part) => part.trim()).filter((part) => part.length > 0);\n}\n\nfunction toRel(abs: string, root: string): string {\n return path.relative(path.resolve(root), path.resolve(abs)).split(path.sep).join(\"/\");\n}\n\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/transfer/export-okf.ts"],"sourcesContent":["import { mkdirSync, rmSync } from \"node:fs\";\nimport { mkdtemp } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { parseOaiMemCitation } from \"../citations.js\";\nimport { inferMemoryStatus } from \"../memory-lifecycle-ledger-utils.js\";\nimport { normalizeProjectionPreview } from \"../memory-projection-format.js\";\nimport { lintOkfDir } from \"../okf/lint.js\";\nimport { okfTypeForMemory, OKF_PROFILE_TYPE } from \"../okf/type-mapping.js\";\nimport { resolveNamespaceChildRoot } from \"../namespaces/path.js\";\nimport {\n OKF_EXPORT_VERSION,\n publishBundle,\n renderFrontmatter,\n rejectSymlinkPath,\n writeBundleFile,\n} from \"../okf/render.js\";\n// Re-exported for the existing `@remnic/core/export-okf` consumers and tests\n// (one public surface; the value itself now lives in okf/render.ts).\nexport { OKF_EXPORT_VERSION };\nimport { StorageManager } from \"../storage.js\";\nimport type { MemoryFile, MemoryLink, MemoryStatus } from \"../types.js\";\n\n// Shared bundle mechanics (frontmatter, publish, symlink guard, file write)\n// live in ../okf/render.ts — one source of truth for every OKF exporter.\nexport const OKF_LOG_TRUNCATION_MARKER = \"<!-- okf-log-truncated -->\";\nexport const DEFAULT_OKF_LOG_MAX_ENTRIES = 500;\n\nconst MEMORY_STATUSES: readonly MemoryStatus[] = [\n \"active\",\n \"pending_review\",\n \"rejected\",\n \"quarantined\",\n \"superseded\",\n \"archived\",\n \"forgotten\",\n];\n\nexport interface ExportOkfOptions {\n memoryDir: string;\n /**\n * Optional namespace segment. Resolved here, once, through the shared\n * containment guard: both CLI entry points used to join the raw operator\n * value onto `memoryDir/namespaces`, so `--namespace ../../..` escaped the\n * namespace root and exported an arbitrary tree (rule 9 — one resolver, not\n * a per-caller guard).\n */\n namespace?: string;\n outDir: string;\n includeStatus?: readonly string[];\n includeCategories?: readonly string[];\n excludeTags?: readonly string[];\n includeProfile?: boolean;\n includeWearables?: boolean;\n includeLog?: boolean;\n logMaxEntries?: number;\n force?: boolean;\n}\n\nexport interface ExportOkfResult {\n exported: number;\n excluded: number;\n byCategory: Record<string, number>;\n plaintextWarning: boolean;\n}\n\nexport function parseIncludeStatus(raw: unknown): MemoryStatus[] {\n const values = splitCsv(raw);\n if (values.length === 0) return [\"active\"];\n const allowed = new Set<string>(MEMORY_STATUSES);\n for (const value of values) {\n if (!allowed.has(value)) {\n throw new Error(`invalid --include-status ${value}; allowed: ${MEMORY_STATUSES.join(\", \")}`);\n }\n }\n return values as MemoryStatus[];\n}\n\nexport async function exportOkfBundle(opts: ExportOkfOptions): Promise<ExportOkfResult> {\n const outDir = path.resolve(opts.outDir);\n rejectSymlinkPath(outDir);\n const namespace = (opts.namespace ?? \"\").trim();\n const memoryDir = namespace\n ? resolveNamespaceChildRoot(opts.memoryDir, namespace, \"--namespace\")\n : opts.memoryDir;\n const includeStatus = new Set(parseIncludeStatus(opts.includeStatus));\n const includeCategories = opts.includeCategories?.length ? new Set(opts.includeCategories) : null;\n const excludeTags = new Set(opts.excludeTags ?? []);\n const storage = new StorageManager(memoryDir);\n const memories = await storage.readAllMemories();\n const included: MemoryFile[] = [];\n let excluded = 0;\n for (const memory of memories) {\n const rel = toRel(memory.path, memoryDir);\n if (!opts.includeWearables && rel.startsWith(\"wearables/\")) {\n excluded += 1;\n continue;\n }\n const status = inferMemoryStatus(memory.frontmatter, memory.path);\n if (!includeStatus.has(status)) {\n excluded += 1;\n continue;\n }\n if (includeCategories && !includeCategories.has(memory.frontmatter.category)) {\n excluded += 1;\n continue;\n }\n if ((memory.frontmatter.tags ?? []).some((tag) => excludeTags.has(tag))) {\n excluded += 1;\n continue;\n }\n included.push(memory);\n }\n included.sort((a, b) => toRel(a.path, memoryDir).localeCompare(toRel(b.path, memoryDir)));\n\n // Stage inside the destination's parent, not the OS temp dir: publishBundle\n // finishes with a rename, and a rename across filesystems fails with EXDEV\n // whenever --out lives on a different mount than /tmp.\n mkdirSync(path.dirname(outDir), { recursive: true });\n const staging = await mkdtemp(path.join(path.dirname(outDir), \".remnic-okf-export-\"));\n const byCategory: Record<string, number> = {};\n const idToRel = new Map<string, string>();\n for (const memory of included) {\n const rel = toRel(memory.path, memoryDir);\n idToRel.set(memory.frontmatter.id, rel);\n }\n for (const memory of included) {\n const rel = toRel(memory.path, memoryDir);\n const rendered = renderMemory(memory, rel, idToRel);\n writeBundleFile(staging, rel, rendered);\n const category = memory.frontmatter.category;\n byCategory[category] = (byCategory[category] ?? 0) + 1;\n }\n\n if (opts.includeProfile) {\n try {\n const profile = await storage.readProfile();\n if (profile) {\n writeBundleFile(\n staging,\n \"profile.md\",\n renderFrontmatter({\n type: OKF_PROFILE_TYPE,\n title: \"User Profile\",\n timestamp: new Date(0).toISOString(),\n }) + profile.replace(/^\\uFEFF/, \"\"),\n );\n }\n } catch {\n // Profile is optional even when requested.\n }\n }\n\n if (opts.includeLog) {\n const events = await storage.readAllMemoryLifecycleEvents();\n writeBundleFile(staging, \"log.md\", renderLog(events, idToRel, opts.logMaxEntries ?? DEFAULT_OKF_LOG_MAX_ENTRIES));\n }\n\n writeIndexes(staging, included, memoryDir);\n const lint = lintOkfDir(staging);\n const blocking = lint.findings.filter((f) => f.code !== \"skipped_encrypted\" && f.code !== \"reserved_basename\");\n if (blocking.length > 0) {\n rmSync(staging, { recursive: true, force: true });\n throw new Error(`OKF export failed lint: ${blocking.map((f) => `${f.file}: ${f.message}`).join(\"; \")}`);\n }\n\n publishBundle(staging, outDir, opts.force === true);\n return {\n exported: included.length,\n excluded,\n byCategory,\n plaintextWarning: true,\n };\n}\n\n\nfunction renderMemory(memory: MemoryFile, rel: string, idToRel: Map<string, string>): string {\n const fm = memory.frontmatter;\n const title = firstHeading(memory.content) ?? `${humanize(fm.category)} ${fm.created.slice(0, 10)}`;\n const type = fm.type ?? okfTypeForMemory(fm);\n const fields: Record<string, unknown> = {\n ...fm,\n type,\n title,\n description: normalizeProjectionPreview(memory.content),\n tags: fm.tags ?? [],\n timestamp: fm.updated,\n };\n if (fm.artifactType) fields.resource = rel;\n let body = memory.content.trim();\n const citation = parseOaiMemCitation(body);\n if (citation) {\n const start = body.indexOf(\"<oai-mem-citation>\");\n const end = body.indexOf(\"</oai-mem-citation>\");\n if (start >= 0 && end > start) {\n body = `${body.slice(0, start).trimEnd()}\\n\\n${body.slice(end + \"</oai-mem-citation>\".length).trimStart()}`.trim();\n }\n const lines = citation.entries.map((entry, index) => `${index + 1}. [${entry.path}](${entry.path})`);\n body = `${body}\\n\\n# Citations\\n\\n${lines.join(\"\\n\")}\\n`;\n }\n const links = fm.links ?? [];\n if (links.length > 0) {\n body += `\\n# Related\\n\\n${links.map((link) => renderRelated(link, idToRel)).join(\"\\n\")}\\n`;\n }\n return renderFrontmatter(fields) + body + (body.endsWith(\"\\n\") ? \"\" : \"\\n\");\n}\n\nfunction renderRelated(link: MemoryLink, idToRel: Map<string, string>): string {\n const target = idToRel.get(link.targetId) ?? link.targetId;\n const href = target.startsWith(\"/\") ? target : `/${target}`;\n return `- ${link.linkType}: [${link.targetId}](${href})`;\n}\n\nfunction writeIndexes(root: string, memories: MemoryFile[], memoryDir: string): void {\n const groups = new Map<string, MemoryFile[]>();\n for (const memory of memories) {\n const rel = toRel(memory.path, memoryDir);\n const dir = path.posix.dirname(rel);\n const key = dir === \".\" ? \"\" : dir.split(\"/\")[0] ?? \"\";\n const list = groups.get(key) ?? [];\n list.push(memory);\n groups.set(key, list);\n }\n const sections = [...groups.keys()].sort().map((key) => {\n const heading = key === \"\" ? \"Root\" : humanize(key);\n const lines = (groups.get(key) ?? [])\n .sort((a, b) => toRel(a.path, memoryDir).localeCompare(toRel(b.path, memoryDir)))\n .map((memory) => {\n const rel = toRel(memory.path, memoryDir);\n const title = firstHeading(memory.content) ?? memory.frontmatter.id;\n const description = normalizeProjectionPreview(memory.content);\n return `* [${title}](/${rel}) - ${description}`;\n });\n return `## ${heading}\\n\\n${lines.join(\"\\n\")}`;\n });\n writeBundleFile(root, \"index.md\", `---\\nokf_version: \"${OKF_EXPORT_VERSION}\"\\n---\\n\\n${sections.join(\"\\n\\n\")}\\n`);\n}\n\nfunction renderLog(\n events: Array<{ timestamp?: string; type?: string; action?: string; memoryId?: string }>,\n idToRel: Map<string, string>,\n maxEntries: number,\n): string {\n const sorted = [...events].sort((a, b) => String(b.timestamp ?? \"\").localeCompare(String(a.timestamp ?? \"\")));\n const truncated = sorted.length > maxEntries;\n const kept = sorted.slice(0, maxEntries);\n const byDay = new Map<string, typeof kept>();\n for (const event of kept) {\n const day = String(event.timestamp ?? \"\").slice(0, 10) || \"unknown\";\n const list = byDay.get(day) ?? [];\n list.push(event);\n byDay.set(day, list);\n }\n const days = [...byDay.keys()].sort((a, b) => b.localeCompare(a));\n const parts = [\"# Log\", \"\"];\n for (const day of days) {\n parts.push(`## ${day}`, \"\");\n for (const event of byDay.get(day) ?? []) {\n const action = boldAction(event.type ?? event.action ?? \"Update\");\n const id = event.memoryId;\n const rel = id ? idToRel.get(id) : undefined;\n const target = rel ? `[${id}](/${rel})` : id ?? \"\";\n parts.push(`- **${action}** ${target}`.trimEnd());\n }\n parts.push(\"\");\n }\n if (truncated) parts.push(OKF_LOG_TRUNCATION_MARKER, \"\");\n return `${parts.join(\"\\n\")}\\n`;\n}\n\nfunction boldAction(raw: string): string {\n const lower = raw.toLowerCase();\n if (lower.includes(\"create\") || lower.includes(\"add\")) return \"Creation\";\n if (lower.includes(\"deprecat\") || lower.includes(\"delete\") || lower.includes(\"archiv\")) return \"Deprecation\";\n return \"Update\";\n}\n\n\nexport function firstHeading(content: string): string | undefined {\n for (const line of content.split(\"\\n\")) {\n // `\\S` makes the capture boundary disjoint from `\\s+`, so the regex\n // cannot backtrack across split points — `\\s+(.+)` was superlinear on\n // whitespace-heavy lines (CodeQL js/polynomial-redos). `.` still excludes\n // \\r\\u2028\\u2029, preserving the skip-line behavior on those lines.\n const match = /^#\\s+(\\S.*)$/.exec(line.trim());\n if (match) return match[1]!.trim();\n }\n return undefined;\n}\n\nfunction humanize(value: string): string {\n return value.replace(/[_-]/g, \" \").replace(/\\b\\w/g, (ch) => ch.toUpperCase());\n}\n\n\n\nfunction splitCsv(raw: unknown): string[] {\n if (raw === undefined || raw === null || raw === \"\") return [];\n const parts = Array.isArray(raw) ? raw.map(String) : String(raw).split(\",\");\n return parts.map((part) => part.trim()).filter((part) => part.length > 0);\n}\n\nfunction toRel(abs: string, root: string): string {\n return path.relative(path.resolve(root), path.resolve(abs)).split(path.sep).join(\"/\");\n}\n\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// src/okf/type-mapping.ts
|
|
2
|
+
import path from "path";
|
|
3
|
+
var OKF_TYPE_BY_CATEGORY = Object.freeze({
|
|
4
|
+
fact: "Memory Fact",
|
|
5
|
+
decision: "Decision",
|
|
6
|
+
preference: "Preference",
|
|
7
|
+
commitment: "Commitment",
|
|
8
|
+
relationship: "Relationship",
|
|
9
|
+
principle: "Principle",
|
|
10
|
+
moment: "Moment",
|
|
11
|
+
skill: "Skill",
|
|
12
|
+
correction: "Correction",
|
|
13
|
+
rule: "Rule"
|
|
14
|
+
});
|
|
15
|
+
var OKF_TYPE_FALLBACK = "Memory";
|
|
16
|
+
function okfTypeForCategory(category) {
|
|
17
|
+
return OKF_TYPE_BY_CATEGORY[category] ?? OKF_TYPE_FALLBACK;
|
|
18
|
+
}
|
|
19
|
+
function okfTypeForMemory(fm) {
|
|
20
|
+
return fm.artifactType ? "Artifact" : okfTypeForCategory(fm.category);
|
|
21
|
+
}
|
|
22
|
+
var OKF_TYPE_BY_ENTITY_KIND = Object.freeze({
|
|
23
|
+
person: "Person",
|
|
24
|
+
company: "Company",
|
|
25
|
+
organization: "Organization",
|
|
26
|
+
project: "Project",
|
|
27
|
+
topic: "Topic",
|
|
28
|
+
technology: "Technology",
|
|
29
|
+
place: "Place",
|
|
30
|
+
event: "Event"
|
|
31
|
+
});
|
|
32
|
+
function okfTypeForEntityKind(kind) {
|
|
33
|
+
const normalized = kind?.trim().toLowerCase();
|
|
34
|
+
return normalized !== void 0 && OKF_TYPE_BY_ENTITY_KIND[normalized] || "Entity";
|
|
35
|
+
}
|
|
36
|
+
var OKF_PROFILE_TYPE = "Profile";
|
|
37
|
+
var OKF_QUESTION_TYPE = "Question";
|
|
38
|
+
var OKF_DECISION_RECORD_TYPE = "Decision Record";
|
|
39
|
+
var OKF_ARCHITECTURE_CARD_TYPE = "Architecture Card";
|
|
40
|
+
var OKF_CODE_MODULE_TYPE = "Code Module";
|
|
41
|
+
var OKF_RESERVED_BASENAMES = Object.freeze({
|
|
42
|
+
"index.md": true,
|
|
43
|
+
"log.md": true
|
|
44
|
+
});
|
|
45
|
+
function assertNotOkfReservedBasename(filePath) {
|
|
46
|
+
const basename = path.basename(filePath);
|
|
47
|
+
if (OKF_RESERVED_BASENAMES[basename] === true) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
`OKF reserved basename '${basename}' is not a valid memory file target (${filePath}); OKF \xA76/\xA77 reserves it for bundle-level files.`
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export {
|
|
55
|
+
okfTypeForCategory,
|
|
56
|
+
okfTypeForMemory,
|
|
57
|
+
okfTypeForEntityKind,
|
|
58
|
+
OKF_PROFILE_TYPE,
|
|
59
|
+
OKF_QUESTION_TYPE,
|
|
60
|
+
OKF_DECISION_RECORD_TYPE,
|
|
61
|
+
OKF_ARCHITECTURE_CARD_TYPE,
|
|
62
|
+
OKF_CODE_MODULE_TYPE,
|
|
63
|
+
OKF_RESERVED_BASENAMES,
|
|
64
|
+
assertNotOkfReservedBasename
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=chunk-PCEYGOSL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/okf/type-mapping.ts"],"sourcesContent":["/**\n * OKF v0.1 `type` mapping (issue #1946) — the single source of truth for\n * the inert `type` metadata emitted alongside Remnic's canonical fields.\n *\n * `category` remains the canonical internal field; `type` is\n * presentation/interop metadata for OKF consumers and NEVER overrides\n * `category` on parse (the parser reads `type` into its own field only).\n */\nimport path from \"node:path\";\n\n/** OKF `type` values derived from Remnic memory categories. */\nexport const OKF_TYPE_BY_CATEGORY: Readonly<Record<string, string>> = Object.freeze({\n fact: \"Memory Fact\",\n decision: \"Decision\",\n preference: \"Preference\",\n commitment: \"Commitment\",\n relationship: \"Relationship\",\n principle: \"Principle\",\n moment: \"Moment\",\n skill: \"Skill\",\n correction: \"Correction\",\n rule: \"Rule\",\n});\n\n/** Fallback for categories not listed above (unknown/future categories). */\nexport const OKF_TYPE_FALLBACK = \"Memory\";\n\n/** Stable domain seam over the category table (single mapping source, AGENTS.md pattern 9). */\nexport function okfTypeForCategory(category: string): string {\n return OKF_TYPE_BY_CATEGORY[category] ?? OKF_TYPE_FALLBACK;\n}\n\n/** Artifact memories report `Artifact` regardless of their storage category. */\nexport function okfTypeForMemory(fm: { category: string; artifactType?: string }): string {\n return fm.artifactType ? \"Artifact\" : okfTypeForCategory(fm.category);\n}\n\n/** OKF types for entity files, derived from the entity kind. */\nexport const OKF_TYPE_BY_ENTITY_KIND: Readonly<Record<string, string>> = Object.freeze({\n person: \"Person\",\n company: \"Company\",\n organization: \"Organization\",\n project: \"Project\",\n topic: \"Topic\",\n technology: \"Technology\",\n place: \"Place\",\n event: \"Event\",\n});\n\n/** Stable domain seam over the entity-kind table (single mapping source). */\nexport function okfTypeForEntityKind(kind: string | undefined): string {\n const normalized = kind?.trim().toLowerCase();\n return (normalized !== undefined && OKF_TYPE_BY_ENTITY_KIND[normalized]) || \"Entity\";\n}\n\n/** Fixed OKF types for non-memory bundle files. */\nexport const OKF_PROFILE_TYPE = \"Profile\";\nexport const OKF_QUESTION_TYPE = \"Question\";\nexport const OKF_DECISION_RECORD_TYPE = \"Decision Record\";\nexport const OKF_ARCHITECTURE_CARD_TYPE = \"Architecture Card\";\nexport const OKF_CODE_MODULE_TYPE = \"Code Module\";\n\n/**\n * OKF §6/§7 reserve `index.md` and `log.md` for bundle-level files with a\n * different contract. Remnic never writes them (separate issue), and writes\n * targeting those basenames are rejected outright so a stray ID can never\n * shadow a reserved bundle file.\n */\nexport const OKF_RESERVED_BASENAMES: Readonly<Record<string, true>> = Object.freeze({\n \"index.md\": true,\n \"log.md\": true,\n});\n\nexport function assertNotOkfReservedBasename(filePath: string): void {\n const basename = path.basename(filePath);\n if (OKF_RESERVED_BASENAMES[basename] === true) {\n throw new Error(\n `OKF reserved basename '${basename}' is not a valid memory file target (${filePath}); OKF §6/§7 reserves it for bundle-level files.`,\n );\n }\n}\n"],"mappings":";AAQA,OAAO,UAAU;AAGV,IAAM,uBAAyD,OAAO,OAAO;AAAA,EAClF,MAAM;AAAA,EACN,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,MAAM;AACR,CAAC;AAGM,IAAM,oBAAoB;AAG1B,SAAS,mBAAmB,UAA0B;AAC3D,SAAO,qBAAqB,QAAQ,KAAK;AAC3C;AAGO,SAAS,iBAAiB,IAAyD;AACxF,SAAO,GAAG,eAAe,aAAa,mBAAmB,GAAG,QAAQ;AACtE;AAGO,IAAM,0BAA4D,OAAO,OAAO;AAAA,EACrF,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AAAA,EACT,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,OAAO;AACT,CAAC;AAGM,SAAS,qBAAqB,MAAkC;AACrE,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,SAAQ,eAAe,UAAa,wBAAwB,UAAU,KAAM;AAC9E;AAGO,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,2BAA2B;AACjC,IAAM,6BAA6B;AACnC,IAAM,uBAAuB;AAQ7B,IAAM,yBAAyD,OAAO,OAAO;AAAA,EAClF,YAAY;AAAA,EACZ,UAAU;AACZ,CAAC;AAEM,SAAS,6BAA6B,UAAwB;AACnE,QAAM,WAAW,KAAK,SAAS,QAAQ;AACvC,MAAI,uBAAuB,QAAQ,MAAM,MAAM;AAC7C,UAAM,IAAI;AAAA,MACR,0BAA0B,QAAQ,wCAAwC,QAAQ;AAAA,IACpF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-5JMAGU26.js";
|
|
6
6
|
import {
|
|
7
7
|
runPostConsolidationMaterialize
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JZDH2ZZK.js";
|
|
9
9
|
import {
|
|
10
10
|
isSemanticConsolidationLlmOperator
|
|
11
11
|
} from "./chunk-G7D6GZ5J.js";
|
|
@@ -220,4 +220,4 @@ export {
|
|
|
220
220
|
buildExtensionsBlockForConsolidation,
|
|
221
221
|
materializeAfterSemanticConsolidation
|
|
222
222
|
};
|
|
223
|
-
//# sourceMappingURL=chunk-
|
|
223
|
+
//# sourceMappingURL=chunk-PEXW2JCK.js.map
|
|
@@ -114,6 +114,39 @@ function isSupportPassportPrivateMemory(memory) {
|
|
|
114
114
|
function excludeSupportPassportPrivateMemories(memories) {
|
|
115
115
|
return memories.filter((memory) => !isSupportPassportPrivateMemory(memory));
|
|
116
116
|
}
|
|
117
|
+
function supportPassportStatIdentity(file) {
|
|
118
|
+
return `${file.dev}:${file.ino}:${file.size}:${file.mtimeMs}:${file.ctimeMs}`;
|
|
119
|
+
}
|
|
120
|
+
function createPersistedSupportPassportPrivateFileExclusion(storage, persisted, updates) {
|
|
121
|
+
const inFlight = /* @__PURE__ */ new Map();
|
|
122
|
+
return async ({ filePath, path: relPath }) => {
|
|
123
|
+
let file;
|
|
124
|
+
try {
|
|
125
|
+
file = await lstat(filePath);
|
|
126
|
+
} catch (error) {
|
|
127
|
+
if (error.code === "ENOENT") {
|
|
128
|
+
inFlight.delete(filePath);
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
throw error;
|
|
132
|
+
}
|
|
133
|
+
const identity = supportPassportStatIdentity(file);
|
|
134
|
+
const known = persisted.get(relPath);
|
|
135
|
+
if (known?.statIdentity === identity && known.excluded !== void 0) {
|
|
136
|
+
updates.set(relPath, { statIdentity: identity, excluded: known.excluded });
|
|
137
|
+
return known.excluded;
|
|
138
|
+
}
|
|
139
|
+
const cached = inFlight.get(filePath);
|
|
140
|
+
if (cached?.identity === identity) return await cached.excluded;
|
|
141
|
+
const excluded = storage.readMemoryByPath(filePath).then((memory) => memory ? isSupportPassportPrivateMemory(memory) : false).finally(() => {
|
|
142
|
+
if (inFlight.get(filePath)?.identity === identity) inFlight.delete(filePath);
|
|
143
|
+
});
|
|
144
|
+
inFlight.set(filePath, { identity, excluded });
|
|
145
|
+
const result = await excluded;
|
|
146
|
+
updates.set(relPath, { statIdentity: identity, excluded: result });
|
|
147
|
+
return result;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
117
150
|
function createSupportPassportPrivateFileExclusion(storage) {
|
|
118
151
|
const classifications = /* @__PURE__ */ new Map();
|
|
119
152
|
return async ({ filePath }) => {
|
|
@@ -233,11 +266,8 @@ function parseSupportPassportCardMetadata(memory) {
|
|
|
233
266
|
const attributes = frontmatter.structuredAttributes;
|
|
234
267
|
if (frontmatter.category !== "preference") return null;
|
|
235
268
|
if (!frontmatter.tags?.includes(SUPPORT_PASSPORT_CARD_TAG)) return null;
|
|
236
|
-
if (!attributes || frontmatter.blockedBy || frontmatter.archivedAt || frontmatter.supersededBy)
|
|
237
|
-
|
|
238
|
-
const category = SupportPassportCardCategorySchema.safeParse(
|
|
239
|
-
attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category]
|
|
240
|
-
);
|
|
269
|
+
if (!attributes || frontmatter.blockedBy || frontmatter.archivedAt || frontmatter.supersededBy) return null;
|
|
270
|
+
const category = SupportPassportCardCategorySchema.safeParse(attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category]);
|
|
241
271
|
const status = SupportPassportCardStatusSchema.safeParse(frontmatter.status);
|
|
242
272
|
const rawOrder = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.order];
|
|
243
273
|
const order = Number(rawOrder);
|
|
@@ -359,6 +389,8 @@ export {
|
|
|
359
389
|
SUPPORT_PASSPORT_AUDIT_TAG,
|
|
360
390
|
isSupportPassportPrivateMemory,
|
|
361
391
|
excludeSupportPassportPrivateMemories,
|
|
392
|
+
supportPassportStatIdentity,
|
|
393
|
+
createPersistedSupportPassportPrivateFileExclusion,
|
|
362
394
|
createSupportPassportPrivateFileExclusion,
|
|
363
395
|
SUPPORT_PASSPORT_ATTRIBUTE_KEYS,
|
|
364
396
|
encodeSupportPassportNamespaceAttributes,
|
|
@@ -368,4 +400,4 @@ export {
|
|
|
368
400
|
hasLiveSupportPassportCard,
|
|
369
401
|
projectSupportPassportCard
|
|
370
402
|
};
|
|
371
|
-
//# sourceMappingURL=chunk-
|
|
403
|
+
//# sourceMappingURL=chunk-PWPIERBM.js.map
|