@remnic/core 1.0.0
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/abstraction-nodes.d.ts +52 -0
- package/dist/abstraction-nodes.js +15 -0
- package/dist/abstraction-nodes.js.map +1 -0
- package/dist/access-cli.d.ts +5 -0
- package/dist/access-cli.js +308 -0
- package/dist/access-cli.js.map +1 -0
- package/dist/access-http.d.ts +158 -0
- package/dist/access-http.js +32 -0
- package/dist/access-http.js.map +1 -0
- package/dist/access-idempotency.d.ts +31 -0
- package/dist/access-idempotency.js +11 -0
- package/dist/access-idempotency.js.map +1 -0
- package/dist/access-mcp.d.ts +76 -0
- package/dist/access-mcp.js +8 -0
- package/dist/access-mcp.js.map +1 -0
- package/dist/access-schema.d.ts +266 -0
- package/dist/access-schema.js +29 -0
- package/dist/access-schema.js.map +1 -0
- package/dist/access-service.d.ts +614 -0
- package/dist/access-service.js +32 -0
- package/dist/access-service.js.map +1 -0
- package/dist/behavior-learner.d.ts +16 -0
- package/dist/behavior-learner.js +124 -0
- package/dist/behavior-learner.js.map +1 -0
- package/dist/behavior-signals.d.ts +15 -0
- package/dist/behavior-signals.js +11 -0
- package/dist/behavior-signals.js.map +1 -0
- package/dist/bootstrap.d.ts +46 -0
- package/dist/bootstrap.js +9 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/boxes.d.ts +93 -0
- package/dist/boxes.js +14 -0
- package/dist/boxes.js.map +1 -0
- package/dist/buffer.d.ts +22 -0
- package/dist/buffer.js +9 -0
- package/dist/buffer.js.map +1 -0
- package/dist/calibration.d.ts +81 -0
- package/dist/calibration.js +239 -0
- package/dist/calibration.js.map +1 -0
- package/dist/causal-behavior.d.ts +79 -0
- package/dist/causal-behavior.js +190 -0
- package/dist/causal-behavior.js.map +1 -0
- package/dist/causal-chain.d.ts +61 -0
- package/dist/causal-chain.js +24 -0
- package/dist/causal-chain.js.map +1 -0
- package/dist/causal-consolidation.d.ts +71 -0
- package/dist/causal-consolidation.js +211 -0
- package/dist/causal-consolidation.js.map +1 -0
- package/dist/causal-retrieval.d.ts +44 -0
- package/dist/causal-retrieval.js +184 -0
- package/dist/causal-retrieval.js.map +1 -0
- package/dist/causal-trajectory-graph.d.ts +13 -0
- package/dist/causal-trajectory-graph.js +59 -0
- package/dist/causal-trajectory-graph.js.map +1 -0
- package/dist/causal-trajectory.d.ts +68 -0
- package/dist/causal-trajectory.js +18 -0
- package/dist/causal-trajectory.js.map +1 -0
- package/dist/chunk-2CJCWDMR.js +87 -0
- package/dist/chunk-2CJCWDMR.js.map +1 -0
- package/dist/chunk-2NMMFZ5T.js +216 -0
- package/dist/chunk-2NMMFZ5T.js.map +1 -0
- package/dist/chunk-2PO5ZRKV.js +103 -0
- package/dist/chunk-2PO5ZRKV.js.map +1 -0
- package/dist/chunk-3QKK7QOS.js +154 -0
- package/dist/chunk-3QKK7QOS.js.map +1 -0
- package/dist/chunk-3SLRNYNG.js +26 -0
- package/dist/chunk-3SLRNYNG.js.map +1 -0
- package/dist/chunk-4A24LIM2.js +68 -0
- package/dist/chunk-4A24LIM2.js.map +1 -0
- package/dist/chunk-6HZ6AO2P.js +164 -0
- package/dist/chunk-6HZ6AO2P.js.map +1 -0
- package/dist/chunk-763GUIOU.js +302 -0
- package/dist/chunk-763GUIOU.js.map +1 -0
- package/dist/chunk-AAI7JARD.js +173 -0
- package/dist/chunk-AAI7JARD.js.map +1 -0
- package/dist/chunk-B7LOFDVE.js +112 -0
- package/dist/chunk-B7LOFDVE.js.map +1 -0
- package/dist/chunk-BDFZXRSO.js +318 -0
- package/dist/chunk-BDFZXRSO.js.map +1 -0
- package/dist/chunk-BOUYNNYD.js +707 -0
- package/dist/chunk-BOUYNNYD.js.map +1 -0
- package/dist/chunk-BRK4ODMI.js +60 -0
- package/dist/chunk-BRK4ODMI.js.map +1 -0
- package/dist/chunk-C6QPK5GG.js +111 -0
- package/dist/chunk-C6QPK5GG.js.map +1 -0
- package/dist/chunk-C7VW7C3F.js +117 -0
- package/dist/chunk-C7VW7C3F.js.map +1 -0
- package/dist/chunk-CDW777AI.js +621 -0
- package/dist/chunk-CDW777AI.js.map +1 -0
- package/dist/chunk-CULXMQJH.js +185 -0
- package/dist/chunk-CULXMQJH.js.map +1 -0
- package/dist/chunk-CXWFUJR2.js +1203 -0
- package/dist/chunk-CXWFUJR2.js.map +1 -0
- package/dist/chunk-DGXUHMOV.js +61 -0
- package/dist/chunk-DGXUHMOV.js.map +1 -0
- package/dist/chunk-DM2T26WE.js +61 -0
- package/dist/chunk-DM2T26WE.js.map +1 -0
- package/dist/chunk-DORBM6OB.js +81 -0
- package/dist/chunk-DORBM6OB.js.map +1 -0
- package/dist/chunk-DT5TVLJE.js +32 -0
- package/dist/chunk-DT5TVLJE.js.map +1 -0
- package/dist/chunk-EEQLFRUM.js +89 -0
- package/dist/chunk-EEQLFRUM.js.map +1 -0
- package/dist/chunk-EQINRHYR.js +672 -0
- package/dist/chunk-EQINRHYR.js.map +1 -0
- package/dist/chunk-ESSMF2FR.js +146 -0
- package/dist/chunk-ESSMF2FR.js.map +1 -0
- package/dist/chunk-ETOW6ACV.js +158 -0
- package/dist/chunk-ETOW6ACV.js.map +1 -0
- package/dist/chunk-FYIYMQ5N.js +221 -0
- package/dist/chunk-FYIYMQ5N.js.map +1 -0
- package/dist/chunk-G3AG3KZN.js +78 -0
- package/dist/chunk-G3AG3KZN.js.map +1 -0
- package/dist/chunk-GJR6D6KC.js +61 -0
- package/dist/chunk-GJR6D6KC.js.map +1 -0
- package/dist/chunk-GPGBSNKM.js +380 -0
- package/dist/chunk-GPGBSNKM.js.map +1 -0
- package/dist/chunk-H63EDPFJ.js +57 -0
- package/dist/chunk-H63EDPFJ.js.map +1 -0
- package/dist/chunk-HG2NKWR2.js +185 -0
- package/dist/chunk-HG2NKWR2.js.map +1 -0
- package/dist/chunk-HL4DB7TO.js +13 -0
- package/dist/chunk-HL4DB7TO.js.map +1 -0
- package/dist/chunk-HLBYLYRD.js +346 -0
- package/dist/chunk-HLBYLYRD.js.map +1 -0
- package/dist/chunk-HLXVTBF3.js +109 -0
- package/dist/chunk-HLXVTBF3.js.map +1 -0
- package/dist/chunk-IFFFR3MR.js +68 -0
- package/dist/chunk-IFFFR3MR.js.map +1 -0
- package/dist/chunk-ISY75RLM.js +1027 -0
- package/dist/chunk-ISY75RLM.js.map +1 -0
- package/dist/chunk-IZME7KW2.js +1886 -0
- package/dist/chunk-IZME7KW2.js.map +1 -0
- package/dist/chunk-J3BT33K7.js +720 -0
- package/dist/chunk-J3BT33K7.js.map +1 -0
- package/dist/chunk-J47FNDR7.js +113 -0
- package/dist/chunk-J47FNDR7.js.map +1 -0
- package/dist/chunk-JWPLJLDU.js +63 -0
- package/dist/chunk-JWPLJLDU.js.map +1 -0
- package/dist/chunk-K6WK37A6.js +865 -0
- package/dist/chunk-K6WK37A6.js.map +1 -0
- package/dist/chunk-KL4CP4SB.js +130 -0
- package/dist/chunk-KL4CP4SB.js.map +1 -0
- package/dist/chunk-KT4NEUNF.js +315 -0
- package/dist/chunk-KT4NEUNF.js.map +1 -0
- package/dist/chunk-KWBU5S5U.js +42 -0
- package/dist/chunk-KWBU5S5U.js.map +1 -0
- package/dist/chunk-L5RPWGFK.js +59 -0
- package/dist/chunk-L5RPWGFK.js.map +1 -0
- package/dist/chunk-L7WO3MZ4.js +128 -0
- package/dist/chunk-L7WO3MZ4.js.map +1 -0
- package/dist/chunk-LIRZNNUP.js +74 -0
- package/dist/chunk-LIRZNNUP.js.map +1 -0
- package/dist/chunk-LK6SGL53.js +22 -0
- package/dist/chunk-LK6SGL53.js.map +1 -0
- package/dist/chunk-LOBRX7VD.js +200 -0
- package/dist/chunk-LOBRX7VD.js.map +1 -0
- package/dist/chunk-LPSF4OQH.js +47 -0
- package/dist/chunk-LPSF4OQH.js.map +1 -0
- package/dist/chunk-LU3GQNDQ.js +152 -0
- package/dist/chunk-LU3GQNDQ.js.map +1 -0
- package/dist/chunk-M5KEYE5E.js +350 -0
- package/dist/chunk-M5KEYE5E.js.map +1 -0
- package/dist/chunk-M62O4P4T.js +41 -0
- package/dist/chunk-M62O4P4T.js.map +1 -0
- package/dist/chunk-MARWOCVP.js +48 -0
- package/dist/chunk-MARWOCVP.js.map +1 -0
- package/dist/chunk-MDDAA2AO.js +925 -0
- package/dist/chunk-MDDAA2AO.js.map +1 -0
- package/dist/chunk-MWGVGUIS.js +198 -0
- package/dist/chunk-MWGVGUIS.js.map +1 -0
- package/dist/chunk-N5AKDXAI.js +74 -0
- package/dist/chunk-N5AKDXAI.js.map +1 -0
- package/dist/chunk-NGAVDO7E.js +115 -0
- package/dist/chunk-NGAVDO7E.js.map +1 -0
- package/dist/chunk-NTTLPF7F.js +283 -0
- package/dist/chunk-NTTLPF7F.js.map +1 -0
- package/dist/chunk-ONRU4L2N.js +240 -0
- package/dist/chunk-ONRU4L2N.js.map +1 -0
- package/dist/chunk-ORZMT74A.js +209 -0
- package/dist/chunk-ORZMT74A.js.map +1 -0
- package/dist/chunk-OTAVQCSF.js +268 -0
- package/dist/chunk-OTAVQCSF.js.map +1 -0
- package/dist/chunk-PGK3VUHN.js +160 -0
- package/dist/chunk-PGK3VUHN.js.map +1 -0
- package/dist/chunk-Q6FETXJA.js +1362 -0
- package/dist/chunk-Q6FETXJA.js.map +1 -0
- package/dist/chunk-QANCTXQF.js +271 -0
- package/dist/chunk-QANCTXQF.js.map +1 -0
- package/dist/chunk-QCCCQT3O.js +189 -0
- package/dist/chunk-QCCCQT3O.js.map +1 -0
- package/dist/chunk-QDOSNLB4.js +1048 -0
- package/dist/chunk-QDOSNLB4.js.map +1 -0
- package/dist/chunk-QFQVZOGA.js +2168 -0
- package/dist/chunk-QFQVZOGA.js.map +1 -0
- package/dist/chunk-QPKFPHOO.js +178 -0
- package/dist/chunk-QPKFPHOO.js.map +1 -0
- package/dist/chunk-QSVPYQPG.js +268 -0
- package/dist/chunk-QSVPYQPG.js.map +1 -0
- package/dist/chunk-QWUUMMIK.js +3045 -0
- package/dist/chunk-QWUUMMIK.js.map +1 -0
- package/dist/chunk-QY2BHY5O.js +2378 -0
- package/dist/chunk-QY2BHY5O.js.map +1 -0
- package/dist/chunk-SCHEKPYH.js +349 -0
- package/dist/chunk-SCHEKPYH.js.map +1 -0
- package/dist/chunk-SCU65EZI.js +15 -0
- package/dist/chunk-SCU65EZI.js.map +1 -0
- package/dist/chunk-T4WRIV2C.js +170 -0
- package/dist/chunk-T4WRIV2C.js.map +1 -0
- package/dist/chunk-TKO4HZCK.js +1852 -0
- package/dist/chunk-TKO4HZCK.js.map +1 -0
- package/dist/chunk-TP4FZJIZ.js +93 -0
- package/dist/chunk-TP4FZJIZ.js.map +1 -0
- package/dist/chunk-TPB3I2AC.js +403 -0
- package/dist/chunk-TPB3I2AC.js.map +1 -0
- package/dist/chunk-TVVVQQAK.js +1431 -0
- package/dist/chunk-TVVVQQAK.js.map +1 -0
- package/dist/chunk-U4PV25RD.js +14 -0
- package/dist/chunk-U4PV25RD.js.map +1 -0
- package/dist/chunk-UCYSTFZR.js +284 -0
- package/dist/chunk-UCYSTFZR.js.map +1 -0
- package/dist/chunk-UHGBNIOS.js +205 -0
- package/dist/chunk-UHGBNIOS.js.map +1 -0
- package/dist/chunk-UIYZ5T3I.js +108 -0
- package/dist/chunk-UIYZ5T3I.js.map +1 -0
- package/dist/chunk-UV2FO7J4.js +747 -0
- package/dist/chunk-UV2FO7J4.js.map +1 -0
- package/dist/chunk-UZB5KHKX.js +63 -0
- package/dist/chunk-UZB5KHKX.js.map +1 -0
- package/dist/chunk-V3RXWQIE.js +626 -0
- package/dist/chunk-V3RXWQIE.js.map +1 -0
- package/dist/chunk-V4YC4LUK.js +444 -0
- package/dist/chunk-V4YC4LUK.js.map +1 -0
- package/dist/chunk-VEWZZM3H.js +133 -0
- package/dist/chunk-VEWZZM3H.js.map +1 -0
- package/dist/chunk-WWIQTB2Y.js +98 -0
- package/dist/chunk-WWIQTB2Y.js.map +1 -0
- package/dist/chunk-X7XN6YU4.js +24 -0
- package/dist/chunk-X7XN6YU4.js.map +1 -0
- package/dist/chunk-XKECPATV.js +202 -0
- package/dist/chunk-XKECPATV.js.map +1 -0
- package/dist/chunk-XYIK4LF6.js +75 -0
- package/dist/chunk-XYIK4LF6.js.map +1 -0
- package/dist/chunk-Y27UJK6V.js +39 -0
- package/dist/chunk-Y27UJK6V.js.map +1 -0
- package/dist/chunk-Y4Z4I6WK.js +9 -0
- package/dist/chunk-Y4Z4I6WK.js.map +1 -0
- package/dist/chunk-YAPUAHAY.js +10761 -0
- package/dist/chunk-YAPUAHAY.js.map +1 -0
- package/dist/chunk-YAZNBMNF.js +92 -0
- package/dist/chunk-YAZNBMNF.js.map +1 -0
- package/dist/chunk-YCN4BVDK.js +66 -0
- package/dist/chunk-YCN4BVDK.js.map +1 -0
- package/dist/chunk-YNCQ7E4M.js +388 -0
- package/dist/chunk-YNCQ7E4M.js.map +1 -0
- package/dist/chunk-YNI4S5WT.js +143 -0
- package/dist/chunk-YNI4S5WT.js.map +1 -0
- package/dist/chunk-YRMVARQP.js +406 -0
- package/dist/chunk-YRMVARQP.js.map +1 -0
- package/dist/chunk-Z5AAYHUC.js +79 -0
- package/dist/chunk-Z5AAYHUC.js.map +1 -0
- package/dist/chunk-Z5LAYHGJ.js +15 -0
- package/dist/chunk-Z5LAYHGJ.js.map +1 -0
- package/dist/chunk-ZJLY4QSU.js +823 -0
- package/dist/chunk-ZJLY4QSU.js.map +1 -0
- package/dist/chunk-ZKYI7UVO.js +276 -0
- package/dist/chunk-ZKYI7UVO.js.map +1 -0
- package/dist/chunk-ZPKBYX2F.js +297 -0
- package/dist/chunk-ZPKBYX2F.js.map +1 -0
- package/dist/chunking.d.ts +48 -0
- package/dist/chunking.js +11 -0
- package/dist/chunking.js.map +1 -0
- package/dist/cli.d.ts +1162 -0
- package/dist/cli.js +7187 -0
- package/dist/cli.js.map +1 -0
- package/dist/commitment-ledger.d.ts +83 -0
- package/dist/commitment-ledger.js +19 -0
- package/dist/commitment-ledger.js.map +1 -0
- package/dist/compression-optimizer.d.ts +37 -0
- package/dist/compression-optimizer.js +13 -0
- package/dist/compression-optimizer.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -0
- package/dist/cue-anchors.d.ts +50 -0
- package/dist/cue-anchors.js +15 -0
- package/dist/cue-anchors.js.map +1 -0
- package/dist/dashboard-runtime.d.ts +46 -0
- package/dist/dashboard-runtime.js +10 -0
- package/dist/dashboard-runtime.js.map +1 -0
- package/dist/day-summary.d.ts +6 -0
- package/dist/day-summary.js +10 -0
- package/dist/day-summary.js.map +1 -0
- package/dist/delinearize.d.ts +34 -0
- package/dist/delinearize.js +11 -0
- package/dist/delinearize.js.map +1 -0
- package/dist/embedding-fallback.d.ts +22 -0
- package/dist/embedding-fallback.js +8 -0
- package/dist/embedding-fallback.js.map +1 -0
- package/dist/engine-P26JFSVY.js +19 -0
- package/dist/engine-P26JFSVY.js.map +1 -0
- package/dist/entity-retrieval.d.ts +23 -0
- package/dist/entity-retrieval.js +24 -0
- package/dist/entity-retrieval.js.map +1 -0
- package/dist/evals.d.ts +282 -0
- package/dist/evals.js +32 -0
- package/dist/evals.js.map +1 -0
- package/dist/explicit-capture.d.ts +60 -0
- package/dist/explicit-capture.js +23 -0
- package/dist/explicit-capture.js.map +1 -0
- package/dist/extraction.d.ts +141 -0
- package/dist/extraction.js +22 -0
- package/dist/extraction.js.map +1 -0
- package/dist/fallback-llm.d.ts +95 -0
- package/dist/fallback-llm.js +12 -0
- package/dist/fallback-llm.js.map +1 -0
- package/dist/graph-dashboard-diff.d.ts +12 -0
- package/dist/graph-dashboard-diff.js +8 -0
- package/dist/graph-dashboard-diff.js.map +1 -0
- package/dist/graph-dashboard-key.d.ts +5 -0
- package/dist/graph-dashboard-key.js +7 -0
- package/dist/graph-dashboard-key.js.map +1 -0
- package/dist/graph-dashboard-parser.d.ts +20 -0
- package/dist/graph-dashboard-parser.js +8 -0
- package/dist/graph-dashboard-parser.js.map +1 -0
- package/dist/graph.d.ts +157 -0
- package/dist/graph.js +27 -0
- package/dist/graph.js.map +1 -0
- package/dist/harmonic-retrieval.d.ts +27 -0
- package/dist/harmonic-retrieval.js +12 -0
- package/dist/harmonic-retrieval.js.map +1 -0
- package/dist/himem.d.ts +23 -0
- package/dist/himem.js +7 -0
- package/dist/himem.js.map +1 -0
- package/dist/hygiene.d.ts +24 -0
- package/dist/hygiene.js +9 -0
- package/dist/hygiene.js.map +1 -0
- package/dist/identity-continuity.d.ts +17 -0
- package/dist/identity-continuity.js +19 -0
- package/dist/identity-continuity.js.map +1 -0
- package/dist/importance.d.ts +25 -0
- package/dist/importance.js +11 -0
- package/dist/importance.js.map +1 -0
- package/dist/index.d.ts +923 -0
- package/dist/index.js +2512 -0
- package/dist/index.js.map +1 -0
- package/dist/intent.d.ts +8 -0
- package/dist/intent.js +13 -0
- package/dist/intent.js.map +1 -0
- package/dist/json-extract.d.ts +14 -0
- package/dist/json-extract.js +9 -0
- package/dist/json-extract.js.map +1 -0
- package/dist/json-store.d.ts +5 -0
- package/dist/json-store.js +11 -0
- package/dist/json-store.js.map +1 -0
- package/dist/legacy-hook-compat.d.ts +3 -0
- package/dist/legacy-hook-compat.js +35 -0
- package/dist/legacy-hook-compat.js.map +1 -0
- package/dist/lifecycle.d.ts +52 -0
- package/dist/lifecycle.js +21 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/local-llm.d.ts +154 -0
- package/dist/local-llm.js +10 -0
- package/dist/local-llm.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.js +9 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory-action-policy.d.ts +13 -0
- package/dist/memory-action-policy.js +7 -0
- package/dist/memory-action-policy.js.map +1 -0
- package/dist/memory-cache.d.ts +35 -0
- package/dist/memory-cache.js +37 -0
- package/dist/memory-cache.js.map +1 -0
- package/dist/memory-lifecycle-ledger-utils.d.ts +13 -0
- package/dist/memory-lifecycle-ledger-utils.js +23 -0
- package/dist/memory-lifecycle-ledger-utils.js.map +1 -0
- package/dist/memory-projection-format.d.ts +4 -0
- package/dist/memory-projection-format.js +9 -0
- package/dist/memory-projection-format.js.map +1 -0
- package/dist/memory-projection-store-NxMkbocT.d.ts +221 -0
- package/dist/memory-projection-store.d.ts +3 -0
- package/dist/memory-projection-store.js +31 -0
- package/dist/memory-projection-store.js.map +1 -0
- package/dist/model-registry.d.ts +60 -0
- package/dist/model-registry.js +8 -0
- package/dist/model-registry.js.map +1 -0
- package/dist/native-knowledge.d.ts +94 -0
- package/dist/native-knowledge.js +26 -0
- package/dist/native-knowledge.js.map +1 -0
- package/dist/negative.d.ts +26 -0
- package/dist/negative.js +8 -0
- package/dist/negative.js.map +1 -0
- package/dist/objective-state-writers.d.ts +22 -0
- package/dist/objective-state-writers.js +313 -0
- package/dist/objective-state-writers.js.map +1 -0
- package/dist/objective-state.d.ts +75 -0
- package/dist/objective-state.js +17 -0
- package/dist/objective-state.js.map +1 -0
- package/dist/openai-chat-compat.d.ts +13 -0
- package/dist/openai-chat-compat.js +11 -0
- package/dist/openai-chat-compat.js.map +1 -0
- package/dist/operator-toolkit.d.ts +304 -0
- package/dist/operator-toolkit.js +41 -0
- package/dist/operator-toolkit.js.map +1 -0
- package/dist/opik-exporter.d.ts +72 -0
- package/dist/opik-exporter.js +361 -0
- package/dist/opik-exporter.js.map +1 -0
- package/dist/orchestrator-zTa-Qo-1.d.ts +1104 -0
- package/dist/orchestrator.d.ts +21 -0
- package/dist/orchestrator.js +145 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/policy-runtime.d.ts +37 -0
- package/dist/policy-runtime.js +13 -0
- package/dist/policy-runtime.js.map +1 -0
- package/dist/port-C1GZFv8h.d.ts +41 -0
- package/dist/profiling.d.ts +80 -0
- package/dist/profiling.js +10 -0
- package/dist/profiling.js.map +1 -0
- package/dist/qmd-recall-cache.d.ts +29 -0
- package/dist/qmd-recall-cache.js +13 -0
- package/dist/qmd-recall-cache.js.map +1 -0
- package/dist/qmd.d.ts +105 -0
- package/dist/qmd.js +13 -0
- package/dist/qmd.js.map +1 -0
- package/dist/recall-qos.d.ts +33 -0
- package/dist/recall-qos.js +10 -0
- package/dist/recall-qos.js.map +1 -0
- package/dist/recall-query-policy.d.ts +20 -0
- package/dist/recall-query-policy.js +11 -0
- package/dist/recall-query-policy.js.map +1 -0
- package/dist/recall-state.d.ts +113 -0
- package/dist/recall-state.js +12 -0
- package/dist/recall-state.js.map +1 -0
- package/dist/recall-tokenization.d.ts +4 -0
- package/dist/recall-tokenization.js +9 -0
- package/dist/recall-tokenization.js.map +1 -0
- package/dist/reconstruct.d.ts +16 -0
- package/dist/reconstruct.js +7 -0
- package/dist/reconstruct.js.map +1 -0
- package/dist/release-changelog.d.ts +7 -0
- package/dist/release-changelog.js +30 -0
- package/dist/release-changelog.js.map +1 -0
- package/dist/relevance.d.ts +18 -0
- package/dist/relevance.js +8 -0
- package/dist/relevance.js.map +1 -0
- package/dist/rerank.d.ts +57 -0
- package/dist/rerank.js +11 -0
- package/dist/rerank.js.map +1 -0
- package/dist/resolve-provider-secret.d.ts +16 -0
- package/dist/resolve-provider-secret.js +11 -0
- package/dist/resolve-provider-secret.js.map +1 -0
- package/dist/resume-bundles.d.ts +66 -0
- package/dist/resume-bundles.js +27 -0
- package/dist/resume-bundles.js.map +1 -0
- package/dist/retrieval-agents.d.ts +129 -0
- package/dist/retrieval-agents.js +23 -0
- package/dist/retrieval-agents.js.map +1 -0
- package/dist/retrieval.d.ts +19 -0
- package/dist/retrieval.js +10 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/sanitize.d.ts +9 -0
- package/dist/sanitize.js +9 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/schemas.d.ts +688 -0
- package/dist/schemas.js +51 -0
- package/dist/schemas.js.map +1 -0
- package/dist/sdk-compat.d.ts +21 -0
- package/dist/sdk-compat.js +28 -0
- package/dist/sdk-compat.js.map +1 -0
- package/dist/semantic-consolidation.d.ts +42 -0
- package/dist/semantic-consolidation.js +12 -0
- package/dist/semantic-consolidation.js.map +1 -0
- package/dist/semantic-rule-promotion.d.ts +28 -0
- package/dist/semantic-rule-promotion.js +17 -0
- package/dist/semantic-rule-promotion.js.map +1 -0
- package/dist/semantic-rule-verifier.d.ts +19 -0
- package/dist/semantic-rule-verifier.js +18 -0
- package/dist/semantic-rule-verifier.js.map +1 -0
- package/dist/session-integrity.d.ts +67 -0
- package/dist/session-integrity.js +11 -0
- package/dist/session-integrity.js.map +1 -0
- package/dist/session-observer-bands.d.ts +6 -0
- package/dist/session-observer-bands.js +9 -0
- package/dist/session-observer-bands.js.map +1 -0
- package/dist/session-observer-state.d.ts +40 -0
- package/dist/session-observer-state.js +11 -0
- package/dist/session-observer-state.js.map +1 -0
- package/dist/signal.d.ts +6 -0
- package/dist/signal.js +9 -0
- package/dist/signal.js.map +1 -0
- package/dist/storage.d.ts +453 -0
- package/dist/storage.js +24 -0
- package/dist/storage.js.map +1 -0
- package/dist/store-contract.d.ts +10 -0
- package/dist/store-contract.js +21 -0
- package/dist/store-contract.js.map +1 -0
- package/dist/summarizer.d.ts +35 -0
- package/dist/summarizer.js +17 -0
- package/dist/summarizer.js.map +1 -0
- package/dist/summary-snapshot.d.ts +8 -0
- package/dist/summary-snapshot.js +13 -0
- package/dist/summary-snapshot.js.map +1 -0
- package/dist/temporal-index.d.ts +139 -0
- package/dist/temporal-index.js +29 -0
- package/dist/temporal-index.js.map +1 -0
- package/dist/threading.d.ts +62 -0
- package/dist/threading.js +8 -0
- package/dist/threading.js.map +1 -0
- package/dist/tier-migration.d.ts +44 -0
- package/dist/tier-migration.js +7 -0
- package/dist/tier-migration.js.map +1 -0
- package/dist/tier-routing.d.ts +21 -0
- package/dist/tier-routing.js +10 -0
- package/dist/tier-routing.js.map +1 -0
- package/dist/tmt.d.ts +79 -0
- package/dist/tmt.js +29 -0
- package/dist/tmt.js.map +1 -0
- package/dist/tokens.d.ts +24 -0
- package/dist/tokens.js +21 -0
- package/dist/tokens.js.map +1 -0
- package/dist/topics.d.ts +29 -0
- package/dist/topics.js +9 -0
- package/dist/topics.js.map +1 -0
- package/dist/transcript.d.ts +171 -0
- package/dist/transcript.js +9 -0
- package/dist/transcript.js.map +1 -0
- package/dist/trust-zones.d.ts +170 -0
- package/dist/trust-zones.js +32 -0
- package/dist/trust-zones.js.map +1 -0
- package/dist/types.d.ts +1243 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utility-learner.d.ts +59 -0
- package/dist/utility-learner.js +17 -0
- package/dist/utility-learner.js.map +1 -0
- package/dist/utility-runtime.d.ts +21 -0
- package/dist/utility-runtime.js +16 -0
- package/dist/utility-runtime.js.map +1 -0
- package/dist/utility-telemetry.d.ts +68 -0
- package/dist/utility-telemetry.js +17 -0
- package/dist/utility-telemetry.js.map +1 -0
- package/dist/verified-recall.d.ts +17 -0
- package/dist/verified-recall.js +19 -0
- package/dist/verified-recall.js.map +1 -0
- package/dist/version-utils.d.ts +4 -0
- package/dist/version-utils.js +7 -0
- package/dist/version-utils.js.map +1 -0
- package/dist/work-product-ledger.d.ts +65 -0
- package/dist/work-product-ledger.js +18 -0
- package/dist/work-product-ledger.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// src/delinearize.ts
|
|
2
|
+
var PRONOUN_MAP = {
|
|
3
|
+
"he": { types: ["person"], possessive: false, group: "masc" },
|
|
4
|
+
"him": { types: ["person"], possessive: false, group: "masc" },
|
|
5
|
+
"his": { types: ["person"], possessive: true, group: "masc" },
|
|
6
|
+
"she": { types: ["person"], possessive: false, group: "fem" },
|
|
7
|
+
// "her" omitted — ambiguous between object ("saw her") and possessive ("her stack")
|
|
8
|
+
"they": { types: ["company", "project", "other"], possessive: false, group: "they" },
|
|
9
|
+
"them": { types: ["company", "project", "other"], possessive: false, group: "they" },
|
|
10
|
+
"their": { types: ["company", "project", "other"], possessive: true, group: "they" },
|
|
11
|
+
"it": { types: ["project", "tool", "company"], possessive: false, group: "it" },
|
|
12
|
+
"its": { types: ["project", "tool", "company"], possessive: true, group: "it" }
|
|
13
|
+
};
|
|
14
|
+
function resolveCoReferences(fact, entities) {
|
|
15
|
+
if (entities.length === 0) return fact;
|
|
16
|
+
const matchingEntries = [];
|
|
17
|
+
const typeToGroups = /* @__PURE__ */ new Map();
|
|
18
|
+
for (const [pronoun, info] of Object.entries(PRONOUN_MAP)) {
|
|
19
|
+
const regex = new RegExp(`\\b${pronoun}\\b(?![''\u2019])`, "gi");
|
|
20
|
+
if (!regex.test(fact)) continue;
|
|
21
|
+
const candidates = entities.filter((e) => info.types.includes(e.type));
|
|
22
|
+
if (candidates.length !== 1) continue;
|
|
23
|
+
matchingEntries.push({ pronoun, info, entity: candidates[0] });
|
|
24
|
+
const matchedType = candidates[0].type;
|
|
25
|
+
if (!typeToGroups.has(matchedType)) typeToGroups.set(matchedType, /* @__PURE__ */ new Set());
|
|
26
|
+
typeToGroups.get(matchedType).add(info.group);
|
|
27
|
+
}
|
|
28
|
+
const ambiguousTypes = /* @__PURE__ */ new Set();
|
|
29
|
+
for (const [type, groups] of typeToGroups) {
|
|
30
|
+
const matchedEntities = entities.filter((e) => e.type === type);
|
|
31
|
+
if (matchedEntities.length === 1 && groups.size > 1) {
|
|
32
|
+
ambiguousTypes.add(type);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const safeEntries = matchingEntries.filter(
|
|
36
|
+
(e) => !e.info.types.some((t) => ambiguousTypes.has(t))
|
|
37
|
+
);
|
|
38
|
+
if (safeEntries.length === 0) return fact;
|
|
39
|
+
let result = fact;
|
|
40
|
+
const placeholders = [];
|
|
41
|
+
for (const { pronoun, info, entity } of safeEntries) {
|
|
42
|
+
const placeholder = `\0ENTITY_${placeholders.length}\0`;
|
|
43
|
+
const safeEntityName = entity.name.replace(/\$/g, "$$$$");
|
|
44
|
+
const replacement = info.possessive ? `${safeEntityName}'s` : safeEntityName;
|
|
45
|
+
placeholders.push(replacement);
|
|
46
|
+
result = result.replace(
|
|
47
|
+
new RegExp(`\\b${pronoun}\\b(?![''\u2019])`, "gi"),
|
|
48
|
+
placeholder
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
for (let i = 0; i < placeholders.length; i++) {
|
|
52
|
+
result = result.replaceAll(`\0ENTITY_${i}\0`, placeholders[i]);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
function formatDate(d) {
|
|
57
|
+
return d.toISOString().slice(0, 10);
|
|
58
|
+
}
|
|
59
|
+
var TEMPORAL_PATTERNS = [
|
|
60
|
+
{
|
|
61
|
+
pattern: /\bearlier today\b/gi,
|
|
62
|
+
replace: (now) => `earlier on ${formatDate(now)}`
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
pattern: /\bthis morning\b/gi,
|
|
66
|
+
replace: (now) => `on the morning of ${formatDate(now)}`
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
pattern: /\bthis afternoon\b/gi,
|
|
70
|
+
replace: (now) => `on the afternoon of ${formatDate(now)}`
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
pattern: /\bthis evening\b/gi,
|
|
74
|
+
replace: (now) => `on the evening of ${formatDate(now)}`
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
pattern: /\blast week\b/gi,
|
|
78
|
+
replace: (now) => {
|
|
79
|
+
const d = new Date(now);
|
|
80
|
+
d.setUTCDate(d.getUTCDate() - 7);
|
|
81
|
+
return `around ${formatDate(d)}`;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
pattern: /\blast month\b/gi,
|
|
86
|
+
replace: (now) => {
|
|
87
|
+
const d = new Date(now);
|
|
88
|
+
d.setUTCDate(1);
|
|
89
|
+
d.setUTCMonth(d.getUTCMonth() - 1);
|
|
90
|
+
return `around ${formatDate(d)}`;
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
// Simple patterns last
|
|
94
|
+
{
|
|
95
|
+
pattern: /\byesterday\b/gi,
|
|
96
|
+
replace: (now) => {
|
|
97
|
+
const d = new Date(now);
|
|
98
|
+
d.setUTCDate(d.getUTCDate() - 1);
|
|
99
|
+
return `on ${formatDate(d)}`;
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
pattern: /\btoday\b/gi,
|
|
104
|
+
replace: (now) => `on ${formatDate(now)}`
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
pattern: /\btomorrow\b/gi,
|
|
108
|
+
replace: (now) => {
|
|
109
|
+
const d = new Date(now);
|
|
110
|
+
d.setUTCDate(d.getUTCDate() + 1);
|
|
111
|
+
return `on ${formatDate(d)}`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
];
|
|
115
|
+
function anchorTemporalExpressions(fact, now) {
|
|
116
|
+
let result = fact;
|
|
117
|
+
for (const { pattern, replace } of TEMPORAL_PATTERNS) {
|
|
118
|
+
result = result.replace(pattern, replace(now));
|
|
119
|
+
}
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
function delinearize(factContent, entities, timestamp) {
|
|
123
|
+
let result = anchorTemporalExpressions(factContent, timestamp);
|
|
124
|
+
result = resolveCoReferences(result, entities);
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export {
|
|
129
|
+
resolveCoReferences,
|
|
130
|
+
anchorTemporalExpressions,
|
|
131
|
+
delinearize
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=chunk-VEWZZM3H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/delinearize.ts"],"sourcesContent":["/**\n * De-linearization transform (SimpleMem-inspired).\n *\n * Converts extracted memories from context-dependent to context-independent\n * by resolving coreferences and anchoring temporal expressions.\n */\n\nimport type { EntityMention } from \"./types.js\";\n\n// possessive: true means the pronoun is a possessive form (his/her/its/their)\n// and should be replaced with \"entity's\" form.\n// group: pronouns in the same group are coreferential (he/him/his all refer to the same person)\nconst PRONOUN_MAP: Record<string, { types: string[]; possessive: boolean; group: string }> = {\n \"he\": { types: [\"person\"], possessive: false, group: \"masc\" },\n \"him\": { types: [\"person\"], possessive: false, group: \"masc\" },\n \"his\": { types: [\"person\"], possessive: true, group: \"masc\" },\n \"she\": { types: [\"person\"], possessive: false, group: \"fem\" },\n // \"her\" omitted — ambiguous between object (\"saw her\") and possessive (\"her stack\")\n \"they\": { types: [\"company\", \"project\", \"other\"], possessive: false, group: \"they\" },\n \"them\": { types: [\"company\", \"project\", \"other\"], possessive: false, group: \"they\" },\n \"their\": { types: [\"company\", \"project\", \"other\"], possessive: true, group: \"they\" },\n \"it\": { types: [\"project\", \"tool\", \"company\"], possessive: false, group: \"it\" },\n \"its\": { types: [\"project\", \"tool\", \"company\"], possessive: true, group: \"it\" },\n};\n\n/**\n * Replace pronouns with entity names when there's exactly one\n * matching entity of the right type (unambiguous resolution).\n *\n * Possessive pronouns (his/her/its/their) become \"entity's\".\n * No verb agreement is attempted — it's too fragile with adverbs/modals.\n *\n * Guards against:\n * - Multiple pronouns of the same entity type → skip all (ambiguous referent)\n * - Entity names containing pronoun substrings → placeholder-based two-pass\n * - Entity names containing $ → escaped before replacement\n */\nexport function resolveCoReferences(fact: string, entities: EntityMention[]): string {\n if (entities.length === 0) return fact;\n\n // First pass: collect which pronoun entries match and which entity type they target.\n // If multiple distinct referent groups resolve to the same entity type, skip them all\n // (e.g., \"She told him\" has groups \"fem\" + \"masc\" both → person → ambiguous).\n // Coreferential pairs like \"he\"+\"his\" share a group (\"masc\") and are NOT ambiguous.\n const matchingEntries: Array<{ pronoun: string; info: { types: string[]; possessive: boolean; group: string }; entity: EntityMention }> = [];\n const typeToGroups = new Map<string, Set<string>>();\n\n for (const [pronoun, info] of Object.entries(PRONOUN_MAP)) {\n // Negative lookahead for apostrophe prevents matching contractions (He's, It's, They're)\n const regex = new RegExp(`\\\\b${pronoun}\\\\b(?![''\\u2019])`, \"gi\");\n if (!regex.test(fact)) continue;\n\n const candidates = entities.filter((e) => info.types.includes(e.type));\n if (candidates.length !== 1) continue;\n\n matchingEntries.push({ pronoun, info, entity: candidates[0] });\n\n // Track which referent groups target the matched entity's actual type (not all candidate types)\n const matchedType = candidates[0].type;\n if (!typeToGroups.has(matchedType)) typeToGroups.set(matchedType, new Set());\n typeToGroups.get(matchedType)!.add(info.group);\n }\n\n // Determine which entity types have ambiguous multi-group references\n const ambiguousTypes = new Set<string>();\n for (const [type, groups] of typeToGroups) {\n const matchedEntities = entities.filter((e) => e.type === type);\n if (matchedEntities.length === 1 && groups.size > 1) {\n ambiguousTypes.add(type);\n }\n }\n\n // Filter out entries whose entity type is ambiguous\n const safeEntries = matchingEntries.filter(\n (e) => !e.info.types.some((t) => ambiguousTypes.has(t)),\n );\n\n if (safeEntries.length === 0) return fact;\n\n // Two-pass replacement using placeholders to prevent entity names\n // from being re-matched by subsequent pronoun patterns.\n let result = fact;\n const placeholders: string[] = [];\n\n for (const { pronoun, info, entity } of safeEntries) {\n const placeholder = `\\x00ENTITY_${placeholders.length}\\x00`;\n const safeEntityName = entity.name.replace(/\\$/g, \"$$$$\");\n const replacement = info.possessive ? `${safeEntityName}'s` : safeEntityName;\n placeholders.push(replacement);\n result = result.replace(\n new RegExp(`\\\\b${pronoun}\\\\b(?![''\\u2019])`, \"gi\"),\n placeholder,\n );\n }\n\n // Restore placeholders with actual entity names\n for (let i = 0; i < placeholders.length; i++) {\n result = result.replaceAll(`\\x00ENTITY_${i}\\x00`, placeholders[i]);\n }\n\n return result;\n}\n\nfunction formatDate(d: Date): string {\n return d.toISOString().slice(0, 10);\n}\n\nconst TEMPORAL_PATTERNS: Array<{\n pattern: RegExp;\n replace: (now: Date) => string;\n// Compound patterns first (longer matches before shorter to avoid partial replacement)\n}> = [\n {\n pattern: /\\bearlier today\\b/gi,\n replace: (now) => `earlier on ${formatDate(now)}`,\n },\n {\n pattern: /\\bthis morning\\b/gi,\n replace: (now) => `on the morning of ${formatDate(now)}`,\n },\n {\n pattern: /\\bthis afternoon\\b/gi,\n replace: (now) => `on the afternoon of ${formatDate(now)}`,\n },\n {\n pattern: /\\bthis evening\\b/gi,\n replace: (now) => `on the evening of ${formatDate(now)}`,\n },\n {\n pattern: /\\blast week\\b/gi,\n replace: (now) => {\n const d = new Date(now);\n d.setUTCDate(d.getUTCDate() - 7);\n return `around ${formatDate(d)}`;\n },\n },\n {\n pattern: /\\blast month\\b/gi,\n replace: (now) => {\n const d = new Date(now);\n d.setUTCDate(1); // avoid overflow (e.g. Mar 31 → Feb 31 → Mar 3)\n d.setUTCMonth(d.getUTCMonth() - 1);\n return `around ${formatDate(d)}`;\n },\n },\n // Simple patterns last\n {\n pattern: /\\byesterday\\b/gi,\n replace: (now) => {\n const d = new Date(now);\n d.setUTCDate(d.getUTCDate() - 1);\n return `on ${formatDate(d)}`;\n },\n },\n {\n pattern: /\\btoday\\b/gi,\n replace: (now) => `on ${formatDate(now)}`,\n },\n {\n pattern: /\\btomorrow\\b/gi,\n replace: (now) => {\n const d = new Date(now);\n d.setUTCDate(d.getUTCDate() + 1);\n return `on ${formatDate(d)}`;\n },\n },\n];\n\n/**\n * Replace relative temporal expressions with absolute ISO-8601 dates.\n */\nexport function anchorTemporalExpressions(fact: string, now: Date): string {\n let result = fact;\n for (const { pattern, replace } of TEMPORAL_PATTERNS) {\n result = result.replace(pattern, replace(now));\n }\n return result;\n}\n\n/**\n * Full de-linearization pipeline: temporal anchoring first, then coreference.\n * Order matters: entity names may contain temporal words (e.g., \"project-tomorrow\")\n * which would be corrupted if temporal anchoring ran after coreference insertion.\n */\nexport function delinearize(\n factContent: string,\n entities: EntityMention[],\n timestamp: Date,\n): string {\n let result = anchorTemporalExpressions(factContent, timestamp);\n result = resolveCoReferences(result, entities);\n return result;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// src/intent.ts
|
|
2
|
+
var GOAL_PATTERNS = [
|
|
3
|
+
{ re: /\b(debug(?:s|ged|ging)?|fix(?:es|ed|ing)?|error(?:s)?|incident(?:s)?|outage(?:s)?|failure(?:s)?)\b/i, goal: "stabilize" },
|
|
4
|
+
{ re: /\b(deploy(?:s|ed|ing)?|release(?:s|d|ing)?|ship(?:s|ped|ping)?|publish(?:es|ed|ing)?)\b/i, goal: "release" },
|
|
5
|
+
{ re: /\b(plan(?:s|ned|ning)?|roadmap(?:s)?|strateg(?:y|ies)|design(?:s|ed|ing)?)\b/i, goal: "plan" },
|
|
6
|
+
{ re: /\b(review(?:s|ed|ing)?|audit(?:s|ed|ing)?|security|hardening)\b/i, goal: "review" },
|
|
7
|
+
{ re: /\b(sales|deal|customer|client|prospect)\b/i, goal: "close_deal" }
|
|
8
|
+
];
|
|
9
|
+
var ACTION_PATTERNS = [
|
|
10
|
+
{ re: /\b(review(?:s|ed|ing)?|audit(?:s|ed|ing)?|inspect(?:s|ed|ing)?|check(?:s|ed|ing)?)\b/i, action: "review" },
|
|
11
|
+
{ re: /\b(plan(?:s|ned|ning)?|design(?:s|ed|ing)?|brainstorm(?:s|ed|ing)?|spec(?:s)?)\b/i, action: "plan" },
|
|
12
|
+
{ re: /\b(implement(?:s|ed|ing)?|build(?:s|ing)?|built|code(?:s|d|ing)?|patch(?:es|ed|ing)?|fix(?:es|ed|ing)?)\b/i, action: "execute" },
|
|
13
|
+
{ re: /\b(summariz(?:e|es|ed|ing)|recap(?:s|ped|ping)?|what happened|timeline)\b/i, action: "summarize" },
|
|
14
|
+
{ re: /\b(decid(?:e|es|ed|ing)|decision(?:s)?|cho(?:ose|oses|osing)|chose|chosen)\b/i, action: "decide" }
|
|
15
|
+
];
|
|
16
|
+
var ENTITY_PATTERNS = [
|
|
17
|
+
{ re: /\b(pr|pull request|branch|repo|github|ci|workflow)\b/i, entityType: "repo" },
|
|
18
|
+
{ re: /\b(discord|slack|channel|gateway|agent)\b/i, entityType: "ops" },
|
|
19
|
+
{ re: /\b(customer|client|deal|lead|account)\b/i, entityType: "client" },
|
|
20
|
+
{ re: /\b(model|llm|qmd|embedding|retrieval|memory)\b/i, entityType: "ai" },
|
|
21
|
+
{ re: /\b(doc|readme|docs|changelog)\b/i, entityType: "docs" }
|
|
22
|
+
];
|
|
23
|
+
function normalizeTextInput(input) {
|
|
24
|
+
return typeof input === "string" ? input : "";
|
|
25
|
+
}
|
|
26
|
+
function inferIntentFromText(text) {
|
|
27
|
+
const safeText = normalizeTextInput(text);
|
|
28
|
+
const goal = GOAL_PATTERNS.find((p) => p.re.test(safeText))?.goal ?? "unknown";
|
|
29
|
+
const actionType = ACTION_PATTERNS.find((p) => p.re.test(safeText))?.action ?? "unknown";
|
|
30
|
+
const entityTypes = Array.from(
|
|
31
|
+
new Set(ENTITY_PATTERNS.filter((p) => p.re.test(safeText)).map((p) => p.entityType))
|
|
32
|
+
);
|
|
33
|
+
return {
|
|
34
|
+
goal,
|
|
35
|
+
actionType,
|
|
36
|
+
entityTypes
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function intentCompatibilityScore(queryIntent, memoryIntent) {
|
|
40
|
+
const queryHasSignal = queryIntent.goal !== "unknown" || queryIntent.actionType !== "unknown" || queryIntent.entityTypes.length > 0;
|
|
41
|
+
const memoryHasSignal = memoryIntent.goal !== "unknown" || memoryIntent.actionType !== "unknown" || memoryIntent.entityTypes.length > 0;
|
|
42
|
+
if (!queryHasSignal || !memoryHasSignal) return 0;
|
|
43
|
+
let score = 0;
|
|
44
|
+
if (queryIntent.goal !== "unknown" && memoryIntent.goal !== "unknown" && queryIntent.goal === memoryIntent.goal) {
|
|
45
|
+
score += 0.5;
|
|
46
|
+
}
|
|
47
|
+
if (queryIntent.actionType !== "unknown" && memoryIntent.actionType !== "unknown" && queryIntent.actionType === memoryIntent.actionType) {
|
|
48
|
+
score += 0.3;
|
|
49
|
+
}
|
|
50
|
+
const overlap = queryIntent.entityTypes.filter((et) => memoryIntent.entityTypes.includes(et)).length;
|
|
51
|
+
if (overlap > 0) {
|
|
52
|
+
const denom = Math.max(queryIntent.entityTypes.length, memoryIntent.entityTypes.length, 1);
|
|
53
|
+
score += 0.2 * (overlap / denom);
|
|
54
|
+
}
|
|
55
|
+
return Math.max(0, Math.min(1, score));
|
|
56
|
+
}
|
|
57
|
+
function planRecallMode(prompt) {
|
|
58
|
+
const p = normalizeTextInput(prompt).trim();
|
|
59
|
+
let ackCandidate = p;
|
|
60
|
+
while (ackCandidate.length > 0) {
|
|
61
|
+
const ch = ackCandidate.charCodeAt(ackCandidate.length - 1);
|
|
62
|
+
const isDigit = ch >= 48 && ch <= 57;
|
|
63
|
+
const isUpper = ch >= 65 && ch <= 90;
|
|
64
|
+
const isLower = ch >= 97 && ch <= 122;
|
|
65
|
+
if (isDigit || isUpper || isLower) break;
|
|
66
|
+
ackCandidate = ackCandidate.slice(0, -1);
|
|
67
|
+
}
|
|
68
|
+
ackCandidate = ackCandidate.trim();
|
|
69
|
+
if (p.length === 0) return "no_recall";
|
|
70
|
+
if (/\b(timeline|sequence|history|what happened|chain of events|root cause)\b/i.test(p)) {
|
|
71
|
+
return "graph_mode";
|
|
72
|
+
}
|
|
73
|
+
if (p.length <= 18 && /^(ok|okay|kk|thanks|thx|got it|sounds good|yep|yes|nope|no|done|cool|works)$/i.test(ackCandidate)) {
|
|
74
|
+
return "no_recall";
|
|
75
|
+
}
|
|
76
|
+
if (/\b(previous|earlier|remember|last time|did we|what did we decide|context|summarize|summary|recap|key points|decision)\b/i.test(p) || /\?$/.test(p) || /^(what|why|how|when|where|who|which)\b/i.test(p.toLowerCase())) {
|
|
77
|
+
return "full";
|
|
78
|
+
}
|
|
79
|
+
if (p.length <= 100 && /^(check|reload|restart|run|verify|show|status|sync|update|open|close|set|enable|disable|fix|patch)\b/i.test(p)) {
|
|
80
|
+
return "minimal";
|
|
81
|
+
}
|
|
82
|
+
return "full";
|
|
83
|
+
}
|
|
84
|
+
function hasBroadGraphIntent(prompt) {
|
|
85
|
+
const p = normalizeTextInput(prompt).trim().toLowerCase();
|
|
86
|
+
if (!p) return false;
|
|
87
|
+
return /\b(what changed|how did we get here|why did this happen|what led to|cause chain|dependency chain|regression chain|failure chain)\b/i.test(
|
|
88
|
+
p
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export {
|
|
93
|
+
inferIntentFromText,
|
|
94
|
+
intentCompatibilityScore,
|
|
95
|
+
planRecallMode,
|
|
96
|
+
hasBroadGraphIntent
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=chunk-WWIQTB2Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/intent.ts"],"sourcesContent":["import type { MemoryIntent, RecallPlanMode } from \"./types.js\";\n\nconst GOAL_PATTERNS: Array<{ re: RegExp; goal: string }> = [\n { re: /\\b(debug(?:s|ged|ging)?|fix(?:es|ed|ing)?|error(?:s)?|incident(?:s)?|outage(?:s)?|failure(?:s)?)\\b/i, goal: \"stabilize\" },\n { re: /\\b(deploy(?:s|ed|ing)?|release(?:s|d|ing)?|ship(?:s|ped|ping)?|publish(?:es|ed|ing)?)\\b/i, goal: \"release\" },\n { re: /\\b(plan(?:s|ned|ning)?|roadmap(?:s)?|strateg(?:y|ies)|design(?:s|ed|ing)?)\\b/i, goal: \"plan\" },\n { re: /\\b(review(?:s|ed|ing)?|audit(?:s|ed|ing)?|security|hardening)\\b/i, goal: \"review\" },\n { re: /\\b(sales|deal|customer|client|prospect)\\b/i, goal: \"close_deal\" },\n];\n\nconst ACTION_PATTERNS: Array<{ re: RegExp; action: string }> = [\n { re: /\\b(review(?:s|ed|ing)?|audit(?:s|ed|ing)?|inspect(?:s|ed|ing)?|check(?:s|ed|ing)?)\\b/i, action: \"review\" },\n { re: /\\b(plan(?:s|ned|ning)?|design(?:s|ed|ing)?|brainstorm(?:s|ed|ing)?|spec(?:s)?)\\b/i, action: \"plan\" },\n { re: /\\b(implement(?:s|ed|ing)?|build(?:s|ing)?|built|code(?:s|d|ing)?|patch(?:es|ed|ing)?|fix(?:es|ed|ing)?)\\b/i, action: \"execute\" },\n { re: /\\b(summariz(?:e|es|ed|ing)|recap(?:s|ped|ping)?|what happened|timeline)\\b/i, action: \"summarize\" },\n { re: /\\b(decid(?:e|es|ed|ing)|decision(?:s)?|cho(?:ose|oses|osing)|chose|chosen)\\b/i, action: \"decide\" },\n];\n\nconst ENTITY_PATTERNS: Array<{ re: RegExp; entityType: string }> = [\n { re: /\\b(pr|pull request|branch|repo|github|ci|workflow)\\b/i, entityType: \"repo\" },\n { re: /\\b(discord|slack|channel|gateway|agent)\\b/i, entityType: \"ops\" },\n { re: /\\b(customer|client|deal|lead|account)\\b/i, entityType: \"client\" },\n { re: /\\b(model|llm|qmd|embedding|retrieval|memory)\\b/i, entityType: \"ai\" },\n { re: /\\b(doc|readme|docs|changelog)\\b/i, entityType: \"docs\" },\n];\n\nfunction normalizeTextInput(input: unknown): string {\n return typeof input === \"string\" ? input : \"\";\n}\n\nexport function inferIntentFromText(text: string): MemoryIntent {\n const safeText = normalizeTextInput(text);\n const goal = GOAL_PATTERNS.find((p) => p.re.test(safeText))?.goal ?? \"unknown\";\n const actionType = ACTION_PATTERNS.find((p) => p.re.test(safeText))?.action ?? \"unknown\";\n const entityTypes = Array.from(\n new Set(ENTITY_PATTERNS.filter((p) => p.re.test(safeText)).map((p) => p.entityType)),\n );\n\n return {\n goal,\n actionType,\n entityTypes,\n };\n}\n\nexport function intentCompatibilityScore(queryIntent: MemoryIntent, memoryIntent: MemoryIntent): number {\n const queryHasSignal =\n queryIntent.goal !== \"unknown\" ||\n queryIntent.actionType !== \"unknown\" ||\n queryIntent.entityTypes.length > 0;\n const memoryHasSignal =\n memoryIntent.goal !== \"unknown\" ||\n memoryIntent.actionType !== \"unknown\" ||\n memoryIntent.entityTypes.length > 0;\n if (!queryHasSignal || !memoryHasSignal) return 0;\n\n let score = 0;\n if (\n queryIntent.goal !== \"unknown\" &&\n memoryIntent.goal !== \"unknown\" &&\n queryIntent.goal === memoryIntent.goal\n ) {\n score += 0.5;\n }\n if (\n queryIntent.actionType !== \"unknown\" &&\n memoryIntent.actionType !== \"unknown\" &&\n queryIntent.actionType === memoryIntent.actionType\n ) {\n score += 0.3;\n }\n\n const overlap = queryIntent.entityTypes.filter((et) => memoryIntent.entityTypes.includes(et)).length;\n if (overlap > 0) {\n const denom = Math.max(queryIntent.entityTypes.length, memoryIntent.entityTypes.length, 1);\n score += 0.2 * (overlap / denom);\n }\n\n return Math.max(0, Math.min(1, score));\n}\n\nexport function planRecallMode(prompt: string): RecallPlanMode {\n const p = normalizeTextInput(prompt).trim();\n let ackCandidate = p;\n while (ackCandidate.length > 0) {\n const ch = ackCandidate.charCodeAt(ackCandidate.length - 1);\n const isDigit = ch >= 48 && ch <= 57;\n const isUpper = ch >= 65 && ch <= 90;\n const isLower = ch >= 97 && ch <= 122;\n // Strip any trailing non-alphanumeric noise (punctuation/emojis/symbols).\n if (isDigit || isUpper || isLower) break;\n ackCandidate = ackCandidate.slice(0, -1);\n }\n ackCandidate = ackCandidate.trim();\n if (p.length === 0) return \"no_recall\";\n\n if (/\\b(timeline|sequence|history|what happened|chain of events|root cause)\\b/i.test(p)) {\n return \"graph_mode\";\n }\n\n // Reserve no_recall for low-information acknowledgements; avoid broad regressions.\n if (\n p.length <= 18 &&\n /^(ok|okay|kk|thanks|thx|got it|sounds good|yep|yes|nope|no|done|cool|works)$/i.test(ackCandidate)\n ) {\n return \"no_recall\";\n }\n\n // Full recall for prompts that are explicitly memory-seeking or analytical questions.\n if (\n /\\b(previous|earlier|remember|last time|did we|what did we decide|context|summarize|summary|recap|key points|decision)\\b/i.test(p) ||\n /\\?$/.test(p) ||\n /^(what|why|how|when|where|who|which)\\b/i.test(p.toLowerCase())\n ) {\n return \"full\";\n }\n\n // Minimal for short, non-question operational directives to keep latency/tokens down.\n if (\n p.length <= 100 &&\n /^(check|reload|restart|run|verify|show|status|sync|update|open|close|set|enable|disable|fix|patch)\\b/i.test(p)\n ) {\n return \"minimal\";\n }\n\n return \"full\";\n}\n\nexport function hasBroadGraphIntent(prompt: string): boolean {\n const p = normalizeTextInput(prompt).trim().toLowerCase();\n if (!p) return false;\n return /\\b(what changed|how did we get here|why did this happen|what led to|cause chain|dependency chain|regression chain|failure chain)\\b/i.test(\n p,\n );\n}\n"],"mappings":";AAEA,IAAM,gBAAqD;AAAA,EACzD,EAAE,IAAI,uGAAuG,MAAM,YAAY;AAAA,EAC/H,EAAE,IAAI,4FAA4F,MAAM,UAAU;AAAA,EAClH,EAAE,IAAI,iFAAiF,MAAM,OAAO;AAAA,EACpG,EAAE,IAAI,oEAAoE,MAAM,SAAS;AAAA,EACzF,EAAE,IAAI,8CAA8C,MAAM,aAAa;AACzE;AAEA,IAAM,kBAAyD;AAAA,EAC7D,EAAE,IAAI,yFAAyF,QAAQ,SAAS;AAAA,EAChH,EAAE,IAAI,qFAAqF,QAAQ,OAAO;AAAA,EAC1G,EAAE,IAAI,8GAA8G,QAAQ,UAAU;AAAA,EACtI,EAAE,IAAI,8EAA8E,QAAQ,YAAY;AAAA,EACxG,EAAE,IAAI,iFAAiF,QAAQ,SAAS;AAC1G;AAEA,IAAM,kBAA6D;AAAA,EACjE,EAAE,IAAI,yDAAyD,YAAY,OAAO;AAAA,EAClF,EAAE,IAAI,8CAA8C,YAAY,MAAM;AAAA,EACtE,EAAE,IAAI,4CAA4C,YAAY,SAAS;AAAA,EACvE,EAAE,IAAI,mDAAmD,YAAY,KAAK;AAAA,EAC1E,EAAE,IAAI,oCAAoC,YAAY,OAAO;AAC/D;AAEA,SAAS,mBAAmB,OAAwB;AAClD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEO,SAAS,oBAAoB,MAA4B;AAC9D,QAAM,WAAW,mBAAmB,IAAI;AACxC,QAAM,OAAO,cAAc,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,GAAG,QAAQ;AACrE,QAAM,aAAa,gBAAgB,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,GAAG,UAAU;AAC/E,QAAM,cAAc,MAAM;AAAA,IACxB,IAAI,IAAI,gBAAgB,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC;AAAA,EACrF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,yBAAyB,aAA2B,cAAoC;AACtG,QAAM,iBACJ,YAAY,SAAS,aACrB,YAAY,eAAe,aAC3B,YAAY,YAAY,SAAS;AACnC,QAAM,kBACJ,aAAa,SAAS,aACtB,aAAa,eAAe,aAC5B,aAAa,YAAY,SAAS;AACpC,MAAI,CAAC,kBAAkB,CAAC,gBAAiB,QAAO;AAEhD,MAAI,QAAQ;AACZ,MACE,YAAY,SAAS,aACrB,aAAa,SAAS,aACtB,YAAY,SAAS,aAAa,MAClC;AACA,aAAS;AAAA,EACX;AACA,MACE,YAAY,eAAe,aAC3B,aAAa,eAAe,aAC5B,YAAY,eAAe,aAAa,YACxC;AACA,aAAS;AAAA,EACX;AAEA,QAAM,UAAU,YAAY,YAAY,OAAO,CAAC,OAAO,aAAa,YAAY,SAAS,EAAE,CAAC,EAAE;AAC9F,MAAI,UAAU,GAAG;AACf,UAAM,QAAQ,KAAK,IAAI,YAAY,YAAY,QAAQ,aAAa,YAAY,QAAQ,CAAC;AACzF,aAAS,OAAO,UAAU;AAAA,EAC5B;AAEA,SAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AACvC;AAEO,SAAS,eAAe,QAAgC;AAC7D,QAAM,IAAI,mBAAmB,MAAM,EAAE,KAAK;AAC1C,MAAI,eAAe;AACnB,SAAO,aAAa,SAAS,GAAG;AAC9B,UAAM,KAAK,aAAa,WAAW,aAAa,SAAS,CAAC;AAC1D,UAAM,UAAU,MAAM,MAAM,MAAM;AAClC,UAAM,UAAU,MAAM,MAAM,MAAM;AAClC,UAAM,UAAU,MAAM,MAAM,MAAM;AAElC,QAAI,WAAW,WAAW,QAAS;AACnC,mBAAe,aAAa,MAAM,GAAG,EAAE;AAAA,EACzC;AACA,iBAAe,aAAa,KAAK;AACjC,MAAI,EAAE,WAAW,EAAG,QAAO;AAE3B,MAAI,4EAA4E,KAAK,CAAC,GAAG;AACvF,WAAO;AAAA,EACT;AAGA,MACE,EAAE,UAAU,MACZ,gFAAgF,KAAK,YAAY,GACjG;AACA,WAAO;AAAA,EACT;AAGA,MACE,2HAA2H,KAAK,CAAC,KACjI,MAAM,KAAK,CAAC,KACZ,0CAA0C,KAAK,EAAE,YAAY,CAAC,GAC9D;AACA,WAAO;AAAA,EACT;AAGA,MACE,EAAE,UAAU,OACZ,wGAAwG,KAAK,CAAC,GAC9G;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,oBAAoB,QAAyB;AAC3D,QAAM,IAAI,mBAAmB,MAAM,EAAE,KAAK,EAAE,YAAY;AACxD,MAAI,CAAC,EAAG,QAAO;AACf,SAAO,sIAAsI;AAAA,IAC3I;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/reconstruct.ts
|
|
2
|
+
function findUnresolvedEntityRefs(recalledSnippets, recalledEntityRefs, knownEntities) {
|
|
3
|
+
const refSet = new Set(recalledEntityRefs.map((r) => r.toLowerCase()));
|
|
4
|
+
const combinedText = recalledSnippets.join(" ").toLowerCase();
|
|
5
|
+
const sorted = [...knownEntities].sort((a, b) => b.length - a.length);
|
|
6
|
+
const matched = /* @__PURE__ */ new Set();
|
|
7
|
+
const unresolved = [];
|
|
8
|
+
for (const entity of sorted) {
|
|
9
|
+
const lower = entity.toLowerCase();
|
|
10
|
+
if (refSet.has(lower)) continue;
|
|
11
|
+
const escaped = lower.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
12
|
+
const pattern = new RegExp(`(?:^|[\\s,;:'"(\\[])${escaped}(?:$|[\\s,;:'".)\\]])`, "i");
|
|
13
|
+
if (pattern.test(combinedText) && !matched.has(lower)) {
|
|
14
|
+
unresolved.push(entity);
|
|
15
|
+
matched.add(lower);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return unresolved;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
findUnresolvedEntityRefs
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=chunk-X7XN6YU4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/reconstruct.ts"],"sourcesContent":["/**\n * Memory reconstruction (E-Mem-inspired).\n *\n * Scans recalled memories for entity references that lack context\n * in the recall set, then identifies candidates for targeted retrieval.\n */\n\n/**\n * Find entity names mentioned in recalled snippets that are known entities\n * but not represented in the recalled entity refs.\n *\n * Uses word-boundary matching to avoid false positives from substring overlap\n * (e.g., \"person-alice\" inside \"person-alice-chen\").\n */\nexport function findUnresolvedEntityRefs(\n recalledSnippets: string[],\n recalledEntityRefs: string[],\n knownEntities: string[],\n): string[] {\n const refSet = new Set(recalledEntityRefs.map((r) => r.toLowerCase()));\n const combinedText = recalledSnippets.join(\" \").toLowerCase();\n\n // Sort entities longest-first so longer names are matched before shorter prefixes\n const sorted = [...knownEntities].sort((a, b) => b.length - a.length);\n const matched = new Set<string>();\n const unresolved: string[] = [];\n\n for (const entity of sorted) {\n const lower = entity.toLowerCase();\n if (refSet.has(lower)) continue; // already covered\n\n // Use word-boundary regex to avoid substring false positives\n const escaped = lower.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const pattern = new RegExp(`(?:^|[\\\\s,;:'\"(\\\\[])${escaped}(?:$|[\\\\s,;:'\".)\\\\]])`, \"i\");\n if (pattern.test(combinedText) && !matched.has(lower)) {\n unresolved.push(entity);\n matched.add(lower);\n }\n }\n return unresolved;\n}\n"],"mappings":";AAcO,SAAS,yBACd,kBACA,oBACA,eACU;AACV,QAAM,SAAS,IAAI,IAAI,mBAAmB,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACrE,QAAM,eAAe,iBAAiB,KAAK,GAAG,EAAE,YAAY;AAG5D,QAAM,SAAS,CAAC,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM;AACpE,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,aAAuB,CAAC;AAE9B,aAAW,UAAU,QAAQ;AAC3B,UAAM,QAAQ,OAAO,YAAY;AACjC,QAAI,OAAO,IAAI,KAAK,EAAG;AAGvB,UAAM,UAAU,MAAM,QAAQ,uBAAuB,MAAM;AAC3D,UAAM,UAAU,IAAI,OAAO,uBAAuB,OAAO,yBAAyB,GAAG;AACrF,QAAI,QAAQ,KAAK,YAAY,KAAK,CAAC,QAAQ,IAAI,KAAK,GAAG;AACrD,iBAAW,KAAK,MAAM;AACtB,cAAQ,IAAI,KAAK;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
// src/access-idempotency.ts
|
|
2
|
+
import { mkdir, open, readFile, rename, stat, unlink, utimes, writeFile } from "fs/promises";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { createHash } from "crypto";
|
|
5
|
+
var testHooks = null;
|
|
6
|
+
function stableStringify(value) {
|
|
7
|
+
return JSON.stringify(value, (_key, candidate) => {
|
|
8
|
+
if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) {
|
|
9
|
+
return candidate;
|
|
10
|
+
}
|
|
11
|
+
return Object.keys(candidate).sort().reduce((acc, key) => {
|
|
12
|
+
acc[key] = candidate[key];
|
|
13
|
+
return acc;
|
|
14
|
+
}, {});
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function hashAccessIdempotencyPayload(payload) {
|
|
18
|
+
return createHash("sha256").update(stableStringify(payload)).digest("hex");
|
|
19
|
+
}
|
|
20
|
+
function setAccessIdempotencyTestHooks(hooks) {
|
|
21
|
+
testHooks = hooks;
|
|
22
|
+
}
|
|
23
|
+
var AccessIdempotencyStore = class {
|
|
24
|
+
statePath;
|
|
25
|
+
lockPath;
|
|
26
|
+
keyLockDir;
|
|
27
|
+
loadedMtimeMs = 0;
|
|
28
|
+
state = {};
|
|
29
|
+
writeQueue = Promise.resolve();
|
|
30
|
+
constructor(memoryDir) {
|
|
31
|
+
this.statePath = path.join(memoryDir, "state", "access-idempotency.json");
|
|
32
|
+
this.lockPath = `${this.statePath}.lock`;
|
|
33
|
+
this.keyLockDir = path.join(memoryDir, "state", "access-idempotency-locks");
|
|
34
|
+
}
|
|
35
|
+
async get(key, requestHash) {
|
|
36
|
+
await this.writeQueue.catch(() => {
|
|
37
|
+
});
|
|
38
|
+
await this.reload({ forceRefresh: true });
|
|
39
|
+
const entry = this.state[key];
|
|
40
|
+
if (!entry) return { conflict: false };
|
|
41
|
+
if (entry.requestHash !== requestHash) {
|
|
42
|
+
return { conflict: true };
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
conflict: false,
|
|
46
|
+
response: JSON.parse(JSON.stringify(entry.response))
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async put(key, requestHash, response) {
|
|
50
|
+
await this.withWriteQueue(async () => {
|
|
51
|
+
await this.reload({ forceRefresh: true });
|
|
52
|
+
this.state[key] = {
|
|
53
|
+
recordedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
54
|
+
requestHash,
|
|
55
|
+
response: JSON.parse(JSON.stringify(response))
|
|
56
|
+
};
|
|
57
|
+
await this.prune();
|
|
58
|
+
await this.flush();
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async withKeyLock(key, callback) {
|
|
62
|
+
const keyHash = createHash("sha256").update(key).digest("hex");
|
|
63
|
+
const keyLockPath = path.join(this.keyLockDir, `${keyHash}.lock`);
|
|
64
|
+
return this.withExclusiveFileLock(keyLockPath, callback);
|
|
65
|
+
}
|
|
66
|
+
async reload(options = {}) {
|
|
67
|
+
if (options.forceRefresh === true) {
|
|
68
|
+
try {
|
|
69
|
+
const fileStat = await stat(this.statePath);
|
|
70
|
+
if (fileStat.mtimeMs < this.loadedMtimeMs) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
} catch {
|
|
74
|
+
this.state = {};
|
|
75
|
+
this.loadedMtimeMs = 0;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const raw = await readFile(this.statePath, "utf-8");
|
|
81
|
+
const parsed = JSON.parse(raw);
|
|
82
|
+
if (parsed && typeof parsed === "object") {
|
|
83
|
+
this.state = parsed;
|
|
84
|
+
this.loadedMtimeMs = await this.readMtimeMs();
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
} catch {
|
|
88
|
+
}
|
|
89
|
+
this.state = {};
|
|
90
|
+
this.loadedMtimeMs = 0;
|
|
91
|
+
}
|
|
92
|
+
async prune() {
|
|
93
|
+
const entries = Object.entries(this.state);
|
|
94
|
+
if (entries.length <= 512) return;
|
|
95
|
+
entries.sort((left, right) => right[1].recordedAt.localeCompare(left[1].recordedAt)).slice(512).forEach(([key]) => {
|
|
96
|
+
delete this.state[key];
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async flush() {
|
|
100
|
+
await mkdir(path.dirname(this.statePath), { recursive: true });
|
|
101
|
+
await this.withExclusiveFileLock(this.lockPath, async () => {
|
|
102
|
+
try {
|
|
103
|
+
const raw = await readFile(this.statePath, "utf-8");
|
|
104
|
+
const parsed = JSON.parse(raw);
|
|
105
|
+
if (parsed && typeof parsed === "object") {
|
|
106
|
+
this.state = {
|
|
107
|
+
...parsed,
|
|
108
|
+
...this.state
|
|
109
|
+
};
|
|
110
|
+
await this.prune();
|
|
111
|
+
}
|
|
112
|
+
} catch {
|
|
113
|
+
}
|
|
114
|
+
await testHooks?.beforeFlushWrite?.();
|
|
115
|
+
const tempPath = `${this.statePath}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;
|
|
116
|
+
try {
|
|
117
|
+
await writeFile(tempPath, JSON.stringify(this.state, null, 2), "utf-8");
|
|
118
|
+
await rename(tempPath, this.statePath);
|
|
119
|
+
} finally {
|
|
120
|
+
await unlink(tempPath).catch(() => void 0);
|
|
121
|
+
}
|
|
122
|
+
this.loadedMtimeMs = await this.readMtimeMs();
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async readMtimeMs() {
|
|
126
|
+
try {
|
|
127
|
+
return (await stat(this.statePath)).mtimeMs;
|
|
128
|
+
} catch {
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async withExclusiveFileLock(lockPath, callback) {
|
|
133
|
+
await mkdir(path.dirname(lockPath), { recursive: true });
|
|
134
|
+
const timeoutMs = testHooks?.lockTimeoutMs ?? 5e3;
|
|
135
|
+
const staleLockMs = testHooks?.staleLockMs ?? 3e4;
|
|
136
|
+
const lockHeartbeatMs = testHooks?.lockHeartbeatMs ?? Math.max(1e3, Math.floor(staleLockMs / 3));
|
|
137
|
+
const startedAt = Date.now();
|
|
138
|
+
while (true) {
|
|
139
|
+
try {
|
|
140
|
+
const handle = await open(lockPath, "wx");
|
|
141
|
+
let heartbeat = null;
|
|
142
|
+
if (lockHeartbeatMs > 0) {
|
|
143
|
+
heartbeat = setInterval(() => {
|
|
144
|
+
void utimes(lockPath, /* @__PURE__ */ new Date(), /* @__PURE__ */ new Date()).catch(() => void 0);
|
|
145
|
+
}, lockHeartbeatMs);
|
|
146
|
+
heartbeat.unref?.();
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
return await callback();
|
|
150
|
+
} finally {
|
|
151
|
+
if (heartbeat) {
|
|
152
|
+
clearInterval(heartbeat);
|
|
153
|
+
}
|
|
154
|
+
await handle.close().catch(() => void 0);
|
|
155
|
+
await unlink(lockPath).catch(() => void 0);
|
|
156
|
+
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
if (!isAlreadyExistsError(error)) throw error;
|
|
159
|
+
try {
|
|
160
|
+
const lockStat = await stat(lockPath);
|
|
161
|
+
if (Date.now() - lockStat.mtimeMs > staleLockMs) {
|
|
162
|
+
await unlink(lockPath).catch(() => void 0);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
} catch {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (Date.now() - startedAt > timeoutMs) {
|
|
169
|
+
throw new Error("timed out acquiring access idempotency lock");
|
|
170
|
+
}
|
|
171
|
+
await sleep(10);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async withWriteQueue(callback) {
|
|
176
|
+
const previous = this.writeQueue;
|
|
177
|
+
let release;
|
|
178
|
+
this.writeQueue = new Promise((resolve) => {
|
|
179
|
+
release = resolve;
|
|
180
|
+
});
|
|
181
|
+
await previous.catch(() => {
|
|
182
|
+
});
|
|
183
|
+
try {
|
|
184
|
+
return await callback();
|
|
185
|
+
} finally {
|
|
186
|
+
release();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
function isAlreadyExistsError(error) {
|
|
191
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "EEXIST";
|
|
192
|
+
}
|
|
193
|
+
function sleep(ms) {
|
|
194
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export {
|
|
198
|
+
hashAccessIdempotencyPayload,
|
|
199
|
+
setAccessIdempotencyTestHooks,
|
|
200
|
+
AccessIdempotencyStore
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=chunk-XKECPATV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/access-idempotency.ts"],"sourcesContent":["import { mkdir, open, readFile, rename, stat, unlink, utimes, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\n\ntype AccessIdempotencyEntry = {\n recordedAt: string;\n requestHash: string;\n response: unknown;\n};\n\ntype AccessIdempotencyTestHooks = {\n beforeFlushWrite?: () => Promise<void> | void;\n lockTimeoutMs?: number;\n staleLockMs?: number;\n lockHeartbeatMs?: number;\n};\n\nlet testHooks: AccessIdempotencyTestHooks | null = null;\n\nfunction stableStringify(value: unknown): string {\n return JSON.stringify(value, (_key, candidate) => {\n if (!candidate || typeof candidate !== \"object\" || Array.isArray(candidate)) {\n return candidate;\n }\n return Object.keys(candidate)\n .sort()\n .reduce<Record<string, unknown>>((acc, key) => {\n acc[key] = (candidate as Record<string, unknown>)[key];\n return acc;\n }, {});\n });\n}\n\nexport function hashAccessIdempotencyPayload(payload: unknown): string {\n return createHash(\"sha256\").update(stableStringify(payload)).digest(\"hex\");\n}\n\nexport function setAccessIdempotencyTestHooks(hooks: AccessIdempotencyTestHooks | null): void {\n testHooks = hooks;\n}\n\nexport class AccessIdempotencyStore {\n private readonly statePath: string;\n private readonly lockPath: string;\n private readonly keyLockDir: string;\n private loadedMtimeMs = 0;\n private state: Record<string, AccessIdempotencyEntry> = {};\n private writeQueue: Promise<void> = Promise.resolve();\n\n constructor(memoryDir: string) {\n this.statePath = path.join(memoryDir, \"state\", \"access-idempotency.json\");\n this.lockPath = `${this.statePath}.lock`;\n this.keyLockDir = path.join(memoryDir, \"state\", \"access-idempotency-locks\");\n }\n\n async get(key: string, requestHash: string): Promise<{ response?: unknown; conflict: boolean }> {\n await this.writeQueue.catch(() => {});\n await this.reload({ forceRefresh: true });\n const entry = this.state[key];\n if (!entry) return { conflict: false };\n if (entry.requestHash !== requestHash) {\n return { conflict: true };\n }\n return {\n conflict: false,\n response: JSON.parse(JSON.stringify(entry.response)),\n };\n }\n\n async put(key: string, requestHash: string, response: unknown): Promise<void> {\n await this.withWriteQueue(async () => {\n await this.reload({ forceRefresh: true });\n this.state[key] = {\n recordedAt: new Date().toISOString(),\n requestHash,\n response: JSON.parse(JSON.stringify(response)),\n };\n await this.prune();\n await this.flush();\n });\n }\n\n async withKeyLock<T>(key: string, callback: () => Promise<T>): Promise<T> {\n const keyHash = createHash(\"sha256\").update(key).digest(\"hex\");\n const keyLockPath = path.join(this.keyLockDir, `${keyHash}.lock`);\n return this.withExclusiveFileLock(keyLockPath, callback);\n }\n\n private async reload(options: { forceRefresh?: boolean } = {}): Promise<void> {\n if (options.forceRefresh === true) {\n try {\n const fileStat = await stat(this.statePath);\n if (fileStat.mtimeMs < this.loadedMtimeMs) {\n return;\n }\n } catch {\n this.state = {};\n this.loadedMtimeMs = 0;\n return;\n }\n }\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n const parsed = JSON.parse(raw) as Record<string, AccessIdempotencyEntry>;\n if (parsed && typeof parsed === \"object\") {\n this.state = parsed;\n this.loadedMtimeMs = await this.readMtimeMs();\n return;\n }\n } catch {\n // Missing or malformed state should fail open to an empty store.\n }\n this.state = {};\n this.loadedMtimeMs = 0;\n }\n\n private async prune(): Promise<void> {\n const entries = Object.entries(this.state);\n if (entries.length <= 512) return;\n entries\n .sort((left, right) => right[1].recordedAt.localeCompare(left[1].recordedAt))\n .slice(512)\n .forEach(([key]) => {\n delete this.state[key];\n });\n }\n\n private async flush(): Promise<void> {\n await mkdir(path.dirname(this.statePath), { recursive: true });\n await this.withExclusiveFileLock(this.lockPath, async () => {\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n const parsed = JSON.parse(raw) as Record<string, AccessIdempotencyEntry>;\n if (parsed && typeof parsed === \"object\") {\n this.state = {\n ...parsed,\n ...this.state,\n };\n await this.prune();\n }\n } catch {\n // Fail open when there is no pre-existing shared state to merge.\n }\n\n await testHooks?.beforeFlushWrite?.();\n\n const tempPath = `${this.statePath}.${process.pid}.${Date.now()}.${Math.random().toString(16).slice(2)}.tmp`;\n try {\n await writeFile(tempPath, JSON.stringify(this.state, null, 2), \"utf-8\");\n await rename(tempPath, this.statePath);\n } finally {\n await unlink(tempPath).catch(() => undefined);\n }\n this.loadedMtimeMs = await this.readMtimeMs();\n });\n }\n\n private async readMtimeMs(): Promise<number> {\n try {\n return (await stat(this.statePath)).mtimeMs;\n } catch {\n return 0;\n }\n }\n\n private async withExclusiveFileLock<T>(lockPath: string, callback: () => Promise<T>): Promise<T> {\n await mkdir(path.dirname(lockPath), { recursive: true });\n const timeoutMs = testHooks?.lockTimeoutMs ?? 5_000;\n const staleLockMs = testHooks?.staleLockMs ?? 30_000;\n const lockHeartbeatMs = testHooks?.lockHeartbeatMs ?? Math.max(1_000, Math.floor(staleLockMs / 3));\n const startedAt = Date.now();\n\n while (true) {\n try {\n const handle = await open(lockPath, \"wx\");\n let heartbeat: NodeJS.Timeout | null = null;\n if (lockHeartbeatMs > 0) {\n heartbeat = setInterval(() => {\n void utimes(lockPath, new Date(), new Date()).catch(() => undefined);\n }, lockHeartbeatMs);\n heartbeat.unref?.();\n }\n try {\n return await callback();\n } finally {\n if (heartbeat) {\n clearInterval(heartbeat);\n }\n await handle.close().catch(() => undefined);\n await unlink(lockPath).catch(() => undefined);\n }\n } catch (error) {\n if (!isAlreadyExistsError(error)) throw error;\n try {\n const lockStat = await stat(lockPath);\n if (Date.now() - lockStat.mtimeMs > staleLockMs) {\n await unlink(lockPath).catch(() => undefined);\n continue;\n }\n } catch {\n continue;\n }\n if (Date.now() - startedAt > timeoutMs) {\n throw new Error(\"timed out acquiring access idempotency lock\");\n }\n await sleep(10);\n }\n }\n }\n\n private async withWriteQueue<T>(callback: () => Promise<T>): Promise<T> {\n const previous = this.writeQueue;\n let release!: () => void;\n this.writeQueue = new Promise<void>((resolve) => {\n release = resolve;\n });\n await previous.catch(() => {});\n try {\n return await callback();\n } finally {\n release();\n }\n }\n}\n\nfunction isAlreadyExistsError(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"EEXIST\";\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// src/signal.ts
|
|
2
|
+
var BUILTIN_HIGH_PATTERNS = [
|
|
3
|
+
/\bactually,?\s+(i|my|we)\b/i,
|
|
4
|
+
/\bno,?\s+(i|my|we|that'?s)\s+(not|wrong|incorrect)\b/i,
|
|
5
|
+
/\bthat'?s\s+not\s+right\b/i,
|
|
6
|
+
/\bwhy\s+did\s+you\s+say\s+that\b/i,
|
|
7
|
+
/\bi\s+(?:always|never|prefer|hate|love|want|need)\b/i,
|
|
8
|
+
/\bdon'?t\s+(?:use|do|call|say|make)\b/i,
|
|
9
|
+
/\bplease\s+(?:always|never|remember|note)\b/i,
|
|
10
|
+
/\bcorrection:?\b/i,
|
|
11
|
+
/\bimportant:?\s+/i,
|
|
12
|
+
/\bfyi:?\b/i,
|
|
13
|
+
/\bfor\s+(?:the\s+)?record\b/i,
|
|
14
|
+
/\bmy\s+(?:name|email|company|role|title|preference)\s+is\b/i,
|
|
15
|
+
/\bi\s+(?:work|live|am)\s+(?:at|in|from|a)\b/i,
|
|
16
|
+
/\bwe\s+(?:decided|agreed|chose|picked)\b/i,
|
|
17
|
+
/\bthe\s+decision\s+(?:is|was)\b/i,
|
|
18
|
+
/\bgoing\s+forward\b/i,
|
|
19
|
+
/\bfrom\s+now\s+on\b/i
|
|
20
|
+
];
|
|
21
|
+
var MEDIUM_PATTERNS = [
|
|
22
|
+
/\bi\s+(?:think|believe|feel)\b/i,
|
|
23
|
+
/\busually\b/i,
|
|
24
|
+
/\btypically\b/i,
|
|
25
|
+
/\bi\s+(?:like|dislike)\b/i,
|
|
26
|
+
/\bmy\s+(?:team|project|stack|setup)\b/i
|
|
27
|
+
];
|
|
28
|
+
var DISAGREEMENT_PATTERNS = [
|
|
29
|
+
/\bthat'?s\s+not\s+right\b/i,
|
|
30
|
+
/\bwhy\s+did\s+you\s+say\s+that\b/i,
|
|
31
|
+
/\bthat'?s\s+wrong\b/i,
|
|
32
|
+
/\bnot\s+correct\b/i
|
|
33
|
+
];
|
|
34
|
+
function isDisagreementPrompt(text) {
|
|
35
|
+
for (const rx of DISAGREEMENT_PATTERNS) {
|
|
36
|
+
if (rx.test(text)) return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
function scanSignals(text, customPatterns = []) {
|
|
41
|
+
const matched = [];
|
|
42
|
+
const customRegexes = customPatterns.map((p) => new RegExp(p, "i"));
|
|
43
|
+
for (const rx of customRegexes) {
|
|
44
|
+
if (rx.test(text)) {
|
|
45
|
+
matched.push(`custom:${rx.source}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const rx of BUILTIN_HIGH_PATTERNS) {
|
|
49
|
+
if (rx.test(text)) {
|
|
50
|
+
matched.push(`high:${rx.source}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (matched.length > 0) {
|
|
54
|
+
return { level: "high", patterns: matched };
|
|
55
|
+
}
|
|
56
|
+
const mediumMatched = [];
|
|
57
|
+
for (const rx of MEDIUM_PATTERNS) {
|
|
58
|
+
if (rx.test(text)) {
|
|
59
|
+
mediumMatched.push(`medium:${rx.source}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (mediumMatched.length >= 2) {
|
|
63
|
+
return { level: "medium", patterns: mediumMatched };
|
|
64
|
+
}
|
|
65
|
+
if (mediumMatched.length === 1) {
|
|
66
|
+
return { level: "low", patterns: mediumMatched };
|
|
67
|
+
}
|
|
68
|
+
return { level: "none", patterns: [] };
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export {
|
|
72
|
+
isDisagreementPrompt,
|
|
73
|
+
scanSignals
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=chunk-XYIK4LF6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/signal.ts"],"sourcesContent":["import type { SignalLevel, SignalScanResult } from \"./types.js\";\n\nconst BUILTIN_HIGH_PATTERNS: RegExp[] = [\n /\\bactually,?\\s+(i|my|we)\\b/i,\n /\\bno,?\\s+(i|my|we|that'?s)\\s+(not|wrong|incorrect)\\b/i,\n /\\bthat'?s\\s+not\\s+right\\b/i,\n /\\bwhy\\s+did\\s+you\\s+say\\s+that\\b/i,\n /\\bi\\s+(?:always|never|prefer|hate|love|want|need)\\b/i,\n /\\bdon'?t\\s+(?:use|do|call|say|make)\\b/i,\n /\\bplease\\s+(?:always|never|remember|note)\\b/i,\n /\\bcorrection:?\\b/i,\n /\\bimportant:?\\s+/i,\n /\\bfyi:?\\b/i,\n /\\bfor\\s+(?:the\\s+)?record\\b/i,\n /\\bmy\\s+(?:name|email|company|role|title|preference)\\s+is\\b/i,\n /\\bi\\s+(?:work|live|am)\\s+(?:at|in|from|a)\\b/i,\n /\\bwe\\s+(?:decided|agreed|chose|picked)\\b/i,\n /\\bthe\\s+decision\\s+(?:is|was)\\b/i,\n /\\bgoing\\s+forward\\b/i,\n /\\bfrom\\s+now\\s+on\\b/i,\n];\n\nconst MEDIUM_PATTERNS: RegExp[] = [\n /\\bi\\s+(?:think|believe|feel)\\b/i,\n /\\busually\\b/i,\n /\\btypically\\b/i,\n /\\bi\\s+(?:like|dislike)\\b/i,\n /\\bmy\\s+(?:team|project|stack|setup)\\b/i,\n];\n\nconst DISAGREEMENT_PATTERNS: RegExp[] = [\n /\\bthat'?s\\s+not\\s+right\\b/i,\n /\\bwhy\\s+did\\s+you\\s+say\\s+that\\b/i,\n /\\bthat'?s\\s+wrong\\b/i,\n /\\bnot\\s+correct\\b/i,\n];\n\nexport function isDisagreementPrompt(text: string): boolean {\n for (const rx of DISAGREEMENT_PATTERNS) {\n if (rx.test(text)) return true;\n }\n return false;\n}\n\nexport function scanSignals(\n text: string,\n customPatterns: string[] = [],\n): SignalScanResult {\n const matched: string[] = [];\n\n const customRegexes = customPatterns.map((p) => new RegExp(p, \"i\"));\n\n for (const rx of customRegexes) {\n if (rx.test(text)) {\n matched.push(`custom:${rx.source}`);\n }\n }\n\n for (const rx of BUILTIN_HIGH_PATTERNS) {\n if (rx.test(text)) {\n matched.push(`high:${rx.source}`);\n }\n }\n\n if (matched.length > 0) {\n return { level: \"high\", patterns: matched };\n }\n\n const mediumMatched: string[] = [];\n for (const rx of MEDIUM_PATTERNS) {\n if (rx.test(text)) {\n mediumMatched.push(`medium:${rx.source}`);\n }\n }\n\n if (mediumMatched.length >= 2) {\n return { level: \"medium\", patterns: mediumMatched };\n }\n if (mediumMatched.length === 1) {\n return { level: \"low\", patterns: mediumMatched };\n }\n\n return { level: \"none\", patterns: [] };\n}\n"],"mappings":";AAEA,IAAM,wBAAkC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,kBAA4B;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,wBAAkC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,qBAAqB,MAAuB;AAC1D,aAAW,MAAM,uBAAuB;AACtC,QAAI,GAAG,KAAK,IAAI,EAAG,QAAO;AAAA,EAC5B;AACA,SAAO;AACT;AAEO,SAAS,YACd,MACA,iBAA2B,CAAC,GACV;AAClB,QAAM,UAAoB,CAAC;AAE3B,QAAM,gBAAgB,eAAe,IAAI,CAAC,MAAM,IAAI,OAAO,GAAG,GAAG,CAAC;AAElE,aAAW,MAAM,eAAe;AAC9B,QAAI,GAAG,KAAK,IAAI,GAAG;AACjB,cAAQ,KAAK,UAAU,GAAG,MAAM,EAAE;AAAA,IACpC;AAAA,EACF;AAEA,aAAW,MAAM,uBAAuB;AACtC,QAAI,GAAG,KAAK,IAAI,GAAG;AACjB,cAAQ,KAAK,QAAQ,GAAG,MAAM,EAAE;AAAA,IAClC;AAAA,EACF;AAEA,MAAI,QAAQ,SAAS,GAAG;AACtB,WAAO,EAAE,OAAO,QAAQ,UAAU,QAAQ;AAAA,EAC5C;AAEA,QAAM,gBAA0B,CAAC;AACjC,aAAW,MAAM,iBAAiB;AAChC,QAAI,GAAG,KAAK,IAAI,GAAG;AACjB,oBAAc,KAAK,UAAU,GAAG,MAAM,EAAE;AAAA,IAC1C;AAAA,EACF;AAEA,MAAI,cAAc,UAAU,GAAG;AAC7B,WAAO,EAAE,OAAO,UAAU,UAAU,cAAc;AAAA,EACpD;AACA,MAAI,cAAc,WAAW,GAAG;AAC9B,WAAO,EAAE,OAAO,OAAO,UAAU,cAAc;AAAA,EACjD;AAEA,SAAO,EAAE,OAAO,QAAQ,UAAU,CAAC,EAAE;AACvC;","names":[]}
|