@remnic/core 9.63.1 → 9.63.3
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 +1 -1
- package/dist/access-admin-ops-surface.js +33 -32
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +1 -1
- package/dist/access-authorization-probe.js +34 -33
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.js +33 -32
- package/dist/access-cli.js +97 -95
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.d.ts +1 -1
- package/dist/access-extraction-force-flush.js +33 -32
- package/dist/access-http-lcm-compaction.d.ts +1 -1
- package/dist/access-http-lifecycle-flush.d.ts +1 -1
- package/dist/access-http-offline-stream.d.ts +1 -1
- package/dist/access-http-query.js +33 -32
- package/dist/access-http.d.ts +2 -2
- package/dist/access-http.js +46 -45
- package/dist/access-identity-continuity-surface.js +33 -32
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +33 -32
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +39 -38
- package/dist/access-namespace-preflight.js +33 -32
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +33 -32
- package/dist/access-operations-batch.js +34 -33
- package/dist/access-operations.d.ts +4 -4
- package/dist/access-operations.js +38 -37
- package/dist/access-recall-concurrency.d.ts +1 -1
- package/dist/access-recall-concurrency.js +33 -32
- package/dist/access-recall-response.d.ts +1 -1
- package/dist/access-recall-response.js +33 -32
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +33 -32
- package/dist/access-schema.d.ts +88 -88
- package/dist/access-schema.js +3 -3
- package/dist/access-service-helpers.d.ts +1 -1
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +33 -32
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/access-surface-catalog.js +35 -34
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/{auto-sync-Z52VWMNC.js → auto-sync-BKRJDMKX.js} +3 -3
- package/dist/behavior-learner.js +2 -2
- package/dist/briefing.js +14 -14
- package/dist/buffer.js +4 -3
- package/dist/causal-behavior.js +3 -3
- package/dist/causal-chain.js +3 -3
- package/dist/causal-consolidation.js +17 -17
- package/dist/causal-retrieval.js +3 -3
- package/dist/causal-trajectory.js +2 -2
- package/dist/{chunk-5F6HMNMZ.js → chunk-2LA3H54D.js} +2 -2
- package/dist/{chunk-IRLH4NM2.js → chunk-2PSX5BJU.js} +3 -3
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/{chunk-F2FZEVDE.js → chunk-3LJ2L3T3.js} +2 -2
- package/dist/{chunk-RBBYKXXK.js → chunk-44KHFMCM.js} +64 -62
- package/dist/{chunk-RBBYKXXK.js.map → chunk-44KHFMCM.js.map} +1 -1
- package/dist/{chunk-AUIAHNO7.js → chunk-4NMVX5U7.js} +2 -2
- package/dist/{chunk-ANMIOQPU.js → chunk-4XN35YQD.js} +478 -164
- package/dist/chunk-4XN35YQD.js.map +1 -0
- package/dist/{chunk-LJOIZPJH.js → chunk-5QZR2RA3.js} +2 -2
- package/dist/{chunk-RBJKE5LV.js → chunk-5UFQCU6M.js} +32 -32
- package/dist/{chunk-S52C2DEM.js → chunk-5W5N7XJZ.js} +2 -2
- package/dist/{chunk-GL4RHVHX.js → chunk-5W62VEFH.js} +4 -4
- package/dist/{chunk-DEOYTFA6.js → chunk-645WOU5I.js} +4 -52
- package/dist/chunk-645WOU5I.js.map +1 -0
- package/dist/{chunk-4WW5FMUD.js → chunk-6D7PZKCJ.js} +9 -9
- package/dist/{chunk-NVSTZ2PN.js → chunk-6F2UMP4H.js} +7 -7
- package/dist/{chunk-IIPJKCZB.js → chunk-6NAPOLRO.js} +3 -3
- package/dist/{chunk-U4CCRHN6.js → chunk-6UZR7KEK.js} +2 -2
- package/dist/{chunk-2TYIAKU5.js → chunk-6YMEU6OQ.js} +2 -2
- package/dist/{chunk-LAX6S5WS.js → chunk-A73QHOZP.js} +2 -2
- package/dist/{chunk-ZSH6GJ2V.js → chunk-AJSZ2EK6.js} +3 -3
- package/dist/{chunk-GUBT77YC.js → chunk-B2OOJCUX.js} +2 -2
- package/dist/chunk-BUYVPUEM.js +66 -0
- package/dist/chunk-BUYVPUEM.js.map +1 -0
- package/dist/{chunk-YTHQHH5U.js → chunk-C6WMSXCJ.js} +2 -2
- package/dist/{chunk-JKW663ZN.js → chunk-CIAI24TQ.js} +2 -2
- package/dist/{chunk-PD6O7AXF.js → chunk-CSAKJVXW.js} +14 -17
- package/dist/chunk-CSAKJVXW.js.map +1 -0
- package/dist/{chunk-ALKRPLWB.js → chunk-DNRTKO2U.js} +2 -2
- package/dist/{chunk-J5AFG5JN.js → chunk-EJLTNPRY.js} +3 -3
- package/dist/{chunk-ORB56L3Y.js → chunk-EJQXDKYK.js} +4 -4
- package/dist/{chunk-UM7A4CPT.js → chunk-FKJVEW6O.js} +2 -2
- package/dist/{chunk-ZXMNT75M.js → chunk-GFNS3BHV.js} +3 -3
- package/dist/{chunk-ALNZEWGN.js → chunk-GPFZFCRN.js} +2 -2
- package/dist/{chunk-MQFFR6QB.js → chunk-GTRGH4ZT.js} +2 -2
- package/dist/{chunk-USKANB65.js → chunk-I6OQCT3Y.js} +2 -2
- package/dist/{chunk-2AZBPQLK.js → chunk-IKXUG6KC.js} +7 -7
- package/dist/{chunk-5LVSFKQB.js → chunk-IM56VPKO.js} +3 -3
- package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
- package/dist/{chunk-R7R4FSV2.js → chunk-ITYAXU4S.js} +3 -3
- package/dist/{chunk-7CJO52ET.js → chunk-JJ7JW62R.js} +23 -23
- package/dist/{chunk-5S7Y7AC6.js → chunk-JJX5XEIG.js} +2 -2
- package/dist/{chunk-OF6KQJ35.js → chunk-JWPG65LH.js} +14 -14
- package/dist/chunk-K2XUWZBM.js +417 -0
- package/dist/chunk-K2XUWZBM.js.map +1 -0
- package/dist/{chunk-G2FCSILA.js → chunk-KWIGDKM2.js} +2 -2
- package/dist/{chunk-UKBIB3FP.js → chunk-KWN6NOHQ.js} +2 -2
- package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
- package/dist/{chunk-SHSJP4D6.js → chunk-LZCSOUJ7.js} +2 -2
- package/dist/{chunk-256FBCVX.js → chunk-M4AHBM72.js} +7 -7
- package/dist/{chunk-5PFGMO33.js → chunk-MEW53VQJ.js} +2 -2
- package/dist/{chunk-DCUMFQYM.js → chunk-ML3U4KPR.js} +2 -2
- package/dist/{chunk-UDL4DNBM.js → chunk-MR5HWQHS.js} +2 -2
- package/dist/{chunk-H7PRHUBD.js → chunk-NRLELHAY.js} +2 -2
- package/dist/{chunk-ZS4JADYY.js → chunk-OW7NVMGQ.js} +2 -2
- package/dist/{chunk-U5LYM2NS.js → chunk-PADG72LJ.js} +3 -3
- package/dist/{chunk-6GGTATZF.js → chunk-PYIR4SSB.js} +4 -4
- package/dist/chunk-PYIR4SSB.js.map +1 -0
- package/dist/{chunk-UW74LP76.js → chunk-Q35XGIEM.js} +2 -2
- package/dist/{chunk-XPRJSHNI.js → chunk-QJ622LTI.js} +6 -3
- package/dist/chunk-QJ622LTI.js.map +1 -0
- package/dist/{chunk-FNYIMSKI.js → chunk-QSIQVC32.js} +2 -2
- package/dist/{chunk-EJYAE2U7.js → chunk-R74NCKEY.js} +4 -4
- package/dist/{chunk-KP36WQBJ.js → chunk-RYGJGXL6.js} +2 -2
- package/dist/{chunk-4OW2T32G.js → chunk-SQ3EGGII.js} +2 -2
- package/dist/{chunk-FU7OICXE.js → chunk-TRPX6F2G.js} +10 -10
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-6VX2ZZH2.js → chunk-VAMQU4W7.js} +2 -2
- package/dist/{chunk-WLITCQAC.js → chunk-VN7IIQGS.js} +2 -2
- package/dist/{chunk-MMM7SDOJ.js → chunk-WDUG2CH3.js} +2 -2
- package/dist/{chunk-P2BT5ALE.js → chunk-X4MGNVOO.js} +2 -2
- package/dist/{chunk-BE5SVRFC.js → chunk-XFCQIQQU.js} +3 -3
- package/dist/{chunk-S4MF77NV.js → chunk-XZPSBGHA.js} +2 -2
- package/dist/{chunk-PMRUMGK6.js → chunk-Y7COCXY2.js} +2 -2
- package/dist/{chunk-DJ7HMNSL.js → chunk-YCVB7X56.js} +4 -2
- package/dist/chunk-YCVB7X56.js.map +1 -0
- package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
- package/dist/{chunk-A5BYPCDI.js → chunk-Z334TJRB.js} +2 -2
- package/dist/{cli-DJwNNDL1.d.ts → cli-Bw9z-KqX.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +67 -66
- package/dist/coding/pre-action-gate.js +3 -3
- package/dist/compounding/engine.js +14 -14
- package/dist/connectors/codex-materialize-runner.js +14 -14
- package/dist/connectors/index.d.ts +45 -1
- package/dist/connectors/index.js +23 -15
- package/dist/convergence-refresh.js +16 -16
- package/dist/conversation-index/backend.js +2 -2
- package/dist/corpus-watermark.js +16 -16
- package/dist/dashboard-runtime.js +2 -2
- package/dist/direct-answer-wiring.js +3 -3
- package/dist/direct-answer.js +2 -2
- package/dist/entity-retrieval.js +14 -14
- package/dist/event-order-query.d.ts +3 -0
- package/dist/event-order-query.js +9 -0
- package/dist/event-order-query.js.map +1 -0
- package/dist/event-order-recall.d.ts +2 -2
- package/dist/event-order-recall.js +5 -2
- package/dist/external-wiki-access.d.ts +1 -1
- package/dist/external-wiki-access.js +34 -33
- package/dist/external-wiki-mcp-tools.d.ts +1 -1
- package/dist/extraction-normalization.js +2 -2
- package/dist/extraction.js +23 -22
- package/dist/harmonic-construction.js +2 -2
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/index.d.ts +682 -681
- package/dist/index.js +106 -103
- package/dist/intent.js +2 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.js +6 -6
- package/dist/maintenance/memory-governance.js +14 -14
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
- package/dist/maintenance/rebuild-memory-projection.js +15 -15
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/namespaces/migrate.js +15 -15
- package/dist/namespaces/search.js +9 -9
- package/dist/namespaces/storage.js +14 -14
- package/dist/operator-doctor-corpus.js +17 -17
- package/dist/operator-toolkit.js +21 -21
- package/dist/orchestration/maintenance.js +19 -19
- package/dist/orchestrator.js +99 -97
- package/dist/policy-runtime.js +3 -3
- package/dist/{public-http-43z1YT-k.d.ts → public-http-DK-QwaBu.d.ts} +1 -1
- package/dist/recall-planner-i18n.d.ts +31 -0
- package/dist/recall-planner-i18n.js +30 -0
- package/dist/recall-planner-i18n.js.map +1 -0
- package/dist/recall-planner-llm.js +2 -1
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-query-policy.js +2 -2
- package/dist/recall-tokenization.js +1 -1
- package/dist/resume-bundles.js +3 -3
- package/dist/retrieval-agents.js +2 -1
- package/dist/schemas.d.ts +108 -108
- package/dist/search/factory.js +8 -8
- package/dist/search/index.js +14 -14
- package/dist/search/orama-backend.js +2 -2
- package/dist/semantic-consolidation.js +15 -15
- package/dist/semantic-rule-promotion.js +14 -14
- package/dist/semantic-rule-verifier.js +14 -14
- package/dist/shared-context/manager.d.ts +8 -8
- package/dist/source-agent-qualifier.js +20 -19
- package/dist/storage.js +13 -13
- package/dist/support-passport/index.d.ts +4 -4
- package/dist/support-passport/index.js +36 -35
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-zones.js +2 -2
- package/dist/verified-recall.js +14 -14
- package/dist/work-product-ledger.js +2 -2
- package/package.json +2 -2
- package/src/connectors/droid-mcp.ts +434 -0
- package/src/connectors/index.ts +70 -0
- package/src/direct-answer.ts +6 -3
- package/src/event-order-query.ts +78 -0
- package/src/event-order-recall.ts +4 -90
- package/src/intent.ts +19 -19
- package/src/recall-planner-i18n.ts +193 -0
- package/src/recall-tokenization.ts +3 -1
- package/src/retrieval-agents.ts +6 -10
- package/dist/chunk-6GGTATZF.js.map +0 -1
- package/dist/chunk-ANMIOQPU.js.map +0 -1
- package/dist/chunk-DEOYTFA6.js.map +0 -1
- package/dist/chunk-DJ7HMNSL.js.map +0 -1
- package/dist/chunk-PD6O7AXF.js.map +0 -1
- package/dist/chunk-XPRJSHNI.js.map +0 -1
- package/dist/{access-service-DBpEnlzA.d.ts → access-service-M4LgO141.d.ts} +64 -64
- /package/dist/{auto-sync-Z52VWMNC.js.map → auto-sync-BKRJDMKX.js.map} +0 -0
- /package/dist/{chunk-5F6HMNMZ.js.map → chunk-2LA3H54D.js.map} +0 -0
- /package/dist/{chunk-IRLH4NM2.js.map → chunk-2PSX5BJU.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-F2FZEVDE.js.map → chunk-3LJ2L3T3.js.map} +0 -0
- /package/dist/{chunk-AUIAHNO7.js.map → chunk-4NMVX5U7.js.map} +0 -0
- /package/dist/{chunk-LJOIZPJH.js.map → chunk-5QZR2RA3.js.map} +0 -0
- /package/dist/{chunk-RBJKE5LV.js.map → chunk-5UFQCU6M.js.map} +0 -0
- /package/dist/{chunk-S52C2DEM.js.map → chunk-5W5N7XJZ.js.map} +0 -0
- /package/dist/{chunk-GL4RHVHX.js.map → chunk-5W62VEFH.js.map} +0 -0
- /package/dist/{chunk-4WW5FMUD.js.map → chunk-6D7PZKCJ.js.map} +0 -0
- /package/dist/{chunk-NVSTZ2PN.js.map → chunk-6F2UMP4H.js.map} +0 -0
- /package/dist/{chunk-IIPJKCZB.js.map → chunk-6NAPOLRO.js.map} +0 -0
- /package/dist/{chunk-U4CCRHN6.js.map → chunk-6UZR7KEK.js.map} +0 -0
- /package/dist/{chunk-2TYIAKU5.js.map → chunk-6YMEU6OQ.js.map} +0 -0
- /package/dist/{chunk-LAX6S5WS.js.map → chunk-A73QHOZP.js.map} +0 -0
- /package/dist/{chunk-ZSH6GJ2V.js.map → chunk-AJSZ2EK6.js.map} +0 -0
- /package/dist/{chunk-GUBT77YC.js.map → chunk-B2OOJCUX.js.map} +0 -0
- /package/dist/{chunk-YTHQHH5U.js.map → chunk-C6WMSXCJ.js.map} +0 -0
- /package/dist/{chunk-JKW663ZN.js.map → chunk-CIAI24TQ.js.map} +0 -0
- /package/dist/{chunk-ALKRPLWB.js.map → chunk-DNRTKO2U.js.map} +0 -0
- /package/dist/{chunk-J5AFG5JN.js.map → chunk-EJLTNPRY.js.map} +0 -0
- /package/dist/{chunk-ORB56L3Y.js.map → chunk-EJQXDKYK.js.map} +0 -0
- /package/dist/{chunk-UM7A4CPT.js.map → chunk-FKJVEW6O.js.map} +0 -0
- /package/dist/{chunk-ZXMNT75M.js.map → chunk-GFNS3BHV.js.map} +0 -0
- /package/dist/{chunk-ALNZEWGN.js.map → chunk-GPFZFCRN.js.map} +0 -0
- /package/dist/{chunk-MQFFR6QB.js.map → chunk-GTRGH4ZT.js.map} +0 -0
- /package/dist/{chunk-USKANB65.js.map → chunk-I6OQCT3Y.js.map} +0 -0
- /package/dist/{chunk-2AZBPQLK.js.map → chunk-IKXUG6KC.js.map} +0 -0
- /package/dist/{chunk-5LVSFKQB.js.map → chunk-IM56VPKO.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
- /package/dist/{chunk-R7R4FSV2.js.map → chunk-ITYAXU4S.js.map} +0 -0
- /package/dist/{chunk-7CJO52ET.js.map → chunk-JJ7JW62R.js.map} +0 -0
- /package/dist/{chunk-5S7Y7AC6.js.map → chunk-JJX5XEIG.js.map} +0 -0
- /package/dist/{chunk-OF6KQJ35.js.map → chunk-JWPG65LH.js.map} +0 -0
- /package/dist/{chunk-G2FCSILA.js.map → chunk-KWIGDKM2.js.map} +0 -0
- /package/dist/{chunk-UKBIB3FP.js.map → chunk-KWN6NOHQ.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-SHSJP4D6.js.map → chunk-LZCSOUJ7.js.map} +0 -0
- /package/dist/{chunk-256FBCVX.js.map → chunk-M4AHBM72.js.map} +0 -0
- /package/dist/{chunk-5PFGMO33.js.map → chunk-MEW53VQJ.js.map} +0 -0
- /package/dist/{chunk-DCUMFQYM.js.map → chunk-ML3U4KPR.js.map} +0 -0
- /package/dist/{chunk-UDL4DNBM.js.map → chunk-MR5HWQHS.js.map} +0 -0
- /package/dist/{chunk-H7PRHUBD.js.map → chunk-NRLELHAY.js.map} +0 -0
- /package/dist/{chunk-ZS4JADYY.js.map → chunk-OW7NVMGQ.js.map} +0 -0
- /package/dist/{chunk-U5LYM2NS.js.map → chunk-PADG72LJ.js.map} +0 -0
- /package/dist/{chunk-UW74LP76.js.map → chunk-Q35XGIEM.js.map} +0 -0
- /package/dist/{chunk-FNYIMSKI.js.map → chunk-QSIQVC32.js.map} +0 -0
- /package/dist/{chunk-EJYAE2U7.js.map → chunk-R74NCKEY.js.map} +0 -0
- /package/dist/{chunk-KP36WQBJ.js.map → chunk-RYGJGXL6.js.map} +0 -0
- /package/dist/{chunk-4OW2T32G.js.map → chunk-SQ3EGGII.js.map} +0 -0
- /package/dist/{chunk-FU7OICXE.js.map → chunk-TRPX6F2G.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-6VX2ZZH2.js.map → chunk-VAMQU4W7.js.map} +0 -0
- /package/dist/{chunk-WLITCQAC.js.map → chunk-VN7IIQGS.js.map} +0 -0
- /package/dist/{chunk-MMM7SDOJ.js.map → chunk-WDUG2CH3.js.map} +0 -0
- /package/dist/{chunk-P2BT5ALE.js.map → chunk-X4MGNVOO.js.map} +0 -0
- /package/dist/{chunk-BE5SVRFC.js.map → chunk-XFCQIQQU.js.map} +0 -0
- /package/dist/{chunk-S4MF77NV.js.map → chunk-XZPSBGHA.js.map} +0 -0
- /package/dist/{chunk-PMRUMGK6.js.map → chunk-Y7COCXY2.js.map} +0 -0
- /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
- /package/dist/{chunk-A5BYPCDI.js.map → chunk-Z334TJRB.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/recall-tokenization.ts"],"sourcesContent":["export interface NormalizeRecallTokenOptions {\n minTokenLength?: number;\n}\n\nconst DEFAULT_RECALL_STOP_WORDS = [\"the\", \"and\", \"for\", \"with\", \"from\", \"into\", \"that\", \"this\", \"why\", \"did\"];\n\nexport function isUnsegmentableRecallChar(char: string): boolean {\n if (char === \"ー\" || char === \"ー\") return true;\n return /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}]/u.test(char);\n}\n\nfunction isRecallCombiningMark(char: string): boolean {\n return /\\p{M}/u.test(char);\n}\n\nfunction buildRecallStopWords(extraStopWords: string[]): Set<string> {\n return new Set([...DEFAULT_RECALL_STOP_WORDS, ...extraStopWords.map((word) => word.toLowerCase())]);\n}\n\nfunction shouldKeepRecallToken(token: string, minTokenLength: number, stopWords: Set<string>): boolean {\n if (stopWords.has(token)) return false;\n if (token.length >= minTokenLength) return true;\n const hasNonAsciiCodepoint = [...token].some((ch) => (ch.codePointAt(0) ?? 0) > 0x7f);\n return token.length >= 2 && hasNonAsciiCodepoint && /\\p{L}/u.test(token);\n}\n\nexport function expandUnsegmentableRecallNGrams(segment: string): string[] {\n const chars = [...segment].filter((ch) => /[\\p{L}\\p{N}\\p{M}]/u.test(ch) || isUnsegmentableRecallChar(ch));\n const tokens: string[] = [];\n for (const ch of chars) {\n tokens.push(ch);\n }\n for (const size of [2, 3, 4]) {\n if (chars.length < size) continue;\n for (let index = 0; index <= chars.length - size; index += 1) {\n tokens.push(chars.slice(index, index + size).join(\"\"));\n }\n }\n if (chars.length > 3) {\n tokens.push(chars.join(\"\"));\n }\n return tokens;\n}\n\nfunction addUnsegmentableRecallSegment(tokens: Set<string>, segment: string, stopWords: Set<string>): void {\n for (const token of expandUnsegmentableRecallNGrams(segment)) {\n if (!stopWords.has(token)) tokens.add(token);\n }\n}\n\nfunction isUnsegmentableRecallToken(token: string): boolean {\n const chars = [...token].filter((ch) => /[\\p{L}\\p{N}\\p{M}]/u.test(ch) || isUnsegmentableRecallChar(ch));\n return (\n chars.length > 0 &&\n chars.some(isUnsegmentableRecallChar) &&\n chars.every((ch) => isUnsegmentableRecallChar(ch) || isRecallCombiningMark(ch))\n );\n}\n\nfunction addBridgedUnsegmentableRecallSegments(tokens: Set<string>, cleaned: string, stopWords: Set<string>): void {\n let segment = \"\";\n const flushSegment = () => {\n addUnsegmentableRecallSegment(tokens, segment, stopWords);\n segment = \"\";\n };\n\n for (const token of cleaned.split(/\\s+/)) {\n if (isUnsegmentableRecallToken(token)) {\n segment += token;\n } else {\n flushSegment();\n }\n }\n flushSegment();\n}\n\nexport function normalizeRecallTokenSet(\n value: string,\n extraStopWords: string[] = [],\n options: NormalizeRecallTokenOptions = {}\n): Set<string> {\n const minTokenLength = Math.max(1, Math.floor(options.minTokenLength ?? 3));\n const stopWords = buildRecallStopWords(extraStopWords);\n const cleaned = value\n .toLowerCase()\n .normalize(\"NFC\")\n .replace(/[^\\p{L}\\p{N}\\p{M}\\u30fc\\uff70]+/gu, \" \")\n .trim();\n if (cleaned.length === 0) return new Set();\n\n const tokens = new Set<string>();\n addBridgedUnsegmentableRecallSegments(tokens, cleaned, stopWords);\n for (const token of cleaned.split(/\\s+/)) {\n if (!token) continue;\n if ([...token].some(isUnsegmentableRecallChar)) {\n let segment = \"\";\n let unsegmentableSegment = \"\";\n const flushSegment = () => {\n if (shouldKeepRecallToken(segment, minTokenLength, stopWords)) {\n tokens.add(segment);\n }\n segment = \"\";\n };\n const flushUnsegmentableSegment = () => {\n addUnsegmentableRecallSegment(tokens, unsegmentableSegment, stopWords);\n unsegmentableSegment = \"\";\n };\n for (const ch of token) {\n if (!/[\\p{L}\\p{N}\\p{M}]/u.test(ch) && !isUnsegmentableRecallChar(ch)) continue;\n if (isUnsegmentableRecallChar(ch)) {\n flushSegment();\n unsegmentableSegment += ch;\n } else if (isRecallCombiningMark(ch)) {\n if (unsegmentableSegment.length > 0) {\n unsegmentableSegment += ch;\n } else {\n segment += ch;\n }\n } else {\n flushUnsegmentableSegment();\n segment += ch;\n }\n }\n flushUnsegmentableSegment();\n flushSegment();\n continue;\n }\n if (shouldKeepRecallToken(token, minTokenLength, stopWords)) {\n tokens.add(token);\n }\n }\n return tokens;\n}\n\nexport function normalizeRecallTokens(value: string, extraStopWords: string[] = []): string[] {\n return Array.from(normalizeRecallTokenSet(value, extraStopWords));\n}\n\nexport function countRecallTokenOverlap(\n queryTokens: Set<string>,\n value: string | undefined,\n extraStopWords: string[] = []\n): number {\n if (!value) return 0;\n const tokens = normalizeRecallTokenSet(value, extraStopWords);\n let matches = 0;\n for (const token of queryTokens) {\n if (tokens.has(token)) matches += 1;\n }\n return matches;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/intent.ts"],"sourcesContent":["import type { MemoryIntent, RecallPlanMode } from \"./types.js\";\n\nconst GOAL_PATTERNS: Array<{ re: RegExp; goal: string }> = [\n { re: /\\b(debug(?:s|ged|ging)?|fix(?:es|ed|ing)?|error(?:s)?|incident(?:s)?|outage(?:s)?|failure(?:s)?)\\b/i, goal: \"stabilize\" },\n { re: /\\b(deploy(?:s|ed|ing)?|release(?:s|d|ing)?|ship(?:s|ped|ping)?|publish(?:es|ed|ing)?)\\b/i, goal: \"release\" },\n { re: /\\b(plan(?:s|ned|ning)?|roadmap(?:s)?|strateg(?:y|ies)|design(?:s|ed|ing)?)\\b/i, goal: \"plan\" },\n { re: /\\b(review(?:s|ed|ing)?|audit(?:s|ed|ing)?|security|hardening)\\b/i, goal: \"review\" },\n { re: /\\b(sales|deal|customer|client|prospect)\\b/i, goal: \"close_deal\" },\n];\n\nconst ACTION_PATTERNS: Array<{ re: RegExp; action: string }> = [\n { re: /\\b(review(?:s|ed|ing)?|audit(?:s|ed|ing)?|inspect(?:s|ed|ing)?|check(?:s|ed|ing)?)\\b/i, action: \"review\" },\n { re: /\\b(plan(?:s|ned|ning)?|design(?:s|ed|ing)?|brainstorm(?:s|ed|ing)?|spec(?:s)?)\\b/i, action: \"plan\" },\n { re: /\\b(implement(?:s|ed|ing)?|build(?:s|ing)?|built|code(?:s|d|ing)?|patch(?:es|ed|ing)?|fix(?:es|ed|ing)?)\\b/i, action: \"execute\" },\n { re: /\\b(summariz(?:e|es|ed|ing)|recap(?:s|ped|ping)?|what happened|timeline)\\b/i, action: \"summarize\" },\n { re: /\\b(decid(?:e|es|ed|ing)|decision(?:s)?|cho(?:ose|oses|osing)|chose|chosen)\\b/i, action: \"decide\" },\n];\n\nconst ENTITY_PATTERNS: Array<{ re: RegExp; entityType: string }> = [\n { re: /\\b(pr|pull request|branch|repo|github|ci|workflow)\\b/i, entityType: \"repo\" },\n { re: /\\b(discord|slack|channel|gateway|agent)\\b/i, entityType: \"ops\" },\n { re: /\\b(customer|client|deal|lead|account)\\b/i, entityType: \"client\" },\n { re: /\\b(model|llm|qmd|embedding|retrieval|memory)\\b/i, entityType: \"ai\" },\n { re: /\\b(doc|readme|docs|changelog)\\b/i, entityType: \"docs\" },\n];\n\n/** User/agent is starting a hands-on task (issue #519 procedure recall gate). */\nconst TASK_INITIATION_RE =\n /\\b(ship(?:ping|ped)?|deploy(?:ing|ed)?|release|publish|open(?:ing)?\\s+(?:a\\s+)?(?:pr|pull\\s+request)|merge(?:ing)?\\s+(?:the\\s+)?(?:pr|pull\\s+request)|run\\s+(?:the\\s+)?tests?|start(?:ing)?\\s+(?:work|on|the)|kick\\s+off|implement(?:ing|ed)?|let's\\s+(?:ship|deploy|release|publish|open|run|merge|implement|fix|patch|build|start|do|get|put|wire|hook|land|roll)\\b|going\\s+to\\s+(?:ship|deploy|release|open|run|merge)|need\\s+to\\s+(?:ship|deploy|run|open|merge|test)|fix(?:ing|ed)?\\s+(?:(?:the|a)\\s+)?(?:\\w+\\s+){0,4}(?:bug|build)\\b|patch(?:ing|ed)?|build(?:ing)?\\s+(?:and\\s+)?(?:ship|deploy))\\b/i;\n\nconst MEMORY_LOOKUP_RE =\n /^(?:what|when|where|who|which|why|how|did)\\b/i;\n\nfunction normalizeTextInput(input: unknown): string {\n return typeof input === \"string\" ? input : \"\";\n}\n\nexport function inferIntentFromText(text: string): MemoryIntent {\n const safeText = normalizeTextInput(text);\n const goal = GOAL_PATTERNS.find((p) => p.re.test(safeText))?.goal ?? \"unknown\";\n const actionType = ACTION_PATTERNS.find((p) => p.re.test(safeText))?.action ?? \"unknown\";\n const entityTypes = Array.from(\n new Set(ENTITY_PATTERNS.filter((p) => p.re.test(safeText)).map((p) => p.entityType)),\n );\n const taskInitiation = !isMemoryLookupPrompt(safeText) && TASK_INITIATION_RE.test(safeText);\n\n return {\n goal,\n actionType,\n entityTypes,\n taskInitiation,\n };\n}\n\nexport function isTaskInitiationIntent(intent: MemoryIntent): boolean {\n return intent.taskInitiation === true;\n}\n\nfunction isMemoryLookupPrompt(text: string): boolean {\n const trimmed = text.trim();\n return MEMORY_LOOKUP_RE.test(trimmed) ||\n /\\b(?:previous|earlier|last week|last time|remember|recall|what did we decide)\\b/i.test(trimmed);\n}\n\nexport function intentCompatibilityScore(queryIntent: MemoryIntent, memoryIntent: MemoryIntent): number {\n const queryHasSignal =\n queryIntent.goal !== \"unknown\" ||\n queryIntent.actionType !== \"unknown\" ||\n queryIntent.entityTypes.length > 0;\n const memoryHasSignal =\n memoryIntent.goal !== \"unknown\" ||\n memoryIntent.actionType !== \"unknown\" ||\n memoryIntent.entityTypes.length > 0;\n if (!queryHasSignal || !memoryHasSignal) return 0;\n\n let score = 0;\n if (\n queryIntent.goal !== \"unknown\" &&\n memoryIntent.goal !== \"unknown\" &&\n queryIntent.goal === memoryIntent.goal\n ) {\n score += 0.5;\n }\n if (\n queryIntent.actionType !== \"unknown\" &&\n memoryIntent.actionType !== \"unknown\" &&\n queryIntent.actionType === memoryIntent.actionType\n ) {\n score += 0.3;\n }\n\n const overlap = queryIntent.entityTypes.filter((et) => memoryIntent.entityTypes.includes(et)).length;\n if (overlap > 0) {\n const denom = Math.max(queryIntent.entityTypes.length, memoryIntent.entityTypes.length, 1);\n score += 0.2 * (overlap / denom);\n }\n\n return Math.max(0, Math.min(1, score));\n}\n\nexport function planRecallMode(prompt: string): RecallPlanMode {\n const p = normalizeTextInput(prompt).trim();\n let ackCandidate = p;\n while (ackCandidate.length > 0) {\n const ch = ackCandidate.charCodeAt(ackCandidate.length - 1);\n const isDigit = ch >= 48 && ch <= 57;\n const isUpper = ch >= 65 && ch <= 90;\n const isLower = ch >= 97 && ch <= 122;\n // Strip any trailing non-alphanumeric noise (punctuation/emojis/symbols).\n if (isDigit || isUpper || isLower) break;\n ackCandidate = ackCandidate.slice(0, -1);\n }\n ackCandidate = ackCandidate.trim();\n if (p.length === 0) return \"no_recall\";\n\n if (/\\b(timeline|sequence|history|what happened|chain of events|root cause)\\b/i.test(p)) {\n return \"graph_mode\";\n }\n\n // Reserve no_recall for low-information acknowledgements; avoid broad regressions.\n if (\n p.length <= 18 &&\n /^(ok|okay|kk|thanks|thx|got it|sounds good|yep|yes|nope|no|done|cool|works)$/i.test(ackCandidate)\n ) {\n return \"no_recall\";\n }\n\n // Full recall for prompts that are explicitly memory-seeking or analytical questions.\n if (\n /\\b(previous|earlier|remember|last time|did we|what did we decide|context|summarize|summary|recap|key points|decision)\\b/i.test(p) ||\n /\\?$/.test(p) ||\n /^(what|why|how|when|where|who|which)\\b/i.test(p.toLowerCase())\n ) {\n return \"full\";\n }\n\n // Minimal for short, non-question operational directives to keep latency/tokens down.\n if (\n p.length <= 100 &&\n /^(check|reload|restart|run|verify|show|status|sync|update|open|close|set|enable|disable|fix|patch)\\b/i.test(p)\n ) {\n return \"minimal\";\n }\n\n return \"full\";\n}\n\nexport function hasBroadGraphIntent(prompt: string): boolean {\n const p = normalizeTextInput(prompt).trim().toLowerCase();\n if (!p) return false;\n return /\\b(what changed|how did we get here|why did this happen|what led to|cause chain|dependency chain|regression chain|failure chain)\\b/i.test(\n p,\n );\n}\n"],"mappings":";AAEA,IAAM,gBAAqD;AAAA,EACzD,EAAE,IAAI,uGAAuG,MAAM,YAAY;AAAA,EAC/H,EAAE,IAAI,4FAA4F,MAAM,UAAU;AAAA,EAClH,EAAE,IAAI,iFAAiF,MAAM,OAAO;AAAA,EACpG,EAAE,IAAI,oEAAoE,MAAM,SAAS;AAAA,EACzF,EAAE,IAAI,8CAA8C,MAAM,aAAa;AACzE;AAEA,IAAM,kBAAyD;AAAA,EAC7D,EAAE,IAAI,yFAAyF,QAAQ,SAAS;AAAA,EAChH,EAAE,IAAI,qFAAqF,QAAQ,OAAO;AAAA,EAC1G,EAAE,IAAI,8GAA8G,QAAQ,UAAU;AAAA,EACtI,EAAE,IAAI,8EAA8E,QAAQ,YAAY;AAAA,EACxG,EAAE,IAAI,iFAAiF,QAAQ,SAAS;AAC1G;AAEA,IAAM,kBAA6D;AAAA,EACjE,EAAE,IAAI,yDAAyD,YAAY,OAAO;AAAA,EAClF,EAAE,IAAI,8CAA8C,YAAY,MAAM;AAAA,EACtE,EAAE,IAAI,4CAA4C,YAAY,SAAS;AAAA,EACvE,EAAE,IAAI,mDAAmD,YAAY,KAAK;AAAA,EAC1E,EAAE,IAAI,oCAAoC,YAAY,OAAO;AAC/D;AAGA,IAAM,qBACJ;AAEF,IAAM,mBACJ;AAEF,SAAS,mBAAmB,OAAwB;AAClD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEO,SAAS,oBAAoB,MAA4B;AAC9D,QAAM,WAAW,mBAAmB,IAAI;AACxC,QAAM,OAAO,cAAc,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,GAAG,QAAQ;AACrE,QAAM,aAAa,gBAAgB,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,GAAG,UAAU;AAC/E,QAAM,cAAc,MAAM;AAAA,IACxB,IAAI,IAAI,gBAAgB,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;AAAA,EACrF;AACA,QAAM,iBAAiB,CAAC,qBAAqB,QAAQ,KAAK,mBAAmB,KAAK,QAAQ;AAE1F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB,QAA+B;AACpE,SAAO,OAAO,mBAAmB;AACnC;AAEA,SAAS,qBAAqB,MAAuB;AACnD,QAAM,UAAU,KAAK,KAAK;AAC1B,SAAO,iBAAiB,KAAK,OAAO,KAClC,mFAAmF,KAAK,OAAO;AACnG;AAEO,SAAS,yBAAyB,aAA2B,cAAoC;AACtG,QAAM,iBACJ,YAAY,SAAS,aACrB,YAAY,eAAe,aAC3B,YAAY,YAAY,SAAS;AACnC,QAAM,kBACJ,aAAa,SAAS,aACtB,aAAa,eAAe,aAC5B,aAAa,YAAY,SAAS;AACpC,MAAI,CAAC,kBAAkB,CAAC,gBAAiB,QAAO;AAEhD,MAAI,QAAQ;AACZ,MACE,YAAY,SAAS,aACrB,aAAa,SAAS,aACtB,YAAY,SAAS,aAAa,MAClC;AACA,aAAS;AAAA,EACX;AACA,MACE,YAAY,eAAe,aAC3B,aAAa,eAAe,aAC5B,YAAY,eAAe,aAAa,YACxC;AACA,aAAS;AAAA,EACX;AAEA,QAAM,UAAU,YAAY,YAAY,OAAO,CAAC,OAAO,aAAa,YAAY,SAAS,EAAE,CAAC,EAAE;AAC9F,MAAI,UAAU,GAAG;AACf,UAAM,QAAQ,KAAK,IAAI,YAAY,YAAY,QAAQ,aAAa,YAAY,QAAQ,CAAC;AACzF,aAAS,OAAO,UAAU;AAAA,EAC5B;AAEA,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AACvC;AAEO,SAAS,eAAe,QAAgC;AAC7D,QAAM,IAAI,mBAAmB,MAAM,EAAE,KAAK;AAC1C,MAAI,eAAe;AACnB,SAAO,aAAa,SAAS,GAAG;AAC9B,UAAM,KAAK,aAAa,WAAW,aAAa,SAAS,CAAC;AAC1D,UAAM,UAAU,MAAM,MAAM,MAAM;AAClC,UAAM,UAAU,MAAM,MAAM,MAAM;AAClC,UAAM,UAAU,MAAM,MAAM,MAAM;AAElC,QAAI,WAAW,WAAW,QAAS;AACnC,mBAAe,aAAa,MAAM,GAAG,EAAE;AAAA,EACzC;AACA,iBAAe,aAAa,KAAK;AACjC,MAAI,EAAE,WAAW,EAAG,QAAO;AAE3B,MAAI,4EAA4E,KAAK,CAAC,GAAG;AACvF,WAAO;AAAA,EACT;AAGA,MACE,EAAE,UAAU,MACZ,gFAAgF,KAAK,YAAY,GACjG;AACA,WAAO;AAAA,EACT;AAGA,MACE,2HAA2H,KAAK,CAAC,KACjI,MAAM,KAAK,CAAC,KACZ,0CAA0C,KAAK,EAAE,YAAY,CAAC,GAC9D;AACA,WAAO;AAAA,EACT;AAGA,MACE,EAAE,UAAU,OACZ,wGAAwG,KAAK,CAAC,GAC9G;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,oBAAoB,QAAyB;AAC3D,QAAM,IAAI,mBAAmB,MAAM,EAAE,KAAK,EAAE,YAAY;AACxD,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,sIAAsI;AAAA,IAC3I;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/retrieval-agents.ts"],"sourcesContent":["/**\n * Parallel Specialized Retrieval (v9.1 — ASMR-inspired)\n *\n * Replaces single-pass hybrid search with three parallel specialized agents:\n *\n * 1. DirectFactAgent — entity-first lookup via entity filename index (<5ms)\n * 2. ContextualAgent — existing hybridSearch (same cost as current single-pass)\n * 3. TemporalAgent — temporal index prefilter + recency scoring (<10ms)\n *\n * All agents run via Promise.all(), so total latency = max(agents), not sum.\n * No new LLM inference is introduced — agents reuse existing search primitives.\n *\n * Graceful degradation: any agent error/timeout does not block the others.\n *\n * References:\n * - Supermemory ASMR: https://blog.supermemory.ai/...\n * - Spec: docs/ideas/parallel-specialized-retrieval.md\n */\n\nimport path from \"node:path\";\nimport { lstat, readdir, readFile, realpath, stat } from \"node:fs/promises\";\nimport { log } from \"./logger.js\";\nimport type { QmdSearchResult } from \"./types.js\";\nimport type { QmdClient } from \"./qmd.js\";\nimport { isTemporalQuery, recencyWindowBoundsFromPrompt } from \"./temporal-index.js\";\nimport { isAbortError } from \"./abort-error.js\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type SearchAgentSource = \"direct\" | \"contextual\" | \"temporal\";\n\nexport interface ParallelSearchResult extends QmdSearchResult {\n /** Which retrieval agent produced this result. */\n agentSource: SearchAgentSource;\n}\n\n/** Source-based weights applied during merge. Higher = higher confidence/precision. */\nexport const PARALLEL_AGENT_WEIGHTS: Record<SearchAgentSource, number> = {\n direct: 1.0, // entity-first: high precision\n temporal: 0.85, // recency-boosted: relevant but broader\n contextual: 0.7, // semantic: broadest, lower precision\n};\n\n// ─── Query classification ────────────────────────────────────────────────────\n\n/**\n * Decide whether a given agent should run for this query.\n * Agent 1 (direct) is the only one that may be skipped — when the query\n * contains no proper-noun-like tokens, entity lookups will return nothing.\n * Agents 2 (contextual) and 3 (temporal) always run.\n */\nexport function shouldRunAgent(\n agent: SearchAgentSource,\n query: string,\n knownEntityCount: number,\n): boolean {\n switch (agent) {\n case \"direct\":\n // Skip only if query has no word-like tokens at all. Both capitalized and\n // lowercase entity names are stored (normalizeEntityName lowercases them),\n // so gating on capitalization would silently skip most real entity lookups.\n return knownEntityCount > 0 || /\\b\\w{2,}/.test(query);\n case \"temporal\":\n // Only run temporal agent when the query actually asks about a time window.\n // Running it for every query injects recency bias into semantic searches.\n return isTemporalQuery(query);\n case \"contextual\":\n return true;\n default:\n return true;\n }\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction tokenize(value: string): string[] {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter((t) => t.length >= 2);\n}\n\nfunction overlapScore(queryTokens: string[], candidateTokens: string[]): number {\n if (queryTokens.length === 0 || candidateTokens.length === 0) return 0;\n const candidateSet = new Set(candidateTokens);\n const hits = queryTokens.filter((t) => candidateSet.has(t)).length;\n return hits / Math.max(queryTokens.length, candidateTokens.length);\n}\n\nasync function resolveContainedRegularFile(\n memoryDir: string,\n candidatePath: string,\n canonicalRoot?: string,\n): Promise<string | null> {\n try {\n const root = canonicalRoot ?? await realpath(memoryDir);\n const absolute = path.isAbsolute(candidatePath)\n ? path.resolve(candidatePath)\n : path.resolve(memoryDir, candidatePath);\n const entryStat = await lstat(absolute);\n if (entryStat.isSymbolicLink()) return null;\n const fileStat = await stat(absolute);\n if (!fileStat.isFile()) return null;\n const canonical = await realpath(absolute);\n if (canonical !== root && !canonical.startsWith(root + path.sep)) return null;\n return absolute;\n } catch {\n return null;\n }\n}\n\n// ─── Agent 1: Direct Facts ───────────────────────────────────────────────────\n\n/**\n * Direct Facts Agent — entity-first retrieval.\n *\n * Reads entity filenames from the entities directory and scores them by\n * keyword overlap with the query. Returns matching entity file paths as\n * QmdSearchResult[]. Zero LLM inference; pure file I/O.\n *\n * Cost: readdir on entities/ + filename scoring. Typically <5ms.\n *\n */\n// Agents scan one namespace storage dir and return absolute paths. Contextual\n// fanout hits are also absolute (globally-unique identity), so we keep the\n// agent path absolute and only stamp the owning namespace here — that carries\n// the namespace through merge/tracking without re-deriving it (#2020). No-op\n// without a resolver.\nfunction namespaceRelativeResult(\n result: ParallelSearchResult,\n _memoryDir: string,\n namespaceFromPath?: (p: string) => string,\n): ParallelSearchResult {\n if (!namespaceFromPath || !result.path || result.namespace) return result;\n return { ...result, namespace: namespaceFromPath(result.path) };\n}\n\nexport async function runDirectAgent(\n query: string,\n memoryDir: string,\n maxResults = 10,\n namespaceFromPath?: (p: string) => string,\n): Promise<ParallelSearchResult[]> {\n try {\n const canonicalRoot = await realpath(memoryDir);\n const entitiesDir = path.join(memoryDir, \"entities\");\n let entries: string[];\n try {\n entries = await readdir(entitiesDir);\n } catch {\n return []; // entities dir missing or unreadable — not an error\n }\n\n const queryTokens = tokenize(query);\n if (queryTokens.length === 0) return [];\n\n const results: ParallelSearchResult[] = [];\n for (const entry of entries) {\n if (!entry.endsWith(\".md\")) continue;\n\n // Filename tokens: split on hyphens (normalizeEntityName uses hyphens)\n const nameWithoutExt = entry.slice(0, -3);\n const entityTokens = nameWithoutExt.split(\"-\").filter((t) => t.length >= 2).map((t) => t.toLowerCase());\n\n const score = overlapScore(queryTokens, entityTokens);\n if (score <= 0) continue;\n\n const fullPath = path.join(entitiesDir, entry);\n const safePath = await resolveContainedRegularFile(memoryDir, fullPath, canonicalRoot);\n if (!safePath) continue;\n\n results.push(\n namespaceRelativeResult(\n {\n docid: nameWithoutExt,\n path: safePath,\n snippet: \"\", // populated by augmentWithDirectAndTemporal after merge\n score,\n transport: \"scoped_prefilter\",\n agentSource: \"direct\",\n },\n memoryDir,\n namespaceFromPath,\n ),\n );\n }\n\n return results\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n } catch (err) {\n log.debug(`DirectFactAgent error: ${err}`);\n return [];\n }\n}\n\n// ─── Agent 3: Temporal ───────────────────────────────────────────────────────\n\n/**\n * Temporal Agent — recency-focused retrieval.\n *\n * Uses the temporal index (index_time.json) to find memories from the\n * recent time window derived from the query (default: last 7 days).\n * Combines recency decay with query-filename token overlap so results stay\n * relevant to the query content, not just recency. Zero LLM inference; File I/O + math.\n *\n * Cost: read index_time.json + date range scan. Typically <10ms.\n */\nexport async function runTemporalAgent(\n query: string,\n memoryDir: string,\n maxResults = 20,\n /** Optional candidate set from query-aware prefilter. Applied BEFORE the top-K cap so\n * in-scope entries are not displaced by newer out-of-scope entries. */\n candidatePaths?: Set<string> | null,\n namespaceFromPath?: (p: string) => string,\n): Promise<ParallelSearchResult[]> {\n try {\n const canonicalRoot = await realpath(memoryDir);\n // Read index_time.json once — used for both date-range filtering and recency scoring.\n let dateIndex: Record<string, string[]> = {};\n try {\n const indexPath = path.join(memoryDir, \"state\", \"index_time.json\");\n const raw = await readFile(indexPath, \"utf-8\");\n const parsed = JSON.parse(raw) as { dates?: Record<string, string[]> };\n dateIndex = parsed.dates ?? {};\n } catch {\n return []; // Index missing or unreadable — nothing to return\n }\n\n // Derive both window edges from the same function so fromDate/toDate always use\n // consistent pattern-matching and priority ordering.\n const { fromDate, toDate } = recencyWindowBoundsFromPrompt(query);\n\n // Build path → date map, filtering to the recency window in one pass.\n // Apply candidatePaths here (before scoring + top-K) so in-scope entries are\n // not displaced by newer out-of-scope entries at the slice boundary.\n const pathToDate = new Map<string, string>();\n for (const [date, datePaths] of Object.entries(dateIndex)) {\n // toDate is an exclusive upper bound (the first day NOT included in the window).\n // e.g. \"3 days ago\" → fromDate=\"2026-03-12\", toDate=\"2026-03-13\" → only includes 2026-03-12.\n if (date >= fromDate && date < toDate) {\n for (const p of datePaths) {\n // Skip paths excluded by the query-aware prefilter scope\n if (candidatePaths && !candidatePaths.has(p)) continue;\n if (!pathToDate.has(p)) pathToDate.set(p, date);\n }\n }\n }\n\n if (pathToDate.size === 0) return [];\n\n const todayMs = Date.now();\n\n // Extract non-temporal topic tokens for tag-based relevance boost.\n // Purely temporal words (dates, relative time) and common stopwords are stripped\n // so the signal reflects the subject the user is asking about (e.g. \"auth\" in\n // \"what changed in auth last week\"), not the time window itself.\n const TEMPORAL_STOPWORDS = new Set([\n \"today\", \"yesterday\", \"this\", \"last\", \"week\", \"month\", \"year\",\n \"morning\", \"night\", \"now\", \"earlier\", \"since\", \"after\", \"before\",\n \"ago\", \"hours\", \"days\", \"weeks\", \"months\",\n \"january\", \"february\", \"march\", \"april\", \"may\", \"june\",\n \"july\", \"august\", \"september\", \"october\", \"november\", \"december\",\n \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\",\n \"what\", \"when\", \"where\", \"who\", \"why\", \"how\", \"the\", \"a\", \"an\",\n \"and\", \"or\", \"in\", \"on\", \"at\", \"to\", \"of\", \"for\", \"with\", \"by\",\n \"from\", \"changed\", \"happened\", \"was\", \"were\", \"is\", \"are\", \"did\",\n \"about\", \"that\", \"have\", \"had\", \"has\", \"been\", \"any\", \"all\",\n ]);\n const topicTokens = tokenize(query).filter((t) => !TEMPORAL_STOPWORDS.has(t));\n\n // Load tag index for topical scoring, in parallel with existence checks.\n // Fail-open: if the tag index is unavailable, topicBoost = 0 and scores\n // degrade gracefully to recency-only ordering (existing behaviour).\n const entries = [...pathToDate.entries()];\n const tagIndexPromise: Promise<Map<string, string[]>> = topicTokens.length > 0\n ? readFile(path.join(memoryDir, \"state\", \"index_tags.json\"), \"utf-8\")\n .then((raw) => {\n const parsed = JSON.parse(raw) as { tags?: Record<string, { paths?: string[] } | string[]> };\n const result = new Map<string, string[]>();\n for (const [tag, node] of Object.entries(parsed.tags ?? {})) {\n const tagPaths = Array.isArray(node) ? node : (node.paths ?? []);\n for (const tp of tagPaths) {\n const existing = result.get(tp);\n if (existing) existing.push(tag);\n else result.set(tp, [tag]);\n }\n }\n return result;\n })\n .catch(() => new Map<string, string[]>())\n : Promise.resolve(new Map<string, string[]>());\n\n // Parallel: existence checks + tag index read.\n const [safePathResults, pathToTags] = await Promise.all([\n Promise.all(entries.map(([p]) => resolveContainedRegularFile(memoryDir, p, canonicalRoot))),\n tagIndexPromise,\n ]);\n\n const results: ParallelSearchResult[] = [];\n\n for (let i = 0; i < entries.length; i++) {\n const [p, dateStr] = entries[i];\n const safePath = safePathResults[i];\n if (!safePath) continue; // skip stale or out-of-root index entry\n const ageMs = todayMs - new Date(dateStr).getTime();\n const ageDays = ageMs / 86_400_000;\n // Exponential recency decay with half-life of ~30 days.\n // score ≈ 1.0 at day 0, ≈ 0.79 at 7 days, ≈ 0.36 at 30 days, ≈ 0.13 at 60 days.\n const recencyScore = Math.exp(-ageDays / 30);\n\n // Topical boost: fraction of non-temporal query tokens matched by this file's tags.\n // Adds up to +30% on recency score for a perfect tag match; zero when query is\n // purely temporal (no topic tokens) or the tag index doesn't cover the file.\n let topicBoost = 0;\n if (topicTokens.length > 0) {\n const tags = pathToTags.get(p) ?? pathToTags.get(safePath);\n if (tags && tags.length > 0) {\n const tagSet = new Set(tags.flatMap((t) => tokenize(t)));\n const hits = topicTokens.filter((t) => tagSet.has(t)).length;\n topicBoost = hits / topicTokens.length;\n }\n }\n const score = recencyScore * (1 + topicBoost * 0.3);\n\n const baseName = path.basename(safePath, \".md\");\n\n results.push(\n namespaceRelativeResult(\n {\n docid: baseName,\n path: safePath,\n snippet: \"\", // populated by augmentWithDirectAndTemporal after merge\n score,\n transport: \"scoped_prefilter\",\n agentSource: \"temporal\",\n },\n memoryDir,\n namespaceFromPath,\n ),\n );\n }\n\n return results\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n } catch (err) {\n log.debug(`TemporalAgent error: ${err}`);\n return [];\n }\n}\n\n// ─── Agent 2: Contextual ─────────────────────────────────────────────────────\n\n/**\n * Contextual Agent — broad semantic/hybrid search.\n *\n * Delegates to the existing hybridSearch (BM25 + vector). Same cost as the\n * current single-pass retrieval — this agent introduces no additional LLM calls.\n */\nexport async function runContextualAgent(\n query: string,\n qmd: QmdClient,\n collection: string | undefined,\n maxResults: number,\n signal?: AbortSignal,\n): Promise<ParallelSearchResult[]> {\n try {\n const results = await qmd.hybridSearch(\n query,\n collection,\n maxResults,\n signal ? { signal } : undefined,\n );\n return results.map((r: QmdSearchResult) => ({ ...r, agentSource: \"contextual\" as const }));\n } catch (err) {\n if (isAbortError(err)) throw err;\n log.debug(`ContextualAgent error: ${err}`);\n return [];\n }\n}\n\n// ─── Merge helper ─────────────────────────────────────────────────────────────\n\n/**\n * Merge results from multiple agents into a single deduplicated, weighted list.\n * Deduplicates by (namespace, path). Contextual results carry a `namespace`\n * (from the namespace-fanout search); direct/temporal results do not. When a\n * `resolveNamespace` resolver is supplied, the missing namespace is derived from\n * the result path the same canonical way the contextual side derives it\n * (`result.namespace ?? resolveNamespace(result.path)`), so a direct/temporal hit\n * and a contextual hit for the same (namespace, path) collapse to ONE merge key\n * instead of being injected and access-counted twice. Preserves snippets: if a\n * higher-scoring result lacks a snippet, the existing snippet from a lower-scoring\n * source is retained.\n */\nfunction mergeAgentResults(\n allResults: ParallelSearchResult[],\n weights: Record<SearchAgentSource, number>,\n maxResults: number,\n resolveNamespace?: (path: string) => string,\n): QmdSearchResult[] {\n const merged = new Map<string, QmdSearchResult>();\n for (const result of allResults) {\n const namespace =\n result.namespace ?? (resolveNamespace && result.path ? resolveNamespace(result.path) : undefined);\n const key = `${namespace ?? \"\"}\\0${result.path || result.docid}`;\n const weightedScore = result.score * weights[result.agentSource];\n const existing = merged.get(key);\n if (!existing || weightedScore > existing.score) {\n merged.set(key, {\n docid: result.docid,\n path: result.path,\n namespace,\n // Preserve any snippet from the existing entry when the new one has none\n snippet: result.snippet || existing?.snippet || \"\",\n score: weightedScore,\n transport: \"hybrid\",\n });\n }\n }\n return [...merged.values()]\n .sort((a, b) => b.score - a.score)\n .slice(0, maxResults);\n}\n\n/**\n * For merged results that have an empty snippet, attempt to read the first\n * 200 characters of the file as a fallback preview. Bounded to MAX_SNIPPET_READS\n * to cap I/O when many specialized-agent results are present.\n */\nconst SNIPPET_PREVIEW_CHARS = 200;\nconst MAX_SNIPPET_READS = 8;\n\n/** Strip YAML frontmatter (---...---) and return the document body. */\nfunction stripFrontmatter(raw: string): string {\n if (!raw.startsWith(\"---\")) return raw;\n const end = raw.indexOf(\"\\n---\", 3);\n if (end === -1) return raw;\n // Skip the closing \"---\" line and any leading blank lines\n return raw.slice(end + 4).replace(/^\\n+/, \"\");\n}\n\nasync function populateEmptySnippets(results: QmdSearchResult[], memoryDir?: string): Promise<QmdSearchResult[]> {\n const needsSnippet = results.filter((r) => !r.snippet && r.path);\n if (needsSnippet.length === 0) return results;\n const canonicalRoot = memoryDir ? await realpath(memoryDir).catch(() => null) : null;\n\n const toRead = needsSnippet.slice(0, MAX_SNIPPET_READS);\n const snippetMap = new Map<string, string>();\n\n await Promise.all(\n toRead.map(async (r) => {\n try {\n const safePath = canonicalRoot && r.path\n ? await resolveContainedRegularFile(memoryDir!, r.path, canonicalRoot)\n : null;\n if (!safePath) return;\n const raw = await readFile(safePath, \"utf-8\");\n // Memory files start with YAML frontmatter — skip it so the snippet\n // contains actual memory content, not metadata fields.\n const body = stripFrontmatter(raw);\n const preview = body.slice(0, SNIPPET_PREVIEW_CHARS).replace(/\\s+/g, \" \").trim();\n if (preview) snippetMap.set(r.path, preview);\n } catch {\n // File unreadable — leave snippet empty\n }\n }),\n );\n\n if (snippetMap.size === 0) return results;\n return results.map((r) => (r.path && snippetMap.has(r.path) ? { ...r, snippet: snippetMap.get(r.path)! } : r));\n}\n\n/**\n * Merge pre-computed direct and temporal agent results with contextual results.\n *\n * This is the merge half of augmentWithDirectAndTemporal. Expose it separately so\n * callers that started agents concurrently with the contextual search (for true\n * parallel latency) can merge after all three complete, without re-running agents.\n *\n * Handles the same cases as augmentWithDirectAndTemporal:\n * - Returns contextual unchanged (no reweighting) when both agents return nothing\n * - Applies maxResults cap in all paths\n * - Populates snippets for results discovered only by specialized agents\n */\nexport async function mergeWithAgentResults(\n contextualResults: QmdSearchResult[],\n directResults: ParallelSearchResult[],\n temporalResults: ParallelSearchResult[],\n weights: Record<SearchAgentSource, number>,\n maxResults: number,\n memoryDir?: string,\n /** Optional namespace resolver. Direct/temporal results lack a namespace under\n * namespace fanout; deriving it from the path lets them collapse onto the same\n * merge key as the contextual result for the same (namespace, path). */\n resolveNamespace?: (path: string) => string,\n): Promise<QmdSearchResult[]> {\n if (directResults.length === 0 && temporalResults.length === 0) {\n return contextualResults.slice(0, maxResults);\n }\n\n const contextualTagged: ParallelSearchResult[] = contextualResults.map((r) => ({\n ...r,\n agentSource: \"contextual\" as const,\n }));\n\n const merged = mergeAgentResults(\n [...contextualTagged, ...directResults, ...temporalResults],\n weights,\n maxResults,\n resolveNamespace,\n );\n return populateEmptySnippets(merged, memoryDir);\n}\n\n// ─── Augmentation helper (used by tests; orchestrator uses inline logic) ─────\n//\n// NOTE: This function passes the same `memoryDir` to both direct and temporal\n// agents. The orchestrator's inline implementation differs: it passes a\n// namespace-specific storage dir to runDirectAgent and the shared root to\n// runTemporalAgent. augmentWithDirectAndTemporal is intentionally simpler\n// (single-dir assumption) and is exercised by unit tests where both agents\n// operate on the same temporary directory.\n\n/**\n * Augment a set of contextual (hybridSearch) results with direct and temporal\n * agent results, returning a merged, deduplicated list.\n *\n * **Test helper** — production recall uses the inline orchestrator path which\n * passes namespace-specific directories to each agent. This function uses a\n * simplified single-directory contract suitable for unit tests.\n *\n * Direct and temporal agents run in parallel, then all three are merged with\n * configurable weights.\n *\n * Contextual weight is always applied to `contextualResults` so scoring is\n * consistent regardless of whether direct/temporal agents return anything.\n *\n * Snippets: snippets from contextual results are preserved during merge. For\n * results discovered only by direct/temporal agents (no contextual match),\n * the first ~200 chars of the file are read as a fallback preview so downstream\n * formatters and rerankers have content to work with, not just a path.\n */\nexport async function augmentWithDirectAndTemporal(\n query: string,\n memoryDir: string,\n contextualResults: QmdSearchResult[],\n weights: Record<SearchAgentSource, number>,\n maxPerAgent: number,\n maxResults: number,\n /** Optional candidate set from query-aware prefilter (time/tag scoped). Agents' results are\n * filtered to this set when provided so recall stays within the operator-specified scope. */\n candidatePaths?: Set<string> | null,\n /** Optional namespace resolver so direct/temporal results collapse onto the same\n * (namespace, path) merge key as their contextual counterpart. */\n resolveNamespace?: (path: string) => string,\n): Promise<QmdSearchResult[]> {\n // maxPerAgent=0 is a hard disable: skip agents entirely and return contextual unchanged\n if (maxPerAgent === 0) return contextualResults;\n\n const knownEntityCount = (query.match(/\\b[A-Z][a-z]{1,}/g) ?? []).length;\n const runDirect = shouldRunAgent(\"direct\", query, knownEntityCount);\n const runTemporal = shouldRunAgent(\"temporal\", query, knownEntityCount);\n\n const startMs = Date.now();\n const [directResults, temporalResults] = await Promise.all([\n runDirect\n ? runDirectAgent(query, memoryDir, maxPerAgent).catch((err) => {\n log.debug(`augmentWithDirectAndTemporal: DirectAgent failed — ${err}`);\n return [] as ParallelSearchResult[];\n })\n : Promise.resolve([] as ParallelSearchResult[]),\n runTemporal\n // Pass candidatePaths so scope-filtering happens before the top-K cap inside runTemporalAgent,\n // preventing out-of-scope newer entries from displacing in-scope ones at the slice boundary.\n ? runTemporalAgent(query, memoryDir, maxPerAgent, candidatePaths).catch((err) => {\n log.debug(`augmentWithDirectAndTemporal: TemporalAgent failed — ${err}`);\n return [] as ParallelSearchResult[];\n })\n : Promise.resolve([] as ParallelSearchResult[]),\n ]);\n const durationMs = Date.now() - startMs;\n\n // Direct agent results (entities/) intentionally bypass candidatePaths.\n //\n // Why: candidatePaths is built from temporal + tag indexes, which never include\n // entity files (entities/*.md). Applying the filter here would silently drop ALL\n // direct-agent results for any scoped query, making the direct agent a no-op.\n // Entity files are identified by filename matching (query tokens vs. entity name),\n // so they are already query-scoped independently of the time/tag prefilter.\n // Temporal results are scoped inside runTemporalAgent() before the top-K cap.\n const scopedDirect = directResults;\n\n // Tag contextual results with their source so they can participate in weighted merge.\n // We do NOT cap contextual here: contextualResults comes from fetchQmdMemoryResultsWithArtifactTopUp\n // which intentionally over-fetches so downstream phases (graph expansion, lifecycle filtering,\n // reranking) can drop candidates. Capping before the merge would remove that headroom.\n const contextualTagged: ParallelSearchResult[] = contextualResults.map((r) => ({\n ...r,\n agentSource: \"contextual\" as const,\n }));\n\n log.debug(\n `augmentWithDirectAndTemporal: direct=${scopedDirect.length} temporal=${temporalResults.length} contextual=${contextualTagged.length} agentMs=${durationMs}ms`,\n );\n\n // If no specialized agents contributed anything (e.g. fresh setup without entities/ or temporal\n // index), skip reweighting entirely — applying the contextual weight penalty with zero benefit\n // would silently reduce every result score by ~30% compared to the non-augmented path.\n if (scopedDirect.length === 0 && temporalResults.length === 0) {\n return (contextualResults as QmdSearchResult[]).slice(0, maxResults);\n }\n\n // Merge all three; contextual first so its snippets are preserved when a higher-scoring\n // direct/temporal result overrides the same path (see mergeAgentResults snippet logic).\n // Note: maxPerAgent=0 is handled by the early-return guard above; we never reach here with 0.\n const merged = mergeAgentResults(\n [...contextualTagged, ...scopedDirect, ...temporalResults],\n weights,\n maxResults,\n resolveNamespace,\n );\n\n // Populate snippets for results discovered only by direct/temporal (no contextual preview)\n return populateEmptySnippets(merged, memoryDir);\n}\n\n// ─── Orchestrator ─────────────────────────────────────────────────────────────\n\nexport interface ParallelRetrievalOptions {\n collection?: string;\n maxResults?: number;\n signal?: AbortSignal;\n /** If true, skip the contextual agent (hybridSearch is already running externally). */\n skipContextual?: boolean;\n /** Max results per agent (capped before merge). */\n maxResultsPerAgent?: number;\n /** Override default agent weights. Falls back to PARALLEL_AGENT_WEIGHTS when absent. */\n agentWeights?: Record<SearchAgentSource, number>;\n /** Optional namespace resolver so direct/temporal results collapse onto the same\n * (namespace, path) merge key as the contextual result for the same path. */\n resolveNamespace?: (path: string) => string;\n}\n\n/**\n * Run parallel specialized retrieval agents and merge results.\n *\n * When `skipContextual` is true, only the direct and temporal agents run.\n * This is the intended usage inside the orchestrator, where hybridSearch\n * already runs as the primary search — we augment with the cheap extra agents.\n *\n * Total latency = max(agent_latencies), not sum.\n * Agent errors are isolated — others still return results.\n */\nexport async function parallelRetrieval(\n query: string,\n qmd: QmdClient,\n memoryDir: string,\n options: ParallelRetrievalOptions = {},\n): Promise<QmdSearchResult[]> {\n const maxResults = options.maxResults ?? 20;\n const maxPerAgent = options.maxResultsPerAgent ?? maxResults;\n const startMs = Date.now();\n\n // Rough entity detection: count proper-noun-like tokens in query\n const knownEntityCount = (query.match(/\\b[A-Z][a-z]{1,}/g) ?? []).length;\n\n const runDirect = shouldRunAgent(\"direct\", query, knownEntityCount);\n const runTemporal = shouldRunAgent(\"temporal\", query, knownEntityCount);\n const runContextual = !options.skipContextual && shouldRunAgent(\"contextual\", query, knownEntityCount);\n\n const [directResults, temporalResults, contextualResults] = await Promise.all([\n runDirect\n ? runDirectAgent(query, memoryDir, maxPerAgent).catch((err) => {\n log.debug(`parallelRetrieval: DirectAgent failed — ${err}`);\n return [] as ParallelSearchResult[];\n })\n : Promise.resolve([] as ParallelSearchResult[]),\n runTemporal\n ? runTemporalAgent(query, memoryDir, maxPerAgent).catch((err) => {\n log.debug(`parallelRetrieval: TemporalAgent failed — ${err}`);\n return [] as ParallelSearchResult[];\n })\n : Promise.resolve([] as ParallelSearchResult[]),\n runContextual\n ? runContextualAgent(query, qmd, options.collection, maxPerAgent, options.signal).catch((err) => {\n if (isAbortError(err)) throw err;\n log.debug(`parallelRetrieval: ContextualAgent failed — ${err}`);\n return [] as ParallelSearchResult[];\n })\n : Promise.resolve([] as ParallelSearchResult[]),\n ]);\n\n const durationMs = Date.now() - startMs;\n log.debug(\n `parallelRetrieval: direct=${directResults.length} temporal=${temporalResults.length} contextual=${contextualResults.length} durationMs=${durationMs}ms`,\n );\n\n // Contextual results go first so their snippets are preserved when a higher-scoring\n // direct/temporal result overrides the same path in mergeAgentResults.\n const merged = mergeAgentResults(\n [...contextualResults, ...directResults, ...temporalResults],\n options.agentWeights ?? PARALLEL_AGENT_WEIGHTS,\n maxResults,\n options.resolveNamespace,\n );\n return populateEmptySnippets(merged, memoryDir);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -937,24 +937,24 @@ declare const SupportPassportDraftCardSchema: z.ZodEffects<z.ZodObject<{
|
|
|
937
937
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
938
938
|
sourceMemoryIds: z.ZodArray<z.ZodString, "many">;
|
|
939
939
|
}, "strict", z.ZodTypeAny, {
|
|
940
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
941
940
|
title: string;
|
|
942
941
|
sourceMemoryIds: string[];
|
|
942
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
943
943
|
statement: string;
|
|
944
944
|
}, {
|
|
945
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
946
945
|
title: string;
|
|
947
946
|
sourceMemoryIds: string[];
|
|
947
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
948
948
|
statement: string;
|
|
949
949
|
}>, {
|
|
950
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
951
950
|
title: string;
|
|
952
951
|
sourceMemoryIds: string[];
|
|
952
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
953
953
|
statement: string;
|
|
954
954
|
}, {
|
|
955
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
956
955
|
title: string;
|
|
957
956
|
sourceMemoryIds: string[];
|
|
957
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
958
958
|
statement: string;
|
|
959
959
|
}>;
|
|
960
960
|
declare const SupportPassportDraftOutputSchema: z.ZodObject<{
|
|
@@ -964,38 +964,38 @@ declare const SupportPassportDraftOutputSchema: z.ZodObject<{
|
|
|
964
964
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
965
965
|
sourceMemoryIds: z.ZodArray<z.ZodString, "many">;
|
|
966
966
|
}, "strict", z.ZodTypeAny, {
|
|
967
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
968
967
|
title: string;
|
|
969
968
|
sourceMemoryIds: string[];
|
|
969
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
970
970
|
statement: string;
|
|
971
971
|
}, {
|
|
972
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
973
972
|
title: string;
|
|
974
973
|
sourceMemoryIds: string[];
|
|
974
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
975
975
|
statement: string;
|
|
976
976
|
}>, {
|
|
977
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
978
977
|
title: string;
|
|
979
978
|
sourceMemoryIds: string[];
|
|
979
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
980
980
|
statement: string;
|
|
981
981
|
}, {
|
|
982
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
983
982
|
title: string;
|
|
984
983
|
sourceMemoryIds: string[];
|
|
984
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
985
985
|
statement: string;
|
|
986
986
|
}>, "many">;
|
|
987
987
|
}, "strict", z.ZodTypeAny, {
|
|
988
988
|
cards: {
|
|
989
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
990
989
|
title: string;
|
|
991
990
|
sourceMemoryIds: string[];
|
|
991
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
992
992
|
statement: string;
|
|
993
993
|
}[];
|
|
994
994
|
}, {
|
|
995
995
|
cards: {
|
|
996
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
997
996
|
title: string;
|
|
998
997
|
sourceMemoryIds: string[];
|
|
998
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
999
999
|
statement: string;
|
|
1000
1000
|
}[];
|
|
1001
1001
|
}>;
|
|
@@ -1005,34 +1005,34 @@ declare const SupportPassportDraftModelInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1005
1005
|
memoryId: z.ZodString;
|
|
1006
1006
|
content: z.ZodString;
|
|
1007
1007
|
}, "strict", z.ZodTypeAny, {
|
|
1008
|
-
content: string;
|
|
1009
1008
|
memoryId: string;
|
|
1010
|
-
}, {
|
|
1011
1009
|
content: string;
|
|
1010
|
+
}, {
|
|
1012
1011
|
memoryId: string;
|
|
1012
|
+
content: string;
|
|
1013
1013
|
}>, "many">;
|
|
1014
1014
|
}, "strict", z.ZodTypeAny, {
|
|
1015
1015
|
memories: {
|
|
1016
|
-
content: string;
|
|
1017
1016
|
memoryId: string;
|
|
1017
|
+
content: string;
|
|
1018
1018
|
}[];
|
|
1019
1019
|
consent: true;
|
|
1020
1020
|
}, {
|
|
1021
1021
|
memories: {
|
|
1022
|
-
content: string;
|
|
1023
1022
|
memoryId: string;
|
|
1023
|
+
content: string;
|
|
1024
1024
|
}[];
|
|
1025
1025
|
consent: true;
|
|
1026
1026
|
}>, {
|
|
1027
1027
|
memories: {
|
|
1028
|
-
content: string;
|
|
1029
1028
|
memoryId: string;
|
|
1029
|
+
content: string;
|
|
1030
1030
|
}[];
|
|
1031
1031
|
consent: true;
|
|
1032
1032
|
}, {
|
|
1033
1033
|
memories: {
|
|
1034
|
-
content: string;
|
|
1035
1034
|
memoryId: string;
|
|
1035
|
+
content: string;
|
|
1036
1036
|
}[];
|
|
1037
1037
|
consent: true;
|
|
1038
1038
|
}>;
|
|
@@ -1070,38 +1070,38 @@ declare const SupportPassportAnswerModelInputSchema: z.ZodObject<{
|
|
|
1070
1070
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
1071
1071
|
updatedAt: z.ZodEffects<z.ZodString, string, string>;
|
|
1072
1072
|
}, "strict", z.ZodTypeAny, {
|
|
1073
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1074
1073
|
title: string;
|
|
1074
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1075
1075
|
updatedAt: string;
|
|
1076
1076
|
cardId: string;
|
|
1077
1077
|
statement: string;
|
|
1078
1078
|
}, {
|
|
1079
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1080
1079
|
title: string;
|
|
1080
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1081
1081
|
updatedAt: string;
|
|
1082
1082
|
cardId: string;
|
|
1083
1083
|
statement: string;
|
|
1084
1084
|
}>, "many">;
|
|
1085
1085
|
}, "strict", z.ZodTypeAny, {
|
|
1086
|
-
expiresAt: string;
|
|
1087
1086
|
schemaVersion: 1;
|
|
1087
|
+
expiresAt: string;
|
|
1088
1088
|
updatedAt: string;
|
|
1089
1089
|
grantId: string;
|
|
1090
1090
|
cards: {
|
|
1091
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1092
1091
|
title: string;
|
|
1092
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1093
1093
|
updatedAt: string;
|
|
1094
1094
|
cardId: string;
|
|
1095
1095
|
statement: string;
|
|
1096
1096
|
}[];
|
|
1097
1097
|
}, {
|
|
1098
|
-
expiresAt: string;
|
|
1099
1098
|
schemaVersion: 1;
|
|
1099
|
+
expiresAt: string;
|
|
1100
1100
|
updatedAt: string;
|
|
1101
1101
|
grantId: string;
|
|
1102
1102
|
cards: {
|
|
1103
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1104
1103
|
title: string;
|
|
1104
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1105
1105
|
updatedAt: string;
|
|
1106
1106
|
cardId: string;
|
|
1107
1107
|
statement: string;
|
|
@@ -1111,13 +1111,13 @@ declare const SupportPassportAnswerModelInputSchema: z.ZodObject<{
|
|
|
1111
1111
|
}, "strict", z.ZodTypeAny, {
|
|
1112
1112
|
question: string;
|
|
1113
1113
|
guide: {
|
|
1114
|
-
expiresAt: string;
|
|
1115
1114
|
schemaVersion: 1;
|
|
1115
|
+
expiresAt: string;
|
|
1116
1116
|
updatedAt: string;
|
|
1117
1117
|
grantId: string;
|
|
1118
1118
|
cards: {
|
|
1119
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1120
1119
|
title: string;
|
|
1120
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1121
1121
|
updatedAt: string;
|
|
1122
1122
|
cardId: string;
|
|
1123
1123
|
statement: string;
|
|
@@ -1126,13 +1126,13 @@ declare const SupportPassportAnswerModelInputSchema: z.ZodObject<{
|
|
|
1126
1126
|
}, {
|
|
1127
1127
|
question: string;
|
|
1128
1128
|
guide: {
|
|
1129
|
-
expiresAt: string;
|
|
1130
1129
|
schemaVersion: 1;
|
|
1130
|
+
expiresAt: string;
|
|
1131
1131
|
updatedAt: string;
|
|
1132
1132
|
grantId: string;
|
|
1133
1133
|
cards: {
|
|
1134
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1135
1134
|
title: string;
|
|
1135
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1136
1136
|
updatedAt: string;
|
|
1137
1137
|
cardId: string;
|
|
1138
1138
|
statement: string;
|
|
@@ -1249,18 +1249,18 @@ declare const SupportPassportCardSchema: z.ZodObject<{
|
|
|
1249
1249
|
reviewBy: z.ZodEffects<z.ZodString, string, string>;
|
|
1250
1250
|
revision: z.ZodString;
|
|
1251
1251
|
}, "strict", z.ZodTypeAny, {
|
|
1252
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1253
|
-
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1254
1252
|
title: string;
|
|
1253
|
+
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1254
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1255
1255
|
updatedAt: string;
|
|
1256
1256
|
cardId: string;
|
|
1257
1257
|
statement: string;
|
|
1258
1258
|
reviewBy: string;
|
|
1259
1259
|
revision: string;
|
|
1260
1260
|
}, {
|
|
1261
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1262
|
-
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1263
1261
|
title: string;
|
|
1262
|
+
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1263
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1264
1264
|
updatedAt: string;
|
|
1265
1265
|
cardId: string;
|
|
1266
1266
|
statement: string;
|
|
@@ -1277,36 +1277,36 @@ declare const SupportPassportCardListSchema: z.ZodEffects<z.ZodArray<z.ZodObject
|
|
|
1277
1277
|
reviewBy: z.ZodEffects<z.ZodString, string, string>;
|
|
1278
1278
|
revision: z.ZodString;
|
|
1279
1279
|
}, "strict", z.ZodTypeAny, {
|
|
1280
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1281
|
-
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1282
1280
|
title: string;
|
|
1281
|
+
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1282
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1283
1283
|
updatedAt: string;
|
|
1284
1284
|
cardId: string;
|
|
1285
1285
|
statement: string;
|
|
1286
1286
|
reviewBy: string;
|
|
1287
1287
|
revision: string;
|
|
1288
1288
|
}, {
|
|
1289
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1290
|
-
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1291
1289
|
title: string;
|
|
1290
|
+
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1291
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1292
1292
|
updatedAt: string;
|
|
1293
1293
|
cardId: string;
|
|
1294
1294
|
statement: string;
|
|
1295
1295
|
reviewBy: string;
|
|
1296
1296
|
revision: string;
|
|
1297
1297
|
}>, "many">, {
|
|
1298
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1299
|
-
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1300
1298
|
title: string;
|
|
1299
|
+
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1300
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1301
1301
|
updatedAt: string;
|
|
1302
1302
|
cardId: string;
|
|
1303
1303
|
statement: string;
|
|
1304
1304
|
reviewBy: string;
|
|
1305
1305
|
revision: string;
|
|
1306
1306
|
}[], {
|
|
1307
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1308
|
-
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1309
1307
|
title: string;
|
|
1308
|
+
status: "active" | "pending_review" | "rejected" | "superseded" | "archived";
|
|
1309
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1310
1310
|
updatedAt: string;
|
|
1311
1311
|
cardId: string;
|
|
1312
1312
|
statement: string;
|
|
@@ -1327,14 +1327,14 @@ declare const SupportPassportManualDraftInputSchema: z.ZodObject<{
|
|
|
1327
1327
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
1328
1328
|
reviewBy: z.ZodEffects<z.ZodString, string, string>;
|
|
1329
1329
|
}, "strict", z.ZodTypeAny, {
|
|
1330
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1331
1330
|
title: string;
|
|
1331
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1332
1332
|
statement: string;
|
|
1333
1333
|
reviewBy: string;
|
|
1334
1334
|
principal: string;
|
|
1335
1335
|
}, {
|
|
1336
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1337
1336
|
title: string;
|
|
1337
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1338
1338
|
statement: string;
|
|
1339
1339
|
reviewBy: string;
|
|
1340
1340
|
principal: string;
|
|
@@ -1366,8 +1366,8 @@ declare const SupportPassportReplaceCardInputSchema: z.ZodObject<{
|
|
|
1366
1366
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
1367
1367
|
reviewBy: z.ZodEffects<z.ZodString, string, string>;
|
|
1368
1368
|
}, "strict", z.ZodTypeAny, {
|
|
1369
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1370
1369
|
title: string;
|
|
1370
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1371
1371
|
cardId: string;
|
|
1372
1372
|
statement: string;
|
|
1373
1373
|
reviewBy: string;
|
|
@@ -1375,8 +1375,8 @@ declare const SupportPassportReplaceCardInputSchema: z.ZodObject<{
|
|
|
1375
1375
|
expectedRevision: string;
|
|
1376
1376
|
reasonCode?: string | undefined;
|
|
1377
1377
|
}, {
|
|
1378
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1379
1378
|
title: string;
|
|
1379
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1380
1380
|
cardId: string;
|
|
1381
1381
|
statement: string;
|
|
1382
1382
|
reviewBy: string;
|
|
@@ -1435,10 +1435,10 @@ declare const SupportPassportGrantStateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1435
1435
|
expiresAt: z.ZodEffects<z.ZodString, string, string>;
|
|
1436
1436
|
revokedAt: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
1437
1437
|
}, "strict", z.ZodTypeAny, {
|
|
1438
|
-
|
|
1438
|
+
schemaVersion: 1;
|
|
1439
1439
|
createdAt: string;
|
|
1440
1440
|
expiresAt: string;
|
|
1441
|
-
|
|
1441
|
+
namespace: string;
|
|
1442
1442
|
stateVersion: number;
|
|
1443
1443
|
grantId: string;
|
|
1444
1444
|
principalHash: string;
|
|
@@ -1450,10 +1450,10 @@ declare const SupportPassportGrantStateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1450
1450
|
}[];
|
|
1451
1451
|
revokedAt?: string | undefined;
|
|
1452
1452
|
}, {
|
|
1453
|
-
|
|
1453
|
+
schemaVersion: 1;
|
|
1454
1454
|
createdAt: string;
|
|
1455
1455
|
expiresAt: string;
|
|
1456
|
-
|
|
1456
|
+
namespace: string;
|
|
1457
1457
|
stateVersion: number;
|
|
1458
1458
|
grantId: string;
|
|
1459
1459
|
principalHash: string;
|
|
@@ -1465,10 +1465,10 @@ declare const SupportPassportGrantStateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1465
1465
|
}[];
|
|
1466
1466
|
revokedAt?: string | undefined;
|
|
1467
1467
|
}>, {
|
|
1468
|
-
|
|
1468
|
+
schemaVersion: 1;
|
|
1469
1469
|
createdAt: string;
|
|
1470
1470
|
expiresAt: string;
|
|
1471
|
-
|
|
1471
|
+
namespace: string;
|
|
1472
1472
|
stateVersion: number;
|
|
1473
1473
|
grantId: string;
|
|
1474
1474
|
principalHash: string;
|
|
@@ -1480,10 +1480,10 @@ declare const SupportPassportGrantStateSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1480
1480
|
}[];
|
|
1481
1481
|
revokedAt?: string | undefined;
|
|
1482
1482
|
}, {
|
|
1483
|
-
|
|
1483
|
+
schemaVersion: 1;
|
|
1484
1484
|
createdAt: string;
|
|
1485
1485
|
expiresAt: string;
|
|
1486
|
-
|
|
1486
|
+
namespace: string;
|
|
1487
1487
|
stateVersion: number;
|
|
1488
1488
|
grantId: string;
|
|
1489
1489
|
principalHash: string;
|
|
@@ -1654,9 +1654,9 @@ declare const SupportPassportOwnerGrantSchema: z.ZodObject<{
|
|
|
1654
1654
|
revokedAt: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
1655
1655
|
status: z.ZodEnum<["active", "expired", "revoked"]>;
|
|
1656
1656
|
}, "strict", z.ZodTypeAny, {
|
|
1657
|
+
status: "active" | "expired" | "revoked";
|
|
1657
1658
|
createdAt: string;
|
|
1658
1659
|
expiresAt: string;
|
|
1659
|
-
status: "active" | "expired" | "revoked";
|
|
1660
1660
|
stateVersion: number;
|
|
1661
1661
|
grantId: string;
|
|
1662
1662
|
cards: {
|
|
@@ -1665,9 +1665,9 @@ declare const SupportPassportOwnerGrantSchema: z.ZodObject<{
|
|
|
1665
1665
|
}[];
|
|
1666
1666
|
revokedAt?: string | undefined;
|
|
1667
1667
|
}, {
|
|
1668
|
+
status: "active" | "expired" | "revoked";
|
|
1668
1669
|
createdAt: string;
|
|
1669
1670
|
expiresAt: string;
|
|
1670
|
-
status: "active" | "expired" | "revoked";
|
|
1671
1671
|
stateVersion: number;
|
|
1672
1672
|
grantId: string;
|
|
1673
1673
|
cards: {
|
|
@@ -1695,9 +1695,9 @@ declare const SupportPassportCreatedGrantSchema: z.ZodObject<{
|
|
|
1695
1695
|
revokedAt: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
1696
1696
|
status: z.ZodEnum<["active", "expired", "revoked"]>;
|
|
1697
1697
|
}, "strict", z.ZodTypeAny, {
|
|
1698
|
+
status: "active" | "expired" | "revoked";
|
|
1698
1699
|
createdAt: string;
|
|
1699
1700
|
expiresAt: string;
|
|
1700
|
-
status: "active" | "expired" | "revoked";
|
|
1701
1701
|
stateVersion: number;
|
|
1702
1702
|
grantId: string;
|
|
1703
1703
|
cards: {
|
|
@@ -1706,9 +1706,9 @@ declare const SupportPassportCreatedGrantSchema: z.ZodObject<{
|
|
|
1706
1706
|
}[];
|
|
1707
1707
|
revokedAt?: string | undefined;
|
|
1708
1708
|
}, {
|
|
1709
|
+
status: "active" | "expired" | "revoked";
|
|
1709
1710
|
createdAt: string;
|
|
1710
1711
|
expiresAt: string;
|
|
1711
|
-
status: "active" | "expired" | "revoked";
|
|
1712
1712
|
stateVersion: number;
|
|
1713
1713
|
grantId: string;
|
|
1714
1714
|
cards: {
|
|
@@ -1721,9 +1721,9 @@ declare const SupportPassportCreatedGrantSchema: z.ZodObject<{
|
|
|
1721
1721
|
}, "strict", z.ZodTypeAny, {
|
|
1722
1722
|
secret: string;
|
|
1723
1723
|
grant: {
|
|
1724
|
+
status: "active" | "expired" | "revoked";
|
|
1724
1725
|
createdAt: string;
|
|
1725
1726
|
expiresAt: string;
|
|
1726
|
-
status: "active" | "expired" | "revoked";
|
|
1727
1727
|
stateVersion: number;
|
|
1728
1728
|
grantId: string;
|
|
1729
1729
|
cards: {
|
|
@@ -1735,9 +1735,9 @@ declare const SupportPassportCreatedGrantSchema: z.ZodObject<{
|
|
|
1735
1735
|
}, {
|
|
1736
1736
|
secret: string;
|
|
1737
1737
|
grant: {
|
|
1738
|
+
status: "active" | "expired" | "revoked";
|
|
1738
1739
|
createdAt: string;
|
|
1739
1740
|
expiresAt: string;
|
|
1740
|
-
status: "active" | "expired" | "revoked";
|
|
1741
1741
|
stateVersion: number;
|
|
1742
1742
|
grantId: string;
|
|
1743
1743
|
cards: {
|
|
@@ -1754,14 +1754,14 @@ declare const SupportPassportPublicCardSchema: z.ZodObject<{
|
|
|
1754
1754
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
1755
1755
|
updatedAt: z.ZodEffects<z.ZodString, string, string>;
|
|
1756
1756
|
}, "strict", z.ZodTypeAny, {
|
|
1757
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1758
1757
|
title: string;
|
|
1758
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1759
1759
|
updatedAt: string;
|
|
1760
1760
|
cardId: string;
|
|
1761
1761
|
statement: string;
|
|
1762
1762
|
}, {
|
|
1763
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1764
1763
|
title: string;
|
|
1764
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1765
1765
|
updatedAt: string;
|
|
1766
1766
|
cardId: string;
|
|
1767
1767
|
statement: string;
|
|
@@ -1778,38 +1778,38 @@ declare const SupportPassportPublicGuideSchema: z.ZodObject<{
|
|
|
1778
1778
|
category: z.ZodEnum<["communication", "environment", "transitions", "sensory", "regulation", "interests", "other"]>;
|
|
1779
1779
|
updatedAt: z.ZodEffects<z.ZodString, string, string>;
|
|
1780
1780
|
}, "strict", z.ZodTypeAny, {
|
|
1781
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1782
1781
|
title: string;
|
|
1782
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1783
1783
|
updatedAt: string;
|
|
1784
1784
|
cardId: string;
|
|
1785
1785
|
statement: string;
|
|
1786
1786
|
}, {
|
|
1787
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1788
1787
|
title: string;
|
|
1788
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1789
1789
|
updatedAt: string;
|
|
1790
1790
|
cardId: string;
|
|
1791
1791
|
statement: string;
|
|
1792
1792
|
}>, "many">;
|
|
1793
1793
|
}, "strict", z.ZodTypeAny, {
|
|
1794
|
-
expiresAt: string;
|
|
1795
1794
|
schemaVersion: 1;
|
|
1795
|
+
expiresAt: string;
|
|
1796
1796
|
updatedAt: string;
|
|
1797
1797
|
grantId: string;
|
|
1798
1798
|
cards: {
|
|
1799
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1800
1799
|
title: string;
|
|
1800
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1801
1801
|
updatedAt: string;
|
|
1802
1802
|
cardId: string;
|
|
1803
1803
|
statement: string;
|
|
1804
1804
|
}[];
|
|
1805
1805
|
}, {
|
|
1806
|
-
expiresAt: string;
|
|
1807
1806
|
schemaVersion: 1;
|
|
1807
|
+
expiresAt: string;
|
|
1808
1808
|
updatedAt: string;
|
|
1809
1809
|
grantId: string;
|
|
1810
1810
|
cards: {
|
|
1811
|
-
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1812
1811
|
title: string;
|
|
1812
|
+
category: "other" | "communication" | "environment" | "transitions" | "sensory" | "regulation" | "interests";
|
|
1813
1813
|
updatedAt: string;
|
|
1814
1814
|
cardId: string;
|
|
1815
1815
|
statement: string;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|