@remnic/core 9.45.3 → 9.45.4
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/abort-error.d.ts +2 -1
- package/dist/abort-error.js +3 -1
- package/dist/access-admin-ops-surface.d.ts +14 -10
- package/dist/access-admin-ops-surface.js +84 -76
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -10
- package/dist/access-authorization-probe.js +85 -77
- package/dist/access-boundary.d.ts +15 -11
- package/dist/access-boundary.js +84 -76
- package/dist/access-citation-namespace.js +2 -2
- package/dist/access-cli.js +193 -181
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +16 -0
- package/dist/access-coding-context-resolution.js +13 -0
- package/dist/access-coding-context-resolution.js.map +1 -0
- package/dist/access-extraction-force-flush.d.ts +14 -10
- package/dist/access-extraction-force-flush.js +84 -76
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-lcm-compaction.d.ts +16 -12
- package/dist/access-http-lcm-compaction.js +3 -3
- package/dist/access-http-lifecycle-flush.d.ts +14 -10
- package/dist/access-http-lifecycle-flush.js +2 -2
- package/dist/access-http-offline-stream.d.ts +123 -0
- package/dist/access-http-offline-stream.js +10 -0
- package/dist/access-http-offline-stream.js.map +1 -0
- package/dist/access-http-query.js +84 -76
- package/dist/access-http.d.ts +15 -10
- package/dist/access-http.js +105 -92
- package/dist/access-identity-continuity-surface.d.ts +9 -8
- package/dist/access-identity-continuity-surface.js +84 -76
- package/dist/access-lcm-surface.d.ts +14 -10
- package/dist/access-lcm-surface.js +84 -76
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +14 -10
- package/dist/access-mcp.js +95 -83
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-5yZ4g6F8.d.ts → access-namespace-preflight-CWUDwB4M.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +84 -76
- package/dist/access-observe-helpers.d.ts +1 -0
- package/dist/access-observe-helpers.js +1 -1
- package/dist/access-observe-write-surface.d.ts +16 -10
- package/dist/access-observe-write-surface.js +84 -76
- package/dist/access-offline-manifest.d.ts +104 -0
- package/dist/access-offline-manifest.js +45 -0
- package/dist/access-offline-manifest.js.map +1 -0
- package/dist/access-operations-batch.js +86 -78
- package/dist/access-operations.d.ts +15 -11
- package/dist/access-operations.js +91 -80
- package/dist/access-recall-concurrency.d.ts +16 -26
- package/dist/access-recall-concurrency.js +86 -77
- package/dist/access-recall-response.d.ts +18 -14
- package/dist/access-recall-response.js +84 -76
- package/dist/access-recall-surface.d.ts +29 -24
- package/dist/access-recall-surface.js +84 -76
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-CiJRsgAB.d.ts → access-service-CsU-ljFD.d.ts} +25 -16
- package/dist/access-service-helpers.d.ts +14 -10
- package/dist/access-service.d.ts +14 -10
- package/dist/access-service.js +84 -76
- package/dist/access-surface-catalog.d.ts +14 -10
- package/dist/access-surface-catalog.js +4 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +10 -8
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +7 -7
- package/dist/adapters/registry.js +3 -3
- package/dist/{auto-sync-5OE5QOZB.js → auto-sync-UPTUVE4X.js} +6 -6
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-learner.js +1 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +9 -8
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +23 -22
- 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/capabilities.d.ts +2 -1
- package/dist/{capsule-merge-IDWJPCWK.js → capsule-merge-Q6AR3XL7.js} +67 -54
- package/dist/capsule-merge-Q6AR3XL7.js.map +1 -0
- package/dist/{catalog-scBmy0sO.d.ts → catalog-bctMURhN.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +27 -26
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-VUPTKTDV.js → chunk-2MRHJNWL.js} +3 -3
- package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
- package/dist/{chunk-5IVLTFOV.js → chunk-44N6ESJ4.js} +2 -2
- package/dist/{chunk-WOCNN776.js → chunk-4POAMKV6.js} +100 -41
- package/dist/chunk-4POAMKV6.js.map +1 -0
- package/dist/{chunk-HO3QBJEY.js → chunk-5546W5SI.js} +2 -2
- package/dist/{chunk-U7GW7NE7.js → chunk-5CEECY6P.js} +10 -10
- package/dist/{chunk-4UH4BTGK.js → chunk-5SNZSWWR.js} +82 -82
- package/dist/{chunk-6CZPDBJS.js → chunk-5U7ID3EZ.js} +3 -3
- package/dist/{chunk-GF22HWS2.js → chunk-6NNNURLK.js} +7 -7
- package/dist/chunk-773TRRGT.js +36 -0
- package/dist/chunk-773TRRGT.js.map +1 -0
- package/dist/chunk-7CITSYSH.js +242 -0
- package/dist/chunk-7CITSYSH.js.map +1 -0
- package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
- package/dist/{chunk-E5UK4VPE.js → chunk-7SHJHPTY.js} +5 -5
- package/dist/{chunk-UVIKWC7M.js → chunk-7YERSTN7.js} +17 -17
- package/dist/{chunk-DLVPUX7U.js → chunk-7YKVM5H3.js} +8 -6
- package/dist/chunk-7YKVM5H3.js.map +1 -0
- package/dist/{chunk-3CE77VAP.js → chunk-A4JMGKCD.js} +87 -74
- package/dist/chunk-A4JMGKCD.js.map +1 -0
- package/dist/chunk-A5KNZSNA.js +26 -0
- package/dist/chunk-A5KNZSNA.js.map +1 -0
- package/dist/{chunk-S2NCTZGJ.js → chunk-AJQ57VV3.js} +15 -15
- package/dist/chunk-AJQ57VV3.js.map +1 -0
- package/dist/{chunk-CUM2BBPN.js → chunk-AUMWZSE7.js} +19 -10
- package/dist/chunk-AUMWZSE7.js.map +1 -0
- package/dist/{chunk-XYTOI63Z.js → chunk-BGHFOD5A.js} +19 -11
- package/dist/chunk-BGHFOD5A.js.map +1 -0
- package/dist/{chunk-BUE5E2HL.js → chunk-BGLY7EEM.js} +5 -314
- package/dist/chunk-BGLY7EEM.js.map +1 -0
- package/dist/chunk-BIPBQQFI.js +44 -0
- package/dist/chunk-BIPBQQFI.js.map +1 -0
- package/dist/{chunk-S5SLVSVY.js → chunk-BQIFZ2MP.js} +5 -5
- package/dist/chunk-BTTPKDIL.js +34 -0
- package/dist/{chunk-PVGDJXVK.js.map → chunk-BTTPKDIL.js.map} +1 -1
- package/dist/{chunk-E53DSZEN.js → chunk-C26TE27X.js} +3 -3
- package/dist/{chunk-LZ4LDKHZ.js → chunk-CLB32OHM.js} +6 -6
- package/dist/{chunk-Q6IP2ARR.js → chunk-CSOYVTRX.js} +2 -2
- package/dist/{chunk-XOQSEF7X.js → chunk-CVILPI77.js} +6 -6
- package/dist/chunk-D3I2MCN7.js +29 -0
- package/dist/chunk-D3I2MCN7.js.map +1 -0
- package/dist/{chunk-A5OJCXZL.js → chunk-DSUAAZZX.js} +15 -4
- package/dist/chunk-DSUAAZZX.js.map +1 -0
- package/dist/{chunk-HREE4JHI.js → chunk-DYVMXPCF.js} +486 -287
- package/dist/chunk-DYVMXPCF.js.map +1 -0
- package/dist/{chunk-J7VGGECD.js → chunk-DZPFMQZ7.js} +1 -1
- package/dist/chunk-DZPFMQZ7.js.map +1 -0
- package/dist/{chunk-PDLBLTOK.js → chunk-EITZHSX6.js} +9 -9
- package/dist/{chunk-D3J5SLQK.js → chunk-EJHEWCGQ.js} +81 -20
- package/dist/chunk-EJHEWCGQ.js.map +1 -0
- package/dist/{chunk-WUNIWKY4.js → chunk-ELIL2A37.js} +6 -6
- package/dist/{chunk-E6PNLPGJ.js → chunk-FZP32336.js} +806 -470
- package/dist/chunk-FZP32336.js.map +1 -0
- package/dist/{chunk-HZFHQ4AQ.js → chunk-G7A5HLUS.js} +23 -17
- package/dist/chunk-G7A5HLUS.js.map +1 -0
- package/dist/{chunk-CINZGPSJ.js → chunk-GUMZC2BO.js} +2 -2
- package/dist/{chunk-H24WNPA2.js → chunk-GWFSVJ4P.js} +3 -3
- package/dist/{chunk-7XC2HX75.js → chunk-GYPQL6XN.js} +157 -16
- package/dist/chunk-GYPQL6XN.js.map +1 -0
- package/dist/{chunk-TSH56VPU.js → chunk-HAYSYUAB.js} +2 -2
- package/dist/{chunk-TDHTVMPG.js → chunk-HFPASSFV.js} +7 -2
- package/dist/chunk-HFPASSFV.js.map +1 -0
- package/dist/chunk-J2WC5LF4.js +395 -0
- package/dist/chunk-J2WC5LF4.js.map +1 -0
- package/dist/{chunk-PKNLM44P.js → chunk-JH6BPLOP.js} +9 -9
- package/dist/{chunk-KXB4VXHY.js → chunk-JIYDRBVZ.js} +2 -2
- package/dist/chunk-JV3C2MNQ.js +74 -0
- package/dist/chunk-JV3C2MNQ.js.map +1 -0
- package/dist/{chunk-AV5ZEH4M.js → chunk-KVJRXN2E.js} +2 -2
- package/dist/{chunk-JVLCVFQ4.js → chunk-KXEFRMCF.js} +3 -3
- package/dist/{chunk-WFTIGIIS.js → chunk-L6CQ7WIW.js} +5 -5
- package/dist/{chunk-EJUEXZHX.js → chunk-LLJMAULE.js} +2 -2
- package/dist/{chunk-N5Z4EVOR.js → chunk-LNEWDF2A.js} +36 -11
- package/dist/chunk-LNEWDF2A.js.map +1 -0
- package/dist/{chunk-AS7YMSL6.js → chunk-M23RF3LJ.js} +4 -4
- package/dist/{chunk-UYLMNVY6.js → chunk-MDISBSYA.js} +16 -9
- package/dist/chunk-MDISBSYA.js.map +1 -0
- package/dist/{chunk-3F2LKUMU.js → chunk-NIS256NW.js} +2 -2
- package/dist/{chunk-YIAA2X3D.js → chunk-NK5RGJ65.js} +3 -3
- package/dist/chunk-NLDVVWCL.js +84 -0
- package/dist/chunk-NLDVVWCL.js.map +1 -0
- package/dist/{chunk-OQ5PRDDS.js → chunk-NTOIP2E6.js} +6 -6
- package/dist/{chunk-HLPD7B7P.js → chunk-NUEQKLNB.js} +2 -2
- package/dist/{chunk-4J7G5SY4.js → chunk-NZBZ7IS2.js} +72 -24
- package/dist/chunk-NZBZ7IS2.js.map +1 -0
- package/dist/{chunk-3TBLDMJA.js → chunk-O4KMGRXE.js} +5 -2
- package/dist/chunk-O4KMGRXE.js.map +1 -0
- package/dist/{chunk-33PLLLL7.js → chunk-P7NGM24P.js} +6 -6
- package/dist/{chunk-7TWUCYER.js → chunk-PNRA7FAD.js} +7 -7
- package/dist/{chunk-5I4M26Q7.js → chunk-QBSFOKY6.js} +4 -4
- package/dist/{chunk-QJAQNXWI.js → chunk-QCECHYZL.js} +76 -79
- package/dist/chunk-QCECHYZL.js.map +1 -0
- package/dist/{chunk-P4DRWEYC.js → chunk-QVSBTCVP.js} +2 -2
- package/dist/{chunk-AAIUERNB.js → chunk-R5RFK3CB.js} +6 -6
- package/dist/{chunk-WDISJRMG.js → chunk-RMMVQQA6.js} +2 -2
- package/dist/{chunk-KWMXR7XS.js → chunk-S2V7RUCL.js} +8 -1
- package/dist/{chunk-KWMXR7XS.js.map → chunk-S2V7RUCL.js.map} +1 -1
- package/dist/{chunk-5SM35XZR.js → chunk-S5NZBKKQ.js} +2 -2
- package/dist/{chunk-VNA7W7QF.js → chunk-SVH57F5Z.js} +12 -4
- package/dist/chunk-SVH57F5Z.js.map +1 -0
- package/dist/{chunk-WIPEXG6R.js → chunk-SXIMQLGV.js} +2 -2
- package/dist/{chunk-RVLJEII5.js → chunk-SYUBB3WM.js} +256 -187
- package/dist/chunk-SYUBB3WM.js.map +1 -0
- package/dist/{chunk-OAEQLRCY.js → chunk-TN76AKO3.js} +5 -5
- package/dist/{chunk-QN25OCUF.js → chunk-TQ4GD737.js} +5 -5
- package/dist/{chunk-VCD4PSK2.js → chunk-TQZ4DVBC.js} +7 -4
- package/dist/chunk-TQZ4DVBC.js.map +1 -0
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-DNWXFTLD.js → chunk-TYISDI6B.js} +2 -2
- package/dist/{chunk-4LMA77JH.js → chunk-U2VLVBBH.js} +3 -3
- package/dist/{chunk-5ZE7QHTK.js → chunk-ULVR5KG7.js} +5 -5
- package/dist/{chunk-NVRYW264.js → chunk-UQWIKLQK.js} +18 -15
- package/dist/chunk-UQWIKLQK.js.map +1 -0
- package/dist/{chunk-YV32N67O.js → chunk-URS5GSM7.js} +1 -1
- package/dist/chunk-URS5GSM7.js.map +1 -0
- package/dist/{chunk-4B77XSG5.js → chunk-UV72DEZD.js} +5 -5
- package/dist/{chunk-S2BBISHU.js → chunk-VANZKHTN.js} +3 -3
- package/dist/chunk-VHFXP27N.js +250 -0
- package/dist/chunk-VHFXP27N.js.map +1 -0
- package/dist/{chunk-3Y224NYC.js → chunk-VYISFWVX.js} +2 -2
- package/dist/{chunk-TIHMZFIV.js → chunk-W3IC7QOY.js} +3 -3
- package/dist/{chunk-NRV4Y3PM.js → chunk-W4FBGYGK.js} +1 -1
- package/dist/{chunk-P2BM76KT.js → chunk-WAS4HV46.js} +174 -43
- package/dist/chunk-WAS4HV46.js.map +1 -0
- package/dist/{chunk-57QKLRBV.js → chunk-WB7JSQCP.js} +2 -1
- package/dist/chunk-WB7JSQCP.js.map +1 -0
- package/dist/chunk-WGP57SR3.js +68 -0
- package/dist/chunk-WGP57SR3.js.map +1 -0
- package/dist/{chunk-ECK75GDJ.js → chunk-WQIHRA5F.js} +43 -24
- package/dist/chunk-WQIHRA5F.js.map +1 -0
- package/dist/{chunk-MU7ZHSZE.js → chunk-WZFAPHIK.js} +2 -2
- package/dist/{chunk-T2TTP3KU.js → chunk-X4IDNPOS.js} +2 -2
- package/dist/{chunk-BLAKS3CP.js → chunk-XL3TATMJ.js} +3 -3
- package/dist/{chunk-W4XJFLAL.js → chunk-XPRJSHNI.js} +2 -2
- package/dist/{chunk-5TFP4CUL.js → chunk-XQ3HXAQH.js} +14 -11
- package/dist/chunk-XQ3HXAQH.js.map +1 -0
- package/dist/{chunk-VWAXN2BN.js → chunk-XSFHWBQO.js} +93 -31
- package/dist/chunk-XSFHWBQO.js.map +1 -0
- package/dist/{chunk-DL7ZD3JH.js → chunk-XTAUXTDO.js} +14 -9
- package/dist/chunk-XTAUXTDO.js.map +1 -0
- package/dist/{chunk-JE7EK33X.js → chunk-Y7HRYCNW.js} +2 -2
- package/dist/{chunk-E6EE5B67.js → chunk-YK6BDDHP.js} +4 -4
- package/dist/{chunk-ES36HTSC.js → chunk-YLHM5BQQ.js} +3 -3
- package/dist/{chunk-RN7DY3FC.js → chunk-YMAQDHQM.js} +31 -12
- package/dist/chunk-YMAQDHQM.js.map +1 -0
- package/dist/{chunk-ULARSG5Z.js → chunk-YN6ASZUG.js} +10 -8
- package/dist/{chunk-ULARSG5Z.js.map → chunk-YN6ASZUG.js.map} +1 -1
- package/dist/{chunk-IKKWIPYN.js → chunk-YYQAKIDJ.js} +37 -1
- package/dist/chunk-YYQAKIDJ.js.map +1 -0
- package/dist/{chunk-BJKPPZ6Z.js → chunk-ZFGZ6PZ2.js} +2 -2
- package/dist/{chunk-CJ2ZR7UA.js → chunk-ZI32MKDW.js} +267 -214
- package/dist/chunk-ZI32MKDW.js.map +1 -0
- package/dist/{chunk-64UDOIMI.js → chunk-ZLQ37WJX.js} +2 -2
- package/dist/chunk-ZMAYKGPN.js +351 -0
- package/dist/chunk-ZMAYKGPN.js.map +1 -0
- package/dist/{cli-BUGN3d6_.d.ts → cli-BBHDtG36.d.ts} +5 -5
- package/dist/cli.d.ts +16 -12
- package/dist/cli.js +138 -124
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +24 -23
- 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 +10 -8
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +23 -22
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +26 -25
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/consolidation-undo.js +10 -7
- package/dist/consolidation-undo.js.map +1 -1
- package/dist/contradiction/index.d.ts +3 -2
- package/dist/converge-config.d.ts +2 -1
- package/dist/convergence-refresh.d.ts +4 -3
- package/dist/convergence-refresh.js +27 -26
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +42 -41
- package/dist/day-summary.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer-wiring.js +2 -2
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-retrieval-boundaries.js +1 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +24 -23
- package/dist/entity-schema.d.ts +2 -1
- package/dist/explicit-capture.d.ts +9 -8
- package/dist/explicit-capture.js +11 -9
- package/dist/external-wiki-access.d.ts +127 -0
- package/dist/external-wiki-access.js +186 -0
- package/dist/external-wiki-access.js.map +1 -0
- package/dist/external-wiki-cli.d.ts +13 -0
- package/dist/external-wiki-cli.js +96 -0
- package/dist/external-wiki-cli.js.map +1 -0
- package/dist/external-wiki-collection-registration.d.ts +39 -0
- package/dist/external-wiki-collection-registration.js +79 -0
- package/dist/external-wiki-collection-registration.js.map +1 -0
- package/dist/external-wiki-collection.d.ts +50 -0
- package/dist/external-wiki-collection.js +387 -0
- package/dist/external-wiki-collection.js.map +1 -0
- package/dist/external-wiki-config.d.ts +13 -0
- package/dist/external-wiki-config.js +13 -0
- package/dist/external-wiki-config.js.map +1 -0
- package/dist/external-wiki-guard.d.ts +11 -0
- package/dist/external-wiki-guard.js +18 -0
- package/dist/external-wiki-guard.js.map +1 -0
- package/dist/external-wiki-mcp-tools.d.ts +123 -0
- package/dist/external-wiki-mcp-tools.js +8 -0
- package/dist/external-wiki-mcp-tools.js.map +1 -0
- package/dist/external-wiki-search.d.ts +42 -0
- package/dist/external-wiki-search.js +11 -0
- package/dist/external-wiki-search.js.map +1 -0
- package/dist/external-wiki.d.ts +43 -0
- package/dist/external-wiki.js +16 -0
- package/dist/external-wiki.js.map +1 -0
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-source-grounding-helpers.d.ts +5 -3
- package/dist/extraction-source-grounding-helpers.js +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.js +2 -2
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction-source-grounding.js +5 -5
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +45 -43
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/graph-edge-reinforcement.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/in-flight-reads.d.ts +2 -1
- package/dist/index.d.ts +362 -350
- package/dist/index.js +291 -259
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +8 -8
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +24 -23
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +24 -23
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +26 -25
- package/dist/{maintenance-LbuS2rUA.d.ts → maintenance-D2mveyCd.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +14 -10
- package/dist/mcp-read-only-tools.js +1 -1
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-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-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +40 -39
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +18 -18
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +23 -22
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +11 -9
- package/dist/offline-sync.d.ts +29 -3
- package/dist/offline-sync.js +6 -2
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +45 -44
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-doctor-replica.js +3 -3
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +59 -55
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +36 -33
- package/dist/{orchestrator-rHiWt32X.d.ts → orchestrator-DJYlwiUv.d.ts} +14 -7
- package/dist/orchestrator.d.ts +9 -8
- package/dist/orchestrator.js +201 -189
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-W_97O8BV.d.ts → pipeline-CNjY4wk3.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/policy-runtime.js +1 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/provenance.js +2 -2
- package/dist/{qmd-LWtMofAf.d.ts → qmd-C0UDZidt.d.ts} +9 -7
- package/dist/qmd-preflight.d.ts +5 -4
- package/dist/qmd-preflight.js +2 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +4 -3
- package/dist/qmd.js +5 -5
- 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-planner-llm.d.ts +2 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +8 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +12 -2
- package/dist/reconcile/cursor.js +46 -7
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +9 -2
- package/dist/reconcile/manifest.js +15 -268
- package/dist/reconcile/manifest.js.map +1 -1
- package/dist/reconcile/plan.d.ts +4 -1
- package/dist/reconcile/plan.js +4 -4
- 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-divergence.js +2 -2
- package/dist/replica-peers-config.d.ts +2 -1
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +12 -10
- package/dist/retrieval-agents.d.ts +4 -3
- package/dist/retrieval-agents.js +2 -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/salvage-envelope.d.ts +2 -1
- package/dist/schemas.d.ts +32 -32
- package/dist/{scope-profiles-BiQKOE-p.d.ts → scope-profiles-BJzp2F5A.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/embed-helper.js +3 -3
- package/dist/search/factory.d.ts +4 -2
- package/dist/search/factory.js +20 -18
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +22 -22
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/lancedb-backend.js +4 -4
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.js +4 -4
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/orama-backend.js +4 -4
- package/dist/search/port.d.ts +18 -1
- package/dist/search/port.js +1 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/search/remote-backend.js +2 -2
- package/dist/secure-store/index.js +2 -2
- package/dist/{semantic-consolidation-dHYCyqgh.d.ts → semantic-consolidation-D4KAZO2G.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +25 -24
- package/dist/semantic-rule-promotion.js +23 -22
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +24 -23
- package/dist/{service-DJG3KCQ4.d.ts → service-BeDxSqE-.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +2 -1
- package/dist/shared-context/manager.js +2 -2
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +42 -40
- package/dist/{storage-F9FVh-w9.d.ts → storage-DfjxusTE.d.ts} +24 -12
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +25 -24
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +2 -1
- 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/tool-scoped-memory.d.ts +5 -1
- package/dist/tool-scoped-memory.js +3 -1
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/types.d.ts +12 -12
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-rEwubvim.d.ts → types-yX_FwERf.d.ts} +8 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +24 -23
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +2 -2
- package/src/abort-error.ts +17 -0
- package/src/access-admin-ops-surface.ts +1 -0
- package/src/access-boundary.ts +1 -0
- package/src/access-coding-context-resolution.ts +42 -0
- package/src/access-extraction-force-flush.ts +38 -2
- package/src/access-http-lcm-compaction.ts +5 -2
- package/src/access-http-offline-stream.ts +79 -0
- package/src/access-http.test.ts +310 -3
- package/src/access-http.ts +85 -21
- package/src/access-mcp-output-schemas.ts +36 -0
- package/src/access-mcp.test.ts +95 -1
- package/src/access-mcp.ts +7 -9
- package/src/access-observe-helpers.ts +64 -22
- package/src/access-observe-write-surface.ts +8 -0
- package/src/access-offline-manifest.ts +54 -0
- package/src/access-operations-batch.ts +3 -3
- package/src/access-operations.ts +13 -7
- package/src/access-recall-concurrency.ts +3 -27
- package/src/access-recall-surface.ts +3 -0
- package/src/access-service-health.test.ts +32 -7
- package/src/access-service-namespace.test.ts +55 -0
- package/src/access-service-observe-idempotency.test.ts +34 -2
- package/src/access-service-observe-lcm-parity.test.ts +138 -3
- package/src/access-service-observe-scope.test.ts +160 -1
- package/src/access-service-offline-file-content.test.ts +345 -1
- package/src/access-service.ts +86 -59
- package/src/access-surface-catalog.ts +4 -0
- package/src/admin/admin-surfaces.ts +2 -0
- package/src/binary-lifecycle/pipeline.test.ts +106 -1
- package/src/binary-lifecycle/pipeline.ts +3 -0
- package/src/coding/git-context.test.ts +47 -0
- package/src/coding/git-context.ts +129 -27
- package/src/config.test.ts +24 -0
- package/src/config.ts +9 -12
- package/src/connector-provenance.test.ts +101 -0
- package/src/consolidation-undo.ts +3 -0
- package/src/convergence-refresh.ts +14 -2
- package/src/correction/correction-access-wiring.ts +9 -7
- package/src/correction/correction-executor.test.ts +206 -2
- package/src/correction/correction-executor.ts +29 -20
- package/src/correction/correction-planner.test.ts +36 -0
- package/src/correction/correction-planner.ts +9 -15
- package/src/correction/correction-service.ts +3 -1
- package/src/correction/correction-storage-integration.test.ts +77 -0
- package/src/correction/correction-surfaces.test.ts +41 -28
- package/src/correction/passive-capture.test.ts +59 -0
- package/src/correction/passive-capture.ts +4 -1
- package/src/entity-retrieval-boundaries.ts +17 -4
- package/src/entity-retrieval.ts +27 -6
- package/src/external-wiki-access.test.ts +65 -0
- package/src/external-wiki-access.ts +31 -0
- package/src/external-wiki-cli.ts +92 -0
- package/src/external-wiki-collection-registration.test.ts +163 -0
- package/src/external-wiki-collection-registration.ts +101 -0
- package/src/external-wiki-collection.test.ts +502 -0
- package/src/external-wiki-collection.ts +503 -0
- package/src/external-wiki-config.test.ts +135 -0
- package/src/external-wiki-config.ts +100 -0
- package/src/external-wiki-guard.ts +83 -0
- package/src/external-wiki-mcp-tools.ts +23 -0
- package/src/external-wiki-search.test.ts +301 -0
- package/src/external-wiki-search.ts +362 -0
- package/src/external-wiki.test.ts +240 -0
- package/src/external-wiki.ts +453 -0
- package/src/extraction-scope-source-agent.test.ts +21 -0
- package/src/extraction-source-grounding-helpers.ts +243 -53
- package/src/extraction-source-grounding-rules.ts +133 -39
- package/src/extraction-source-grounding.test.ts +363 -33
- package/src/extraction-timeout.test.ts +1 -0
- package/src/extraction-watermark.test.ts +150 -7
- package/src/extraction.ts +8 -1
- package/src/index.ts +8 -0
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/offline-sync.test.ts +194 -0
- package/src/offline-sync.ts +217 -13
- package/src/orchestration/external-wiki-recall-guard.test.ts +94 -0
- package/src/orchestration/extraction-persist.ts +19 -2
- package/src/orchestration/extraction-run-helpers.ts +37 -19
- package/src/orchestration/extraction-run.test.ts +171 -2
- package/src/orchestration/extraction-run.ts +11 -13
- package/src/orchestration/extraction-watermark.ts +106 -17
- package/src/orchestration/generic-recall-paths.ts +14 -0
- package/src/orchestration/orchestrator-helpers.ts +2 -0
- package/src/orchestration/orchestrator-init.ts +9 -0
- package/src/orchestration/recall-internal-deps.ts +6 -0
- package/src/orchestration/recall-internal.ts +154 -33
- package/src/orchestration/recall-rerank-coordinator.ts +60 -25
- package/src/orchestration/recall-search-pipeline.test.ts +75 -1
- package/src/orchestration/recall-search-pipeline.ts +50 -10
- package/src/orchestrator-convergence-refresh.test.ts +36 -2
- package/src/orchestrator.ts +13 -3
- package/src/page-versioning.ts +5 -19
- package/src/procedural/procedure-recall.ts +5 -1
- package/src/provenance-surfaces.test.ts +3 -0
- package/src/qmd-client.test.ts +78 -17
- package/src/qmd.test.ts +24 -0
- package/src/qmd.ts +224 -315
- package/src/recall-explain-renderer.ts +3 -0
- package/src/recall-rerank-coordinator.test.ts +61 -0
- package/src/recall-xray-renderer.test.ts +6 -0
- package/src/recall-xray.test.ts +88 -1
- package/src/recall-xray.ts +15 -0
- package/src/reconcile/cursor.test.ts +48 -0
- package/src/reconcile/cursor.ts +58 -11
- package/src/reconcile/manifest.test.ts +4 -0
- package/src/reconcile/manifest.ts +41 -51
- package/src/reconcile/plan.test.ts +4 -0
- package/src/reconcile/plan.ts +28 -16
- package/src/search/factory.ts +6 -6
- package/src/search/port.ts +25 -9
- package/src/secure-store/secure-fs.ts +20 -12
- package/src/secure-store/secure-store.test.ts +41 -2
- package/src/spaces/index.test.ts +61 -2
- package/src/spaces/index.ts +44 -18
- package/src/storage/entity-alias-config.ts +97 -0
- package/src/storage/entity-canonical-id-lock.ts +53 -23
- package/src/storage/entity-canonical-id-migration.ts +53 -22
- package/src/storage/entity-canonical-id-references.ts +3 -0
- package/src/storage/entity-id-safety.ts +7 -0
- package/src/storage/entity-store.ts +6 -2
- package/src/storage/memory-frontmatter-metadata.ts +4 -9
- package/src/storage/memory-migration-serialization.ts +10 -15
- package/src/storage/tombstone-blocked-capture-mutation.ts +52 -64
- package/src/storage/tombstone-blocked-capture-sync.ts +244 -199
- package/src/storage-deletion-revisions.test.ts +91 -0
- package/src/storage-fact-hash-index-defer.test.ts +446 -163
- package/src/storage.ts +534 -245
- package/src/tool-scoped-memory.ts +10 -0
- package/src/transfer/capsule-import.ts +13 -0
- package/src/transfer/capsule-merge.ts +13 -0
- package/src/trust-score-recall-paths.test.ts +75 -1
- package/src/types.ts +7 -3
- package/dist/capsule-merge-IDWJPCWK.js.map +0 -1
- package/dist/chunk-3CE77VAP.js.map +0 -1
- package/dist/chunk-3TBLDMJA.js.map +0 -1
- package/dist/chunk-4J7G5SY4.js.map +0 -1
- package/dist/chunk-57QKLRBV.js.map +0 -1
- package/dist/chunk-5TFP4CUL.js.map +0 -1
- package/dist/chunk-7XC2HX75.js.map +0 -1
- package/dist/chunk-A5OJCXZL.js.map +0 -1
- package/dist/chunk-BUE5E2HL.js.map +0 -1
- package/dist/chunk-CJ2ZR7UA.js.map +0 -1
- package/dist/chunk-CUM2BBPN.js.map +0 -1
- package/dist/chunk-D3J5SLQK.js.map +0 -1
- package/dist/chunk-DL7ZD3JH.js.map +0 -1
- package/dist/chunk-DLVPUX7U.js.map +0 -1
- package/dist/chunk-E6PNLPGJ.js.map +0 -1
- package/dist/chunk-ECK75GDJ.js.map +0 -1
- package/dist/chunk-HREE4JHI.js.map +0 -1
- package/dist/chunk-HZFHQ4AQ.js.map +0 -1
- package/dist/chunk-IKKWIPYN.js.map +0 -1
- package/dist/chunk-J7VGGECD.js.map +0 -1
- package/dist/chunk-N5Z4EVOR.js.map +0 -1
- package/dist/chunk-NVRYW264.js.map +0 -1
- package/dist/chunk-P2BM76KT.js.map +0 -1
- package/dist/chunk-PVGDJXVK.js +0 -21
- package/dist/chunk-QJAQNXWI.js.map +0 -1
- package/dist/chunk-RN7DY3FC.js.map +0 -1
- package/dist/chunk-RVLJEII5.js.map +0 -1
- package/dist/chunk-S2NCTZGJ.js.map +0 -1
- package/dist/chunk-TDHTVMPG.js.map +0 -1
- package/dist/chunk-UYLMNVY6.js.map +0 -1
- package/dist/chunk-VCD4PSK2.js.map +0 -1
- package/dist/chunk-VNA7W7QF.js.map +0 -1
- package/dist/chunk-VWAXN2BN.js.map +0 -1
- package/dist/chunk-WOCNN776.js.map +0 -1
- package/dist/chunk-XYTOI63Z.js.map +0 -1
- package/dist/chunk-YV32N67O.js.map +0 -1
- /package/dist/{auto-sync-5OE5QOZB.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
- /package/dist/{chunk-VUPTKTDV.js.map → chunk-2MRHJNWL.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-5IVLTFOV.js.map → chunk-44N6ESJ4.js.map} +0 -0
- /package/dist/{chunk-HO3QBJEY.js.map → chunk-5546W5SI.js.map} +0 -0
- /package/dist/{chunk-U7GW7NE7.js.map → chunk-5CEECY6P.js.map} +0 -0
- /package/dist/{chunk-4UH4BTGK.js.map → chunk-5SNZSWWR.js.map} +0 -0
- /package/dist/{chunk-6CZPDBJS.js.map → chunk-5U7ID3EZ.js.map} +0 -0
- /package/dist/{chunk-GF22HWS2.js.map → chunk-6NNNURLK.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
- /package/dist/{chunk-E5UK4VPE.js.map → chunk-7SHJHPTY.js.map} +0 -0
- /package/dist/{chunk-UVIKWC7M.js.map → chunk-7YERSTN7.js.map} +0 -0
- /package/dist/{chunk-S5SLVSVY.js.map → chunk-BQIFZ2MP.js.map} +0 -0
- /package/dist/{chunk-E53DSZEN.js.map → chunk-C26TE27X.js.map} +0 -0
- /package/dist/{chunk-LZ4LDKHZ.js.map → chunk-CLB32OHM.js.map} +0 -0
- /package/dist/{chunk-Q6IP2ARR.js.map → chunk-CSOYVTRX.js.map} +0 -0
- /package/dist/{chunk-XOQSEF7X.js.map → chunk-CVILPI77.js.map} +0 -0
- /package/dist/{chunk-PDLBLTOK.js.map → chunk-EITZHSX6.js.map} +0 -0
- /package/dist/{chunk-WUNIWKY4.js.map → chunk-ELIL2A37.js.map} +0 -0
- /package/dist/{chunk-CINZGPSJ.js.map → chunk-GUMZC2BO.js.map} +0 -0
- /package/dist/{chunk-H24WNPA2.js.map → chunk-GWFSVJ4P.js.map} +0 -0
- /package/dist/{chunk-TSH56VPU.js.map → chunk-HAYSYUAB.js.map} +0 -0
- /package/dist/{chunk-PKNLM44P.js.map → chunk-JH6BPLOP.js.map} +0 -0
- /package/dist/{chunk-KXB4VXHY.js.map → chunk-JIYDRBVZ.js.map} +0 -0
- /package/dist/{chunk-AV5ZEH4M.js.map → chunk-KVJRXN2E.js.map} +0 -0
- /package/dist/{chunk-JVLCVFQ4.js.map → chunk-KXEFRMCF.js.map} +0 -0
- /package/dist/{chunk-WFTIGIIS.js.map → chunk-L6CQ7WIW.js.map} +0 -0
- /package/dist/{chunk-EJUEXZHX.js.map → chunk-LLJMAULE.js.map} +0 -0
- /package/dist/{chunk-AS7YMSL6.js.map → chunk-M23RF3LJ.js.map} +0 -0
- /package/dist/{chunk-3F2LKUMU.js.map → chunk-NIS256NW.js.map} +0 -0
- /package/dist/{chunk-YIAA2X3D.js.map → chunk-NK5RGJ65.js.map} +0 -0
- /package/dist/{chunk-OQ5PRDDS.js.map → chunk-NTOIP2E6.js.map} +0 -0
- /package/dist/{chunk-HLPD7B7P.js.map → chunk-NUEQKLNB.js.map} +0 -0
- /package/dist/{chunk-33PLLLL7.js.map → chunk-P7NGM24P.js.map} +0 -0
- /package/dist/{chunk-7TWUCYER.js.map → chunk-PNRA7FAD.js.map} +0 -0
- /package/dist/{chunk-5I4M26Q7.js.map → chunk-QBSFOKY6.js.map} +0 -0
- /package/dist/{chunk-P4DRWEYC.js.map → chunk-QVSBTCVP.js.map} +0 -0
- /package/dist/{chunk-AAIUERNB.js.map → chunk-R5RFK3CB.js.map} +0 -0
- /package/dist/{chunk-WDISJRMG.js.map → chunk-RMMVQQA6.js.map} +0 -0
- /package/dist/{chunk-5SM35XZR.js.map → chunk-S5NZBKKQ.js.map} +0 -0
- /package/dist/{chunk-WIPEXG6R.js.map → chunk-SXIMQLGV.js.map} +0 -0
- /package/dist/{chunk-OAEQLRCY.js.map → chunk-TN76AKO3.js.map} +0 -0
- /package/dist/{chunk-QN25OCUF.js.map → chunk-TQ4GD737.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-DNWXFTLD.js.map → chunk-TYISDI6B.js.map} +0 -0
- /package/dist/{chunk-4LMA77JH.js.map → chunk-U2VLVBBH.js.map} +0 -0
- /package/dist/{chunk-5ZE7QHTK.js.map → chunk-ULVR5KG7.js.map} +0 -0
- /package/dist/{chunk-4B77XSG5.js.map → chunk-UV72DEZD.js.map} +0 -0
- /package/dist/{chunk-S2BBISHU.js.map → chunk-VANZKHTN.js.map} +0 -0
- /package/dist/{chunk-3Y224NYC.js.map → chunk-VYISFWVX.js.map} +0 -0
- /package/dist/{chunk-TIHMZFIV.js.map → chunk-W3IC7QOY.js.map} +0 -0
- /package/dist/{chunk-NRV4Y3PM.js.map → chunk-W4FBGYGK.js.map} +0 -0
- /package/dist/{chunk-MU7ZHSZE.js.map → chunk-WZFAPHIK.js.map} +0 -0
- /package/dist/{chunk-T2TTP3KU.js.map → chunk-X4IDNPOS.js.map} +0 -0
- /package/dist/{chunk-BLAKS3CP.js.map → chunk-XL3TATMJ.js.map} +0 -0
- /package/dist/{chunk-W4XJFLAL.js.map → chunk-XPRJSHNI.js.map} +0 -0
- /package/dist/{chunk-JE7EK33X.js.map → chunk-Y7HRYCNW.js.map} +0 -0
- /package/dist/{chunk-E6EE5B67.js.map → chunk-YK6BDDHP.js.map} +0 -0
- /package/dist/{chunk-ES36HTSC.js.map → chunk-YLHM5BQQ.js.map} +0 -0
- /package/dist/{chunk-BJKPPZ6Z.js.map → chunk-ZFGZ6PZ2.js.map} +0 -0
- /package/dist/{chunk-64UDOIMI.js.map → chunk-ZLQ37WJX.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extraction-source-grounding-rules.ts"],"sourcesContent":["import type { ExtractionResult } from \"./types.js\";\nimport { anchorTemporalExpressions } from \"./delinearize.js\";\nimport {\n GROUNDING_AUXILIARY_TOKENS,\n GROUNDING_COPULAR_FORMS,\n GROUNDING_ENTITY_TYPE_PREFIXES,\n GROUNDING_MIN_COVERAGE,\n GROUNDING_MIN_SHARED_TOKENS,\n GROUNDING_STOPWORDS,\n areGroundingTokensCompatible,\n containsContiguousGroundingTokens,\n containsExactTokenSequence,\n groundingLexemes,\n groundingTokenSequence,\n hasContradictoryPolarity,\n hasExplicitRoleSubjectToken,\n isAttachedNegatedAuxiliary,\n isInterrogativeSourceSentence,\n normalizeForExactMatch,\n normalizedGroundingAlignmentTokenSequence,\n normalizedGroundingTokenSequence,\n sourceSentences,\n splitGroundingClauses,\n stemToken,\n tokenize,\n tokenSequence,\n} from \"./extraction-source-grounding-helpers.js\";\n\nexport interface ExtractionSourceGroundingOptions {\n sourceGrounding: boolean;\n anchorTemporalExpressions: boolean;\n}\n\nexport function applyExtractionSourceGrounding(\n result: ExtractionResult,\n sourceText: string,\n assertionSourceText: string = sourceText,\n roleAssertionSources: ExtractionGroundingRoleSources | undefined,\n messageTimestamp: Date | undefined,\n options: ExtractionSourceGroundingOptions,\n): ExtractionResult {\n if (!options.sourceGrounding) return result;\n const anchorSource = (source: string): string =>\n options.anchorTemporalExpressions\n ? anchorTemporalExpressions(source, messageTimestamp ?? new Date())\n : source;\n const anchoredRoleSources = roleAssertionSources === undefined\n ? undefined\n : {\n profile: roleAssertionSources.profile === undefined\n ? undefined\n : anchorSource(roleAssertionSources.profile),\n identity: roleAssertionSources.identity === undefined\n ? undefined\n : anchorSource(roleAssertionSources.identity),\n };\n return filterExtractionResultBySource(\n result,\n anchorSource(sourceText),\n anchorSource(assertionSourceText),\n anchoredRoleSources,\n options.anchorTemporalExpressions ? anchorSource : undefined,\n );\n}\n\nexport interface ExtractionGroundingRoleSources {\n profile?: string;\n identity?: string;\n}\n\n\n\ninterface GroundingCopularClaim {\n subject: string;\n predicate: string;\n}\n\nfunction groundingCopularClaim(text: string): GroundingCopularClaim | undefined {\n const lexemes = groundingLexemes(text);\n const copulaIndex = lexemes.findIndex(({ token }) => GROUNDING_COPULAR_FORMS.has(token));\n if (copulaIndex <= 0) return undefined;\n\n let subjectIndex = copulaIndex - 1;\n while (\n subjectIndex >= 0\n && GROUNDING_AUXILIARY_TOKENS.has(lexemes[subjectIndex]!.token)\n ) {\n subjectIndex -= 1;\n }\n const subjectLexeme = lexemes[subjectIndex];\n const predicateLexeme = lexemes\n .slice(copulaIndex + 1)\n .find(({ token }) => GROUNDING_STOPWORDS[token] !== true);\n if (subjectLexeme === undefined || predicateLexeme === undefined) return undefined;\n\n return {\n subject: stemToken(subjectLexeme.token, subjectLexeme.preserveTerminalS),\n predicate: stemToken(predicateLexeme.token, predicateLexeme.preserveTerminalS),\n };\n}\n\nfunction hasCopularPredicateEvidence(candidate: string, source: string): boolean {\n const candidateClaim = groundingCopularClaim(candidate);\n if (candidateClaim === undefined) return true;\n const sourceClaim = groundingCopularClaim(source);\n return sourceClaim !== undefined\n && areGroundingTokensCompatible(candidateClaim.subject, sourceClaim.subject)\n && areGroundingTokensCompatible(candidateClaim.predicate, sourceClaim.predicate);\n}\nconst GROUNDING_ALIGNMENT_MODIFIERS = new Set([\n \"actively\",\n \"again\",\n \"already\",\n \"currently\",\n \"eventually\",\n \"finally\",\n \"generally\",\n \"mainly\",\n \"newly\",\n \"now\",\n \"often\",\n \"previously\",\n \"primarily\",\n \"quickly\",\n \"recently\",\n \"repeatedly\",\n \"simply\",\n \"slowly\",\n \"sometimes\",\n \"still\",\n \"successfully\",\n \"typically\",\n \"usually\",\n]);\n\nfunction isGroundingAlignmentModifier(token: string): boolean {\n return GROUNDING_ALIGNMENT_MODIFIERS.has(token);\n}\n\n\nfunction hasAlignedSubjectPredicateOverlap(candidate: string, source: string): boolean {\n const candidateTokens = normalizedGroundingAlignmentTokenSequence(candidate);\n const sourceTokens = normalizedGroundingAlignmentTokenSequence(source);\n if (candidateTokens.length < 3 || sourceTokens.length < 3) {\n return hasCopularPredicateEvidence(candidate, source);\n }\n\n const candidateSubject = candidateTokens[0];\n if (candidateSubject === undefined) return false;\n const hasCorrectionReordering = /\\b(?:rather\\s+than|instead\\s+of)\\b/iu.test(candidate)\n && /\\b(?:not|rather\\s+than|instead\\s+of)\\b/iu.test(source);\n for (let sourceSubjectIndex = 0; sourceSubjectIndex < sourceTokens.length; sourceSubjectIndex += 1) {\n if (!areGroundingTokensCompatible(candidateSubject, sourceTokens[sourceSubjectIndex]!)) continue;\n let sourceCursor = sourceSubjectIndex + 1;\n let foundAlignedToken = false;\n let aligned = true;\n for (let candidateIndex = 1; candidateIndex < candidateTokens.length; candidateIndex += 1) {\n const candidateToken = candidateTokens[candidateIndex]!;\n const sourceIndex = sourceTokens.findIndex(\n (sourceToken, index) =>\n index >= sourceCursor && areGroundingTokensCompatible(candidateToken, sourceToken),\n );\n if (sourceIndex === -1) {\n if (hasCorrectionReordering) continue;\n aligned = false;\n break;\n }\n foundAlignedToken = true;\n const candidateNext = candidateTokens[candidateIndex + 1];\n const sourceNext = sourceTokens[sourceIndex + 1];\n if (\n candidateNext !== undefined\n && sourceNext !== undefined\n && !hasCorrectionReordering\n && !areGroundingTokensCompatible(candidateNext, sourceNext)\n && !isGroundingAlignmentModifier(sourceNext)\n ) {\n aligned = false;\n break;\n }\n sourceCursor = sourceIndex + 1;\n }\n if (aligned && foundAlignedToken) return true;\n }\n return false;\n}\n\nfunction groundedTokenScore(\n candidate: string,\n source: string,\n requireAlignedArguments = true,\n requireAllCandidateTokensGrounded = true,\n): number {\n const candidateTokens = tokenize(candidate);\n if (candidateTokens.size === 0) return 0;\n const sourceTokens = tokenize(source);\n const allowCorrectionReordering = /\\b(?:rather\\s+than|instead\\s+of)\\b/iu.test(candidate);\n let sharedTokens = 0;\n let allCandidateTokensGrounded = true;\n for (const token of candidateTokens) {\n if ([...sourceTokens].some((sourceToken) => areGroundingTokensCompatible(token, sourceToken))) {\n sharedTokens += 1;\n } else if (!allowCorrectionReordering && token !== \"rather\" && token !== \"instead\") {\n allCandidateTokensGrounded = false;\n }\n }\n if (\n (requireAllCandidateTokensGrounded && !allCandidateTokensGrounded)\n || sharedTokens < GROUNDING_MIN_SHARED_TOKENS\n || sharedTokens / candidateTokens.size < GROUNDING_MIN_COVERAGE\n ) {\n return 0;\n }\n if (requireAlignedArguments && !hasAlignedSubjectPredicateOverlap(candidate, source)) return 0;\n return sharedTokens / candidateTokens.size;\n}\n\nfunction candidateClauses(candidate: string): string[] {\n return splitGroundingClauses(sourceSentences(candidate));\n}\n\nfunction isSourceGroundedClause(\n candidate: string,\n source: string,\n includeInterrogativeSource = false,\n): boolean {\n let bestSupportedScore = 0;\n let bestContradictedScore = 0;\n const sentences = sourceSentences(source);\n for (let index = 0; index < sentences.length; index += 1) {\n const sentence = sentences[index];\n if (isYesNoAnswer(sentence)) {\n const precedingSentence = sentences[index - 1];\n const answerToken = tokenSequence(sentence)[0];\n const contradictoryPolarity = precedingSentence !== undefined\n ? hasContradictoryPolarity(candidate, precedingSentence)\n : false;\n if (\n precedingSentence !== undefined\n && isInterrogativeSourceSentence(precedingSentence)\n && groundedTokenScore(candidate, precedingSentence) === 1\n && (\n (answerToken === \"yes\" && !contradictoryPolarity)\n || (answerToken === \"no\" && contradictoryPolarity)\n )\n ) {\n return true;\n }\n continue;\n }\n const sentenceText = normalizeForExactMatch(sentence);\n const isExplanatoryLabel = sentenceText.startsWith(`${normalizeForExactMatch(candidate)}:`)\n && !sentence.trim().endsWith(\"?\");\n if (!includeInterrogativeSource && isInterrogativeSourceSentence(sentence) && !isExplanatoryLabel) {\n continue;\n }\n const sourceSpans = /\\b(?:rather\\s+than|instead\\s+of)\\b/iu.test(candidate)\n ? [sentence]\n : splitGroundingClauses([sentence]);\n for (const sourceSpan of sourceSpans) {\n const sourceSpanText = normalizeForExactMatch(sourceSpan);\n if (containsExactTokenSequence(candidate, sourceSpanText)) {\n if (!hasContradictoryPolarity(candidate, sourceSpan)) return true;\n bestContradictedScore = Math.max(bestContradictedScore, 1);\n continue;\n }\n const score = groundedTokenScore(\n candidate,\n sourceSpan,\n !includeInterrogativeSource,\n !includeInterrogativeSource,\n );\n if (score === 0) continue;\n if (hasContradictoryPolarity(candidate, sourceSpan)) {\n bestContradictedScore = Math.max(bestContradictedScore, score);\n } else {\n bestSupportedScore = Math.max(bestSupportedScore, score);\n }\n }\n }\n return bestSupportedScore > bestContradictedScore;\n}\nfunction isSourceGrounded(\n candidate: string,\n source: string,\n includeInterrogativeSource = false,\n): boolean {\n const candidateText = normalizeForExactMatch(candidate);\n const sourceText = source.normalize(\"NFKC\").trim();\n if (candidateText.length === 0 || sourceText.length === 0) return false;\n const hasSupportedExactMatch = sourceSentences(sourceText).some((sentence) => {\n const sentenceText = normalizeForExactMatch(sentence);\n const isExplanatoryLabel = sentenceText.startsWith(`${candidateText}:`)\n && !sentence.trim().endsWith(\"?\");\n if (!includeInterrogativeSource && isInterrogativeSourceSentence(sentence) && !isExplanatoryLabel) return false;\n return containsExactTokenSequence(candidateText, sentenceText)\n && !hasContradictoryPolarity(candidateText, sentenceText);\n });\n if (hasSupportedExactMatch) return true;\n\n const clauses = candidateClauses(candidateText);\n if (clauses.length > 1) {\n return clauses.every((clause) =>\n isSourceGroundedClause(clause, sourceText, includeInterrogativeSource));\n }\n return isSourceGroundedClause(candidateText, sourceText, includeInterrogativeSource);\n}\n\nfunction normalizedEntityIdentifierTokens(name: string): string[] {\n const identifier = normalizeForExactMatch(name).replace(/[-_]+/gu, \" \");\n const tokens = groundingLexemes(identifier)\n .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)\n .map(({ token }) => stemToken(token, true));\n return tokens.length > 1 && GROUNDING_ENTITY_TYPE_PREFIXES.has(tokens[0] ?? \"\")\n ? tokens.slice(1)\n : tokens;\n}\n\nfunction isGroundedEntityName(name: string, source: string): boolean {\n const nameTokens = normalizedEntityIdentifierTokens(name);\n return nameTokens.length > 0 && sourceSentences(source).some((sentence) => {\n const sentenceTokens = groundingLexemes(sentence)\n .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)\n .map(({ token, preserveTerminalS }) => stemToken(token, preserveTerminalS));\n return containsContiguousGroundingTokens(nameTokens, sentenceTokens);\n });\n}\nfunction buildEntitySupportSource(name: string, source: string): string {\n const nameTokens = normalizedEntityIdentifierTokens(name);\n if (nameTokens.length === 0) return \"\";\n return sourceSentences(source)\n .filter((sentence) => {\n const sentenceTokens = groundingLexemes(sentence)\n .filter(({ token }) => GROUNDING_STOPWORDS[token] !== true)\n .map(({ token, preserveTerminalS }) => stemToken(token, preserveTerminalS));\n return containsContiguousGroundingTokens(nameTokens, sentenceTokens);\n })\n .join(\" \");\n}\n\nfunction hasGroundedPredicateAnchor(candidate: string, sentence: string): boolean {\n const candidateTokens = normalizedGroundingTokenSequence(candidate);\n const sourceTokens = normalizedGroundingTokenSequence(sentence);\n const comparableCandidateTokens = GROUNDING_ROLE_SUBJECT_TOKENS.has(candidateTokens[0] ?? \"\")\n ? candidateTokens.slice(1)\n : candidateTokens;\n if (comparableCandidateTokens.length < 2) return false;\n const subjectToken = comparableCandidateTokens[0];\n if (subjectToken === undefined || !sourceTokens.includes(subjectToken)) {\n return false;\n }\n const candidatePredicateTokens = comparableCandidateTokens.slice(1);\n const sourceTokenSet = new Set(sourceTokens);\n const sharedPredicateTokens = candidatePredicateTokens.filter((token) => sourceTokenSet.has(token));\n const requiredSharedTokens = Math.min(2, candidatePredicateTokens.length);\n return sharedPredicateTokens.length >= requiredSharedTokens;\n}\nfunction hasGroundingAnchor(\n candidate: string,\n assertionSource: string,\n includeInterrogativeSource = false,\n requirePredicateSupport = false,\n): boolean {\n return sourceSentences(assertionSource).some((sentence) => {\n if (!includeInterrogativeSource && isInterrogativeSourceSentence(sentence)) return false;\n const sourceSpans = /\\b(?:rather\\s+than|instead\\s+of)\\b/iu.test(candidate)\n ? [sentence]\n : splitGroundingClauses([sentence]);\n return sourceSpans.some((sourceSpan) => {\n const exactMatch = containsExactTokenSequence(candidate, sourceSpan)\n && !hasContradictoryPolarity(candidate, sourceSpan);\n if (exactMatch) return true;\n if (requirePredicateSupport && !hasGroundedPredicateAnchor(candidate, sourceSpan)) return false;\n return groundedTokenScore(candidate, sourceSpan) > 0\n || hasRoleNormalizedGrounding(candidate, sourceSpan);\n });\n });\n}\n\nfunction hasAnswerSupport(\n candidate: string,\n source: string,\n assertionSource: string,\n): boolean {\n const assertedAnswerSentences = new Set(\n sourceSentences(assertionSource)\n .filter((sentence) => {\n const answerToken = tokenSequence(sentence)[0];\n return answerToken === \"yes\" || answerToken === \"no\";\n })\n .map((sentence) => normalizeForExactMatch(sentence)),\n );\n if (assertedAnswerSentences.size === 0) return false;\n const sentences = sourceSentences(source);\n return sentences.some((sentence, index) => {\n const answerToken = tokenSequence(sentence)[0];\n if (answerToken !== \"yes\" && answerToken !== \"no\") return false;\n if (!assertedAnswerSentences.has(normalizeForExactMatch(sentence))) return false;\n const precedingSentence = sentences[index - 1];\n if (\n precedingSentence === undefined\n || !isInterrogativeSourceSentence(precedingSentence)\n || groundedTokenScore(candidate, precedingSentence) !== 1\n ) {\n return false;\n }\n const contradictoryPolarity = hasContradictoryPolarity(candidate, precedingSentence);\n return answerToken === \"yes\" ? !contradictoryPolarity : contradictoryPolarity;\n });\n}\n\nconst GROUNDING_ROLE_SUBJECT_TOKENS = new Set([\"assistant\", \"user\"]);\n\nfunction hasRoleNormalizedGrounding(candidate: string, source: string): boolean {\n const candidateTokens = groundingTokenSequence(candidate);\n if (!GROUNDING_ROLE_SUBJECT_TOKENS.has(candidateTokens[0] ?? \"\")) return false;\n const claimTokens = candidateTokens.slice(1);\n if (claimTokens.length === 0) return false;\n\n return sourceSentences(source).some((sentence) => {\n if (isInterrogativeSourceSentence(sentence)) return false;\n const sourceTokens = groundingTokenSequence(sentence);\n const requiredSharedTokens = Math.min(GROUNDING_MIN_SHARED_TOKENS, claimTokens.length);\n let sourceIndex = 0;\n let sharedTokens = 0;\n for (const claimToken of claimTokens) {\n const matchingIndex = sourceTokens.indexOf(claimToken, sourceIndex);\n if (matchingIndex === -1) continue;\n sharedTokens += 1;\n sourceIndex = matchingIndex + 1;\n }\n return sharedTokens >= requiredSharedTokens\n && !hasContradictoryPolarity(candidate, sentence);\n });\n}\n\ninterface GroundingContext {\n source: string;\n assertionSource: string | undefined;\n allowRoleNormalization: boolean;\n fallbackSource?: string;\n fallbackAssertionSource?: string;\n}\n\nfunction resolveGroundingContext(\n candidate: string,\n source: string,\n assertionSource: string | undefined,\n roleAssertionSources: ExtractionGroundingRoleSources | undefined,\n): GroundingContext {\n const candidateRole = groundingTokenSequence(candidate)[0];\n if (!GROUNDING_ROLE_SUBJECT_TOKENS.has(candidateRole ?? \"\")) {\n return { source, assertionSource, allowRoleNormalization: false };\n }\n if (roleAssertionSources === undefined) {\n return { source, assertionSource, allowRoleNormalization: true };\n }\n const roleSource = candidateRole === \"user\"\n ? roleAssertionSources.profile\n : roleAssertionSources.identity;\n return {\n source: roleSource ?? \"\",\n assertionSource: roleSource ?? \"\",\n allowRoleNormalization: true,\n fallbackSource: source,\n fallbackAssertionSource: assertionSource,\n };\n}\n\nfunction selectGroundingContext(candidate: string, context: GroundingContext): GroundingContext {\n if (isGroundedCandidate(\n candidate,\n context.source,\n context.assertionSource,\n false,\n context.allowRoleNormalization,\n )) {\n return context;\n }\n if (\n context.fallbackSource === undefined\n || !hasExplicitRoleSubjectToken(\n groundingTokenSequence(candidate)[0],\n sourceSentences(context.fallbackSource).map((sentence) => groundingTokenSequence(sentence)),\n )\n ) return context;\n const fallbackContext: GroundingContext = {\n source: context.fallbackSource,\n assertionSource: context.fallbackAssertionSource,\n allowRoleNormalization: false,\n };\n return isGroundedCandidate(\n candidate,\n fallbackContext.source,\n fallbackContext.assertionSource,\n false,\n fallbackContext.allowRoleNormalization,\n )\n ? fallbackContext\n : context;\n}\n\nfunction isGroundedCandidate(\n candidate: string,\n source: string,\n assertionSource: string | undefined,\n includeInterrogativeSource = false,\n allowRoleNormalization = false,\n): boolean {\n const allowInterrogativeSource = includeInterrogativeSource\n || (\n assertionSource !== undefined\n && normalizeForExactMatch(assertionSource) !== normalizeForExactMatch(source)\n );\n const sourceGrounded = isSourceGrounded(candidate, source, allowInterrogativeSource);\n const roleGrounded = allowRoleNormalization && hasRoleNormalizedGrounding(candidate, source);\n const candidateTokens = groundingTokenSequence(candidate);\n const roleNormalizedCandidate = allowRoleNormalization\n && GROUNDING_ROLE_SUBJECT_TOKENS.has(candidateTokens[0] ?? \"\");\n if (roleNormalizedCandidate && !roleGrounded) return false;\n if (!sourceGrounded && !roleGrounded) return false;\n if (assertionSource === undefined) return true;\n const clauses = candidateClauses(candidate);\n const requirePredicateSupport = !includeInterrogativeSource\n && assertionSource !== undefined\n && normalizeForExactMatch(assertionSource) !== normalizeForExactMatch(source);\n return clauses.length > 0\n && (\n clauses.every((clause) =>\n hasGroundingAnchor(clause, assertionSource, includeInterrogativeSource, requirePredicateSupport))\n || hasAnswerSupport(candidate, source, assertionSource)\n );\n}\n\nfunction buildFactSupportSource(\n source: string,\n supportingSentences: ReadonlyArray<string>,\n): string {\n const sentences = sourceSentences(source);\n const selectedIndices = new Set<number>();\n for (const supportingSentence of supportingSentences) {\n const supportIndex = sentences.indexOf(supportingSentence);\n if (supportIndex < 0) continue;\n let endIndex = supportIndex;\n while (\n endIndex < sentences.length - 1\n && sentences[endIndex]!.trimEnd().endsWith(\";\")\n && /^(?:its|their|this|that|these|those)\\b/iu.test(\n sentences[endIndex + 1]!.trimStart(),\n )\n ) {\n endIndex += 1;\n }\n for (let index = supportIndex; index <= endIndex; index += 1) {\n selectedIndices.add(index);\n }\n }\n return [...selectedIndices]\n .sort((left, right) => left - right)\n .map((index) => sentences[index]!)\n .join(\" \");\n}\nfunction buildProcedureSupportSource(\n fact: ExtractionResult[\"facts\"][number],\n source: string,\n factSupportSource: string,\n): string {\n if (fact.category !== \"procedure\" || fact.procedureSteps === undefined) return factSupportSource;\n const parentSupportSentences = new Set(\n sourceSentences(factSupportSource).map((sentence) => normalizeForExactMatch(sentence)),\n );\n const parentGroundedSteps = fact.procedureSteps.filter((step) =>\n isGroundedCandidate(step.intent, factSupportSource, undefined, false),\n );\n if (parentGroundedSteps.length === 0) return factSupportSource;\n return sourceSentences(source)\n .filter((sentence) => {\n if (parentSupportSentences.has(normalizeForExactMatch(sentence))) return true;\n const sentenceTokens = tokenize(sentence);\n return parentGroundedSteps.some((step) =>\n [...tokenize(step.intent)].some((token) =>\n [...sentenceTokens].some((sourceToken) => areGroundingTokensCompatible(token, sourceToken)),\n ),\n );\n })\n .join(\" \");\n}\nfunction filterGroundedFact(\n fact: ExtractionResult[\"facts\"][number],\n source: string,\n assertionSource: string | undefined,\n roleAssertionSources: ExtractionGroundingRoleSources | undefined,\n eventTimeNormalizer: ((eventTime: string) => string) | undefined,\n): ExtractionResult[\"facts\"][number] | undefined {\n const factContext = selectGroundingContext(\n fact.content,\n resolveGroundingContext(fact.content, source, assertionSource, roleAssertionSources),\n );\n if (!isGroundedCandidate(\n fact.content,\n factContext.source,\n factContext.assertionSource,\n false,\n factContext.allowRoleNormalization,\n )) return undefined;\n const factEventTime = fact.eventTime;\n const groundedFactEventTime = factEventTime === undefined\n ? undefined\n : eventTimeNormalizer?.(factEventTime) ?? factEventTime;\n const factSupportingSentences = sourceSentences(factContext.assertionSource ?? factContext.source).filter(\n (sentence) =>\n isGroundedCandidate(\n fact.content,\n sentence,\n undefined,\n false,\n factContext.allowRoleNormalization,\n ),\n );\n const factSupportingSource = factEventTime === undefined\n ? factSupportingSentences[0]\n : factSupportingSentences.find((sentence) =>\n isGroundedCandidate(\n groundedFactEventTime ?? factEventTime,\n sentence,\n undefined,\n false,\n factContext.allowRoleNormalization,\n ),\n ) ?? factSupportingSentences[0];\n const eventTimeSource = factSupportingSource ?? factContext.source;\n const eventTimeAssertionSource = factSupportingSource === undefined\n ? factContext.assertionSource\n : undefined;\n\n const factSupportSource = buildFactSupportSource(\n factContext.assertionSource ?? factContext.source,\n factSupportingSentences,\n );\n const groundedAttributes = fact.structuredAttributes\n ? Object.fromEntries(\n Object.entries(fact.structuredAttributes)\n .filter(([key, value]) =>\n isGroundedCandidate(\n `${key}: ${value}`,\n factSupportSource,\n undefined,\n false,\n factContext.allowRoleNormalization,\n ),\n ),\n )\n : undefined;\n const procedureGroundingSource = buildProcedureSupportSource(\n fact,\n factContext.assertionSource ?? factContext.source,\n factSupportSource,\n );\n const groundedProcedureSteps = fact.procedureSteps\n ? fact.procedureSteps.flatMap((step) => {\n if (!isGroundedCandidate(step.intent, procedureGroundingSource, undefined, false)) return [];\n const expectedOutcome = step.expectedOutcome\n && isGroundedCandidate(step.expectedOutcome, procedureGroundingSource, undefined, false)\n ? step.expectedOutcome\n : undefined;\n const toolCall = step.toolCall\n && isGroundedCandidate(step.toolCall.signature, procedureGroundingSource, undefined, false)\n ? step.toolCall\n : undefined;\n const {\n expectedOutcome: _expectedOutcome,\n toolCall: _toolCall,\n ...stepWithoutOptionalFields\n } = step;\n return [{\n ...stepWithoutOptionalFields,\n ...(expectedOutcome !== undefined ? { expectedOutcome } : {}),\n ...(toolCall !== undefined ? { toolCall } : {}),\n }];\n })\n : undefined;\n const groundedReasoningTrace = fact.reasoningTrace\n && fact.reasoningTrace.steps.length > 0\n && isGroundedCandidate(\n fact.reasoningTrace.finalAnswer,\n factContext.source,\n factContext.assertionSource,\n false,\n factContext.allowRoleNormalization,\n )\n && fact.reasoningTrace.steps.every((step) =>\n isGroundedCandidate(\n step.description,\n factContext.source,\n factContext.assertionSource,\n false,\n factContext.allowRoleNormalization,\n ),\n )\n ? {\n steps: fact.reasoningTrace.steps,\n finalAnswer: fact.reasoningTrace.finalAnswer,\n ...(fact.reasoningTrace.observedOutcome\n && isGroundedCandidate(\n fact.reasoningTrace.observedOutcome,\n factContext.source,\n factContext.assertionSource,\n false,\n factContext.allowRoleNormalization,\n )\n ? { observedOutcome: fact.reasoningTrace.observedOutcome }\n : {}),\n }\n : undefined;\n const groundedEventTime = groundedFactEventTime\n && isGroundedCandidate(groundedFactEventTime, eventTimeSource, eventTimeAssertionSource)\n ? factEventTime\n : undefined;\n const groundedEntityRef = fact.entityRef !== undefined\n && isGroundedEntityName(fact.entityRef, factSupportSource)\n ? fact.entityRef\n : undefined;\n const {\n entityRef: _entityRef,\n structuredAttributes: _structuredAttributes,\n procedureSteps: _procedureSteps,\n reasoningTrace: _reasoningTrace,\n eventTime: _eventTime,\n ...factWithoutGroundingFields\n } = fact;\n return {\n ...factWithoutGroundingFields,\n ...(groundedEntityRef !== undefined ? { entityRef: groundedEntityRef } : {}),\n ...(groundedAttributes && Object.keys(groundedAttributes).length > 0\n ? { structuredAttributes: groundedAttributes }\n : {}),\n ...(groundedProcedureSteps && groundedProcedureSteps.length > 0\n ? { procedureSteps: groundedProcedureSteps }\n : {}),\n ...(groundedReasoningTrace !== undefined ? { reasoningTrace: groundedReasoningTrace } : {}),\n ...(groundedEventTime !== undefined ? { eventTime: groundedEventTime } : {}),\n };\n}\n\nfunction filterGroundedEntity(\n entity: ExtractionResult[\"entities\"][number],\n source: string,\n assertionSource: string | undefined,\n): ExtractionResult[\"entities\"][number] | undefined {\n if (!isGroundedEntityName(entity.name, source)) return undefined;\n const entitySource = buildEntitySupportSource(entity.name, source);\n const entityAssertionSource = assertionSource === undefined\n ? undefined\n : buildEntitySupportSource(entity.name, assertionSource);\n const facts = entity.facts.filter((fact) =>\n isGroundedCandidate(fact, entitySource, entityAssertionSource),\n );\n const structuredSections = entity.structuredSections\n ?.flatMap((section) => {\n const groundedFacts = section.facts.filter((fact) =>\n isGroundedCandidate(fact, entitySource, entityAssertionSource),\n );\n return groundedFacts.length > 0\n ? [{ ...section, facts: groundedFacts }]\n : [];\n });\n if (facts.length === 0 && (structuredSections === undefined || structuredSections.length === 0)) {\n return undefined;\n }\n const { structuredSections: _structuredSections, ...entityWithoutSections } = entity;\n return {\n ...entityWithoutSections,\n facts,\n ...(structuredSections && structuredSections.length > 0 ? { structuredSections } : {}),\n };\n}\n\nfunction normalizedEntitySourceText(name: string): string {\n return normalizedEntityIdentifierTokens(name).join(\" \");\n}\n\nfunction isGroundedRelationship(\n relationship: NonNullable<ExtractionResult[\"relationships\"]>[number],\n source: string,\n assertionSource: string | undefined,\n): boolean {\n const sourceName = normalizedEntitySourceText(relationship.source);\n const targetName = normalizedEntitySourceText(relationship.target);\n const labelTokens = tokenize(relationship.label);\n if (sourceName.length === 0 || targetName.length === 0 || labelTokens.size === 0) return false;\n const relationText = `${sourceName} ${relationship.label} ${targetName}`;\n const hasCoherentSourceSpan = sourceSentences(source).some((sentence) => {\n if (isInterrogativeSourceSentence(sentence)) return false;\n return groundedTokenScore(relationText, sentence) === 1\n && !hasContradictoryPolarity(relationText, sentence);\n });\n return hasCoherentSourceSpan\n && isGroundedCandidate(relationText, source, assertionSource);\n}\nconst GROUNDING_TEMPORAL_WORDS = new Set([\n \"today\",\n \"yesterday\",\n \"tomorrow\",\n \"now\",\n \"recently\",\n \"earlier\",\n \"later\",\n \"soon\",\n \"morning\",\n \"afternoon\",\n \"evening\",\n \"tonight\",\n \"night\",\n \"noon\",\n \"midnight\",\n \"monday\",\n \"tuesday\",\n \"wednesday\",\n \"thursday\",\n \"friday\",\n \"saturday\",\n \"sunday\",\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n \"q1\",\n \"q2\",\n \"q3\",\n \"q4\",\n]);\nconst GROUNDING_TEMPORAL_CLOCK_PATTERN = /\\b\\d{1,2}:\\d{2}(?:\\s*[ap]\\.?m\\.?)?\\b/iu;\nconst GROUNDING_TEMPORAL_DURATION_PATTERN = new RegExp(\n \"\\\\b(?:\\\\d+|one|two|three|four|five|six|seven|eight|nine|ten)\\\\s+\"\n + \"(?:seconds?|minutes?|hours?|days?|weeks?|months?|quarters?|years?)\\\\b\",\n \"iu\",\n);\n\nfunction isWhenQuestion(question: string): boolean {\n return /^(?:when|what\\s+(?:time|date)|which\\s+day)\\b/iu.test(question.trim());\n}\nfunction isWhyQuestion(question: string): boolean {\n return /^why\\b/iu.test(question.trim());\n}\n\nfunction hasCausalAnswerEvidence(question: string, sentence: string): boolean {\n if (!isWhyQuestion(question)) return true;\n return /\\b(?:because|since|due\\s+to|owing\\s+to|thanks\\s+to|therefore|thus|hence|so)\\b/iu.test(\n sentence,\n );\n}\n\nfunction hasTemporalAnswerEvidence(question: string, sentence: string): boolean {\n if (!isWhenQuestion(question)) return true;\n return groundingLexemes(sentence).some(({ token }) =>\n GROUNDING_TEMPORAL_WORDS.has(token) || /^(?:19|20)\\d{2}$/u.test(token),\n )\n || GROUNDING_TEMPORAL_CLOCK_PATTERN.test(sentence)\n || GROUNDING_TEMPORAL_DURATION_PATTERN.test(sentence);\n}\n\n\nfunction isUnknownAnswerSentence(sentence: string): boolean {\n return /\\b(?:unknown|unclear|unsure|unresolved|unanswered|not\\s+(?:known|sure|available)|don't\\s+know|do\\s+not\\s+know|no\\s+idea|pending)\\b/iu\n .test(sentence);\n}\n\nfunction isYesNoAnswer(sentence: string): boolean {\n return /^(?:yes|no)(?:[.!?]|,\\s*(?:absolutely|definitely|indeed|exactly|correct|of\\s+course|use\\s+that|do\\s+that)[.!?]?)?$/iu\n .test(sentence.trim());\n}\n\nfunction hasWhAnswerRoleAlignment(question: string, sentence: string): boolean {\n const normalizedQuestion = question.trim();\n const objectQuestionMatch = /^(?:what|which)\\s+.+?\\s+(?:is|are|was|were|do|does|did|can|could|will|would|should|has|have|had)\\s+(.+?)\\s+([^\\s?]+)\\??$/iu\n .exec(normalizedQuestion);\n const sourceTokens = normalizedGroundingTokenSequence(sentence);\n if (objectQuestionMatch !== null) {\n const subjectTokens = groundingTokenSequence(objectQuestionMatch[1] ?? \"\");\n const predicateTokens = groundingTokenSequence(objectQuestionMatch[2] ?? \"\");\n if (subjectTokens.length === 0 || predicateTokens.length === 0) return true;\n let sourceIndex = 0;\n for (const token of [...subjectTokens, ...predicateTokens]) {\n const matchedIndex = sourceTokens.indexOf(token, sourceIndex);\n if (matchedIndex === -1) return false;\n sourceIndex = matchedIndex + 1;\n }\n return true;\n }\n\n const subjectQuestionMatch = /^(?:who|what)\\s+([^\\s?]+)\\s+(.+?)\\??$/iu.exec(normalizedQuestion);\n if (subjectQuestionMatch === null) return true;\n const predicateTokens = groundingTokenSequence(subjectQuestionMatch[1] ?? \"\");\n const objectTokens = groundingTokenSequence(subjectQuestionMatch[2] ?? \"\");\n if (predicateTokens.length === 0 || objectTokens.length === 0) return true;\n const predicateStart = sourceTokens.indexOf(predicateTokens[0]!);\n if (predicateStart === -1) return false;\n let sourceIndex = predicateStart + predicateTokens.length;\n for (const objectToken of objectTokens) {\n const objectIndex = sourceTokens.indexOf(objectToken, sourceIndex);\n if (objectIndex === -1) return false;\n sourceIndex = objectIndex + 1;\n }\n return true;\n}\n\nfunction isQuestionAnsweredBySource(\n question: string,\n source: string,\n assertionSource: string | undefined,\n): boolean {\n const questionTokens = tokenize(question);\n if (questionTokens.size === 0) return false;\n const isYesNoQuestion = /^(?:is|are|am|was|were|do|does|did|can|could|will|would|should|has|have|had)\\b/iu\n .test(question.trim());\n const assertedSentences = new Set(sourceSentences(assertionSource ?? source).map((sentence) => normalizeForExactMatch(sentence)));\n const sentences = sourceSentences(source);\n return sentences.some((sentence, index) => {\n if (!assertedSentences.has(normalizeForExactMatch(sentence))) return false;\n if (isInterrogativeSourceSentence(sentence)) return false;\n if (isYesNoAnswer(sentence)) {\n const precedingSentence = sentences[index - 1];\n return precedingSentence !== undefined\n && isInterrogativeSourceSentence(precedingSentence)\n && groundedTokenScore(question, precedingSentence) === 1;\n }\n if (isUnknownAnswerSentence(sentence)) return false;\n const score = groundedTokenScore(question, sentence, false);\n if (score !== 1) return false;\n const sentenceTokens = tokenize(sentence);\n const hasAnswerToken = [...sentenceTokens].some((token) => !questionTokens.has(token));\n return (isYesNoQuestion || hasAnswerToken)\n && hasTemporalAnswerEvidence(question, sentence)\n && hasCausalAnswerEvidence(question, sentence)\n && hasWhAnswerRoleAlignment(question, sentence);\n });\n}\n\nfunction groundQuestion(\n question: ExtractionResult[\"questions\"][number],\n source: string,\n assertionSource: string | undefined,\n): ExtractionResult[\"questions\"][number] | undefined {\n if (isQuestionAnsweredBySource(question.question, source, assertionSource)) return undefined;\n if (!isGroundedCandidate(question.question, source, assertionSource, true)) return undefined;\n const normalizedContext = question.context.trim();\n if (\n normalizedContext.length > 0\n && !isGroundedCandidate(normalizedContext, assertionSource ?? source, undefined, false)\n ) {\n return { ...question, context: \"\" };\n }\n return question;\n}\n\nexport function filterExtractionResultBySource(\n result: ExtractionResult,\n source: string,\n assertionSource?: string,\n roleAssertionSources?: ExtractionGroundingRoleSources,\n eventTimeNormalizer?: (eventTime: string) => string,\n): ExtractionResult {\n if (source.trim().length === 0) {\n return {\n ...result,\n facts: [],\n profileUpdates: [],\n entities: [],\n questions: [],\n ...(result.relationships !== undefined ? { relationships: [] } : {}),\n identityReflection: undefined,\n };\n }\n\n const facts = result.facts.flatMap((fact) => {\n const grounded = filterGroundedFact(\n fact,\n source,\n assertionSource,\n roleAssertionSources,\n eventTimeNormalizer,\n );\n return grounded === undefined ? [] : [grounded];\n });\n const profileGroundingSource = roleAssertionSources?.profile ?? source;\n const profileAssertionSource = roleAssertionSources?.profile ?? assertionSource;\n const profileUpdates = result.profileUpdates.filter((update) =>\n isGroundedCandidate(update, profileGroundingSource, profileAssertionSource, false, true),\n );\n const entities = result.entities.flatMap((entity) => {\n const grounded = filterGroundedEntity(entity, source, assertionSource);\n return grounded === undefined ? [] : [grounded];\n });\n const questions = result.questions.flatMap((question) => {\n const grounded = groundQuestion(question, source, assertionSource);\n return grounded === undefined ? [] : [grounded];\n });\n const relationships = result.relationships?.filter((relationship) =>\n isGroundedRelationship(relationship, source, assertionSource),\n );\n const identityGroundingSource = roleAssertionSources?.identity ?? source;\n const identityAssertionSource = roleAssertionSources?.identity ?? assertionSource;\n const identityReflection = result.identityReflection\n && isGroundedCandidate(\n result.identityReflection,\n identityGroundingSource,\n identityAssertionSource,\n false,\n true,\n )\n ? result.identityReflection\n : undefined;\n\n return {\n ...result,\n facts,\n profileUpdates,\n entities,\n questions,\n ...(result.relationships !== undefined ? { relationships } : {}),\n ...(identityReflection !== undefined ? { identityReflection } : { identityReflection: undefined }),\n };\n}\n"],"mappings":"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","names":["predicateTokens","sourceIndex"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/access-operations.ts","../src/relay/mission-access.ts","../src/relay/mission.ts"],"sourcesContent":["/**\n * Pilot operation definitions for the access boundary (issue #1525).\n *\n * Three operations migrate through the registry in this PR — `memory_get`,\n * `memory_search`, and the `memory_store` write op — so the boundary's\n * normalization matrix (rules 17/28/36/48/51) and shared error mapping reach\n * MCP, HTTP, and CLI from one place. Domain-group migrations (memory ops →\n * connectors → namespaces …) land as follow-up PRs that add `defineOperation`\n * calls here and delete the surface-local validation they replace.\n *\n * Importing this module for its side effects registers the pilot operations;\n * surfaces then dispatch via {@link getOperation} from `./access-boundary.js`.\n */\n\nimport { z } from \"zod\";\n\nimport { defineOperation } from \"./access-boundary.js\";\nimport { memoryStoreRequestSchema, type MemoryStoreRequest } from \"./access-schema.js\";\nimport { EngramAccessInputError } from \"./access-service.js\";\nimport { CorrectionContractError } from \"./correction/correction-contract.js\";\nimport type {\n EngramAccessMemoryResponse,\n EngramAccessWriteResponse,\n} from \"./access-service.js\";\nimport {\n DECISION_SUBCOMMANDS,\n type DecisionSurfaceRequest,\n type DecisionSurfaceResponse,\n} from \"./coding/decision-surfaces.js\";\nimport {\n type ArchitectureSurfaceRequest,\n type ArchitectureSurfaceResponse,\n} from \"./coding/architecture-surfaces.js\";\nimport {\n type CodegraphSurfaceRequest,\n type CodegraphSurfaceResponse,\n isCodegraphToolName,\n} from \"./coding/codegraph-surfaces.js\";\nimport {\n DELTA_SUBCOMMANDS,\n type DeltaSurfaceRequest,\n type DeltaSurfaceResponse,\n} from \"./coding/session-delta-surfaces.js\";\n\n// ---------------------------------------------------------------------------\n// memory_get — fetch one memory by id\n// ---------------------------------------------------------------------------\n\n/**\n * `memoryId` is required and non-empty (rule 51: the MCP dispatcher previously\n * fell back to `typeof args.memoryId === \"string\" ? args.memoryId : \"\"`,\n * silently passing an empty id into the service). `namespace` is\n * `.nullable().optional()` because MCP clients send `null` (gotcha #2).\n * `namespace` has no `.min(1)` because the pre-boundary handlers forwarded\n * empty/whitespace strings, and `resolveNamespace` treats empty identically\n * to absent (both trim to falsy → default namespace). Rejecting empty would\n * break HTTP callers that send a bare `?namespace=` (Cursor review).\n */\nconst memoryGetSchema = z.object({\n memoryId: z.string().trim().min(1, \"memoryId is required\").max(512),\n // Issue #1582 — when memoryId is a `[m:xxxx]` handle, sessionKey scopes the\n // resolution to this session's recent recall history.\n sessionKey: z.string().trim().min(1).max(512).nullable().optional(),\n namespace: z.string().trim().max(256).nullable().optional(),\n});\n\nexport interface MemoryGetInput {\n readonly memoryId: string;\n readonly sessionKey?: string | null;\n readonly namespace?: string | null;\n}\n\nexport interface MemoryGetOutput {\n readonly result: EngramAccessMemoryResponse;\n}\n\nexport const memoryGetOperation = defineOperation<MemoryGetInput, MemoryGetOutput>({\n name: \"memory_get\",\n description: \"Fetch one memory by id.\",\n schema: memoryGetSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.memoryGet(\n input.memoryId,\n input.namespace ?? undefined,\n ctx.authenticatedPrincipal,\n input.sessionKey ?? undefined,\n );\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// memory_search — semantic search across memories\n// ---------------------------------------------------------------------------\n\nconst memorySearchSchema = z.object({\n query: z.string().trim().min(1, \"query is required\").max(2048),\n namespace: z.string().trim().max(256).nullable().optional(),\n // No upper cap: the pre-boundary MCP handler forwarded any finite number to\n // memorySearch, and the QMD/search backends honor large limits. Capping at\n // 100 would reject existing clients that request larger result sets.\n maxResults: z.number().int().min(1).nullable().optional(),\n collection: z.string().trim().min(1).max(256).nullable().optional(),\n});\n\nexport interface MemorySearchInput {\n readonly query: string;\n readonly namespace?: string | null;\n readonly maxResults?: number | null;\n readonly collection?: string | null;\n}\n\nexport interface MemorySearchOutput {\n readonly result: {\n readonly query: string;\n readonly results: ReadonlyArray<{ path: string; score: number; snippet: string }>;\n readonly count: number;\n };\n}\n\nexport const memorySearchOperation = defineOperation<MemorySearchInput, MemorySearchOutput>({\n name: \"memory_search\",\n description: \"Search memories across readable namespaces.\",\n schema: memorySearchSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.memorySearch({\n query: input.query,\n namespace: input.namespace ?? undefined,\n maxResults: input.maxResults ?? undefined,\n collection: input.collection ?? undefined,\n principal: ctx.authenticatedPrincipal,\n });\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// memory_store — the pilot WRITE op\n// ---------------------------------------------------------------------------\n\nexport type MemoryStoreInput = MemoryStoreRequest;\n\nexport interface MemoryStoreOutput {\n readonly result: EngramAccessWriteResponse;\n}\n\nexport const memoryStoreOperation = defineOperation<MemoryStoreInput, MemoryStoreOutput>({\n name: \"memory_store\",\n description: \"Store an explicit memory through the access layer.\",\n // Reuse the existing schema verbatim — the migration is behavior-preserving;\n // the schema's external contract is NOT changing in this PR (per the issue's\n // pitfall note).\n schema: memoryStoreRequestSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.memoryStore(\n {\n ...input,\n authenticatedPrincipal: ctx.authenticatedPrincipal,\n ...(ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {}),\n },\n // Forward transport-level hooks (e.g. HTTP's atomic write-quota gate)\n // so the hook still fires inside the service's idempotent-write lock —\n // never before, never on a replay (#1434 invariant preserved by the\n // boundary migration).\n\n ctx.hooks,\n );\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// coding_decision — decision-record surfaces (issue #1548 Track A PR 2)\n// ---------------------------------------------------------------------------\n\n/**\n * The subcommand field is required and MUST be one of the four valid values\n * (rule 51 — reject loudly, list the options, never silently default). The\n * remaining fields are optional because each subcommand uses a different\n * subset; the handler validates subcommand-specific requirements after\n * routing.\n */\n/**\n * MCP clients send `null` for absent optional fields. Zod `.optional()`\n * rejects `null`, so strip nulls at the object level before the inner\n * schema validates (review: cursor null-field thread).\n */\nconst codingDecisionSchema = z.preprocess(\n (data) => {\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n if (v !== null) out[k] = v;\n }\n return out;\n }\n return data;\n },\n z.object({\n subcommand: z.enum(DECISION_SUBCOMMANDS),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n id: z.string().trim().max(512).optional(),\n title: z.string().trim().max(512).optional(),\n status: z.string().trim().max(64).optional(),\n context: z.string().trim().max(8192).optional(),\n decision: z.string().trim().max(8192).optional(),\n consequences: z.string().trim().max(8192).optional(),\n entityRefs: z.array(z.string().trim().min(1).max(256)).optional(),\n supersedesId: z.string().trim().max(512).optional(),\n }),\n);\n\nexport type CodingDecisionInput = DecisionSurfaceRequest;\nexport type CodingDecisionOutput = { result: DecisionSurfaceResponse };\n\nexport const codingDecisionOperation = defineOperation<\n CodingDecisionInput,\n CodingDecisionOutput\n>({\n name: \"coding_decision\",\n description:\n \"List, get, record, or supersede decision records in the session's coding namespace (issue #1548 Track A).\",\n schema: codingDecisionSchema as z.ZodType<CodingDecisionInput>,\n handler: async (input, ctx) => {\n const result = await ctx.service.codingDecision(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// coding_architecture — architecture-card surfaces (issue #1548 Track A PR 3)\n// ---------------------------------------------------------------------------\n\nconst codingArchitectureSchema = z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n },\n z.object({\n subcommand: z.enum([\"get\", \"refresh\"]),\n sessionKey: z.string().optional(),\n namespace: z.string().optional(),\n }),\n);\n\nexport type CodingArchitectureInput = ArchitectureSurfaceRequest;\nexport type CodingArchitectureOutput = { result: ArchitectureSurfaceResponse };\n\nexport const codingArchitectureOperation = defineOperation<\n CodingArchitectureInput,\n CodingArchitectureOutput\n>({\n name: \"coding_architecture\",\n description:\n \"Get or refresh the architecture card for the session's coding namespace (issue #1548 Track A PR 3).\",\n schema: codingArchitectureSchema as z.ZodType<CodingArchitectureInput>,\n handler: async (input, ctx) => {\n const result = await ctx.service.codingArchitecture(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nconst codegraphSurfaceSchema = z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n },\n z.object({\n tool: z.string().refine(isCodegraphToolName, {\n message: \"tool must be one of the codegraph tool names\",\n }),\n sessionKey: z.string().max(512).optional(),\n principal: z.string().max(256).optional(),\n project: z.string().max(256).optional(),\n query: z.string().max(2048).optional(),\n limit: z.number().int().positive().max(200).optional(),\n start: z.string().max(512).optional(),\n direction: z.string().max(64).optional(),\n depth: z.number().int().positive().max(10).optional(),\n qualifiedName: z.string().max(1024).optional(),\n path: z.string().max(2048).optional(),\n structuredQuery: z.record(z.string(), z.unknown()).optional(),\n head: z.string().max(256).optional(),\n repoRoot: z.string().max(2048).optional(),\n mode: z.string().max(64).optional(),\n confirm: z.boolean().optional(),\n subcommand: z.string().max(64).optional(),\n id: z.string().max(512).optional(),\n title: z.string().max(512).optional(),\n status: z.string().max(64).optional(),\n context: z.string().max(8192).optional(),\n decision: z.string().max(8192).optional(),\n consequences: z.string().max(8192).optional(),\n entityRefs: z.array(z.string().max(256)).optional(),\n supersedesId: z.string().max(512).optional(),\n traces: z.array(z.unknown()).optional(),\n }),\n) as z.ZodType<CodegraphSurfaceRequest>;\n\n// ---------------------------------------------------------------------------\n// coding_delta — session-delta surface (issue #1548 Track A PR 4)\n// ---------------------------------------------------------------------------\n\nconst codingDeltaSchema = z.preprocess(\n (data) => {\n if (data !== null && typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null) cleaned[key] = value;\n }\n return cleaned;\n }\n return data;\n },\n z.object({\n subcommand: z.enum(DELTA_SUBCOMMANDS),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n }),\n);\n\nexport type CodingDeltaInput = DeltaSurfaceRequest;\nexport type CodingDeltaOutput = { result: DeltaSurfaceResponse };\n\nexport const codingDeltaOperation = defineOperation<\n CodingDeltaInput,\n CodingDeltaOutput\n>({\n name: \"coding_delta\",\n description:\n \"Get the session delta (commits + touched files since last seen) for the session's coding namespace (issue #1548 Track A PR 4).\",\n schema: codingDeltaSchema as z.ZodType<CodingDeltaInput>,\n handler: async (input, ctx) => {\n const result = await ctx.service.codingDelta(input, ctx.authenticatedPrincipal);\n return { result };\n },\n});\n\n// ---------------------------------------------------------------------------\n// memory_correct_plan / memory_correct_apply — Correction Contract (#1580)\n// ---------------------------------------------------------------------------\n//\n// One plan/apply pipeline for every memory correction (supersession,\n// invalidation, tombstone, edit, rescope, redaction). The MCP/HTTP/CLI\n// surfaces all dispatch through these two ops so the boundary's validation +\n// error mapping reach every correction path (rule 22 / 39).\n\nconst memoryCorrectPlanSchema = z.preprocess(\n (data) => {\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n if (v !== null) out[k] = v;\n }\n return out;\n }\n return data;\n },\n z.object({\n text: z.string().trim().min(1).max(10_000),\n targetIds: z.array(z.string().trim().min(1).max(512)).optional(),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n }),\n);\n\nexport interface MemoryCorrectPlanInput {\n text: string;\n targetIds?: string[];\n sessionKey?: string;\n namespace?: string;\n}\n\nexport interface MemoryCorrectPlanOutput {\n readonly result: unknown; // CorrectionPlan — opaque to the boundary\n}\n\nexport const memoryCorrectPlanOperation = defineOperation<\n MemoryCorrectPlanInput,\n MemoryCorrectPlanOutput\n>({\n name: \"memory_correct_plan\",\n description:\n \"Plan a memory correction from a plain-language statement (issue #1580). Returns a CorrectionPlan with a diff preview; apply via memory_correct_apply.\",\n schema: memoryCorrectPlanSchema as z.ZodType<MemoryCorrectPlanInput>,\n handler: async (input, ctx) => {\n try {\n const result = await ctx.service.correctionPlan({\n text: input.text,\n ...(input.targetIds ? { targetIds: input.targetIds } : {}),\n ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),\n ...(input.namespace ? { namespace: input.namespace } : {}),\n ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),\n });\n return { result };\n } catch (err) {\n if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);\n throw err;\n }\n },\n});\n\nconst memoryCorrectApplySchema = z.preprocess(\n (data) => {\n if (data && typeof data === \"object\" && !Array.isArray(data)) {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data as Record<string, unknown>)) {\n if (v !== null) out[k] = v;\n }\n return out;\n }\n return data;\n },\n z.object({\n planId: z.string().trim().min(1).max(512),\n confirm: z.boolean().optional(),\n sessionKey: z.string().trim().max(512).optional(),\n namespace: z.string().trim().max(256).optional(),\n }),\n);\n\nexport interface MemoryCorrectApplyInput {\n planId: string;\n confirm?: boolean;\n sessionKey?: string;\n namespace?: string;\n}\n\nexport interface MemoryCorrectApplyOutput {\n readonly result: unknown; // CorrectionOutcome — opaque to the boundary\n}\n\nexport const memoryCorrectApplyOperation = defineOperation<\n MemoryCorrectApplyInput,\n MemoryCorrectApplyOutput\n>({\n name: \"memory_correct_apply\",\n description:\n \"Apply a planned memory correction by planId (issue #1580). Requires confirm: true when correction.applyRequiresConfirm is on (default).\",\n schema: memoryCorrectApplySchema as z.ZodType<MemoryCorrectApplyInput>,\n handler: async (input, ctx) => {\n try {\n const result = await ctx.service.correctionApply(input.planId, {\n confirm: input.confirm === true,\n ...(input.sessionKey ? { sessionKey: input.sessionKey } : {}),\n ...(input.namespace ? { namespace: input.namespace } : {}),\n ...(ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}),\n });\n return { result };\n } catch (err) {\n if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);\n throw err;\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// Surface registration map — what each transport calls the pilot ops\n// ---------------------------------------------------------------------------\n\n/**\n * The canonical short names (no `engram.`/`remnic.` prefix) of the operations\n * the boundary owns today. The fitness test treats this set as the migrated\n * set; everything else on a surface is unmigrated and counted by the ratchet.\n */\nexport const codegraphIndexOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_index\",\n description:\n \"Codegraph parity tool (issue #1554): index. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphListProjectsOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_list_projects\",\n description:\n \"Codegraph parity tool (issue #1554): list_projects. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphDeleteProjectOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_delete_project\",\n description:\n \"Codegraph parity tool (issue #1554): delete_project. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphIndexStatusOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_index_status\",\n description:\n \"Codegraph parity tool (issue #1554): index_status. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphSearchGraphOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_search_graph\",\n description:\n \"Codegraph parity tool (issue #1554): search_graph. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphTracePathOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_trace_path\",\n description:\n \"Codegraph parity tool (issue #1554): trace_path. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphDetectChangesOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_detect_changes\",\n description:\n \"Codegraph parity tool (issue #1554): detect_changes. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphQueryGraphOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_query_graph\",\n description:\n \"Codegraph parity tool (issue #1554): query_graph. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphGetSchemaOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_get_schema\",\n description:\n \"Codegraph parity tool (issue #1554): get_schema. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphGetSnippetOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_get_snippet\",\n description:\n \"Codegraph parity tool (issue #1554): get_snippet. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphGetArchitectureOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_get_architecture\",\n description:\n \"Codegraph parity tool (issue #1554): get_architecture. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphSearchCodeOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_search_code\",\n description:\n \"Codegraph parity tool (issue #1554): search_code. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphManageAdrOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_manage_adr\",\n description:\n \"Codegraph parity tool (issue #1554): manage_adr. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\nexport const codegraphIngestTracesOperation = defineOperation<\n CodegraphSurfaceRequest,\n { result: CodegraphSurfaceResponse }\n>({\n name: \"codegraph_ingest_traces\",\n description:\n \"Codegraph parity tool (issue #1554): ingest_traces. Delegates to the shared codegraph surface handler.\",\n schema: codegraphSurfaceSchema,\n handler: async (input, ctx) => {\n const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);\n return { result };\n },\n});\n\n// Batch-migrated operations (issue #1525): registers all remaining\n// handlers through the boundary as a side effect of importing this module.\nimport \"./access-operations-batch.js\";\n// Remnic Relay mission evidence operations (issue #1966).\nimport \"./relay/mission-access.js\";\n\nexport const REGISTERED_OPERATIONS = [\n memoryGetOperation.spec.name,\n memorySearchOperation.spec.name,\n memoryStoreOperation.spec.name,\n codingDecisionOperation.spec.name,\n codingArchitectureOperation.spec.name,\n codegraphIndexOperation.spec.name,\n codegraphListProjectsOperation.spec.name,\n codegraphDeleteProjectOperation.spec.name,\n codegraphIndexStatusOperation.spec.name,\n codegraphSearchGraphOperation.spec.name,\n codegraphTracePathOperation.spec.name,\n codegraphDetectChangesOperation.spec.name,\n codegraphQueryGraphOperation.spec.name,\n codegraphGetSchemaOperation.spec.name,\n codegraphGetSnippetOperation.spec.name,\n codegraphGetArchitectureOperation.spec.name,\n codegraphSearchCodeOperation.spec.name,\n codegraphManageAdrOperation.spec.name,\n codegraphIngestTracesOperation.spec.name,\n codingDeltaOperation.spec.name,\n memoryCorrectPlanOperation.spec.name,\n memoryCorrectApplyOperation.spec.name,\n] as const;\n","import { z } from \"zod\";\n\nimport { type OperationContext, defineOperation } from \"../access-boundary.js\";\nimport { EngramAccessInputError, type EngramAccessService } from \"../access-service.js\";\nimport {\n RELAY_MISSION_MAX_EVENT_LIMIT,\n RelayIsoDateTimeSchema,\n type RelayMissionAppendResult,\n type RelayMissionEventInput,\n RelayMissionEventInputSchema,\n RelayMissionIdSchema,\n type RelayMissionReadOptions,\n RelayMissionReadOptionsSchema,\n type RelayMissionSnapshot,\n RelayMissionStore,\n} from \"./mission.js\";\n\nconst namespaceSchema = z.string().trim().min(1).max(128).nullable().optional();\n\nconst RelayMissionAppendAccessSchema = z\n .object({\n missionId: RelayMissionIdSchema,\n namespace: namespaceSchema,\n event: RelayMissionEventInputSchema,\n })\n .strict();\n\nconst optionalLimitSchema = z.preprocess((value) => {\n if (value === undefined || value === null) return undefined;\n if (typeof value === \"string\" && /^(?:0|[1-9]\\d*)$/.test(value)) return Number(value);\n return value;\n}, z.number().int().min(1).max(RELAY_MISSION_MAX_EVENT_LIMIT).optional());\n\nconst RelayMissionReadAccessSchema = z\n .object({\n missionId: RelayMissionIdSchema,\n namespace: namespaceSchema,\n since: RelayIsoDateTimeSchema.optional(),\n until: RelayIsoDateTimeSchema.optional(),\n limit: optionalLimitSchema,\n })\n .strict()\n .refine(\n (value) =>\n value.since === undefined || value.until === undefined || Date.parse(value.since) < Date.parse(value.until),\n { message: \"since must be earlier than until\", path: [\"until\"] }\n );\n\nexport interface RelayMissionAppendAccessInput {\n missionId: string;\n namespace?: string | null;\n event: RelayMissionEventInput;\n}\n\nexport interface RelayMissionReadAccessInput extends RelayMissionReadOptions {\n missionId: string;\n namespace?: string | null;\n}\n\nexport interface RelayMissionAppendAccessOutput {\n result: RelayMissionAppendResult;\n}\n\nexport interface RelayMissionReadAccessOutput {\n result: RelayMissionSnapshot;\n}\n\n/**\n * Shared service contract for transports that need to append Relay evidence.\n * Namespace resolution stays in the existing access service so the append\n * inherits the same tenancy and principal rules as every memory write.\n */\nexport async function appendRelayMissionEvent(\n service: EngramAccessService,\n input: RelayMissionAppendAccessInput,\n authenticatedPrincipal?: string,\n beforeAppend?: () => void | Promise<void>\n): Promise<RelayMissionAppendResult> {\n const event = RelayMissionEventInputSchema.parse(input.event);\n const approvalPrincipal = authenticatedPrincipal?.trim() || undefined;\n if (event.payload.kind === \"correction_approved\" && event.payload.approvedBy.kind === \"human\") {\n if (!approvalPrincipal) {\n throw new EngramAccessInputError(\n \"Relay human approval requires a server-resolved authenticated principal\"\n );\n }\n if (event.payload.approvedBy.id !== approvalPrincipal) {\n throw new EngramAccessInputError(\n \"Relay human approval identity must match the server-resolved authenticated principal\"\n );\n }\n }\n const resolved = await service.getWritableStorageForNamespace(input.namespace ?? undefined, approvalPrincipal);\n const store = new RelayMissionStore({\n rootDir: resolved.storage.dir,\n namespace: resolved.namespace,\n });\n return store.append(input.missionId, event, { authenticatedPrincipal: approvalPrincipal, beforeAppend });\n}\n\n/** Namespace-authorized, bounded Relay snapshot read shared by HTTP and UI. */\nexport async function readRelayMission(\n service: EngramAccessService,\n input: RelayMissionReadAccessInput,\n authenticatedPrincipal?: string\n): Promise<RelayMissionSnapshot> {\n const resolved = await service.getReadableStorageForNamespace(input.namespace ?? undefined, authenticatedPrincipal);\n const store = new RelayMissionStore({\n rootDir: resolved.storage.dir,\n namespace: resolved.namespace,\n });\n const options = RelayMissionReadOptionsSchema.parse({\n ...(input.since === undefined ? {} : { since: input.since }),\n ...(input.until === undefined ? {} : { until: input.until }),\n ...(input.limit === undefined ? {} : { limit: input.limit }),\n });\n return store.read(input.missionId, options);\n}\n\nexport const relayMissionAppendOperation = defineOperation<\n RelayMissionAppendAccessInput,\n RelayMissionAppendAccessOutput\n>({\n name: \"relay_mission_append\",\n description: \"Append one evidence-backed event to an isolated Relay mission.\",\n schema: RelayMissionAppendAccessSchema as z.ZodType<RelayMissionAppendAccessInput>,\n handler: async (input, ctx: OperationContext) => ({\n result: await appendRelayMissionEvent(ctx.service, input, ctx.authenticatedPrincipal, ctx.hooks?.enforceWriteQuota),\n }),\n});\n\nexport const relayMissionReadOperation = defineOperation<RelayMissionReadAccessInput, RelayMissionReadAccessOutput>({\n name: \"relay_mission_read\",\n description: \"Read one bounded, browser-ready Relay mission receipt.\",\n schema: RelayMissionReadAccessSchema as z.ZodType<RelayMissionReadAccessInput>,\n handler: async (input, ctx: OperationContext) => ({\n result: await readRelayMission(ctx.service, input, ctx.authenticatedPrincipal),\n }),\n});\n","import { createHash, randomUUID } from \"node:crypto\";\nimport { promises as fs, constants as fsConstants } from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\n\nimport { serializeMutations, withHeldFileLock } from \"../utils/serialize-mutations.js\";\n\nexport const RELAY_MISSION_SCHEMA_VERSION = \"1\" as const;\nexport const RELAY_MISSION_MAX_FILE_BYTES = 4 * 1024 * 1024;\nexport const RELAY_MISSION_MAX_LINE_BYTES = 64 * 1024;\nexport const RELAY_MISSION_MAX_EVENTS = 2_000;\nexport const RELAY_MISSION_DEFAULT_EVENT_LIMIT = 200;\nexport const RELAY_MISSION_MAX_EVENT_LIMIT = 500;\n\nexport const RelayMissionIdSchema = z\n .string()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, {\n message: \"must contain only lowercase letters, numbers, and single hyphens\",\n });\n\nconst identifierSchema = z\n .string()\n .min(1)\n .max(128)\n .regex(/^[A-Za-z0-9](?:[A-Za-z0-9._:@-]{0,126}[A-Za-z0-9])?$/, {\n message: \"must be a bounded identifier\",\n });\n\nconst namespaceSchema = z.string().trim().min(1).max(128);\nconst authenticatedPrincipalSchema = z.string().trim().min(1).max(256);\nconst shortTextSchema = z.string().trim().min(1).max(240);\nconst statementSchema = z.string().trim().min(1).max(4_000);\nconst uniqueIdentifierListSchema = (minimum: number, maximum: number) =>\n z\n .array(identifierSchema)\n .min(minimum)\n .max(maximum)\n .refine((values) => new Set(values).size === values.length, \"must not contain duplicate identifiers\");\n\nexport const RelayIsoDateTimeSchema = z\n .string()\n .datetime({ offset: true })\n .refine((value) => Number.isFinite(Date.parse(value)), \"must be a representable timestamp\");\n\nexport const RelayEvidenceRefSchema = z\n .object({\n kind: z.enum([\"memory\", \"recall_audit\", \"source\", \"test\", \"commit\", \"correction\", \"agent_output\", \"approval\"]),\n id: identifierSchema,\n label: shortTextSchema,\n locator: z.string().trim().min(1).max(2_048).optional(),\n capture: z.enum([\"at_action\", \"historical_lookup\", \"fixture\"]),\n })\n .strict();\n\nexport type RelayEvidenceRef = z.infer<typeof RelayEvidenceRefSchema>;\n\nconst evidenceListSchema = z.array(RelayEvidenceRefSchema).max(16);\nconst agentIdentityFields = {\n agentId: identifierSchema,\n sessionId: identifierSchema,\n} as const;\n\nconst RelayMissionPayloadUnionSchema = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"mission_started\"),\n title: shortTextSchema,\n objective: statementSchema,\n runMode: z.enum([\"live\", \"replay\", \"fixture\"]),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"agent_status\"),\n ...agentIdentityFields,\n label: shortTextSchema,\n role: shortTextSchema,\n status: z.enum([\"idle\", \"working\", \"blocked\", \"complete\", \"failed\"]),\n detail: statementSchema.optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"agent_output\"),\n ...agentIdentityFields,\n outputId: identifierSchema,\n summary: statementSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"belief_observed\"),\n ...agentIdentityFields,\n beliefId: identifierSchema,\n decisionId: identifierSchema,\n statement: statementSchema,\n confidence: z.number().finite().min(0).max(1).optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"conflict_detected\"),\n conflictId: identifierSchema,\n decisionIds: uniqueIdentifierListSchema(2, 8),\n agentIds: uniqueIdentifierListSchema(2, 16),\n summary: statementSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"test_result\"),\n testId: identifierSchema,\n decisionId: identifierSchema,\n correctionId: identifierSchema.optional(),\n command: z.string().trim().min(1).max(1_000),\n status: z.enum([\"passed\", \"failed\", \"error\"]),\n summary: statementSchema,\n durationMs: z.number().int().nonnegative().max(3_600_000).optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"correction_proposed\"),\n correctionId: identifierSchema,\n conflictId: identifierSchema,\n proposedDecisionId: identifierSchema,\n supersedesDecisionIds: uniqueIdentifierListSchema(1, 8),\n statement: statementSchema,\n rationale: statementSchema,\n proposedBy: identifierSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"correction_approved\"),\n correctionId: identifierSchema,\n approvedBy: z\n .object({\n kind: z.enum([\"human\", \"agent\"]),\n id: identifierSchema,\n label: shortTextSchema,\n })\n .strict(),\n note: statementSchema.optional(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"decision_superseded\"),\n decisionId: identifierSchema,\n replacementDecisionId: identifierSchema,\n correctionId: identifierSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"recall_observed\"),\n ...agentIdentityFields,\n recallReceiptId: identifierSchema,\n decisionId: identifierSchema,\n query: statementSchema,\n capturedAtAction: z.boolean(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"propagation_verified\"),\n ...agentIdentityFields,\n correctionId: identifierSchema,\n decisionId: identifierSchema,\n recallReceiptId: identifierSchema,\n staleDecisionAbsent: z.boolean(),\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"mission_completed\"),\n outcome: z.enum([\"recovered\", \"failed\", \"inconclusive\"]),\n summary: statementSchema,\n evidence: evidenceListSchema.default([]),\n })\n .strict(),\n]);\n\nexport const RelayMissionPayloadSchema = RelayMissionPayloadUnionSchema.superRefine((value, ctx) => {\n if (value.kind === \"decision_superseded\" && value.decisionId === value.replacementDecisionId) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"a decision cannot supersede itself\",\n path: [\"replacementDecisionId\"],\n });\n }\n if (value.kind === \"correction_approved\" && !value.evidence.some((item) => item.kind === \"approval\")) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"correction approval requires approval evidence\",\n path: [\"evidence\"],\n });\n }\n if (\n value.kind === \"decision_superseded\" &&\n !value.evidence.some((item) => item.kind === \"correction\" && item.id === value.correctionId)\n ) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"decision supersession requires matching correction evidence\",\n path: [\"evidence\"],\n });\n }\n if (value.kind !== \"recall_observed\" && value.kind !== \"propagation_verified\") return;\n const matchingRecallEvidence = value.evidence.find(\n (item) => item.kind === \"recall_audit\" && item.id === value.recallReceiptId\n );\n if (!matchingRecallEvidence) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"recall proof requires a matching recall-audit reference\",\n path: [\"evidence\"],\n });\n return;\n }\n if (value.kind === \"recall_observed\") {\n const expectedCapture = value.capturedAtAction ? \"at_action\" : \"historical_lookup\";\n if (matchingRecallEvidence.capture !== expectedCapture && matchingRecallEvidence.capture !== \"fixture\") {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `recall evidence must be labeled ${expectedCapture}`,\n path: [\"evidence\", value.evidence.indexOf(matchingRecallEvidence), \"capture\"],\n });\n }\n }\n});\n\nexport type RelayMissionPayload = z.infer<typeof RelayMissionPayloadSchema>;\n\nexport const RelayMissionEventInputSchema = z\n .object({\n occurredAt: RelayIsoDateTimeSchema.optional(),\n idempotencyKey: identifierSchema.optional(),\n payload: RelayMissionPayloadSchema,\n })\n .strict();\n\nexport type RelayMissionEventInput = z.infer<typeof RelayMissionEventInputSchema>;\n\nexport const RelayMissionEventSchema = z\n .object({\n schemaVersion: z.literal(RELAY_MISSION_SCHEMA_VERSION),\n eventId: identifierSchema,\n missionId: RelayMissionIdSchema,\n namespace: namespaceSchema,\n authenticatedPrincipal: authenticatedPrincipalSchema.optional(),\n recordedAt: RelayIsoDateTimeSchema,\n occurredAt: RelayIsoDateTimeSchema,\n idempotencyKey: identifierSchema.optional(),\n payload: RelayMissionPayloadSchema,\n })\n .strict();\n\nexport type RelayMissionEvent = z.infer<typeof RelayMissionEventSchema>;\n\nexport const RelayMissionReadOptionsSchema = z\n .object({\n since: RelayIsoDateTimeSchema.optional(),\n until: RelayIsoDateTimeSchema.optional(),\n limit: z.number().int().min(1).max(RELAY_MISSION_MAX_EVENT_LIMIT).default(RELAY_MISSION_DEFAULT_EVENT_LIMIT),\n })\n .strict()\n .refine(\n (value) =>\n value.since === undefined || value.until === undefined || Date.parse(value.since) < Date.parse(value.until),\n { message: \"since must be earlier than until\", path: [\"until\"] }\n );\n\nexport type RelayMissionReadOptions = z.input<typeof RelayMissionReadOptionsSchema>;\n\nexport type RelayMissionStatus =\n | \"not_started\"\n | \"active\"\n | \"awaiting_approval\"\n | \"correcting\"\n | \"verified\"\n | \"completed\"\n | \"failed\";\n\nexport interface RelayAgentOutputSnapshot {\n outputId: string;\n summary: string;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayRecallSnapshot {\n recallReceiptId: string;\n sessionId: string;\n decisionId: string;\n query: string;\n capturedAtAction: boolean;\n coldStart: boolean;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayAgentSnapshot {\n agentId: string;\n label: string;\n role: string;\n status: \"idle\" | \"working\" | \"blocked\" | \"complete\" | \"failed\";\n sessionIds: string[];\n outputs: RelayAgentOutputSnapshot[];\n recalls: RelayRecallSnapshot[];\n lastSeenAt: string;\n}\n\nexport interface RelayDecisionSnapshot {\n decisionId: string;\n statement: string;\n status: \"active\" | \"superseded\" | \"proposed\";\n heldByAgentIds: string[];\n beliefIds: string[];\n evidence: RelayEvidenceRef[];\n firstObservedAt: string;\n supersededAt?: string;\n supersededBy?: string;\n correctionId?: string;\n}\n\nexport interface RelayConflictSnapshot {\n conflictId: string;\n decisionIds: string[];\n agentIds: string[];\n summary: string;\n status: \"open\" | \"proposed\" | \"resolved\";\n correctionId?: string;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayCorrectionSnapshot {\n correctionId: string;\n conflictId: string;\n proposedDecisionId: string;\n supersedesDecisionIds: string[];\n statement: string;\n rationale: string;\n proposedBy: string;\n status: \"proposed\" | \"approved\" | \"applied\" | \"propagated\";\n proposedAt: string;\n approvedAt?: string;\n approvedBy?: { kind: \"human\" | \"agent\"; id: string; label: string };\n approvalNote?: string;\n approvalPrincipal?: string;\n appliedAt?: string;\n propagatedAt?: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayTestSnapshot {\n testId: string;\n decisionId: string;\n correctionId?: string;\n command: string;\n status: \"passed\" | \"failed\" | \"error\";\n summary: string;\n durationMs?: number;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayPropagationSnapshot {\n correctionId: string;\n agentId: string;\n sessionId: string;\n decisionId: string;\n recallReceiptId: string;\n staleDecisionAbsent: boolean;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n}\n\nexport interface RelayMissionSnapshot {\n schemaVersion: typeof RELAY_MISSION_SCHEMA_VERSION;\n missionId: string;\n namespace: string;\n found: boolean;\n readHealth: \"empty\" | \"ok\" | \"partial\";\n status: RelayMissionStatus;\n mission: {\n title: string | null;\n objective: string | null;\n runMode: \"live\" | \"replay\" | \"fixture\" | null;\n startedAt: string | null;\n completedAt: string | null;\n };\n agents: RelayAgentSnapshot[];\n decisions: RelayDecisionSnapshot[];\n conflicts: RelayConflictSnapshot[];\n corrections: RelayCorrectionSnapshot[];\n tests: RelayTestSnapshot[];\n propagation: RelayPropagationSnapshot[];\n outcome: {\n result: \"recovered\" | \"failed\" | \"inconclusive\";\n summary: string;\n occurredAt: string;\n evidence: RelayEvidenceRef[];\n } | null;\n receipt: {\n complete: boolean;\n missingEvidence: string[];\n activeDecisionIds: string[];\n supersededDecisionIds: string[];\n coldStartVerified: boolean;\n passingOutcomeVerified: boolean;\n };\n bounds: {\n totalEvents: number;\n returnedEvents: number;\n corruptLines: number;\n truncated: boolean;\n since: string | null;\n until: string | null;\n };\n events: RelayMissionEvent[];\n}\n\nexport type RelayMissionStoreErrorCode =\n | \"idempotency_conflict\"\n | \"limit_exceeded\"\n | \"lock_unavailable\"\n | \"read_failed\"\n | \"unsafe_path\"\n | \"write_failed\";\n\nexport class RelayMissionStoreError extends Error {\n constructor(\n public readonly code: RelayMissionStoreErrorCode,\n message: string,\n options?: ErrorOptions\n ) {\n super(message, options);\n this.name = \"RelayMissionStoreError\";\n }\n}\n\nexport interface RelayMissionStoreOptions {\n rootDir: string;\n namespace: string;\n now?: () => Date;\n createEventId?: () => string;\n maxFileBytes?: number;\n maxEvents?: number;\n lockMaxWaitMs?: number;\n}\n\ninterface MissionFileRead {\n exists: boolean;\n events: RelayMissionEvent[];\n corruptLines: number;\n rawBytes: number;\n}\n\ninterface PinnedMissionDirectory {\n logicalPath: string;\n accessPath: string;\n handle: import(\"node:fs/promises\").FileHandle;\n}\n\nexport interface RelayMissionAppendResult {\n appended: boolean;\n replayed: boolean;\n event: RelayMissionEvent;\n}\n\nexport class RelayMissionStore {\n private readonly rootDir: string;\n private readonly namespace: string;\n private readonly now: () => Date;\n private readonly createEventId: () => string;\n private readonly maxFileBytes: number;\n private readonly maxEvents: number;\n private readonly lockMaxWaitMs: number;\n\n constructor(options: RelayMissionStoreOptions) {\n if (typeof options.rootDir !== \"string\" || options.rootDir.trim().length === 0) {\n throw new TypeError(\"RelayMissionStore rootDir must be a non-empty string\");\n }\n this.rootDir = path.resolve(options.rootDir);\n this.namespace = namespaceSchema.parse(options.namespace);\n this.now = options.now ?? (() => new Date());\n this.createEventId = options.createEventId ?? (() => `relay-${randomUUID()}`);\n this.maxFileBytes = positiveIntegerOption(options.maxFileBytes, \"maxFileBytes\", RELAY_MISSION_MAX_FILE_BYTES);\n this.maxEvents = positiveIntegerOption(options.maxEvents, \"maxEvents\", RELAY_MISSION_MAX_EVENTS);\n this.lockMaxWaitMs = positiveIntegerOption(options.lockMaxWaitMs, \"lockMaxWaitMs\", 5_000);\n }\n\n async append(\n missionIdValue: string,\n inputValue: RelayMissionEventInput,\n hooks: { authenticatedPrincipal?: string; beforeAppend?: () => void | Promise<void> } = {}\n ): Promise<RelayMissionAppendResult> {\n const missionId = RelayMissionIdSchema.parse(missionIdValue);\n const input = RelayMissionEventInputSchema.parse(inputValue);\n const authenticatedPrincipal =\n hooks.authenticatedPrincipal === undefined\n ? undefined\n : authenticatedPrincipalSchema.parse(hooks.authenticatedPrincipal);\n const missionDir = await this.openMissionDirectory(true);\n const filePath = path.join(missionDir.accessPath, `${missionId}.jsonl`);\n const logicalFilePath = path.join(missionDir.logicalPath, `${missionId}.jsonl`);\n const lockPath = `${filePath}.lock`;\n\n try {\n return await serializeMutations(`relay-mission:${logicalFilePath}`, () =>\n withHeldFileLock(\n lockPath,\n { staleMs: 30_000, maxWaitMs: this.lockMaxWaitMs, heartbeatMs: 10_000 },\n async (acquired) => {\n if (!acquired) {\n throw new RelayMissionStoreError(\"lock_unavailable\", \"could not acquire Relay mission lock\");\n }\n\n const existing = await this.readFile(filePath, missionId);\n if (input.idempotencyKey) {\n const replay = existing.events.find((event) => event.idempotencyKey === input.idempotencyKey);\n if (replay) {\n if (!sameIdempotentInput(replay, input, authenticatedPrincipal)) {\n throw new RelayMissionStoreError(\n \"idempotency_conflict\",\n `idempotency key ${input.idempotencyKey} was already used for different input`\n );\n }\n return { appended: false, replayed: true, event: replay };\n }\n }\n\n if (existing.events.length >= this.maxEvents) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} reached the ${this.maxEvents}-event limit`\n );\n }\n\n // Transport quotas run only after idempotency replay detection and\n // while this mission's mutation lock is held. A response-lost retry\n // remains replayable even when the original append used the final\n // quota slot.\n await hooks.beforeAppend?.();\n\n const recordedAt = validNow(this.now);\n const event = RelayMissionEventSchema.parse({\n schemaVersion: RELAY_MISSION_SCHEMA_VERSION,\n eventId: this.createEventId(),\n missionId,\n namespace: this.namespace,\n ...(authenticatedPrincipal === undefined ? {} : { authenticatedPrincipal }),\n recordedAt,\n occurredAt: input.occurredAt ?? recordedAt,\n ...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),\n payload: input.payload,\n });\n const line = `${JSON.stringify(event)}\\n`;\n const lineBytes = Buffer.byteLength(line, \"utf8\");\n if (lineBytes > RELAY_MISSION_MAX_LINE_BYTES) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `Relay mission event exceeds ${RELAY_MISSION_MAX_LINE_BYTES} bytes`\n );\n }\n if (existing.rawBytes + lineBytes > this.maxFileBytes) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} would exceed the ${this.maxFileBytes}-byte limit`\n );\n }\n\n await this.appendFile(filePath, line);\n return { appended: true, replayed: false, event };\n }\n )\n );\n } finally {\n await missionDir.handle.close().catch(() => undefined);\n }\n }\n\n async read(missionIdValue: string, readOptions: RelayMissionReadOptions = {}): Promise<RelayMissionSnapshot> {\n const missionId = RelayMissionIdSchema.parse(missionIdValue);\n const options = RelayMissionReadOptionsSchema.parse(readOptions);\n const missionDir = await this.openMissionDirectory(false);\n if (missionDir === null) {\n return reduceRelayMission({\n missionId,\n namespace: this.namespace,\n events: [],\n fileExists: false,\n options,\n });\n }\n const filePath = path.join(missionDir.accessPath, `${missionId}.jsonl`);\n const logicalFilePath = path.join(missionDir.logicalPath, `${missionId}.jsonl`);\n\n try {\n // Coordinate with writers in this process without creating a lock file.\n // Cross-process appends are single bounded O_APPEND records; a torn or\n // malformed record remains explicit partial evidence rather than being\n // silently accepted.\n return await serializeMutations(`relay-mission:${logicalFilePath}`, async () => {\n const read = await this.readFile(filePath, missionId);\n return reduceRelayMission({\n missionId,\n namespace: this.namespace,\n events: read.events,\n corruptLines: read.corruptLines,\n fileExists: read.exists,\n options,\n });\n });\n } finally {\n await missionDir.handle.close().catch(() => undefined);\n }\n }\n\n private async openMissionDirectory(create: true): Promise<PinnedMissionDirectory>;\n private async openMissionDirectory(create: false): Promise<PinnedMissionDirectory | null>;\n private async openMissionDirectory(create: boolean): Promise<PinnedMissionDirectory | null> {\n let currentHandle: import(\"node:fs/promises\").FileHandle | undefined;\n try {\n currentHandle = await openVerifiedDirectory(this.rootDir, \"Relay root must be a real directory\");\n let logicalPath = this.rootDir;\n for (const segment of [\"state\", \"relay\", \"missions\"]) {\n let childHandle: import(\"node:fs/promises\").FileHandle;\n try {\n childHandle = create\n ? await openOrCreatePinnedChildDirectory(currentHandle, segment)\n : await openVerifiedDirectory(\n path.join(pinnedDirectoryPath(currentHandle), segment),\n \"Relay directory symlinks are rejected\"\n );\n } catch (error) {\n if (!create && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n await currentHandle.close();\n return null;\n }\n throw error;\n }\n await currentHandle.close();\n currentHandle = childHandle;\n logicalPath = path.join(logicalPath, segment);\n }\n return {\n logicalPath,\n accessPath: pinnedDirectoryPath(currentHandle),\n handle: currentHandle,\n };\n } catch (error) {\n await currentHandle?.close().catch(() => undefined);\n if (error instanceof RelayMissionStoreError) throw error;\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission directory is unavailable or unsafe\", {\n cause: error,\n });\n }\n }\n\n private async readFile(filePath: string, missionId: string): Promise<MissionFileRead> {\n let handle: import(\"node:fs/promises\").FileHandle | undefined;\n try {\n handle = await fs.open(filePath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);\n const info = await handle.stat();\n if (!info.isFile()) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission path is not a file\");\n }\n if (info.nlink !== 1) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission hard links are rejected\");\n }\n if (info.size > this.maxFileBytes) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} exceeds the ${this.maxFileBytes}-byte read limit`\n );\n }\n const raw = await handle.readFile(\"utf8\");\n const parsed = parseMissionJsonl(raw, missionId, this.namespace, this.maxEvents);\n return { exists: true, rawBytes: Buffer.byteLength(raw, \"utf8\"), ...parsed };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { exists: false, events: [], corruptLines: 0, rawBytes: 0 };\n }\n if (error instanceof RelayMissionStoreError) throw error;\n throw new RelayMissionStoreError(\"read_failed\", \"failed to read Relay mission\", {\n cause: error,\n });\n } finally {\n await handle?.close().catch(() => undefined);\n }\n }\n\n private async appendFile(filePath: string, line: string): Promise<void> {\n let handle: import(\"node:fs/promises\").FileHandle | undefined;\n try {\n handle = await fs.open(\n filePath,\n fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_APPEND | fsConstants.O_NOFOLLOW,\n 0o600\n );\n const info = await handle.stat();\n if (!info.isFile()) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission path is not a file\");\n }\n if (info.nlink !== 1) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission hard links are rejected\");\n }\n await handle.chmod(0o600);\n await handle.writeFile(line, \"utf8\");\n await handle.sync();\n } catch (error) {\n if (error instanceof RelayMissionStoreError) throw error;\n if ((error as NodeJS.ErrnoException).code === \"ELOOP\") {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay mission symlink is rejected\", {\n cause: error,\n });\n }\n throw new RelayMissionStoreError(\"write_failed\", \"failed to append Relay mission\", {\n cause: error,\n });\n } finally {\n await handle?.close().catch(() => undefined);\n }\n }\n}\n\ninterface ReduceRelayMissionInput {\n missionId: string;\n namespace: string;\n events: RelayMissionEvent[];\n corruptLines?: number;\n fileExists?: boolean;\n options?: RelayMissionReadOptions;\n}\n\nexport function reduceRelayMission(input: ReduceRelayMissionInput): RelayMissionSnapshot {\n const missionId = RelayMissionIdSchema.parse(input.missionId);\n const namespace = namespaceSchema.parse(input.namespace);\n const options = RelayMissionReadOptionsSchema.parse(input.options ?? {});\n const corruptLines = input.corruptLines ?? 0;\n const sinceMs = options.since ? Date.parse(options.since) : undefined;\n const untilMs = options.until ? Date.parse(options.until) : undefined;\n const appendPositions = new Map(input.events.map((event, index) => [event, index] as const));\n const orderedEvents = [...input.events].sort(compareRelayEvents);\n const firstStartEvent = input.events.find((event) => event.payload.kind === \"mission_started\");\n const firstCompletionEvent = input.events.find((event) => event.payload.kind === \"mission_completed\");\n const firstStartPosition = firstStartEvent === undefined ? -1 : (appendPositions.get(firstStartEvent) ?? -1);\n const firstCompletionPosition =\n firstCompletionEvent === undefined ? -1 : (appendPositions.get(firstCompletionEvent) ?? -1);\n const filteredEvents = orderedEvents.filter((event) => {\n const occurredAt = Date.parse(event.occurredAt);\n return (sinceMs === undefined || occurredAt >= sinceMs) && (untilMs === undefined || occurredAt < untilMs);\n });\n\n const agents = new Map<string, RelayAgentSnapshot>();\n const decisions = new Map<string, RelayDecisionSnapshot>();\n const conflicts = new Map<string, RelayConflictSnapshot>();\n const corrections = new Map<string, RelayCorrectionSnapshot>();\n const tests: RelayTestSnapshot[] = [];\n const propagation: RelayPropagationSnapshot[] = [];\n const beliefAppendPositions = new Map<string, number>();\n const conflictAppendPositions = new Map<string, number>();\n const correctionProposalAppendPositions = new Map<string, number>();\n const correctionApprovalAppendPositions = new Map<string, number>();\n const correctionAppliedAppendPositions = new Map<string, number>();\n const recallAppendPositions = new Map<RelayRecallSnapshot, number>();\n const propagationAppendPositions = new Map<RelayPropagationSnapshot, number>();\n const testAppendPositions = new Map<RelayTestSnapshot, number>();\n const missingEvidence = new Set<string>();\n if (corruptLines > 0) missingEvidence.add(\"mission:corrupt-events\");\n const substantiveAgentIds = new Set<string>();\n const substantiveSessionIds = new Set<string>();\n const conflictDisagreementIds = new Set<string>();\n const groundedCorrectionIds = new Set<string>();\n let title: string | null = null;\n let objective: string | null = null;\n let runMode: \"live\" | \"replay\" | \"fixture\" | null = null;\n let startedAt: string | null = null;\n let completedAt: string | null = null;\n let status: RelayMissionStatus = \"not_started\";\n let outcome: RelayMissionSnapshot[\"outcome\"] = null;\n\n const ensureAgent = (agentId: string, sessionId: string, occurredAt: string): RelayAgentSnapshot => {\n const existing = agents.get(agentId);\n if (existing) {\n if (!existing.sessionIds.includes(sessionId)) existing.sessionIds.push(sessionId);\n existing.lastSeenAt = occurredAt;\n return existing;\n }\n const created: RelayAgentSnapshot = {\n agentId,\n label: agentId,\n role: \"Codex agent\",\n status: \"working\",\n sessionIds: [sessionId],\n outputs: [],\n recalls: [],\n lastSeenAt: occurredAt,\n };\n agents.set(agentId, created);\n return created;\n };\n\n const markSubstantiveParticipation = (agentId: string, sessionId?: string): void => {\n substantiveAgentIds.add(agentId);\n if (sessionId) substantiveSessionIds.add(sessionId);\n };\n\n for (const event of orderedEvents) {\n const payload = event.payload;\n const appendPosition = appendPositions.get(event) ?? -1;\n if (\n payload.kind !== \"mission_started\" &&\n firstStartEvent !== undefined &&\n (appendPosition < firstStartPosition || compareRelayEvents(event, firstStartEvent) < 0)\n ) {\n missingEvidence.add(`mission:event-before-start:${event.eventId}`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n continue;\n }\n if (\n payload.kind !== \"mission_completed\" &&\n (outcome !== null || (firstCompletionPosition >= 0 && appendPosition > firstCompletionPosition))\n ) {\n missingEvidence.add(`mission:event-after-completion:${event.eventId}`);\n if (payload.kind === \"mission_started\") missingEvidence.add(\"mission:lifecycle-order\");\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n continue;\n }\n switch (payload.kind) {\n case \"mission_started\":\n if (startedAt !== null) {\n missingEvidence.add(\"mission:duplicate-start\");\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n title = payload.title;\n objective = payload.objective;\n runMode = payload.runMode;\n startedAt = event.occurredAt;\n if (outcome === null) status = \"active\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n case \"agent_status\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n agent.label = payload.label;\n agent.role = payload.role;\n agent.status = payload.status;\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"agent_output\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n agent.outputs.push({\n outputId: payload.outputId,\n summary: payload.summary,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n });\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"belief_observed\": {\n ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n recordEarliestAppendPosition(\n beliefAppendPositions,\n beliefAppendPositionKey(payload.agentId, payload.decisionId),\n appendPosition\n );\n const existing = decisions.get(payload.decisionId);\n if (existing) {\n if (!decisionStatementsMatch(existing.statement, payload.statement)) {\n missingEvidence.add(`decision:${payload.decisionId}:statement-consistency`);\n }\n if (!existing.heldByAgentIds.includes(payload.agentId)) {\n existing.heldByAgentIds.push(payload.agentId);\n }\n if (!existing.beliefIds.includes(payload.beliefId)) existing.beliefIds.push(payload.beliefId);\n existing.evidence.push(...payload.evidence);\n } else {\n decisions.set(payload.decisionId, {\n decisionId: payload.decisionId,\n statement: payload.statement,\n status: \"active\",\n heldByAgentIds: [payload.agentId],\n beliefIds: [payload.beliefId],\n evidence: [...payload.evidence],\n firstObservedAt: event.occurredAt,\n });\n }\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"conflict_detected\": {\n recordEarliestAppendPosition(conflictAppendPositions, payload.conflictId, appendPosition);\n const normalizedDecisionStatements = payload.decisionIds\n .map((decisionId) => decisions.get(decisionId)?.statement)\n .filter((statement): statement is string => statement !== undefined)\n .map(normalizeDecisionStatement);\n if (\n normalizedDecisionStatements.length !== payload.decisionIds.length ||\n new Set(normalizedDecisionStatements).size < 2\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:distinct-decision-statements`);\n } else {\n conflictDisagreementIds.add(payload.conflictId);\n }\n const participantHoldings = payload.agentIds.map((agentId) => ({\n agentId,\n decisionIds: uniqueSorted(\n payload.decisionIds.filter((decisionId) => decisions.get(decisionId)?.heldByAgentIds.includes(agentId))\n ),\n }));\n for (const participant of participantHoldings) {\n if (participant.decisionIds.length === 0) {\n missingEvidence.add(`conflict:${payload.conflictId}:participant:${participant.agentId}:decision-link`);\n }\n }\n for (const decisionId of payload.decisionIds) {\n if (!participantHoldings.some((participant) => participant.decisionIds.includes(decisionId))) {\n missingEvidence.add(`conflict:${payload.conflictId}:decision:${decisionId}:participant-link`);\n }\n if (\n !payload.agentIds.some(\n (agentId) =>\n (beliefAppendPositions.get(beliefAppendPositionKey(agentId, decisionId)) ?? Number.POSITIVE_INFINITY) <\n appendPosition\n )\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:decision:${decisionId}:append-order`);\n }\n }\n for (const agentId of payload.agentIds) {\n if (\n !payload.decisionIds.some(\n (decisionId) =>\n (beliefAppendPositions.get(beliefAppendPositionKey(agentId, decisionId)) ?? Number.POSITIVE_INFINITY) <\n appendPosition\n )\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:participant:${agentId}:append-order`);\n }\n }\n if (\n participantHoldings.every((participant) => participant.decisionIds.length > 0) &&\n new Set(participantHoldings.map((participant) => participant.decisionIds.join(\"\\0\"))).size < 2\n ) {\n missingEvidence.add(`conflict:${payload.conflictId}:distinct-participant-beliefs`);\n }\n if (conflicts.has(payload.conflictId)) {\n missingEvidence.add(`conflict:${payload.conflictId}:duplicate`);\n } else {\n conflicts.set(payload.conflictId, {\n conflictId: payload.conflictId,\n decisionIds: uniqueSorted(payload.decisionIds),\n agentIds: uniqueSorted(payload.agentIds),\n summary: payload.summary,\n status: \"open\",\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n });\n }\n for (const agentId of payload.agentIds) substantiveAgentIds.add(agentId);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"test_result\": {\n const testSnapshot: RelayTestSnapshot = {\n testId: payload.testId,\n decisionId: payload.decisionId,\n ...(payload.correctionId === undefined ? {} : { correctionId: payload.correctionId }),\n command: payload.command,\n status: payload.status,\n summary: payload.summary,\n ...(payload.durationMs === undefined ? {} : { durationMs: payload.durationMs }),\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n tests.push(testSnapshot);\n testAppendPositions.set(testSnapshot, appendPosition);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"correction_proposed\": {\n if (corrections.has(payload.correctionId)) {\n missingEvidence.add(`correction:${payload.correctionId}:duplicate-proposal`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n substantiveAgentIds.add(payload.proposedBy);\n const correction: RelayCorrectionSnapshot = {\n correctionId: payload.correctionId,\n conflictId: payload.conflictId,\n proposedDecisionId: payload.proposedDecisionId,\n supersedesDecisionIds: uniqueSorted(payload.supersedesDecisionIds),\n statement: payload.statement,\n rationale: payload.rationale,\n proposedBy: payload.proposedBy,\n status: \"proposed\",\n proposedAt: event.occurredAt,\n evidence: [...payload.evidence],\n };\n corrections.set(payload.correctionId, correction);\n correctionProposalAppendPositions.set(payload.correctionId, appendPosition);\n const existingProposedDecision = decisions.get(payload.proposedDecisionId);\n const replacementStatementMatches =\n existingProposedDecision === undefined ||\n decisionStatementsMatch(existingProposedDecision.statement, payload.statement);\n if (!replacementStatementMatches) {\n missingEvidence.add(`correction:${payload.correctionId}:replacement-statement`);\n }\n if (existingProposedDecision === undefined) {\n decisions.set(payload.proposedDecisionId, {\n decisionId: payload.proposedDecisionId,\n statement: payload.statement,\n status: \"proposed\",\n heldByAgentIds: [],\n beliefIds: [],\n evidence: [...payload.evidence],\n firstObservedAt: event.occurredAt,\n });\n }\n const conflict = conflicts.get(payload.conflictId);\n const conflictAppendPosition = conflictAppendPositions.get(payload.conflictId);\n const conflictPredatesProposal =\n conflictAppendPosition !== undefined && conflictAppendPosition < appendPosition;\n if (!conflictPredatesProposal) {\n missingEvidence.add(`correction:${payload.correctionId}:conflict-append-order`);\n }\n const correctionSourceIds = sourceEvidenceIds(payload.evidence);\n if (correctionSourceIds.size === 0) {\n missingEvidence.add(`correction:${payload.correctionId}:source`);\n }\n if (conflict) {\n const conflictSourceIds = sourceEvidenceIds(conflict.evidence);\n if (conflictSourceIds.size === 0) {\n missingEvidence.add(`conflict:${payload.conflictId}:source`);\n }\n const sourceLinked = [...correctionSourceIds].some((sourceId) => conflictSourceIds.has(sourceId));\n if (!sourceLinked) {\n missingEvidence.add(`correction:${payload.correctionId}:source-link`);\n }\n if (!correctionCoversConflict(correction, conflict)) {\n missingEvidence.add(`conflict:${payload.conflictId}:decision-link`);\n } else if (\n sourceLinked &&\n conflictPredatesProposal &&\n conflictDisagreementIds.has(payload.conflictId) &&\n replacementStatementMatches\n ) {\n groundedCorrectionIds.add(payload.correctionId);\n conflict.status = \"proposed\";\n conflict.correctionId = payload.correctionId;\n }\n } else {\n missingEvidence.add(`conflict:${payload.conflictId}:observation`);\n }\n status = \"awaiting_approval\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"correction_approved\": {\n if (payload.approvedBy.kind === \"agent\") substantiveAgentIds.add(payload.approvedBy.id);\n const correction = corrections.get(payload.correctionId);\n if (correction) {\n const proposalAppendPosition = correctionProposalAppendPositions.get(payload.correctionId);\n const proposalPredatesApproval =\n proposalAppendPosition !== undefined && proposalAppendPosition < appendPosition;\n const authenticatedHumanApproval =\n payload.approvedBy.kind !== \"human\" ||\n runMode !== \"live\" ||\n event.authenticatedPrincipal === payload.approvedBy.id;\n if (!proposalPredatesApproval) {\n missingEvidence.add(`correction:${payload.correctionId}:approval-append-order`);\n } else if (!authenticatedHumanApproval) {\n missingEvidence.add(`correction:${payload.correctionId}:authenticated-human-approval`);\n } else if (correction.approvedAt === undefined) {\n correction.approvedAt = event.occurredAt;\n correction.approvedBy = payload.approvedBy;\n correction.approvalNote = payload.note;\n if (event.authenticatedPrincipal !== undefined) {\n correction.approvalPrincipal = event.authenticatedPrincipal;\n }\n correctionApprovalAppendPositions.set(payload.correctionId, appendPosition);\n if (correction.status === \"proposed\") correction.status = \"approved\";\n status = \"correcting\";\n } else {\n missingEvidence.add(`correction:${payload.correctionId}:duplicate-approval`);\n }\n correction.evidence.push(...payload.evidence);\n } else {\n missingEvidence.add(`correction:${payload.correctionId}:proposal`);\n }\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"decision_superseded\": {\n const correction = corrections.get(payload.correctionId);\n if (!correction) {\n missingEvidence.add(`correction:${payload.correctionId}:proposal`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (correction.approvedAt === undefined || correction.approvedBy === undefined) {\n missingEvidence.add(`correction:${payload.correctionId}:approval`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const approvalAppendPosition = correctionApprovalAppendPositions.get(payload.correctionId);\n if (approvalAppendPosition === undefined || approvalAppendPosition >= appendPosition) {\n missingEvidence.add(`correction:${payload.correctionId}:approval-append-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const conflict = conflicts.get(correction.conflictId);\n if (!conflict || !correctionCoversConflict(correction, conflict)) {\n missingEvidence.add(`conflict:${correction.conflictId}:decision-link`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (!groundedCorrectionIds.has(payload.correctionId)) {\n missingEvidence.add(`correction:${payload.correctionId}:source-link`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (\n !correction.supersedesDecisionIds.includes(payload.decisionId) ||\n correction.proposedDecisionId !== payload.replacementDecisionId\n ) {\n missingEvidence.add(`correction:${payload.correctionId}:supersession-link`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n\n const stale = decisions.get(payload.decisionId);\n const replacement = decisions.get(payload.replacementDecisionId);\n if (!stale) missingEvidence.add(`decision:${payload.decisionId}:observation`);\n if (!replacement) missingEvidence.add(`decision:${payload.replacementDecisionId}:replacement`);\n if (!stale || !replacement) {\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n\n stale.status = \"superseded\";\n stale.supersededAt = event.occurredAt;\n stale.supersededBy = payload.replacementDecisionId;\n stale.correctionId = payload.correctionId;\n stale.evidence.push(...payload.evidence);\n replacement.status = \"active\";\n replacement.evidence.push(...payload.evidence);\n correction.evidence.push(...payload.evidence);\n if (correctionSupersessionComplete(correction, decisions)) {\n correction.appliedAt ??= event.occurredAt;\n recordEarliestAppendPosition(correctionAppliedAppendPositions, payload.correctionId, appendPosition);\n if (correction.status !== \"propagated\") correction.status = \"applied\";\n conflict.status = \"resolved\";\n }\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"recall_observed\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n const coldStart =\n !substantiveAgentIds.has(payload.agentId) &&\n !substantiveSessionIds.has(payload.sessionId) &&\n agent.recalls.length === 0;\n const recallSnapshot: RelayRecallSnapshot = {\n recallReceiptId: payload.recallReceiptId,\n sessionId: payload.sessionId,\n decisionId: payload.decisionId,\n query: payload.query,\n capturedAtAction: payload.capturedAtAction,\n coldStart,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n agent.recalls.push(recallSnapshot);\n recallAppendPositions.set(recallSnapshot, appendPosition);\n markSubstantiveParticipation(payload.agentId, payload.sessionId);\n const decision = decisions.get(payload.decisionId);\n if (decision && !decision.heldByAgentIds.includes(payload.agentId)) {\n decision.heldByAgentIds.push(payload.agentId);\n }\n if (!decision) missingEvidence.add(`decision:${payload.decisionId}:recall-target`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"propagation_verified\": {\n const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);\n const correction = corrections.get(payload.correctionId);\n if (!correction) {\n missingEvidence.add(`correction:${payload.correctionId}:proposal`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (correction.approvedAt === undefined || correction.approvedBy === undefined) {\n missingEvidence.add(`correction:${payload.correctionId}:approval`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (\n (correction.status !== \"applied\" && correction.status !== \"propagated\") ||\n correction.appliedAt === undefined ||\n correction.proposedDecisionId !== payload.decisionId\n ) {\n missingEvidence.add(`correction:${payload.correctionId}:supersession`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const recalled = agent.recalls.find(\n (recall) =>\n recall.recallReceiptId === payload.recallReceiptId &&\n recall.sessionId === payload.sessionId &&\n recall.decisionId === payload.decisionId\n );\n if (!recalled) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:observation`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n const appliedAppendPosition = correctionAppliedAppendPositions.get(payload.correctionId);\n const recallAppendPosition = recallAppendPositions.get(recalled);\n if (\n appliedAppendPosition === undefined ||\n recallAppendPosition === undefined ||\n appliedAppendPosition >= recallAppendPosition\n ) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:post-application-append-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (recallAppendPosition >= appendPosition) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:propagation-append-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (!recalled.capturedAtAction) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:at-action`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (!recalled.coldStart) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:cold-start`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (compareInstants(correction.appliedAt, recalled.occurredAt) >= 0) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:post-application`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (compareInstants(recalled.occurredAt, event.occurredAt) >= 0) {\n missingEvidence.add(`recall:${payload.recallReceiptId}:propagation-order`);\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n\n const propagationSnapshot: RelayPropagationSnapshot = {\n correctionId: payload.correctionId,\n agentId: payload.agentId,\n sessionId: payload.sessionId,\n decisionId: payload.decisionId,\n recallReceiptId: payload.recallReceiptId,\n staleDecisionAbsent: payload.staleDecisionAbsent,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n propagation.push(propagationSnapshot);\n propagationAppendPositions.set(propagationSnapshot, appendPosition);\n correction.evidence.push(...payload.evidence);\n if (payload.staleDecisionAbsent) {\n correction.status = \"propagated\";\n correction.propagatedAt = event.occurredAt;\n }\n status = payload.staleDecisionAbsent ? \"verified\" : \"correcting\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n case \"mission_completed\":\n if (outcome !== null) {\n missingEvidence.add(\"mission:duplicate-completion\");\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n if (startedAt === null) missingEvidence.add(\"mission:start\");\n outcome = {\n result: payload.outcome,\n summary: payload.summary,\n occurredAt: event.occurredAt,\n evidence: payload.evidence,\n };\n completedAt = event.occurredAt;\n status = payload.outcome === \"failed\" ? \"failed\" : \"completed\";\n collectMissingEvidence(missingEvidence, event, payload.evidence);\n break;\n }\n }\n\n for (const conflict of conflicts.values()) {\n if (sourceEvidenceIds(conflict.evidence).size === 0) {\n missingEvidence.add(`conflict:${conflict.conflictId}:source`);\n }\n for (const decisionId of conflict.decisionIds) {\n if (!decisions.has(decisionId)) missingEvidence.add(`decision:${decisionId}:conflict-target`);\n }\n for (const agentId of conflict.agentIds) {\n if (!agents.has(agentId)) missingEvidence.add(`agent:${agentId}:conflict-participant`);\n }\n }\n for (const correction of corrections.values()) {\n if (sourceEvidenceIds(correction.evidence).size === 0) {\n missingEvidence.add(`correction:${correction.correctionId}:source`);\n }\n if (correction.approvedAt === undefined || correction.approvedBy === undefined) {\n missingEvidence.add(`correction:${correction.correctionId}:approval`);\n } else if (correction.approvedBy.kind !== \"human\") {\n missingEvidence.add(`correction:${correction.correctionId}:human-approval`);\n } else if (runMode === \"live\" && correction.approvalPrincipal !== correction.approvedBy.id) {\n missingEvidence.add(`correction:${correction.correctionId}:authenticated-human-approval`);\n }\n if (correction.status === \"approved\" || correction.status === \"proposed\") {\n missingEvidence.add(`correction:${correction.correctionId}:supersession`);\n }\n if (correction.status === \"applied\") {\n missingEvidence.add(`correction:${correction.correctionId}:propagation`);\n }\n }\n\n const liveFixtureEvidenceEventIds =\n runMode === \"live\"\n ? orderedEvents\n .filter((event) => event.payload.evidence.some((item) => item.capture === \"fixture\"))\n .map((event) => event.eventId)\n : [];\n for (const eventId of liveFixtureEvidenceEventIds) {\n missingEvidence.add(`mission:live-fixture-evidence:${eventId}`);\n }\n const captureTrustValid = liveFixtureEvidenceEventIds.length === 0;\n\n const sortedDecisions = [...decisions.values()]\n .map((decision) => ({\n ...decision,\n heldByAgentIds: uniqueSorted(decision.heldByAgentIds),\n beliefIds: uniqueSorted(decision.beliefIds),\n evidence: uniqueEvidence(decision.evidence),\n }))\n .sort((a, b) => compareText(a.decisionId, b.decisionId));\n const coldStartVerified = captureTrustValid && propagation.some((item) => item.staleDecisionAbsent);\n const passingOutcomeVerified =\n captureTrustValid &&\n outcome?.result === \"recovered\" &&\n tests.some((test) => {\n const testAppendPosition = testAppendPositions.get(test);\n if (\n test.status !== \"passed\" ||\n test.correctionId === undefined ||\n testAppendPosition === undefined ||\n firstCompletionPosition < 0 ||\n testAppendPosition >= firstCompletionPosition ||\n compareInstants(test.occurredAt, outcome.occurredAt) >= 0\n ) {\n return false;\n }\n const correction = corrections.get(test.correctionId);\n if (\n correction?.status !== \"propagated\" ||\n correction.proposedDecisionId !== test.decisionId ||\n !test.evidence.some((item) => item.kind === \"correction\" && item.id === correction.correctionId) ||\n !test.evidence.some((item) => item.kind === \"test\")\n ) {\n return false;\n }\n return propagation.some((item) => {\n const propagationAppendPosition = propagationAppendPositions.get(item);\n return (\n item.staleDecisionAbsent &&\n item.correctionId === correction.correctionId &&\n item.decisionId === test.decisionId &&\n propagationAppendPosition !== undefined &&\n propagationAppendPosition < testAppendPosition &&\n compareInstants(item.occurredAt, test.occurredAt) < 0\n );\n });\n });\n if (outcome && !passingOutcomeVerified) missingEvidence.add(\"outcome:passing-test\");\n if (outcome?.result === \"recovered\" && !coldStartVerified) {\n missingEvidence.add(\"outcome:cold-start-propagation\");\n }\n if (input.events.length > 0 && startedAt === null) missingEvidence.add(\"mission:start\");\n if (startedAt !== null && completedAt !== null && compareInstants(startedAt, completedAt) >= 0) {\n missingEvidence.add(\"mission:lifecycle-order\");\n }\n if (\n firstStartEvent !== undefined &&\n firstCompletionEvent !== undefined &&\n (firstStartPosition >= firstCompletionPosition || compareRelayEvents(firstStartEvent, firstCompletionEvent) >= 0)\n ) {\n missingEvidence.add(\"mission:lifecycle-order\");\n }\n\n const eventWindow = filteredEvents.slice(Math.max(0, filteredEvents.length - options.limit));\n // `found` describes whether the mission has any valid persisted evidence,\n // not whether the caller's optional time window happened to select an\n // event. A known mission with an empty [since, until) window is distinct\n // from a mission that has never existed.\n const found = input.events.length > 0;\n return {\n schemaVersion: RELAY_MISSION_SCHEMA_VERSION,\n missionId,\n namespace,\n found,\n readHealth: corruptLines > 0 ? \"partial\" : found || input.fileExists ? \"ok\" : \"empty\",\n status,\n mission: { title, objective, runMode, startedAt, completedAt },\n agents: [...agents.values()]\n .map((agent) => ({\n ...agent,\n sessionIds: uniqueSorted(agent.sessionIds),\n outputs: agent.outputs.sort((a, b) => compareTimedIds(a, b, \"outputId\")),\n recalls: agent.recalls.sort((a, b) => compareTimedIds(a, b, \"recallReceiptId\")),\n }))\n .sort((a, b) => compareText(a.agentId, b.agentId)),\n decisions: sortedDecisions,\n conflicts: [...conflicts.values()].sort((a, b) => compareText(a.conflictId, b.conflictId)),\n corrections: [...corrections.values()]\n .map((correction) => ({ ...correction, evidence: uniqueEvidence(correction.evidence) }))\n .sort((a, b) => compareText(a.correctionId, b.correctionId)),\n tests: tests.sort((a, b) => compareTimedIds(a, b, \"testId\")),\n propagation: propagation.sort((a, b) => {\n const byTime = compareInstants(a.occurredAt, b.occurredAt);\n if (byTime !== 0) return byTime;\n const byAgent = compareText(a.agentId, b.agentId);\n return byAgent !== 0 ? byAgent : compareText(a.recallReceiptId, b.recallReceiptId);\n }),\n outcome,\n receipt: {\n complete:\n status === \"completed\" &&\n outcome?.result === \"recovered\" &&\n passingOutcomeVerified &&\n coldStartVerified &&\n missingEvidence.size === 0,\n missingEvidence: [...missingEvidence].sort(compareText),\n activeDecisionIds: sortedDecisions\n .filter((decision) => decision.status === \"active\")\n .map((decision) => decision.decisionId),\n supersededDecisionIds: sortedDecisions\n .filter((decision) => decision.status === \"superseded\")\n .map((decision) => decision.decisionId),\n coldStartVerified,\n passingOutcomeVerified,\n },\n bounds: {\n totalEvents: filteredEvents.length,\n returnedEvents: eventWindow.length,\n corruptLines,\n truncated: filteredEvents.length > eventWindow.length,\n since: options.since ?? null,\n until: options.until ?? null,\n },\n events: eventWindow,\n };\n}\n\nexport function compareRelayEvents(a: RelayMissionEvent, b: RelayMissionEvent): number {\n const byOccurrence = compareInstants(a.occurredAt, b.occurredAt);\n if (byOccurrence !== 0) return byOccurrence;\n const byRecord = compareInstants(a.recordedAt, b.recordedAt);\n if (byRecord !== 0) return byRecord;\n return compareText(a.eventId, b.eventId);\n}\n\nfunction parseMissionJsonl(\n raw: string,\n missionId: string,\n namespace: string,\n maxEvents: number\n): Pick<MissionFileRead, \"events\" | \"corruptLines\"> {\n const events: RelayMissionEvent[] = [];\n let corruptLines = 0;\n for (const line of raw.split(\"\\n\")) {\n if (line.trim().length === 0) continue;\n if (Buffer.byteLength(line, \"utf8\") > RELAY_MISSION_MAX_LINE_BYTES) {\n corruptLines += 1;\n continue;\n }\n let candidate: unknown;\n try {\n candidate = JSON.parse(line);\n } catch {\n corruptLines += 1;\n continue;\n }\n const parsed = RelayMissionEventSchema.safeParse(candidate);\n if (!parsed.success || parsed.data.missionId !== missionId || parsed.data.namespace !== namespace) {\n corruptLines += 1;\n continue;\n }\n if (events.length >= maxEvents) {\n throw new RelayMissionStoreError(\n \"limit_exceeded\",\n `mission ${missionId} exceeds the ${maxEvents}-event read limit`\n );\n }\n events.push(parsed.data);\n }\n return { events, corruptLines };\n}\n\nfunction collectMissingEvidence(missing: Set<string>, event: RelayMissionEvent, evidence: RelayEvidenceRef[]): void {\n if (evidence.length === 0) missing.add(`event:${event.eventId}:evidence`);\n}\n\nfunction sameIdempotentInput(\n event: RelayMissionEvent,\n input: z.infer<typeof RelayMissionEventInputSchema>,\n authenticatedPrincipal: string | undefined\n): boolean {\n if (event.authenticatedPrincipal !== authenticatedPrincipal) return false;\n if (input.occurredAt !== undefined && event.occurredAt !== input.occurredAt) return false;\n return stableJson(event.payload) === stableJson(input.payload);\n}\n\nfunction stableJson(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableJson).join(\",\")}]`;\n if (value && typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => compareText(a, b))\n .map(([key, child]) => `${JSON.stringify(key)}:${stableJson(child)}`);\n return `{${entries.join(\",\")}}`;\n }\n return JSON.stringify(value) ?? \"null\";\n}\n\nfunction uniqueEvidence(evidence: RelayEvidenceRef[]): RelayEvidenceRef[] {\n const byKey = new Map<string, RelayEvidenceRef>();\n for (const item of evidence) byKey.set(`${item.kind}\\0${item.id}`, item);\n return [...byKey.values()].sort((a, b) => {\n const byKind = compareText(a.kind, b.kind);\n return byKind !== 0 ? byKind : compareText(a.id, b.id);\n });\n}\n\nfunction uniqueSorted(values: string[]): string[] {\n return [...new Set(values)].sort(compareText);\n}\n\nfunction compareText(a: string, b: string): number {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n}\n\nfunction compareInstants(a: string, b: string): number {\n const aMs = Date.parse(a);\n const bMs = Date.parse(b);\n if (aMs < bMs) return -1;\n if (aMs > bMs) return 1;\n return 0;\n}\n\nfunction compareTimedIds<T extends { occurredAt: string }, K extends keyof T>(a: T, b: T, idKey: K): number {\n const byTime = compareInstants(a.occurredAt, b.occurredAt);\n if (byTime !== 0) return byTime;\n return compareText(String(a[idKey]), String(b[idKey]));\n}\n\nfunction beliefAppendPositionKey(agentId: string, decisionId: string): string {\n return `${agentId}\\0${decisionId}`;\n}\n\nfunction normalizeDecisionStatement(statement: string): string {\n return statement\n .normalize(\"NFKC\")\n .trim()\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .replace(/[.!?]+$/, \"\");\n}\n\nfunction decisionStatementsMatch(left: string, right: string): boolean {\n return normalizeDecisionStatement(left) === normalizeDecisionStatement(right);\n}\n\nfunction recordEarliestAppendPosition(positions: Map<string, number>, key: string, position: number): void {\n const current = positions.get(key);\n if (current === undefined || position < current) positions.set(key, position);\n}\n\nfunction correctionSupersessionComplete(\n correction: RelayCorrectionSnapshot,\n decisions: ReadonlyMap<string, RelayDecisionSnapshot>\n): boolean {\n return correction.supersedesDecisionIds.every((decisionId) => {\n const decision = decisions.get(decisionId);\n return (\n decision?.status === \"superseded\" &&\n decision.supersededBy === correction.proposedDecisionId &&\n decision.correctionId === correction.correctionId\n );\n });\n}\n\nfunction correctionCoversConflict(\n correction: Pick<RelayCorrectionSnapshot, \"proposedDecisionId\" | \"supersedesDecisionIds\">,\n conflict: Pick<RelayConflictSnapshot, \"decisionIds\">\n): boolean {\n const expectedSuperseded = uniqueSorted(\n conflict.decisionIds.filter((decisionId) => decisionId !== correction.proposedDecisionId)\n );\n const declaredSuperseded = uniqueSorted(correction.supersedesDecisionIds);\n return (\n expectedSuperseded.length === declaredSuperseded.length &&\n expectedSuperseded.every((decisionId, index) => decisionId === declaredSuperseded[index])\n );\n}\n\nfunction sourceEvidenceIds(evidence: readonly RelayEvidenceRef[]): Set<string> {\n return new Set(evidence.filter((item) => item.kind === \"source\").map((item) => item.id));\n}\n\nfunction positiveIntegerOption(value: number | undefined, name: string, fallback: number): number {\n if (value === undefined) return fallback;\n if (!Number.isInteger(value) || value <= 0) {\n throw new TypeError(`RelayMissionStore ${name} must be a positive integer`);\n }\n return value;\n}\n\nfunction validNow(now: () => Date): string {\n const value = now();\n if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {\n throw new TypeError(\"RelayMissionStore now() must return a valid Date\");\n }\n return value.toISOString();\n}\n\nasync function openOrCreatePinnedChildDirectory(\n parentHandle: import(\"node:fs/promises\").FileHandle,\n segment: string\n): Promise<import(\"node:fs/promises\").FileHandle> {\n const directory = path.join(pinnedDirectoryPath(parentHandle), segment);\n try {\n await fs.mkdir(directory, { mode: 0o700 });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") throw error;\n }\n return openVerifiedDirectory(directory, \"Relay directory symlinks are rejected\");\n}\n\nasync function openVerifiedDirectory(\n directory: string,\n unsafeMessage: string\n): Promise<import(\"node:fs/promises\").FileHandle> {\n const before = await fs.lstat(directory);\n if (before.isSymbolicLink() || !before.isDirectory()) {\n throw new RelayMissionStoreError(\"unsafe_path\", unsafeMessage);\n }\n const handle = await fs.open(directory, fsConstants.O_RDONLY | fsConstants.O_DIRECTORY | fsConstants.O_NOFOLLOW);\n try {\n const openInfo = await handle.stat();\n const after = await fs.lstat(directory);\n if (\n after.isSymbolicLink() ||\n !after.isDirectory() ||\n before.dev !== openInfo.dev ||\n before.ino !== openInfo.ino ||\n after.dev !== openInfo.dev ||\n after.ino !== openInfo.ino\n ) {\n throw new RelayMissionStoreError(\"unsafe_path\", \"Relay directory changed during validation\");\n }\n return handle;\n } catch (error) {\n await handle.close().catch(() => undefined);\n throw error;\n }\n}\n\nfunction pinnedDirectoryPath(handle: import(\"node:fs/promises\").FileHandle): string {\n if (process.platform === \"linux\") return `/proc/self/fd/${handle.fd}`;\n if (process.platform === \"darwin\" || process.platform === \"freebsd\" || process.platform === \"openbsd\") {\n return `/dev/fd/${handle.fd}`;\n }\n throw new RelayMissionStoreError(\n \"unsafe_path\",\n `Relay pinned directory access is unsupported on ${process.platform}`\n );\n}\n\nexport function relayMissionReceiptDigest(snapshot: RelayMissionSnapshot): string {\n const receipt = {\n schemaVersion: snapshot.schemaVersion,\n missionId: snapshot.missionId,\n namespace: snapshot.namespace,\n status: snapshot.status,\n decisions: snapshot.decisions,\n corrections: snapshot.corrections,\n propagation: snapshot.propagation,\n tests: snapshot.tests,\n outcome: snapshot.outcome,\n receipt: snapshot.receipt,\n };\n return createHash(\"sha256\").update(stableJson(receipt)).digest(\"hex\");\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAcA,SAAS,KAAAA,UAAS;;;ACdlB,SAAS,KAAAC,UAAS;;;ACAlB,SAAS,YAAY,kBAAkB;AACvC,SAAS,YAAY,IAAI,aAAa,mBAAmB;AACzD,OAAO,UAAU;AACjB,SAAS,SAAS;AAIX,IAAM,+BAA+B;AACrC,IAAM,+BAA+B,IAAI,OAAO;AAChD,IAAM,+BAA+B,KAAK;AAC1C,IAAM,2BAA2B;AACjC,IAAM,oCAAoC;AAC1C,IAAM,gCAAgC;AAEtC,IAAM,uBAAuB,EACjC,OAAO,EACP,IAAI,CAAC,EACL,IAAI,EAAE,EACN,MAAM,8BAA8B;AAAA,EACnC,SAAS;AACX,CAAC;AAEH,IAAM,mBAAmB,EACtB,OAAO,EACP,IAAI,CAAC,EACL,IAAI,GAAG,EACP,MAAM,wDAAwD;AAAA,EAC7D,SAAS;AACX,CAAC;AAEH,IAAM,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACxD,IAAM,+BAA+B,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACrE,IAAM,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACxD,IAAM,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAC1D,IAAM,6BAA6B,CAAC,SAAiB,YACnD,EACG,MAAM,gBAAgB,EACtB,IAAI,OAAO,EACX,IAAI,OAAO,EACX,OAAO,CAAC,WAAW,IAAI,IAAI,MAAM,EAAE,SAAS,OAAO,QAAQ,wCAAwC;AAEjG,IAAM,yBAAyB,EACnC,OAAO,EACP,SAAS,EAAE,QAAQ,KAAK,CAAC,EACzB,OAAO,CAAC,UAAU,OAAO,SAAS,KAAK,MAAM,KAAK,CAAC,GAAG,mCAAmC;AAErF,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,MAAM,EAAE,KAAK,CAAC,UAAU,gBAAgB,UAAU,QAAQ,UAAU,cAAc,gBAAgB,UAAU,CAAC;AAAA,EAC7G,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAK,EAAE,SAAS;AAAA,EACtD,SAAS,EAAE,KAAK,CAAC,aAAa,qBAAqB,SAAS,CAAC;AAC/D,CAAC,EACA,OAAO;AAIV,IAAM,qBAAqB,EAAE,MAAM,sBAAsB,EAAE,IAAI,EAAE;AACjE,IAAM,sBAAsB;AAAA,EAC1B,SAAS;AAAA,EACT,WAAW;AACb;AAEA,IAAM,iCAAiC,EAAE,mBAAmB,QAAQ;AAAA,EAClE,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,iBAAiB;AAAA,IACjC,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS,EAAE,KAAK,CAAC,QAAQ,UAAU,SAAS,CAAC;AAAA,IAC7C,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,cAAc;AAAA,IAC9B,GAAG;AAAA,IACH,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ,EAAE,KAAK,CAAC,QAAQ,WAAW,WAAW,YAAY,QAAQ,CAAC;AAAA,IACnE,QAAQ,gBAAgB,SAAS;AAAA,IACjC,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,cAAc;AAAA,IAC9B,GAAG;AAAA,IACH,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,iBAAiB;AAAA,IACjC,GAAG;AAAA,IACH,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACvD,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,mBAAmB;AAAA,IACnC,YAAY;AAAA,IACZ,aAAa,2BAA2B,GAAG,CAAC;AAAA,IAC5C,UAAU,2BAA2B,GAAG,EAAE;AAAA,IAC1C,SAAS;AAAA,IACT,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,aAAa;AAAA,IAC7B,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc,iBAAiB,SAAS;AAAA,IACxC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAK;AAAA,IAC3C,QAAQ,EAAE,KAAK,CAAC,UAAU,UAAU,OAAO,CAAC;AAAA,IAC5C,SAAS;AAAA,IACT,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,IAAS,EAAE,SAAS;AAAA,IACnE,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,qBAAqB;AAAA,IACrC,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,uBAAuB,2BAA2B,GAAG,CAAC;AAAA,IACtD,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,qBAAqB;AAAA,IACrC,cAAc;AAAA,IACd,YAAY,EACT,OAAO;AAAA,MACN,MAAM,EAAE,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,MAC/B,IAAI;AAAA,MACJ,OAAO;AAAA,IACT,CAAC,EACA,OAAO;AAAA,IACV,MAAM,gBAAgB,SAAS;AAAA,IAC/B,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,qBAAqB;AAAA,IACrC,YAAY;AAAA,IACZ,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,iBAAiB;AAAA,IACjC,GAAG;AAAA,IACH,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,kBAAkB,EAAE,QAAQ;AAAA,IAC5B,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,sBAAsB;AAAA,IACtC,GAAG;AAAA,IACH,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,qBAAqB,EAAE,QAAQ;AAAA,IAC/B,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,mBAAmB;AAAA,IACnC,SAAS,EAAE,KAAK,CAAC,aAAa,UAAU,cAAc,CAAC;AAAA,IACvD,SAAS;AAAA,IACT,UAAU,mBAAmB,QAAQ,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,OAAO;AACZ,CAAC;AAEM,IAAM,4BAA4B,+BAA+B,YAAY,CAAC,OAAO,QAAQ;AAClG,MAAI,MAAM,SAAS,yBAAyB,MAAM,eAAe,MAAM,uBAAuB;AAC5F,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,MACT,MAAM,CAAC,uBAAuB;AAAA,IAChC,CAAC;AAAA,EACH;AACA,MAAI,MAAM,SAAS,yBAAyB,CAAC,MAAM,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,UAAU,GAAG;AACpG,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,MACT,MAAM,CAAC,UAAU;AAAA,IACnB,CAAC;AAAA,EACH;AACA,MACE,MAAM,SAAS,yBACf,CAAC,MAAM,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,gBAAgB,KAAK,OAAO,MAAM,YAAY,GAC3F;AACA,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,MACT,MAAM,CAAC,UAAU;AAAA,IACnB,CAAC;AAAA,EACH;AACA,MAAI,MAAM,SAAS,qBAAqB,MAAM,SAAS,uBAAwB;AAC/E,QAAM,yBAAyB,MAAM,SAAS;AAAA,IAC5C,CAAC,SAAS,KAAK,SAAS,kBAAkB,KAAK,OAAO,MAAM;AAAA,EAC9D;AACA,MAAI,CAAC,wBAAwB;AAC3B,QAAI,SAAS;AAAA,MACX,MAAM,EAAE,aAAa;AAAA,MACrB,SAAS;AAAA,MACT,MAAM,CAAC,UAAU;AAAA,IACnB,CAAC;AACD;AAAA,EACF;AACA,MAAI,MAAM,SAAS,mBAAmB;AACpC,UAAM,kBAAkB,MAAM,mBAAmB,cAAc;AAC/D,QAAI,uBAAuB,YAAY,mBAAmB,uBAAuB,YAAY,WAAW;AACtG,UAAI,SAAS;AAAA,QACX,MAAM,EAAE,aAAa;AAAA,QACrB,SAAS,mCAAmC,eAAe;AAAA,QAC3D,MAAM,CAAC,YAAY,MAAM,SAAS,QAAQ,sBAAsB,GAAG,SAAS;AAAA,MAC9E,CAAC;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAIM,IAAM,+BAA+B,EACzC,OAAO;AAAA,EACN,YAAY,uBAAuB,SAAS;AAAA,EAC5C,gBAAgB,iBAAiB,SAAS;AAAA,EAC1C,SAAS;AACX,CAAC,EACA,OAAO;AAIH,IAAM,0BAA0B,EACpC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,4BAA4B;AAAA,EACrD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAW;AAAA,EACX,wBAAwB,6BAA6B,SAAS;AAAA,EAC9D,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB,iBAAiB,SAAS;AAAA,EAC1C,SAAS;AACX,CAAC,EACA,OAAO;AAIH,IAAM,gCAAgC,EAC1C,OAAO;AAAA,EACN,OAAO,uBAAuB,SAAS;AAAA,EACvC,OAAO,uBAAuB,SAAS;AAAA,EACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,6BAA6B,EAAE,QAAQ,iCAAiC;AAC7G,CAAC,EACA,OAAO,EACP;AAAA,EACC,CAAC,UACC,MAAM,UAAU,UAAa,MAAM,UAAU,UAAa,KAAK,MAAM,MAAM,KAAK,IAAI,KAAK,MAAM,MAAM,KAAK;AAAA,EAC5G,EAAE,SAAS,oCAAoC,MAAM,CAAC,OAAO,EAAE;AACjE;AAiKK,IAAM,yBAAN,cAAqC,MAAM;AAAA,EAChD,YACkB,MAChB,SACA,SACA;AACA,UAAM,SAAS,OAAO;AAJN;AAKhB,SAAK,OAAO;AAAA,EACd;AAAA,EANkB;AAOpB;AA+BO,IAAM,oBAAN,MAAwB;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,SAAmC;AAC7C,QAAI,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC9E,YAAM,IAAI,UAAU,sDAAsD;AAAA,IAC5E;AACA,SAAK,UAAU,KAAK,QAAQ,QAAQ,OAAO;AAC3C,SAAK,YAAY,gBAAgB,MAAM,QAAQ,SAAS;AACxD,SAAK,MAAM,QAAQ,QAAQ,MAAM,oBAAI,KAAK;AAC1C,SAAK,gBAAgB,QAAQ,kBAAkB,MAAM,SAAS,WAAW,CAAC;AAC1E,SAAK,eAAe,sBAAsB,QAAQ,cAAc,gBAAgB,4BAA4B;AAC5G,SAAK,YAAY,sBAAsB,QAAQ,WAAW,aAAa,wBAAwB;AAC/F,SAAK,gBAAgB,sBAAsB,QAAQ,eAAe,iBAAiB,GAAK;AAAA,EAC1F;AAAA,EAEA,MAAM,OACJ,gBACA,YACA,QAAwF,CAAC,GACtD;AACnC,UAAM,YAAY,qBAAqB,MAAM,cAAc;AAC3D,UAAM,QAAQ,6BAA6B,MAAM,UAAU;AAC3D,UAAM,yBACJ,MAAM,2BAA2B,SAC7B,SACA,6BAA6B,MAAM,MAAM,sBAAsB;AACrE,UAAM,aAAa,MAAM,KAAK,qBAAqB,IAAI;AACvD,UAAM,WAAW,KAAK,KAAK,WAAW,YAAY,GAAG,SAAS,QAAQ;AACtE,UAAM,kBAAkB,KAAK,KAAK,WAAW,aAAa,GAAG,SAAS,QAAQ;AAC9E,UAAM,WAAW,GAAG,QAAQ;AAE5B,QAAI;AACF,aAAO,MAAM;AAAA,QAAmB,iBAAiB,eAAe;AAAA,QAAI,MAClE;AAAA,UACE;AAAA,UACA,EAAE,SAAS,KAAQ,WAAW,KAAK,eAAe,aAAa,IAAO;AAAA,UACtE,OAAO,aAAa;AAClB,gBAAI,CAAC,UAAU;AACb,oBAAM,IAAI,uBAAuB,oBAAoB,sCAAsC;AAAA,YAC7F;AAEA,kBAAM,WAAW,MAAM,KAAK,SAAS,UAAU,SAAS;AACxD,gBAAI,MAAM,gBAAgB;AACxB,oBAAM,SAAS,SAAS,OAAO,KAAK,CAACC,WAAUA,OAAM,mBAAmB,MAAM,cAAc;AAC5F,kBAAI,QAAQ;AACV,oBAAI,CAAC,oBAAoB,QAAQ,OAAO,sBAAsB,GAAG;AAC/D,wBAAM,IAAI;AAAA,oBACR;AAAA,oBACA,mBAAmB,MAAM,cAAc;AAAA,kBACzC;AAAA,gBACF;AACA,uBAAO,EAAE,UAAU,OAAO,UAAU,MAAM,OAAO,OAAO;AAAA,cAC1D;AAAA,YACF;AAEA,gBAAI,SAAS,OAAO,UAAU,KAAK,WAAW;AAC5C,oBAAM,IAAI;AAAA,gBACR;AAAA,gBACA,WAAW,SAAS,gBAAgB,KAAK,SAAS;AAAA,cACpD;AAAA,YACF;AAMA,kBAAM,MAAM,eAAe;AAE3B,kBAAM,aAAa,SAAS,KAAK,GAAG;AACpC,kBAAM,QAAQ,wBAAwB,MAAM;AAAA,cAC1C,eAAe;AAAA,cACf,SAAS,KAAK,cAAc;AAAA,cAC5B;AAAA,cACA,WAAW,KAAK;AAAA,cAChB,GAAI,2BAA2B,SAAY,CAAC,IAAI,EAAE,uBAAuB;AAAA,cACzE;AAAA,cACA,YAAY,MAAM,cAAc;AAAA,cAChC,GAAI,MAAM,iBAAiB,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;AAAA,cACvE,SAAS,MAAM;AAAA,YACjB,CAAC;AACD,kBAAM,OAAO,GAAG,KAAK,UAAU,KAAK,CAAC;AAAA;AACrC,kBAAM,YAAY,OAAO,WAAW,MAAM,MAAM;AAChD,gBAAI,YAAY,8BAA8B;AAC5C,oBAAM,IAAI;AAAA,gBACR;AAAA,gBACA,+BAA+B,4BAA4B;AAAA,cAC7D;AAAA,YACF;AACA,gBAAI,SAAS,WAAW,YAAY,KAAK,cAAc;AACrD,oBAAM,IAAI;AAAA,gBACR;AAAA,gBACA,WAAW,SAAS,qBAAqB,KAAK,YAAY;AAAA,cAC5D;AAAA,YACF;AAEA,kBAAM,KAAK,WAAW,UAAU,IAAI;AACpC,mBAAO,EAAE,UAAU,MAAM,UAAU,OAAO,MAAM;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAAA,IACF,UAAE;AACA,YAAM,WAAW,OAAO,MAAM,EAAE,MAAM,MAAM,MAAS;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,gBAAwB,cAAuC,CAAC,GAAkC;AAC3G,UAAM,YAAY,qBAAqB,MAAM,cAAc;AAC3D,UAAM,UAAU,8BAA8B,MAAM,WAAW;AAC/D,UAAM,aAAa,MAAM,KAAK,qBAAqB,KAAK;AACxD,QAAI,eAAe,MAAM;AACvB,aAAO,mBAAmB;AAAA,QACxB;AAAA,QACA,WAAW,KAAK;AAAA,QAChB,QAAQ,CAAC;AAAA,QACT,YAAY;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,WAAW,KAAK,KAAK,WAAW,YAAY,GAAG,SAAS,QAAQ;AACtE,UAAM,kBAAkB,KAAK,KAAK,WAAW,aAAa,GAAG,SAAS,QAAQ;AAE9E,QAAI;AAKF,aAAO,MAAM,mBAAmB,iBAAiB,eAAe,IAAI,YAAY;AAC9E,cAAM,OAAO,MAAM,KAAK,SAAS,UAAU,SAAS;AACpD,eAAO,mBAAmB;AAAA,UACxB;AAAA,UACA,WAAW,KAAK;AAAA,UAChB,QAAQ,KAAK;AAAA,UACb,cAAc,KAAK;AAAA,UACnB,YAAY,KAAK;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,UAAE;AACA,YAAM,WAAW,OAAO,MAAM,EAAE,MAAM,MAAM,MAAS;AAAA,IACvD;AAAA,EACF;AAAA,EAIA,MAAc,qBAAqB,QAAyD;AAC1F,QAAI;AACJ,QAAI;AACF,sBAAgB,MAAM,sBAAsB,KAAK,SAAS,qCAAqC;AAC/F,UAAI,cAAc,KAAK;AACvB,iBAAW,WAAW,CAAC,SAAS,SAAS,UAAU,GAAG;AACpD,YAAI;AACJ,YAAI;AACF,wBAAc,SACV,MAAM,iCAAiC,eAAe,OAAO,IAC7D,MAAM;AAAA,YACJ,KAAK,KAAK,oBAAoB,aAAa,GAAG,OAAO;AAAA,YACrD;AAAA,UACF;AAAA,QACN,SAAS,OAAO;AACd,cAAI,CAAC,UAAW,MAAgC,SAAS,UAAU;AACjE,kBAAM,cAAc,MAAM;AAC1B,mBAAO;AAAA,UACT;AACA,gBAAM;AAAA,QACR;AACA,cAAM,cAAc,MAAM;AAC1B,wBAAgB;AAChB,sBAAc,KAAK,KAAK,aAAa,OAAO;AAAA,MAC9C;AACA,aAAO;AAAA,QACL;AAAA,QACA,YAAY,oBAAoB,aAAa;AAAA,QAC7C,QAAQ;AAAA,MACV;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eAAe,MAAM,EAAE,MAAM,MAAM,MAAS;AAClD,UAAI,iBAAiB,uBAAwB,OAAM;AACnD,YAAM,IAAI,uBAAuB,eAAe,oDAAoD;AAAA,QAClG,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,SAAS,UAAkB,WAA6C;AACpF,QAAI;AACJ,QAAI;AACF,eAAS,MAAM,GAAG,KAAK,UAAU,YAAY,WAAW,YAAY,UAAU;AAC9E,YAAM,OAAO,MAAM,OAAO,KAAK;AAC/B,UAAI,CAAC,KAAK,OAAO,GAAG;AAClB,cAAM,IAAI,uBAAuB,eAAe,kCAAkC;AAAA,MACpF;AACA,UAAI,KAAK,UAAU,GAAG;AACpB,cAAM,IAAI,uBAAuB,eAAe,uCAAuC;AAAA,MACzF;AACA,UAAI,KAAK,OAAO,KAAK,cAAc;AACjC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,WAAW,SAAS,gBAAgB,KAAK,YAAY;AAAA,QACvD;AAAA,MACF;AACA,YAAM,MAAM,MAAM,OAAO,SAAS,MAAM;AACxC,YAAM,SAAS,kBAAkB,KAAK,WAAW,KAAK,WAAW,KAAK,SAAS;AAC/E,aAAO,EAAE,QAAQ,MAAM,UAAU,OAAO,WAAW,KAAK,MAAM,GAAG,GAAG,OAAO;AAAA,IAC7E,SAAS,OAAO;AACd,UAAK,MAAgC,SAAS,UAAU;AACtD,eAAO,EAAE,QAAQ,OAAO,QAAQ,CAAC,GAAG,cAAc,GAAG,UAAU,EAAE;AAAA,MACnE;AACA,UAAI,iBAAiB,uBAAwB,OAAM;AACnD,YAAM,IAAI,uBAAuB,eAAe,gCAAgC;AAAA,QAC9E,OAAO;AAAA,MACT,CAAC;AAAA,IACH,UAAE;AACA,YAAM,QAAQ,MAAM,EAAE,MAAM,MAAM,MAAS;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAc,WAAW,UAAkB,MAA6B;AACtE,QAAI;AACJ,QAAI;AACF,eAAS,MAAM,GAAG;AAAA,QAChB;AAAA,QACA,YAAY,WAAW,YAAY,UAAU,YAAY,WAAW,YAAY;AAAA,QAChF;AAAA,MACF;AACA,YAAM,OAAO,MAAM,OAAO,KAAK;AAC/B,UAAI,CAAC,KAAK,OAAO,GAAG;AAClB,cAAM,IAAI,uBAAuB,eAAe,kCAAkC;AAAA,MACpF;AACA,UAAI,KAAK,UAAU,GAAG;AACpB,cAAM,IAAI,uBAAuB,eAAe,uCAAuC;AAAA,MACzF;AACA,YAAM,OAAO,MAAM,GAAK;AACxB,YAAM,OAAO,UAAU,MAAM,MAAM;AACnC,YAAM,OAAO,KAAK;AAAA,IACpB,SAAS,OAAO;AACd,UAAI,iBAAiB,uBAAwB,OAAM;AACnD,UAAK,MAAgC,SAAS,SAAS;AACrD,cAAM,IAAI,uBAAuB,eAAe,qCAAqC;AAAA,UACnF,OAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,YAAM,IAAI,uBAAuB,gBAAgB,kCAAkC;AAAA,QACjF,OAAO;AAAA,MACT,CAAC;AAAA,IACH,UAAE;AACA,YAAM,QAAQ,MAAM,EAAE,MAAM,MAAM,MAAS;AAAA,IAC7C;AAAA,EACF;AACF;AAWO,SAAS,mBAAmB,OAAsD;AACvF,QAAM,YAAY,qBAAqB,MAAM,MAAM,SAAS;AAC5D,QAAM,YAAY,gBAAgB,MAAM,MAAM,SAAS;AACvD,QAAM,UAAU,8BAA8B,MAAM,MAAM,WAAW,CAAC,CAAC;AACvE,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,UAAU,QAAQ,QAAQ,KAAK,MAAM,QAAQ,KAAK,IAAI;AAC5D,QAAM,UAAU,QAAQ,QAAQ,KAAK,MAAM,QAAQ,KAAK,IAAI;AAC5D,QAAM,kBAAkB,IAAI,IAAI,MAAM,OAAO,IAAI,CAAC,OAAO,UAAU,CAAC,OAAO,KAAK,CAAU,CAAC;AAC3F,QAAM,gBAAgB,CAAC,GAAG,MAAM,MAAM,EAAE,KAAK,kBAAkB;AAC/D,QAAM,kBAAkB,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,QAAQ,SAAS,iBAAiB;AAC7F,QAAM,uBAAuB,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,QAAQ,SAAS,mBAAmB;AACpG,QAAM,qBAAqB,oBAAoB,SAAY,KAAM,gBAAgB,IAAI,eAAe,KAAK;AACzG,QAAM,0BACJ,yBAAyB,SAAY,KAAM,gBAAgB,IAAI,oBAAoB,KAAK;AAC1F,QAAM,iBAAiB,cAAc,OAAO,CAAC,UAAU;AACrD,UAAM,aAAa,KAAK,MAAM,MAAM,UAAU;AAC9C,YAAQ,YAAY,UAAa,cAAc,aAAa,YAAY,UAAa,aAAa;AAAA,EACpG,CAAC;AAED,QAAM,SAAS,oBAAI,IAAgC;AACnD,QAAM,YAAY,oBAAI,IAAmC;AACzD,QAAM,YAAY,oBAAI,IAAmC;AACzD,QAAM,cAAc,oBAAI,IAAqC;AAC7D,QAAM,QAA6B,CAAC;AACpC,QAAM,cAA0C,CAAC;AACjD,QAAM,wBAAwB,oBAAI,IAAoB;AACtD,QAAM,0BAA0B,oBAAI,IAAoB;AACxD,QAAM,oCAAoC,oBAAI,IAAoB;AAClE,QAAM,oCAAoC,oBAAI,IAAoB;AAClE,QAAM,mCAAmC,oBAAI,IAAoB;AACjE,QAAM,wBAAwB,oBAAI,IAAiC;AACnE,QAAM,6BAA6B,oBAAI,IAAsC;AAC7E,QAAM,sBAAsB,oBAAI,IAA+B;AAC/D,QAAM,kBAAkB,oBAAI,IAAY;AACxC,MAAI,eAAe,EAAG,iBAAgB,IAAI,wBAAwB;AAClE,QAAM,sBAAsB,oBAAI,IAAY;AAC5C,QAAM,wBAAwB,oBAAI,IAAY;AAC9C,QAAM,0BAA0B,oBAAI,IAAY;AAChD,QAAM,wBAAwB,oBAAI,IAAY;AAC9C,MAAI,QAAuB;AAC3B,MAAI,YAA2B;AAC/B,MAAI,UAAgD;AACpD,MAAI,YAA2B;AAC/B,MAAI,cAA6B;AACjC,MAAI,SAA6B;AACjC,MAAI,UAA2C;AAE/C,QAAM,cAAc,CAAC,SAAiB,WAAmB,eAA2C;AAClG,UAAM,WAAW,OAAO,IAAI,OAAO;AACnC,QAAI,UAAU;AACZ,UAAI,CAAC,SAAS,WAAW,SAAS,SAAS,EAAG,UAAS,WAAW,KAAK,SAAS;AAChF,eAAS,aAAa;AACtB,aAAO;AAAA,IACT;AACA,UAAM,UAA8B;AAAA,MAClC;AAAA,MACA,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,YAAY,CAAC,SAAS;AAAA,MACtB,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,YAAY;AAAA,IACd;AACA,WAAO,IAAI,SAAS,OAAO;AAC3B,WAAO;AAAA,EACT;AAEA,QAAM,+BAA+B,CAAC,SAAiB,cAA6B;AAClF,wBAAoB,IAAI,OAAO;AAC/B,QAAI,UAAW,uBAAsB,IAAI,SAAS;AAAA,EACpD;AAEA,aAAW,SAAS,eAAe;AACjC,UAAM,UAAU,MAAM;AACtB,UAAM,iBAAiB,gBAAgB,IAAI,KAAK,KAAK;AACrD,QACE,QAAQ,SAAS,qBACjB,oBAAoB,WACnB,iBAAiB,sBAAsB,mBAAmB,OAAO,eAAe,IAAI,IACrF;AACA,sBAAgB,IAAI,8BAA8B,MAAM,OAAO,EAAE;AACjE,6BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,IACF;AACA,QACE,QAAQ,SAAS,wBAChB,YAAY,QAAS,2BAA2B,KAAK,iBAAiB,0BACvE;AACA,sBAAgB,IAAI,kCAAkC,MAAM,OAAO,EAAE;AACrE,UAAI,QAAQ,SAAS,kBAAmB,iBAAgB,IAAI,yBAAyB;AACrF,6BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,IACF;AACA,YAAQ,QAAQ,MAAM;AAAA,MACpB,KAAK;AACH,YAAI,cAAc,MAAM;AACtB,0BAAgB,IAAI,yBAAyB;AAC7C,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,gBAAQ,QAAQ;AAChB,oBAAY,QAAQ;AACpB,kBAAU,QAAQ;AAClB,oBAAY,MAAM;AAClB,YAAI,YAAY,KAAM,UAAS;AAC/B,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF,KAAK,gBAAgB;AACnB,cAAM,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,MAAM,UAAU;AAC9E,qCAA6B,QAAQ,SAAS,QAAQ,SAAS;AAC/D,cAAM,QAAQ,QAAQ;AACtB,cAAM,OAAO,QAAQ;AACrB,cAAM,SAAS,QAAQ;AACvB,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,gBAAgB;AACnB,cAAM,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,MAAM,UAAU;AAC9E,qCAA6B,QAAQ,SAAS,QAAQ,SAAS;AAC/D,cAAM,QAAQ,KAAK;AAAA,UACjB,UAAU,QAAQ;AAAA,UAClB,SAAS,QAAQ;AAAA,UACjB,YAAY,MAAM;AAAA,UAClB,UAAU,QAAQ;AAAA,QACpB,CAAC;AACD,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,mBAAmB;AACtB,oBAAY,QAAQ,SAAS,QAAQ,WAAW,MAAM,UAAU;AAChE,qCAA6B,QAAQ,SAAS,QAAQ,SAAS;AAC/D;AAAA,UACE;AAAA,UACA,wBAAwB,QAAQ,SAAS,QAAQ,UAAU;AAAA,UAC3D;AAAA,QACF;AACA,cAAM,WAAW,UAAU,IAAI,QAAQ,UAAU;AACjD,YAAI,UAAU;AACZ,cAAI,CAAC,wBAAwB,SAAS,WAAW,QAAQ,SAAS,GAAG;AACnE,4BAAgB,IAAI,YAAY,QAAQ,UAAU,wBAAwB;AAAA,UAC5E;AACA,cAAI,CAAC,SAAS,eAAe,SAAS,QAAQ,OAAO,GAAG;AACtD,qBAAS,eAAe,KAAK,QAAQ,OAAO;AAAA,UAC9C;AACA,cAAI,CAAC,SAAS,UAAU,SAAS,QAAQ,QAAQ,EAAG,UAAS,UAAU,KAAK,QAAQ,QAAQ;AAC5F,mBAAS,SAAS,KAAK,GAAG,QAAQ,QAAQ;AAAA,QAC5C,OAAO;AACL,oBAAU,IAAI,QAAQ,YAAY;AAAA,YAChC,YAAY,QAAQ;AAAA,YACpB,WAAW,QAAQ;AAAA,YACnB,QAAQ;AAAA,YACR,gBAAgB,CAAC,QAAQ,OAAO;AAAA,YAChC,WAAW,CAAC,QAAQ,QAAQ;AAAA,YAC5B,UAAU,CAAC,GAAG,QAAQ,QAAQ;AAAA,YAC9B,iBAAiB,MAAM;AAAA,UACzB,CAAC;AAAA,QACH;AACA,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,qBAAqB;AACxB,qCAA6B,yBAAyB,QAAQ,YAAY,cAAc;AACxF,cAAM,+BAA+B,QAAQ,YAC1C,IAAI,CAAC,eAAe,UAAU,IAAI,UAAU,GAAG,SAAS,EACxD,OAAO,CAAC,cAAmC,cAAc,MAAS,EAClE,IAAI,0BAA0B;AACjC,YACE,6BAA6B,WAAW,QAAQ,YAAY,UAC5D,IAAI,IAAI,4BAA4B,EAAE,OAAO,GAC7C;AACA,0BAAgB,IAAI,YAAY,QAAQ,UAAU,+BAA+B;AAAA,QACnF,OAAO;AACL,kCAAwB,IAAI,QAAQ,UAAU;AAAA,QAChD;AACA,cAAM,sBAAsB,QAAQ,SAAS,IAAI,CAAC,aAAa;AAAA,UAC7D;AAAA,UACA,aAAa;AAAA,YACX,QAAQ,YAAY,OAAO,CAAC,eAAe,UAAU,IAAI,UAAU,GAAG,eAAe,SAAS,OAAO,CAAC;AAAA,UACxG;AAAA,QACF,EAAE;AACF,mBAAW,eAAe,qBAAqB;AAC7C,cAAI,YAAY,YAAY,WAAW,GAAG;AACxC,4BAAgB,IAAI,YAAY,QAAQ,UAAU,gBAAgB,YAAY,OAAO,gBAAgB;AAAA,UACvG;AAAA,QACF;AACA,mBAAW,cAAc,QAAQ,aAAa;AAC5C,cAAI,CAAC,oBAAoB,KAAK,CAAC,gBAAgB,YAAY,YAAY,SAAS,UAAU,CAAC,GAAG;AAC5F,4BAAgB,IAAI,YAAY,QAAQ,UAAU,aAAa,UAAU,mBAAmB;AAAA,UAC9F;AACA,cACE,CAAC,QAAQ,SAAS;AAAA,YAChB,CAAC,aACE,sBAAsB,IAAI,wBAAwB,SAAS,UAAU,CAAC,KAAK,OAAO,qBACnF;AAAA,UACJ,GACA;AACA,4BAAgB,IAAI,YAAY,QAAQ,UAAU,aAAa,UAAU,eAAe;AAAA,UAC1F;AAAA,QACF;AACA,mBAAW,WAAW,QAAQ,UAAU;AACtC,cACE,CAAC,QAAQ,YAAY;AAAA,YACnB,CAAC,gBACE,sBAAsB,IAAI,wBAAwB,SAAS,UAAU,CAAC,KAAK,OAAO,qBACnF;AAAA,UACJ,GACA;AACA,4BAAgB,IAAI,YAAY,QAAQ,UAAU,gBAAgB,OAAO,eAAe;AAAA,UAC1F;AAAA,QACF;AACA,YACE,oBAAoB,MAAM,CAAC,gBAAgB,YAAY,YAAY,SAAS,CAAC,KAC7E,IAAI,IAAI,oBAAoB,IAAI,CAAC,gBAAgB,YAAY,YAAY,KAAK,IAAI,CAAC,CAAC,EAAE,OAAO,GAC7F;AACA,0BAAgB,IAAI,YAAY,QAAQ,UAAU,+BAA+B;AAAA,QACnF;AACA,YAAI,UAAU,IAAI,QAAQ,UAAU,GAAG;AACrC,0BAAgB,IAAI,YAAY,QAAQ,UAAU,YAAY;AAAA,QAChE,OAAO;AACL,oBAAU,IAAI,QAAQ,YAAY;AAAA,YAChC,YAAY,QAAQ;AAAA,YACpB,aAAa,aAAa,QAAQ,WAAW;AAAA,YAC7C,UAAU,aAAa,QAAQ,QAAQ;AAAA,YACvC,SAAS,QAAQ;AAAA,YACjB,QAAQ;AAAA,YACR,YAAY,MAAM;AAAA,YAClB,UAAU,QAAQ;AAAA,UACpB,CAAC;AAAA,QACH;AACA,mBAAW,WAAW,QAAQ,SAAU,qBAAoB,IAAI,OAAO;AACvE,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,eAAe;AAClB,cAAM,eAAkC;AAAA,UACtC,QAAQ,QAAQ;AAAA,UAChB,YAAY,QAAQ;AAAA,UACpB,GAAI,QAAQ,iBAAiB,SAAY,CAAC,IAAI,EAAE,cAAc,QAAQ,aAAa;AAAA,UACnF,SAAS,QAAQ;AAAA,UACjB,QAAQ,QAAQ;AAAA,UAChB,SAAS,QAAQ;AAAA,UACjB,GAAI,QAAQ,eAAe,SAAY,CAAC,IAAI,EAAE,YAAY,QAAQ,WAAW;AAAA,UAC7E,YAAY,MAAM;AAAA,UAClB,UAAU,QAAQ;AAAA,QACpB;AACA,cAAM,KAAK,YAAY;AACvB,4BAAoB,IAAI,cAAc,cAAc;AACpD,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,uBAAuB;AAC1B,YAAI,YAAY,IAAI,QAAQ,YAAY,GAAG;AACzC,0BAAgB,IAAI,cAAc,QAAQ,YAAY,qBAAqB;AAC3E,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,4BAAoB,IAAI,QAAQ,UAAU;AAC1C,cAAM,aAAsC;AAAA,UAC1C,cAAc,QAAQ;AAAA,UACtB,YAAY,QAAQ;AAAA,UACpB,oBAAoB,QAAQ;AAAA,UAC5B,uBAAuB,aAAa,QAAQ,qBAAqB;AAAA,UACjE,WAAW,QAAQ;AAAA,UACnB,WAAW,QAAQ;AAAA,UACnB,YAAY,QAAQ;AAAA,UACpB,QAAQ;AAAA,UACR,YAAY,MAAM;AAAA,UAClB,UAAU,CAAC,GAAG,QAAQ,QAAQ;AAAA,QAChC;AACA,oBAAY,IAAI,QAAQ,cAAc,UAAU;AAChD,0CAAkC,IAAI,QAAQ,cAAc,cAAc;AAC1E,cAAM,2BAA2B,UAAU,IAAI,QAAQ,kBAAkB;AACzE,cAAM,8BACJ,6BAA6B,UAC7B,wBAAwB,yBAAyB,WAAW,QAAQ,SAAS;AAC/E,YAAI,CAAC,6BAA6B;AAChC,0BAAgB,IAAI,cAAc,QAAQ,YAAY,wBAAwB;AAAA,QAChF;AACA,YAAI,6BAA6B,QAAW;AAC1C,oBAAU,IAAI,QAAQ,oBAAoB;AAAA,YACxC,YAAY,QAAQ;AAAA,YACpB,WAAW,QAAQ;AAAA,YACnB,QAAQ;AAAA,YACR,gBAAgB,CAAC;AAAA,YACjB,WAAW,CAAC;AAAA,YACZ,UAAU,CAAC,GAAG,QAAQ,QAAQ;AAAA,YAC9B,iBAAiB,MAAM;AAAA,UACzB,CAAC;AAAA,QACH;AACA,cAAM,WAAW,UAAU,IAAI,QAAQ,UAAU;AACjD,cAAM,yBAAyB,wBAAwB,IAAI,QAAQ,UAAU;AAC7E,cAAM,2BACJ,2BAA2B,UAAa,yBAAyB;AACnE,YAAI,CAAC,0BAA0B;AAC7B,0BAAgB,IAAI,cAAc,QAAQ,YAAY,wBAAwB;AAAA,QAChF;AACA,cAAM,sBAAsB,kBAAkB,QAAQ,QAAQ;AAC9D,YAAI,oBAAoB,SAAS,GAAG;AAClC,0BAAgB,IAAI,cAAc,QAAQ,YAAY,SAAS;AAAA,QACjE;AACA,YAAI,UAAU;AACZ,gBAAM,oBAAoB,kBAAkB,SAAS,QAAQ;AAC7D,cAAI,kBAAkB,SAAS,GAAG;AAChC,4BAAgB,IAAI,YAAY,QAAQ,UAAU,SAAS;AAAA,UAC7D;AACA,gBAAM,eAAe,CAAC,GAAG,mBAAmB,EAAE,KAAK,CAAC,aAAa,kBAAkB,IAAI,QAAQ,CAAC;AAChG,cAAI,CAAC,cAAc;AACjB,4BAAgB,IAAI,cAAc,QAAQ,YAAY,cAAc;AAAA,UACtE;AACA,cAAI,CAAC,yBAAyB,YAAY,QAAQ,GAAG;AACnD,4BAAgB,IAAI,YAAY,QAAQ,UAAU,gBAAgB;AAAA,UACpE,WACE,gBACA,4BACA,wBAAwB,IAAI,QAAQ,UAAU,KAC9C,6BACA;AACA,kCAAsB,IAAI,QAAQ,YAAY;AAC9C,qBAAS,SAAS;AAClB,qBAAS,eAAe,QAAQ;AAAA,UAClC;AAAA,QACF,OAAO;AACL,0BAAgB,IAAI,YAAY,QAAQ,UAAU,cAAc;AAAA,QAClE;AACA,iBAAS;AACT,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,uBAAuB;AAC1B,YAAI,QAAQ,WAAW,SAAS,QAAS,qBAAoB,IAAI,QAAQ,WAAW,EAAE;AACtF,cAAM,aAAa,YAAY,IAAI,QAAQ,YAAY;AACvD,YAAI,YAAY;AACd,gBAAM,yBAAyB,kCAAkC,IAAI,QAAQ,YAAY;AACzF,gBAAM,2BACJ,2BAA2B,UAAa,yBAAyB;AACnE,gBAAM,6BACJ,QAAQ,WAAW,SAAS,WAC5B,YAAY,UACZ,MAAM,2BAA2B,QAAQ,WAAW;AACtD,cAAI,CAAC,0BAA0B;AAC7B,4BAAgB,IAAI,cAAc,QAAQ,YAAY,wBAAwB;AAAA,UAChF,WAAW,CAAC,4BAA4B;AACtC,4BAAgB,IAAI,cAAc,QAAQ,YAAY,+BAA+B;AAAA,UACvF,WAAW,WAAW,eAAe,QAAW;AAC9C,uBAAW,aAAa,MAAM;AAC9B,uBAAW,aAAa,QAAQ;AAChC,uBAAW,eAAe,QAAQ;AAClC,gBAAI,MAAM,2BAA2B,QAAW;AAC9C,yBAAW,oBAAoB,MAAM;AAAA,YACvC;AACA,8CAAkC,IAAI,QAAQ,cAAc,cAAc;AAC1E,gBAAI,WAAW,WAAW,WAAY,YAAW,SAAS;AAC1D,qBAAS;AAAA,UACX,OAAO;AACL,4BAAgB,IAAI,cAAc,QAAQ,YAAY,qBAAqB;AAAA,UAC7E;AACA,qBAAW,SAAS,KAAK,GAAG,QAAQ,QAAQ;AAAA,QAC9C,OAAO;AACL,0BAAgB,IAAI,cAAc,QAAQ,YAAY,WAAW;AAAA,QACnE;AACA,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,uBAAuB;AAC1B,cAAM,aAAa,YAAY,IAAI,QAAQ,YAAY;AACvD,YAAI,CAAC,YAAY;AACf,0BAAgB,IAAI,cAAc,QAAQ,YAAY,WAAW;AACjE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,WAAW,eAAe,UAAa,WAAW,eAAe,QAAW;AAC9E,0BAAgB,IAAI,cAAc,QAAQ,YAAY,WAAW;AACjE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,cAAM,yBAAyB,kCAAkC,IAAI,QAAQ,YAAY;AACzF,YAAI,2BAA2B,UAAa,0BAA0B,gBAAgB;AACpF,0BAAgB,IAAI,cAAc,QAAQ,YAAY,wBAAwB;AAC9E,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,cAAM,WAAW,UAAU,IAAI,WAAW,UAAU;AACpD,YAAI,CAAC,YAAY,CAAC,yBAAyB,YAAY,QAAQ,GAAG;AAChE,0BAAgB,IAAI,YAAY,WAAW,UAAU,gBAAgB;AACrE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,CAAC,sBAAsB,IAAI,QAAQ,YAAY,GAAG;AACpD,0BAAgB,IAAI,cAAc,QAAQ,YAAY,cAAc;AACpE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YACE,CAAC,WAAW,sBAAsB,SAAS,QAAQ,UAAU,KAC7D,WAAW,uBAAuB,QAAQ,uBAC1C;AACA,0BAAgB,IAAI,cAAc,QAAQ,YAAY,oBAAoB;AAC1E,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AAEA,cAAM,QAAQ,UAAU,IAAI,QAAQ,UAAU;AAC9C,cAAM,cAAc,UAAU,IAAI,QAAQ,qBAAqB;AAC/D,YAAI,CAAC,MAAO,iBAAgB,IAAI,YAAY,QAAQ,UAAU,cAAc;AAC5E,YAAI,CAAC,YAAa,iBAAgB,IAAI,YAAY,QAAQ,qBAAqB,cAAc;AAC7F,YAAI,CAAC,SAAS,CAAC,aAAa;AAC1B,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AAEA,cAAM,SAAS;AACf,cAAM,eAAe,MAAM;AAC3B,cAAM,eAAe,QAAQ;AAC7B,cAAM,eAAe,QAAQ;AAC7B,cAAM,SAAS,KAAK,GAAG,QAAQ,QAAQ;AACvC,oBAAY,SAAS;AACrB,oBAAY,SAAS,KAAK,GAAG,QAAQ,QAAQ;AAC7C,mBAAW,SAAS,KAAK,GAAG,QAAQ,QAAQ;AAC5C,YAAI,+BAA+B,YAAY,SAAS,GAAG;AACzD,qBAAW,cAAc,MAAM;AAC/B,uCAA6B,kCAAkC,QAAQ,cAAc,cAAc;AACnG,cAAI,WAAW,WAAW,aAAc,YAAW,SAAS;AAC5D,mBAAS,SAAS;AAAA,QACpB;AACA,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,mBAAmB;AACtB,cAAM,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,MAAM,UAAU;AAC9E,cAAM,YACJ,CAAC,oBAAoB,IAAI,QAAQ,OAAO,KACxC,CAAC,sBAAsB,IAAI,QAAQ,SAAS,KAC5C,MAAM,QAAQ,WAAW;AAC3B,cAAM,iBAAsC;AAAA,UAC1C,iBAAiB,QAAQ;AAAA,UACzB,WAAW,QAAQ;AAAA,UACnB,YAAY,QAAQ;AAAA,UACpB,OAAO,QAAQ;AAAA,UACf,kBAAkB,QAAQ;AAAA,UAC1B;AAAA,UACA,YAAY,MAAM;AAAA,UAClB,UAAU,QAAQ;AAAA,QACpB;AACA,cAAM,QAAQ,KAAK,cAAc;AACjC,8BAAsB,IAAI,gBAAgB,cAAc;AACxD,qCAA6B,QAAQ,SAAS,QAAQ,SAAS;AAC/D,cAAM,WAAW,UAAU,IAAI,QAAQ,UAAU;AACjD,YAAI,YAAY,CAAC,SAAS,eAAe,SAAS,QAAQ,OAAO,GAAG;AAClE,mBAAS,eAAe,KAAK,QAAQ,OAAO;AAAA,QAC9C;AACA,YAAI,CAAC,SAAU,iBAAgB,IAAI,YAAY,QAAQ,UAAU,gBAAgB;AACjF,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK,wBAAwB;AAC3B,cAAM,QAAQ,YAAY,QAAQ,SAAS,QAAQ,WAAW,MAAM,UAAU;AAC9E,cAAM,aAAa,YAAY,IAAI,QAAQ,YAAY;AACvD,YAAI,CAAC,YAAY;AACf,0BAAgB,IAAI,cAAc,QAAQ,YAAY,WAAW;AACjE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,WAAW,eAAe,UAAa,WAAW,eAAe,QAAW;AAC9E,0BAAgB,IAAI,cAAc,QAAQ,YAAY,WAAW;AACjE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YACG,WAAW,WAAW,aAAa,WAAW,WAAW,gBAC1D,WAAW,cAAc,UACzB,WAAW,uBAAuB,QAAQ,YAC1C;AACA,0BAAgB,IAAI,cAAc,QAAQ,YAAY,eAAe;AACrE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,cAAM,WAAW,MAAM,QAAQ;AAAA,UAC7B,CAAC,WACC,OAAO,oBAAoB,QAAQ,mBACnC,OAAO,cAAc,QAAQ,aAC7B,OAAO,eAAe,QAAQ;AAAA,QAClC;AACA,YAAI,CAAC,UAAU;AACb,0BAAgB,IAAI,UAAU,QAAQ,eAAe,cAAc;AACnE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,cAAM,wBAAwB,iCAAiC,IAAI,QAAQ,YAAY;AACvF,cAAM,uBAAuB,sBAAsB,IAAI,QAAQ;AAC/D,YACE,0BAA0B,UAC1B,yBAAyB,UACzB,yBAAyB,sBACzB;AACA,0BAAgB,IAAI,UAAU,QAAQ,eAAe,gCAAgC;AACrF,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,wBAAwB,gBAAgB;AAC1C,0BAAgB,IAAI,UAAU,QAAQ,eAAe,2BAA2B;AAChF,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,CAAC,SAAS,kBAAkB;AAC9B,0BAAgB,IAAI,UAAU,QAAQ,eAAe,YAAY;AACjE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,CAAC,SAAS,WAAW;AACvB,0BAAgB,IAAI,UAAU,QAAQ,eAAe,aAAa;AAClE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,gBAAgB,WAAW,WAAW,SAAS,UAAU,KAAK,GAAG;AACnE,0BAAgB,IAAI,UAAU,QAAQ,eAAe,mBAAmB;AACxE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,gBAAgB,SAAS,YAAY,MAAM,UAAU,KAAK,GAAG;AAC/D,0BAAgB,IAAI,UAAU,QAAQ,eAAe,oBAAoB;AACzE,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AAEA,cAAM,sBAAgD;AAAA,UACpD,cAAc,QAAQ;AAAA,UACtB,SAAS,QAAQ;AAAA,UACjB,WAAW,QAAQ;AAAA,UACnB,YAAY,QAAQ;AAAA,UACpB,iBAAiB,QAAQ;AAAA,UACzB,qBAAqB,QAAQ;AAAA,UAC7B,YAAY,MAAM;AAAA,UAClB,UAAU,QAAQ;AAAA,QACpB;AACA,oBAAY,KAAK,mBAAmB;AACpC,mCAA2B,IAAI,qBAAqB,cAAc;AAClE,mBAAW,SAAS,KAAK,GAAG,QAAQ,QAAQ;AAC5C,YAAI,QAAQ,qBAAqB;AAC/B,qBAAW,SAAS;AACpB,qBAAW,eAAe,MAAM;AAAA,QAClC;AACA,iBAAS,QAAQ,sBAAsB,aAAa;AACpD,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,MACF;AAAA,MACA,KAAK;AACH,YAAI,YAAY,MAAM;AACpB,0BAAgB,IAAI,8BAA8B;AAClD,iCAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,QACF;AACA,YAAI,cAAc,KAAM,iBAAgB,IAAI,eAAe;AAC3D,kBAAU;AAAA,UACR,QAAQ,QAAQ;AAAA,UAChB,SAAS,QAAQ;AAAA,UACjB,YAAY,MAAM;AAAA,UAClB,UAAU,QAAQ;AAAA,QACpB;AACA,sBAAc,MAAM;AACpB,iBAAS,QAAQ,YAAY,WAAW,WAAW;AACnD,+BAAuB,iBAAiB,OAAO,QAAQ,QAAQ;AAC/D;AAAA,IACJ;AAAA,EACF;AAEA,aAAW,YAAY,UAAU,OAAO,GAAG;AACzC,QAAI,kBAAkB,SAAS,QAAQ,EAAE,SAAS,GAAG;AACnD,sBAAgB,IAAI,YAAY,SAAS,UAAU,SAAS;AAAA,IAC9D;AACA,eAAW,cAAc,SAAS,aAAa;AAC7C,UAAI,CAAC,UAAU,IAAI,UAAU,EAAG,iBAAgB,IAAI,YAAY,UAAU,kBAAkB;AAAA,IAC9F;AACA,eAAW,WAAW,SAAS,UAAU;AACvC,UAAI,CAAC,OAAO,IAAI,OAAO,EAAG,iBAAgB,IAAI,SAAS,OAAO,uBAAuB;AAAA,IACvF;AAAA,EACF;AACA,aAAW,cAAc,YAAY,OAAO,GAAG;AAC7C,QAAI,kBAAkB,WAAW,QAAQ,EAAE,SAAS,GAAG;AACrD,sBAAgB,IAAI,cAAc,WAAW,YAAY,SAAS;AAAA,IACpE;AACA,QAAI,WAAW,eAAe,UAAa,WAAW,eAAe,QAAW;AAC9E,sBAAgB,IAAI,cAAc,WAAW,YAAY,WAAW;AAAA,IACtE,WAAW,WAAW,WAAW,SAAS,SAAS;AACjD,sBAAgB,IAAI,cAAc,WAAW,YAAY,iBAAiB;AAAA,IAC5E,WAAW,YAAY,UAAU,WAAW,sBAAsB,WAAW,WAAW,IAAI;AAC1F,sBAAgB,IAAI,cAAc,WAAW,YAAY,+BAA+B;AAAA,IAC1F;AACA,QAAI,WAAW,WAAW,cAAc,WAAW,WAAW,YAAY;AACxE,sBAAgB,IAAI,cAAc,WAAW,YAAY,eAAe;AAAA,IAC1E;AACA,QAAI,WAAW,WAAW,WAAW;AACnC,sBAAgB,IAAI,cAAc,WAAW,YAAY,cAAc;AAAA,IACzE;AAAA,EACF;AAEA,QAAM,8BACJ,YAAY,SACR,cACG,OAAO,CAAC,UAAU,MAAM,QAAQ,SAAS,KAAK,CAAC,SAAS,KAAK,YAAY,SAAS,CAAC,EACnF,IAAI,CAAC,UAAU,MAAM,OAAO,IAC/B,CAAC;AACP,aAAW,WAAW,6BAA6B;AACjD,oBAAgB,IAAI,iCAAiC,OAAO,EAAE;AAAA,EAChE;AACA,QAAM,oBAAoB,4BAA4B,WAAW;AAEjE,QAAM,kBAAkB,CAAC,GAAG,UAAU,OAAO,CAAC,EAC3C,IAAI,CAAC,cAAc;AAAA,IAClB,GAAG;AAAA,IACH,gBAAgB,aAAa,SAAS,cAAc;AAAA,IACpD,WAAW,aAAa,SAAS,SAAS;AAAA,IAC1C,UAAU,eAAe,SAAS,QAAQ;AAAA,EAC5C,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC;AACzD,QAAM,oBAAoB,qBAAqB,YAAY,KAAK,CAAC,SAAS,KAAK,mBAAmB;AAClG,QAAM,yBACJ,qBACA,SAAS,WAAW,eACpB,MAAM,KAAK,CAAC,SAAS;AACnB,UAAM,qBAAqB,oBAAoB,IAAI,IAAI;AACvD,QACE,KAAK,WAAW,YAChB,KAAK,iBAAiB,UACtB,uBAAuB,UACvB,0BAA0B,KAC1B,sBAAsB,2BACtB,gBAAgB,KAAK,YAAY,QAAQ,UAAU,KAAK,GACxD;AACA,aAAO;AAAA,IACT;AACA,UAAM,aAAa,YAAY,IAAI,KAAK,YAAY;AACpD,QACE,YAAY,WAAW,gBACvB,WAAW,uBAAuB,KAAK,cACvC,CAAC,KAAK,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,gBAAgB,KAAK,OAAO,WAAW,YAAY,KAC/F,CAAC,KAAK,SAAS,KAAK,CAAC,SAAS,KAAK,SAAS,MAAM,GAClD;AACA,aAAO;AAAA,IACT;AACA,WAAO,YAAY,KAAK,CAAC,SAAS;AAChC,YAAM,4BAA4B,2BAA2B,IAAI,IAAI;AACrE,aACE,KAAK,uBACL,KAAK,iBAAiB,WAAW,gBACjC,KAAK,eAAe,KAAK,cACzB,8BAA8B,UAC9B,4BAA4B,sBAC5B,gBAAgB,KAAK,YAAY,KAAK,UAAU,IAAI;AAAA,IAExD,CAAC;AAAA,EACH,CAAC;AACH,MAAI,WAAW,CAAC,uBAAwB,iBAAgB,IAAI,sBAAsB;AAClF,MAAI,SAAS,WAAW,eAAe,CAAC,mBAAmB;AACzD,oBAAgB,IAAI,gCAAgC;AAAA,EACtD;AACA,MAAI,MAAM,OAAO,SAAS,KAAK,cAAc,KAAM,iBAAgB,IAAI,eAAe;AACtF,MAAI,cAAc,QAAQ,gBAAgB,QAAQ,gBAAgB,WAAW,WAAW,KAAK,GAAG;AAC9F,oBAAgB,IAAI,yBAAyB;AAAA,EAC/C;AACA,MACE,oBAAoB,UACpB,yBAAyB,WACxB,sBAAsB,2BAA2B,mBAAmB,iBAAiB,oBAAoB,KAAK,IAC/G;AACA,oBAAgB,IAAI,yBAAyB;AAAA,EAC/C;AAEA,QAAM,cAAc,eAAe,MAAM,KAAK,IAAI,GAAG,eAAe,SAAS,QAAQ,KAAK,CAAC;AAK3F,QAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,SAAO;AAAA,IACL,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,eAAe,IAAI,YAAY,SAAS,MAAM,aAAa,OAAO;AAAA,IAC9E;AAAA,IACA,SAAS,EAAE,OAAO,WAAW,SAAS,WAAW,YAAY;AAAA,IAC7D,QAAQ,CAAC,GAAG,OAAO,OAAO,CAAC,EACxB,IAAI,CAAC,WAAW;AAAA,MACf,GAAG;AAAA,MACH,YAAY,aAAa,MAAM,UAAU;AAAA,MACzC,SAAS,MAAM,QAAQ,KAAK,CAAC,GAAG,MAAM,gBAAgB,GAAG,GAAG,UAAU,CAAC;AAAA,MACvE,SAAS,MAAM,QAAQ,KAAK,CAAC,GAAG,MAAM,gBAAgB,GAAG,GAAG,iBAAiB,CAAC;AAAA,IAChF,EAAE,EACD,KAAK,CAAC,GAAG,MAAM,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC;AAAA,IACnD,WAAW;AAAA,IACX,WAAW,CAAC,GAAG,UAAU,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC;AAAA,IACzF,aAAa,CAAC,GAAG,YAAY,OAAO,CAAC,EAClC,IAAI,CAAC,gBAAgB,EAAE,GAAG,YAAY,UAAU,eAAe,WAAW,QAAQ,EAAE,EAAE,EACtF,KAAK,CAAC,GAAG,MAAM,YAAY,EAAE,cAAc,EAAE,YAAY,CAAC;AAAA,IAC7D,OAAO,MAAM,KAAK,CAAC,GAAG,MAAM,gBAAgB,GAAG,GAAG,QAAQ,CAAC;AAAA,IAC3D,aAAa,YAAY,KAAK,CAAC,GAAG,MAAM;AACtC,YAAM,SAAS,gBAAgB,EAAE,YAAY,EAAE,UAAU;AACzD,UAAI,WAAW,EAAG,QAAO;AACzB,YAAM,UAAU,YAAY,EAAE,SAAS,EAAE,OAAO;AAChD,aAAO,YAAY,IAAI,UAAU,YAAY,EAAE,iBAAiB,EAAE,eAAe;AAAA,IACnF,CAAC;AAAA,IACD;AAAA,IACA,SAAS;AAAA,MACP,UACE,WAAW,eACX,SAAS,WAAW,eACpB,0BACA,qBACA,gBAAgB,SAAS;AAAA,MAC3B,iBAAiB,CAAC,GAAG,eAAe,EAAE,KAAK,WAAW;AAAA,MACtD,mBAAmB,gBAChB,OAAO,CAAC,aAAa,SAAS,WAAW,QAAQ,EACjD,IAAI,CAAC,aAAa,SAAS,UAAU;AAAA,MACxC,uBAAuB,gBACpB,OAAO,CAAC,aAAa,SAAS,WAAW,YAAY,EACrD,IAAI,CAAC,aAAa,SAAS,UAAU;AAAA,MACxC;AAAA,MACA;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,aAAa,eAAe;AAAA,MAC5B,gBAAgB,YAAY;AAAA,MAC5B;AAAA,MACA,WAAW,eAAe,SAAS,YAAY;AAAA,MAC/C,OAAO,QAAQ,SAAS;AAAA,MACxB,OAAO,QAAQ,SAAS;AAAA,IAC1B;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,mBAAmB,GAAsB,GAA8B;AACrF,QAAM,eAAe,gBAAgB,EAAE,YAAY,EAAE,UAAU;AAC/D,MAAI,iBAAiB,EAAG,QAAO;AAC/B,QAAM,WAAW,gBAAgB,EAAE,YAAY,EAAE,UAAU;AAC3D,MAAI,aAAa,EAAG,QAAO;AAC3B,SAAO,YAAY,EAAE,SAAS,EAAE,OAAO;AACzC;AAEA,SAAS,kBACP,KACA,WACA,WACA,WACkD;AAClD,QAAM,SAA8B,CAAC;AACrC,MAAI,eAAe;AACnB,aAAW,QAAQ,IAAI,MAAM,IAAI,GAAG;AAClC,QAAI,KAAK,KAAK,EAAE,WAAW,EAAG;AAC9B,QAAI,OAAO,WAAW,MAAM,MAAM,IAAI,8BAA8B;AAClE,sBAAgB;AAChB;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,kBAAY,KAAK,MAAM,IAAI;AAAA,IAC7B,QAAQ;AACN,sBAAgB;AAChB;AAAA,IACF;AACA,UAAM,SAAS,wBAAwB,UAAU,SAAS;AAC1D,QAAI,CAAC,OAAO,WAAW,OAAO,KAAK,cAAc,aAAa,OAAO,KAAK,cAAc,WAAW;AACjG,sBAAgB;AAChB;AAAA,IACF;AACA,QAAI,OAAO,UAAU,WAAW;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,QACA,WAAW,SAAS,gBAAgB,SAAS;AAAA,MAC/C;AAAA,IACF;AACA,WAAO,KAAK,OAAO,IAAI;AAAA,EACzB;AACA,SAAO,EAAE,QAAQ,aAAa;AAChC;AAEA,SAAS,uBAAuB,SAAsB,OAA0B,UAAoC;AAClH,MAAI,SAAS,WAAW,EAAG,SAAQ,IAAI,SAAS,MAAM,OAAO,WAAW;AAC1E;AAEA,SAAS,oBACP,OACA,OACA,wBACS;AACT,MAAI,MAAM,2BAA2B,uBAAwB,QAAO;AACpE,MAAI,MAAM,eAAe,UAAa,MAAM,eAAe,MAAM,WAAY,QAAO;AACpF,SAAO,WAAW,MAAM,OAAO,MAAM,WAAW,MAAM,OAAO;AAC/D;AAEA,SAAS,WAAW,OAAwB;AAC1C,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,IAAI,MAAM,IAAI,UAAU,EAAE,KAAK,GAAG,CAAC;AACpE,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,UAAM,UAAU,OAAO,QAAQ,KAAgC,EAC5D,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,EACpC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,KAAK,UAAU,GAAG,CAAC,IAAI,WAAW,KAAK,CAAC,EAAE;AACtE,WAAO,IAAI,QAAQ,KAAK,GAAG,CAAC;AAAA,EAC9B;AACA,SAAO,KAAK,UAAU,KAAK,KAAK;AAClC;AAEA,SAAS,eAAe,UAAkD;AACxE,QAAM,QAAQ,oBAAI,IAA8B;AAChD,aAAW,QAAQ,SAAU,OAAM,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI;AACvE,SAAO,CAAC,GAAG,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AACxC,UAAM,SAAS,YAAY,EAAE,MAAM,EAAE,IAAI;AACzC,WAAO,WAAW,IAAI,SAAS,YAAY,EAAE,IAAI,EAAE,EAAE;AAAA,EACvD,CAAC;AACH;AAEA,SAAS,aAAa,QAA4B;AAChD,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,WAAW;AAC9C;AAEA,SAAS,YAAY,GAAW,GAAmB;AACjD,MAAI,IAAI,EAAG,QAAO;AAClB,MAAI,IAAI,EAAG,QAAO;AAClB,SAAO;AACT;AAEA,SAAS,gBAAgB,GAAW,GAAmB;AACrD,QAAM,MAAM,KAAK,MAAM,CAAC;AACxB,QAAM,MAAM,KAAK,MAAM,CAAC;AACxB,MAAI,MAAM,IAAK,QAAO;AACtB,MAAI,MAAM,IAAK,QAAO;AACtB,SAAO;AACT;AAEA,SAAS,gBAAqE,GAAM,GAAM,OAAkB;AAC1G,QAAM,SAAS,gBAAgB,EAAE,YAAY,EAAE,UAAU;AACzD,MAAI,WAAW,EAAG,QAAO;AACzB,SAAO,YAAY,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;AACvD;AAEA,SAAS,wBAAwB,SAAiB,YAA4B;AAC5E,SAAO,GAAG,OAAO,KAAK,UAAU;AAClC;AAEA,SAAS,2BAA2B,WAA2B;AAC7D,SAAO,UACJ,UAAU,MAAM,EAChB,KAAK,EACL,YAAY,EACZ,QAAQ,QAAQ,GAAG,EACnB,QAAQ,WAAW,EAAE;AAC1B;AAEA,SAAS,wBAAwB,MAAc,OAAwB;AACrE,SAAO,2BAA2B,IAAI,MAAM,2BAA2B,KAAK;AAC9E;AAEA,SAAS,6BAA6B,WAAgC,KAAa,UAAwB;AACzG,QAAM,UAAU,UAAU,IAAI,GAAG;AACjC,MAAI,YAAY,UAAa,WAAW,QAAS,WAAU,IAAI,KAAK,QAAQ;AAC9E;AAEA,SAAS,+BACP,YACA,WACS;AACT,SAAO,WAAW,sBAAsB,MAAM,CAAC,eAAe;AAC5D,UAAM,WAAW,UAAU,IAAI,UAAU;AACzC,WACE,UAAU,WAAW,gBACrB,SAAS,iBAAiB,WAAW,sBACrC,SAAS,iBAAiB,WAAW;AAAA,EAEzC,CAAC;AACH;AAEA,SAAS,yBACP,YACA,UACS;AACT,QAAM,qBAAqB;AAAA,IACzB,SAAS,YAAY,OAAO,CAAC,eAAe,eAAe,WAAW,kBAAkB;AAAA,EAC1F;AACA,QAAM,qBAAqB,aAAa,WAAW,qBAAqB;AACxE,SACE,mBAAmB,WAAW,mBAAmB,UACjD,mBAAmB,MAAM,CAAC,YAAY,UAAU,eAAe,mBAAmB,KAAK,CAAC;AAE5F;AAEA,SAAS,kBAAkB,UAAoD;AAC7E,SAAO,IAAI,IAAI,SAAS,OAAO,CAAC,SAAS,KAAK,SAAS,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AACzF;AAEA,SAAS,sBAAsB,OAA2B,MAAc,UAA0B;AAChG,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,CAAC,OAAO,UAAU,KAAK,KAAK,SAAS,GAAG;AAC1C,UAAM,IAAI,UAAU,qBAAqB,IAAI,6BAA6B;AAAA,EAC5E;AACA,SAAO;AACT;AAEA,SAAS,SAAS,KAAyB;AACzC,QAAM,QAAQ,IAAI;AAClB,MAAI,EAAE,iBAAiB,SAAS,CAAC,OAAO,SAAS,MAAM,QAAQ,CAAC,GAAG;AACjE,UAAM,IAAI,UAAU,kDAAkD;AAAA,EACxE;AACA,SAAO,MAAM,YAAY;AAC3B;AAEA,eAAe,iCACb,cACA,SACgD;AAChD,QAAM,YAAY,KAAK,KAAK,oBAAoB,YAAY,GAAG,OAAO;AACtE,MAAI;AACF,UAAM,GAAG,MAAM,WAAW,EAAE,MAAM,IAAM,CAAC;AAAA,EAC3C,SAAS,OAAO;AACd,QAAK,MAAgC,SAAS,SAAU,OAAM;AAAA,EAChE;AACA,SAAO,sBAAsB,WAAW,uCAAuC;AACjF;AAEA,eAAe,sBACb,WACA,eACgD;AAChD,QAAM,SAAS,MAAM,GAAG,MAAM,SAAS;AACvC,MAAI,OAAO,eAAe,KAAK,CAAC,OAAO,YAAY,GAAG;AACpD,UAAM,IAAI,uBAAuB,eAAe,aAAa;AAAA,EAC/D;AACA,QAAM,SAAS,MAAM,GAAG,KAAK,WAAW,YAAY,WAAW,YAAY,cAAc,YAAY,UAAU;AAC/G,MAAI;AACF,UAAM,WAAW,MAAM,OAAO,KAAK;AACnC,UAAM,QAAQ,MAAM,GAAG,MAAM,SAAS;AACtC,QACE,MAAM,eAAe,KACrB,CAAC,MAAM,YAAY,KACnB,OAAO,QAAQ,SAAS,OACxB,OAAO,QAAQ,SAAS,OACxB,MAAM,QAAQ,SAAS,OACvB,MAAM,QAAQ,SAAS,KACvB;AACA,YAAM,IAAI,uBAAuB,eAAe,2CAA2C;AAAA,IAC7F;AACA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,UAAM,OAAO,MAAM,EAAE,MAAM,MAAM,MAAS;AAC1C,UAAM;AAAA,EACR;AACF;AAEA,SAAS,oBAAoB,QAAuD;AAClF,MAAI,QAAQ,aAAa,QAAS,QAAO,iBAAiB,OAAO,EAAE;AACnE,MAAI,QAAQ,aAAa,YAAY,QAAQ,aAAa,aAAa,QAAQ,aAAa,WAAW;AACrG,WAAO,WAAW,OAAO,EAAE;AAAA,EAC7B;AACA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,mDAAmD,QAAQ,QAAQ;AAAA,EACrE;AACF;AAEO,SAAS,0BAA0B,UAAwC;AAChF,QAAM,UAAU;AAAA,IACd,eAAe,SAAS;AAAA,IACxB,WAAW,SAAS;AAAA,IACpB,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,IACjB,WAAW,SAAS;AAAA,IACpB,aAAa,SAAS;AAAA,IACtB,aAAa,SAAS;AAAA,IACtB,OAAO,SAAS;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,SAAS,SAAS;AAAA,EACpB;AACA,SAAO,WAAW,QAAQ,EAAE,OAAO,WAAW,OAAO,CAAC,EAAE,OAAO,KAAK;AACtE;;;AD3qDA,IAAMC,mBAAkBC,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAE9E,IAAM,iCAAiCA,GACpC,OAAO;AAAA,EACN,WAAW;AAAA,EACX,WAAWD;AAAA,EACX,OAAO;AACT,CAAC,EACA,OAAO;AAEV,IAAM,sBAAsBC,GAAE,WAAW,CAAC,UAAU;AAClD,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,MAAI,OAAO,UAAU,YAAY,mBAAmB,KAAK,KAAK,EAAG,QAAO,OAAO,KAAK;AACpF,SAAO;AACT,GAAGA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,6BAA6B,EAAE,SAAS,CAAC;AAExE,IAAM,+BAA+BA,GAClC,OAAO;AAAA,EACN,WAAW;AAAA,EACX,WAAWD;AAAA,EACX,OAAO,uBAAuB,SAAS;AAAA,EACvC,OAAO,uBAAuB,SAAS;AAAA,EACvC,OAAO;AACT,CAAC,EACA,OAAO,EACP;AAAA,EACC,CAAC,UACC,MAAM,UAAU,UAAa,MAAM,UAAU,UAAa,KAAK,MAAM,MAAM,KAAK,IAAI,KAAK,MAAM,MAAM,KAAK;AAAA,EAC5G,EAAE,SAAS,oCAAoC,MAAM,CAAC,OAAO,EAAE;AACjE;AA0BF,eAAsB,wBACpB,SACA,OACA,wBACA,cACmC;AACnC,QAAM,QAAQ,6BAA6B,MAAM,MAAM,KAAK;AAC5D,QAAM,oBAAoB,wBAAwB,KAAK,KAAK;AAC5D,MAAI,MAAM,QAAQ,SAAS,yBAAyB,MAAM,QAAQ,WAAW,SAAS,SAAS;AAC7F,QAAI,CAAC,mBAAmB;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM,QAAQ,WAAW,OAAO,mBAAmB;AACrD,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,MAAM,QAAQ,+BAA+B,MAAM,aAAa,QAAW,iBAAiB;AAC7G,QAAM,QAAQ,IAAI,kBAAkB;AAAA,IAClC,SAAS,SAAS,QAAQ;AAAA,IAC1B,WAAW,SAAS;AAAA,EACtB,CAAC;AACD,SAAO,MAAM,OAAO,MAAM,WAAW,OAAO,EAAE,wBAAwB,mBAAmB,aAAa,CAAC;AACzG;AAGA,eAAsB,iBACpB,SACA,OACA,wBAC+B;AAC/B,QAAM,WAAW,MAAM,QAAQ,+BAA+B,MAAM,aAAa,QAAW,sBAAsB;AAClH,QAAM,QAAQ,IAAI,kBAAkB;AAAA,IAClC,SAAS,SAAS,QAAQ;AAAA,IAC1B,WAAW,SAAS;AAAA,EACtB,CAAC;AACD,QAAM,UAAU,8BAA8B,MAAM;AAAA,IAClD,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,IAC1D,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,IAC1D,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,EAC5D,CAAC;AACD,SAAO,MAAM,KAAK,MAAM,WAAW,OAAO;AAC5C;AAEO,IAAM,8BAA8B,gBAGzC;AAAA,EACA,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,SAA2B;AAAA,IAChD,QAAQ,MAAM,wBAAwB,IAAI,SAAS,OAAO,IAAI,wBAAwB,IAAI,OAAO,iBAAiB;AAAA,EACpH;AACF,CAAC;AAEM,IAAM,4BAA4B,gBAA2E;AAAA,EAClH,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,SAA2B;AAAA,IAChD,QAAQ,MAAM,iBAAiB,IAAI,SAAS,OAAO,IAAI,sBAAsB;AAAA,EAC/E;AACF,CAAC;;;ADhFD,IAAM,kBAAkBE,GAAE,OAAO;AAAA,EAC/B,UAAUA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,sBAAsB,EAAE,IAAI,GAAG;AAAA;AAAA;AAAA,EAGlE,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA,EAClE,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAC5D,CAAC;AAYM,IAAM,qBAAqB,gBAAiD;AAAA,EACjF,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ;AAAA,MAC/B,MAAM;AAAA,MACN,MAAM,aAAa;AAAA,MACnB,IAAI;AAAA,MACJ,MAAM,cAAc;AAAA,IACtB;AACA,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAMD,IAAM,qBAAqBA,GAAE,OAAO;AAAA,EAClC,OAAOA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,mBAAmB,EAAE,IAAI,IAAI;AAAA,EAC7D,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,EAI1D,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACxD,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS;AACpE,CAAC;AAiBM,IAAM,wBAAwB,gBAAuD;AAAA,EAC1F,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,aAAa;AAAA,MAC5C,OAAO,MAAM;AAAA,MACb,WAAW,MAAM,aAAa;AAAA,MAC9B,YAAY,MAAM,cAAc;AAAA,MAChC,YAAY,MAAM,cAAc;AAAA,MAChC,WAAW,IAAI;AAAA,IACjB,CAAC;AACD,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAYM,IAAM,uBAAuB,gBAAqD;AAAA,EACvF,MAAM;AAAA,EACN,aAAa;AAAA;AAAA;AAAA;AAAA,EAIb,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ;AAAA,MAC/B;AAAA,QACE,GAAG;AAAA,QACH,wBAAwB,IAAI;AAAA,QAC5B,GAAI,IAAI,kBAAkB,EAAE,iBAAiB,IAAI,gBAAgB,IAAI,CAAC;AAAA,MACxE;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI;AAAA,IACN;AACA,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAkBD,IAAM,uBAAuBA,GAAE;AAAA,EAC7B,CAAC,SAAS;AACR,QAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,YAAM,MAA+B,CAAC;AACtC,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAA+B,GAAG;AACpE,YAAI,MAAM,KAAM,KAAI,CAAC,IAAI;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACAA,GAAE,OAAO;AAAA,IACP,YAAYA,GAAE,KAAK,oBAAoB;AAAA,IACvC,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAChD,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAC/C,IAAIA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACxC,OAAOA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAC3C,QAAQA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IAC3C,SAASA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IAC9C,UAAUA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IAC/C,cAAcA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IACnD,YAAYA,GAAE,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS;AAAA,IAChE,cAAcA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACpD,CAAC;AACH;AAKO,IAAM,0BAA0B,gBAGrC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,eAAe,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACtG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAMD,IAAM,2BAA2BA,GAAE;AAAA,EACjC,CAAC,SAAS;AACR,QAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AACrE,YAAM,MAAM;AACZ,YAAM,UAAmC,CAAC;AAC1C,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAI,UAAU,KAAM,SAAQ,GAAG,IAAI;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACAA,GAAE,OAAO;AAAA,IACP,YAAYA,GAAE,KAAK,CAAC,OAAO,SAAS,CAAC;AAAA,IACrC,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,IAChC,WAAWA,GAAE,OAAO,EAAE,SAAS;AAAA,EACjC,CAAC;AACH;AAKO,IAAM,8BAA8B,gBAGzC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,mBAAmB,OAAO,IAAI,wBAAwB,IAAI,eAAe;AAC1G,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAED,IAAM,yBAAyBA,GAAE;AAAA,EAC/B,CAAC,SAAS;AACR,QAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AACrE,YAAM,MAAM;AACZ,YAAM,UAAmC,CAAC;AAC1C,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAI,UAAU,KAAM,SAAQ,GAAG,IAAI;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACAA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,OAAO,EAAE,OAAO,qBAAqB;AAAA,MAC3C,SAAS;AAAA,IACX,CAAC;AAAA,IACD,YAAYA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACzC,WAAWA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACxC,SAASA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACtC,OAAOA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IACrC,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACrD,OAAOA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACpC,WAAWA,GAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACvC,OAAOA,GAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACpD,eAAeA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IAC7C,MAAMA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IACpC,iBAAiBA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,IAC5D,MAAMA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACnC,UAAUA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IACxC,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IAClC,SAASA,GAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,YAAYA,GAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACxC,IAAIA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACjC,OAAOA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IACpC,QAAQA,GAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,IACpC,SAASA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IACvC,UAAUA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IACxC,cAAcA,GAAE,OAAO,EAAE,IAAI,IAAI,EAAE,SAAS;AAAA,IAC5C,YAAYA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS;AAAA,IAClD,cAAcA,GAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAC3C,QAAQA,GAAE,MAAMA,GAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACxC,CAAC;AACH;AAMA,IAAM,oBAAoBA,GAAE;AAAA,EAC1B,CAAC,SAAS;AACR,QAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AACrE,YAAM,MAAM;AACZ,YAAM,UAAmC,CAAC;AAC1C,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC9C,YAAI,UAAU,KAAM,SAAQ,GAAG,IAAI;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACAA,GAAE,OAAO;AAAA,IACP,YAAYA,GAAE,KAAK,iBAAiB;AAAA,IACpC,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAChD,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,CAAC;AACH;AAKO,IAAM,uBAAuB,gBAGlC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,YAAY,OAAO,IAAI,sBAAsB;AAC9E,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAWD,IAAM,0BAA0BA,GAAE;AAAA,EAChC,CAAC,SAAS;AACR,QAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,YAAM,MAA+B,CAAC;AACtC,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAA+B,GAAG;AACpE,YAAI,MAAM,KAAM,KAAI,CAAC,IAAI;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACAA,GAAE,OAAO;AAAA,IACP,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAM;AAAA,IACzC,WAAWA,GAAE,MAAMA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS;AAAA,IAC/D,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAChD,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,CAAC;AACH;AAaO,IAAM,6BAA6B,gBAGxC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,QAAI;AACF,YAAM,SAAS,MAAM,IAAI,QAAQ,eAAe;AAAA,QAC9C,MAAM,MAAM;AAAA,QACZ,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,QACxD,GAAI,MAAM,aAAa,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,QAC3D,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,QACxD,GAAI,IAAI,yBAAyB,EAAE,WAAW,IAAI,uBAAuB,IAAI,CAAC;AAAA,MAChF,CAAC;AACD,aAAO,EAAE,OAAO;AAAA,IAClB,SAAS,KAAK;AACZ,UAAI,eAAe,wBAAyB,OAAM,IAAI,uBAAuB,IAAI,OAAO;AACxF,YAAM;AAAA,IACR;AAAA,EACF;AACF,CAAC;AAED,IAAM,2BAA2BA,GAAE;AAAA,EACjC,CAAC,SAAS;AACR,QAAI,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,YAAM,MAA+B,CAAC;AACtC,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,IAA+B,GAAG;AACpE,YAAI,MAAM,KAAM,KAAI,CAAC,IAAI;AAAA,MAC3B;AACA,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EACAA,GAAE,OAAO;AAAA,IACP,QAAQA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,IACxC,SAASA,GAAE,QAAQ,EAAE,SAAS;AAAA,IAC9B,YAAYA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAChD,WAAWA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACjD,CAAC;AACH;AAaO,IAAM,8BAA8B,gBAGzC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,QAAI;AACF,YAAM,SAAS,MAAM,IAAI,QAAQ,gBAAgB,MAAM,QAAQ;AAAA,QAC7D,SAAS,MAAM,YAAY;AAAA,QAC3B,GAAI,MAAM,aAAa,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,QAC3D,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,QACxD,GAAI,IAAI,yBAAyB,EAAE,WAAW,IAAI,uBAAuB,IAAI,CAAC;AAAA,MAChF,CAAC;AACD,aAAO,EAAE,OAAO;AAAA,IAClB,SAAS,KAAK;AACZ,UAAI,eAAe,wBAAyB,OAAM,IAAI,uBAAuB,IAAI,OAAO;AACxF,YAAM;AAAA,IACR;AAAA,EACF;AACF,CAAC;AAWM,IAAM,0BAA0B,gBAGrC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,iCAAiC,gBAG5C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,kCAAkC,gBAG7C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,gCAAgC,gBAG3C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,gCAAgC,gBAG3C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,8BAA8B,gBAGzC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,kCAAkC,gBAG7C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,+BAA+B,gBAG1C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,8BAA8B,gBAGzC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,+BAA+B,gBAG1C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,oCAAoC,gBAG/C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,+BAA+B,gBAG1C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,8BAA8B,gBAGzC;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAEM,IAAM,iCAAiC,gBAG5C;AAAA,EACA,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,SAAS,OAAO,OAAO,QAAQ;AAC7B,UAAM,SAAS,MAAM,IAAI,QAAQ,cAAc,OAAO,IAAI,wBAAwB,IAAI,eAAe;AACrG,WAAO,EAAE,OAAO;AAAA,EAClB;AACF,CAAC;AAQM,IAAM,wBAAwB;AAAA,EACnC,mBAAmB,KAAK;AAAA,EACxB,sBAAsB,KAAK;AAAA,EAC3B,qBAAqB,KAAK;AAAA,EAC1B,wBAAwB,KAAK;AAAA,EAC7B,4BAA4B,KAAK;AAAA,EACjC,wBAAwB,KAAK;AAAA,EAC7B,+BAA+B,KAAK;AAAA,EACpC,gCAAgC,KAAK;AAAA,EACrC,8BAA8B,KAAK;AAAA,EACnC,8BAA8B,KAAK;AAAA,EACnC,4BAA4B,KAAK;AAAA,EACjC,gCAAgC,KAAK;AAAA,EACrC,6BAA6B,KAAK;AAAA,EAClC,4BAA4B,KAAK;AAAA,EACjC,6BAA6B,KAAK;AAAA,EAClC,kCAAkC,KAAK;AAAA,EACvC,6BAA6B,KAAK;AAAA,EAClC,4BAA4B,KAAK;AAAA,EACjC,+BAA+B,KAAK;AAAA,EACpC,qBAAqB,KAAK;AAAA,EAC1B,2BAA2B,KAAK;AAAA,EAChC,4BAA4B,KAAK;AACnC;","names":["z","z","event","namespaceSchema","z","z"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search/port.ts"],"sourcesContent":["import type { QmdSearchResult } from \"../types.js\";\n\n/** Alias so consumers don't need to reference \"Qmd\" in a backend-agnostic context. */\nexport type SearchResult = QmdSearchResult;\n\nexport interface SearchQueryOptions {\n intent?: string;\n explain?: boolean;\n candidateLimit?: number;\n rerank?: boolean;\n chunkStrategy?: \"auto\" | \"regex\";\n structuredSearches?: Array<{ type: \"lex\" | \"vec\" | \"hyde\"; query: string }>;\n}\n\n/**\n * A search that returned empty (or partial) results because the backend was\n * unavailable, still loading, or timed out — cases that are otherwise\n * indistinguishable from a genuine \"no matches\" (issue #1536, CLAUDE.md\n * rule 34).\n */\nexport interface SearchDegradation {\n backend: \"qmd\" | \"remote\" | \"meilisearch\" | \"orama\" | \"lancedb\";\n code:\n | \"backend_unavailable\"\n | \"backend_error\"\n | \"daemon_timeout\"\n | \"daemon_loading\"\n | \"subprocess_error\"\n | \"deadline_exceeded\"\n | \"remote_error\";\n detail?: string;\n}\n\nexport interface SearchExecutionOptions {\n signal?: AbortSignal;\n /**\n * Observer invoked when the backend degrades during this call (#1536).\n * Callers that need to distinguish empty-because-degraded from\n * empty-because-no-matches (recall x-ray, fallback decisions) pass a\n * collector here. Observer failures are swallowed by the notifier —\n * observability must never break search.\n */\n onDegradation?: (degradation: SearchDegradation) => void;\n}\n\nexport function reportSearchDegradation(\n execution: SearchExecutionOptions | undefined,\n degradation: SearchDegradation,\n): void {\n try {\n execution?.onDegradation?.(degradation);\n } catch {\n // Observability must never break search.\n }\n}\n\nexport function resolveEnsureCollectionArgs(\n collectionOrExecution?: string | SearchExecutionOptions,\n execution?: SearchExecutionOptions,\n): { collection?: string; execution?: SearchExecutionOptions } {\n if (typeof collectionOrExecution === \"string\") {\n return { collection: collectionOrExecution, execution };\n }\n return { collection: undefined, execution: collectionOrExecution ?? execution };\n}\n\n/**\n * Optional status report for search backends that track embedding backlog.\n * Backends without embedding pipelines return null from status().\n */\nexport interface SearchBackendStatus {\n pendingEmbeddings: number | null;\n oldestPendingAgeMs: number | null;\n totalFiles: number | null;\n embeddedFiles: number | null;\n}\n\n/**\n * Abstract search backend interface.\n *\n * Implementations:\n * - QmdClient (default, local hybrid BM25+vector+reranking)\n * - OramaBackend (embedded, pure JS, hybrid FTS+vector)\n * - LanceDbBackend (embedded, native Arrow bindings, RRF reranking)\n * - MeilisearchBackend (server-based SDK, hybrid search)\n * - RemoteSearchBackend (HTTP REST adapter)\n * - NoopSearchBackend (graceful degradation)\n *\n * See docs/writing-a-search-backend.md for the implementation guide.\n */\nexport interface SearchBackend {\n // ── Lifecycle ──\n probe(): Promise<boolean>;\n /**\n * Optional non-mutating availability probe for health/readiness checks.\n * Implementations must avoid auto-upgrades, collection creation, daemon\n * startup, or any other runtime-modifying side effects.\n */\n checkAvailability?(execution?: SearchExecutionOptions): Promise<boolean>;\n isAvailable(): boolean;\n debugStatus(): string;\n /** Optional embedding backlog status for health surfaces. */\n status?(): Promise<SearchBackendStatus>;\n\n // ── Search ──\n search(\n query: string,\n collection?: string,\n maxResults?: number,\n options?: SearchQueryOptions,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n searchGlobal(query: string, maxResults?: number, execution?: SearchExecutionOptions): Promise<SearchResult[]>;\n bm25Search(\n query: string,\n collection?: string,\n maxResults?: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n vectorSearch(\n query: string,\n collection?: string,\n maxResults?: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n hybridSearch(\n query: string,\n collection?: string,\n maxResults?: number,\n execution?: SearchExecutionOptions,\n ): Promise<SearchResult[]>;\n\n // ── Maintenance ──\n update(execution?: SearchExecutionOptions): Promise<void>;\n /**\n * Wall-clock ms of the most recent SUCCESSFUL index refresh, or null when the\n * backend has never run one. Ordinary update() is fail-open: it returns\n * silently (without throwing or advancing this timestamp) when the backend is\n * unavailable or the call is suppressed by a min-interval / failure backoff.\n * Callers that must know whether update() actually indexed — so they can\n * invalidate dependent caches only on a real refresh — snapshot this before\n * the call and treat the backend as refreshed iff the value advanced. Optional\n * because not every backend tracks it; absent means \"assume refreshed\".\n */\n readonly lastUpdateRanAtMs?: number | null;\n /**\n * Optional strict refresh used by callers that must know whether the backend\n * was actually refreshed before writing success markers. Ordinary update\n * calls remain fail-open for migration/maintenance resilience.\n */\n updateStrict?(execution?: SearchExecutionOptions): Promise<void>;\n updateCollection(collection: string, execution?: SearchExecutionOptions): Promise<void>;\n updateCollectionFromDir?(collection: string, memoryDir: string, execution?: SearchExecutionOptions): Promise<void>;\n /**\n * True when update() refreshes every indexed collection, not just this\n * backend's configured collection. Namespace routers use this to avoid\n * repeating the same expensive global update once per namespace.\n */\n updatesAllCollections?(): boolean;\n /**\n * Optional strict refresh used by callers that must know whether a collection\n * was actually refreshed before writing success markers. Ordinary update\n * calls remain fail-open for migration/maintenance resilience.\n */\n updateCollectionStrict?(collection: string, execution?: SearchExecutionOptions): Promise<void>;\n embed(): Promise<void>;\n /**\n * Optional strict embed used by callers that must know vectors were actually\n * refreshed before writing success markers.\n */\n embedStrict?(): Promise<void>;\n embedCollection(collection: string): Promise<void>;\n /**\n * Optional strict collection embed used by callers that must know vectors were\n * actually refreshed before writing success markers.\n */\n embedCollectionStrict?(collection: string): Promise<void>;\n\n // ── Collection management ──\n /**\n * Optional non-mutating collection probe. Backends that can distinguish a\n * missing collection from a transient probe failure should implement this so\n * callers can avoid auto-creating collections in unsafe layouts.\n */\n checkCollection?(\n collectionOrExecution?: string | SearchExecutionOptions,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\">;\n ensureCollection(\n memoryDir: string,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\">;\n ensureCollection(\n memoryDir: string,\n collection?: string,\n execution?: SearchExecutionOptions,\n ): Promise<\"present\" | \"missing\" | \"unknown\" | \"skipped\">;\n}\n"],"mappings":";AA6CO,SAAS,wBACd,WACA,aACM;AACN,MAAI;AACF,eAAW,gBAAgB,WAAW;AAAA,EACxC,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,4BACd,uBACA,WAC6D;AAC7D,MAAI,OAAO,0BAA0B,UAAU;AAC7C,WAAO,EAAE,YAAY,uBAAuB,UAAU;AAAA,EACxD;AACA,SAAO,EAAE,YAAY,QAAW,WAAW,yBAAyB,UAAU;AAChF;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|