agentic-qe 3.8.13 → 3.9.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/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +48 -0
- package/dist/adapters/a2ui/integration/agui-sync.js +2 -1
- package/dist/audit/witness-chain.js +15 -3
- package/dist/boot/fast-paths.d.ts +24 -0
- package/dist/boot/fast-paths.js +43 -0
- package/dist/boot/parallel-prefetch.d.ts +26 -0
- package/dist/boot/parallel-prefetch.js +36 -0
- package/dist/cli/bundle.js +12 -9431
- package/dist/cli/chunks/adapter-WBR5NXS3.js +2 -0
- package/dist/cli/chunks/agent-booster-wasm-PQYB7VRU.js +2 -0
- package/dist/cli/chunks/agent-handler-QDAB5NQS.js +33 -0
- package/dist/cli/chunks/aqe-learning-engine-TK4JQCGT.js +2 -0
- package/dist/cli/chunks/audit-S7JUYYVP.js +3 -0
- package/dist/cli/chunks/base-2WXOSMBQ.js +2 -0
- package/dist/cli/chunks/better-sqlite3-7KY2RDXO.js +2 -0
- package/dist/cli/chunks/brain-handler-PPEGDCN4.js +68 -0
- package/dist/cli/chunks/branch-enumerator-XK4V5W7L.js +7 -0
- package/dist/cli/chunks/browser-PALA5PL3.js +4 -0
- package/dist/cli/chunks/browser-workflow-42F7GK5T.js +2 -0
- package/dist/cli/chunks/chunk-24FKIJNC.js +15 -0
- package/dist/cli/chunks/chunk-263XS447.js +2 -0
- package/dist/cli/chunks/chunk-2BZFNEN2.js +4 -0
- package/dist/cli/chunks/chunk-2E5NQNSU.js +180 -0
- package/dist/cli/chunks/chunk-2I7J3O6V.js +2 -0
- package/dist/cli/chunks/chunk-3ADGXLTM.js +14 -0
- package/dist/cli/chunks/chunk-3IHG3WOY.js +12 -0
- package/dist/cli/chunks/chunk-3IUNFTIF.js +2 -0
- package/dist/cli/chunks/chunk-3JPRUND5.js +2 -0
- package/dist/cli/chunks/chunk-3NZLZHJI.js +2 -0
- package/dist/cli/chunks/chunk-3THRQEZ2.js +95 -0
- package/dist/cli/chunks/chunk-3ZOONQG6.js +2 -0
- package/dist/cli/chunks/chunk-4B6NCELM.js +2 -0
- package/dist/cli/chunks/chunk-4I2IOUS4.js +2 -0
- package/dist/cli/chunks/chunk-4VBTXZRM.js +2 -0
- package/dist/cli/chunks/chunk-4VUPRTVX.js +3 -0
- package/dist/cli/chunks/chunk-4YOMLWEK.js +70 -0
- package/dist/cli/chunks/chunk-4YS3IJ45.js +2 -0
- package/dist/cli/chunks/chunk-5SKGFSKD.js +2 -0
- package/dist/cli/chunks/chunk-5T2ZQWKF.js +27 -0
- package/dist/cli/chunks/chunk-62ADTHV7.js +2 -0
- package/dist/cli/chunks/chunk-6EOS7KX2.js +2 -0
- package/dist/cli/chunks/chunk-6SVX4DJC.js +6 -0
- package/dist/cli/chunks/chunk-72WOAVK6.js +2 -0
- package/dist/cli/chunks/chunk-7R6YMLVS.js +3 -0
- package/dist/cli/chunks/chunk-7VDBAVTY.js +2 -0
- package/dist/cli/chunks/chunk-AFLLQ5PP.js +15 -0
- package/dist/cli/chunks/chunk-AKE543X2.js +2 -0
- package/dist/cli/chunks/chunk-B36CDR4U.js +2 -0
- package/dist/cli/chunks/chunk-B6LLWYQ6.js +2 -0
- package/dist/cli/chunks/chunk-BDIEMZ22.js +91 -0
- package/dist/cli/chunks/chunk-BGXNSCXX.js +4 -0
- package/dist/cli/chunks/chunk-BLBRY5UD.js +2 -0
- package/dist/cli/chunks/chunk-BPWXXEH2.js +3029 -0
- package/dist/cli/chunks/chunk-BR26T7ZS.js +180 -0
- package/dist/cli/chunks/chunk-BTREG4IW.js +2 -0
- package/dist/cli/chunks/chunk-BULKFVYX.js +2 -0
- package/dist/cli/chunks/chunk-BXAXGEFC.js +24 -0
- package/dist/cli/chunks/chunk-CL6POIX4.js +2 -0
- package/dist/cli/chunks/chunk-CS2KS7LP.js +2 -0
- package/dist/cli/chunks/chunk-CWFB6BSA.js +316 -0
- package/dist/cli/chunks/chunk-DRT3WKQW.js +2 -0
- package/dist/cli/chunks/chunk-EHDQJQ6Y.js +27 -0
- package/dist/cli/chunks/chunk-ESVQ6MEB.js +2 -0
- package/dist/cli/chunks/chunk-FEKY7T6Q.js +2 -0
- package/dist/cli/chunks/chunk-FGA7VIFR.js +7 -0
- package/dist/cli/chunks/chunk-FIA6X7UL.js +2 -0
- package/dist/cli/chunks/chunk-GAOJV3OX.js +2 -0
- package/dist/cli/chunks/chunk-GKNNSCLC.js +5 -0
- package/dist/cli/chunks/chunk-GPQ57KA4.js +2 -0
- package/dist/cli/chunks/chunk-GRUUQAR6.js +2 -0
- package/dist/cli/chunks/chunk-HRO6OZQD.js +2 -0
- package/dist/cli/chunks/chunk-HY6PMO5W.js +66 -0
- package/dist/cli/chunks/chunk-IAV2JMIX.js +167 -0
- package/dist/cli/chunks/chunk-IFNIIK34.js +21 -0
- package/dist/cli/chunks/chunk-IGJPMN4I.js +3 -0
- package/dist/cli/chunks/chunk-J3KWWR6Z.js +1 -0
- package/dist/cli/chunks/chunk-JBANAPWG.js +2 -0
- package/dist/cli/chunks/chunk-JJO7Y4H3.js +604 -0
- package/dist/cli/chunks/chunk-JRYGQO2W.js +2 -0
- package/dist/cli/chunks/chunk-JXM26HEE.js +2 -0
- package/dist/cli/chunks/chunk-JZSDOIXA.js +2 -0
- package/dist/cli/chunks/chunk-KP5NUODU.js +3 -0
- package/dist/cli/chunks/chunk-LHJQD2VU.js +750 -0
- package/dist/cli/chunks/chunk-LNQIY6BP.js +2 -0
- package/dist/cli/chunks/chunk-MDUHYUHF.js +2 -0
- package/dist/cli/chunks/chunk-MV6CMOJQ.js +65 -0
- package/dist/cli/chunks/chunk-MZOFWJTM.js +2 -0
- package/dist/cli/chunks/chunk-N2NS2PHA.js +45 -0
- package/dist/cli/chunks/chunk-N4TL73TH.js +314 -0
- package/dist/cli/chunks/chunk-N5UXCLFI.js +2 -0
- package/dist/cli/chunks/chunk-NZ2VCPN4.js +2 -0
- package/dist/cli/chunks/chunk-OF4D7MYI.js +2 -0
- package/dist/cli/chunks/chunk-OI5NGQO2.js +2 -0
- package/dist/cli/chunks/chunk-OLHKGP35.js +2 -0
- package/dist/cli/chunks/chunk-QOVHWZEP.js +1 -0
- package/dist/cli/chunks/chunk-RFSN6IDA.js +79 -0
- package/dist/cli/chunks/chunk-RTGGL7D7.js +4 -0
- package/dist/cli/chunks/chunk-RU5WAHB7.js +3 -0
- package/dist/cli/chunks/chunk-SUSEVMZT.js +2 -0
- package/dist/cli/chunks/chunk-TLHP5EII.js +2 -0
- package/dist/cli/chunks/chunk-TWUWL5EJ.js +2 -0
- package/dist/cli/chunks/chunk-U5RN7YQW.js +2 -0
- package/dist/cli/chunks/chunk-UFUVUO3J.js +2 -0
- package/dist/cli/chunks/chunk-UQHYFOBX.js +16 -0
- package/dist/cli/chunks/chunk-VOS4NQSF.js +2 -0
- package/dist/cli/chunks/chunk-VSVXUTJN.js +256 -0
- package/dist/cli/chunks/chunk-WBQSXPBI.js +2 -0
- package/dist/cli/chunks/chunk-WGMPEW2T.js +2 -0
- package/dist/cli/chunks/chunk-WIEC7VKK.js +2 -0
- package/dist/cli/chunks/chunk-WJ3DLOXF.js +14 -0
- package/dist/cli/chunks/chunk-X3KI6JOY.js +9 -0
- package/dist/cli/chunks/chunk-X5IJGWYG.js +2 -0
- package/dist/cli/chunks/chunk-XIBDETCS.js +146 -0
- package/dist/cli/chunks/chunk-XLRQYLWW.js +2 -0
- package/dist/cli/chunks/chunk-XO6PVK2P.js +3 -0
- package/dist/cli/chunks/chunk-XRE2HCWG.js +3 -0
- package/dist/cli/chunks/chunk-XT2V2322.js +2 -0
- package/dist/cli/chunks/chunk-Y7BHKZFJ.js +18 -0
- package/dist/cli/chunks/chunk-YAGODYIG.js +59 -0
- package/dist/cli/chunks/chunk-YANUP2RO.js +2 -0
- package/dist/cli/chunks/chunk-YPFOCNOE.js +30 -0
- package/dist/cli/chunks/chunk-YR6ZZGH7.js +81 -0
- package/dist/cli/chunks/chunk-YVA65UZL.js +2 -0
- package/dist/cli/chunks/chunk-YW2THB5Q.js +2 -0
- package/dist/cli/chunks/chunk-ZAPS3UGQ.js +20 -0
- package/dist/cli/chunks/chunk-ZDATDCYN.js +2 -0
- package/dist/cli/chunks/ci-J374KDLI.js +81 -0
- package/dist/cli/chunks/ci-output-7JN7F6CI.js +2 -0
- package/dist/cli/chunks/claude-flow-setup-245JLJCN.js +2 -0
- package/dist/cli/chunks/client-MCSNSH2C.js +2 -0
- package/dist/cli/chunks/cline-installer-LBA2M5N3.js +4 -0
- package/dist/cli/chunks/code-U4N4WONM.js +38 -0
- package/dist/cli/chunks/code-index-extractor-A57Z6BO4.js +3 -0
- package/dist/cli/chunks/codex-installer-UXMK2N4T.js +8 -0
- package/dist/cli/chunks/completions-W66BSCOE.js +1364 -0
- package/dist/cli/chunks/complexity-analyzer-AB4OZARV.js +2 -0
- package/dist/cli/chunks/continuedev-installer-LRFZ2SJM.js +14 -0
- package/dist/cli/chunks/copilot-installer-CQ3JYBIB.js +3 -0
- package/dist/cli/chunks/cost-tracker-4F723RB6.js +2 -0
- package/dist/cli/chunks/coverage-4PUEQXAY.js +27 -0
- package/dist/cli/chunks/cross-domain-router-OWR5IJ5G.js +2 -0
- package/dist/cli/chunks/cursor-installer-JZEDEDHA.js +3 -0
- package/dist/cli/chunks/daemon-B7TWGHXQ.js +19 -0
- package/dist/cli/chunks/dag-attention-scheduler-JWO6XI6A.js +2 -0
- package/dist/cli/chunks/detect-L6ZZHUSX.js +2 -0
- package/dist/cli/chunks/domain-handler-FT5FLZWL.js +25 -0
- package/dist/cli/chunks/domain-transfer-5Y4FGJAJ.js +2 -0
- package/dist/cli/chunks/dream-4TDBIYED.js +2 -0
- package/dist/cli/chunks/esm-node-2PKHKOTS.js +2 -0
- package/dist/cli/chunks/eval-GHMPFGWV.js +15 -0
- package/dist/cli/chunks/fast-paths-B3R647KN.js +2 -0
- package/dist/cli/chunks/feature-flags-DWS7ARSX.js +2 -0
- package/dist/cli/chunks/feature-flags-IVQ3AL4Q.js +2 -0
- package/dist/cli/chunks/file-discovery-QFPA6GMV.js +2 -0
- package/dist/cli/chunks/fleet-EKOKMOMW.js +43 -0
- package/dist/cli/chunks/gnn-wrapper-OYC55N5E.js +2 -0
- package/dist/cli/chunks/heartbeat-handler-MBBS4IBU.js +48 -0
- package/dist/cli/chunks/heartbeat-scheduler-XDGMOT7X.js +2 -0
- package/dist/cli/chunks/hnsw-index-YO7CT23I.js +2 -0
- package/dist/cli/chunks/hnswlib-node-56YWVXFE.js +2 -0
- package/dist/cli/chunks/hooks-L5VLZGEK.js +101 -0
- package/dist/cli/chunks/hypergraph-engine-A4Y2ZRAG.js +2 -0
- package/dist/cli/chunks/hypergraph-handler-3HDGB5SZ.js +35 -0
- package/dist/cli/chunks/impact-analyzer-UEIGXSZ4.js +2 -0
- package/dist/cli/chunks/init-handler-JDET6WUN.js +68 -0
- package/dist/cli/chunks/init-wizard-JWZUGIPJ.js +2 -0
- package/dist/cli/chunks/kernel-YNDTVKIW.js +2 -0
- package/dist/cli/chunks/kilocode-installer-GZZG5AFW.js +4 -0
- package/dist/cli/chunks/kiro-installer-IWNY5TKH.js +74 -0
- package/dist/cli/chunks/knowledge-graph-NGJKFTSN.js +2 -0
- package/dist/cli/chunks/learning-722ZNSZ6.js +107 -0
- package/dist/cli/chunks/llm-router-DNAV746L.js +30 -0
- package/dist/cli/chunks/load-Y3GCUFM4.js +2 -0
- package/dist/cli/chunks/load-test-GZUBXFF3.js +2 -0
- package/dist/cli/chunks/mcp-LKPIBZ3W.js +2 -0
- package/dist/cli/chunks/memory-L57MLFOP.js +32 -0
- package/dist/cli/chunks/memory-backend-3NQIZUXE.js +2 -0
- package/dist/cli/chunks/memory-handlers-MDZQ7HVW.js +2 -0
- package/dist/cli/chunks/opencode-installer-4HUB36H5.js +3 -0
- package/dist/cli/chunks/orchestrator-QHSBB2UC.js +371 -0
- package/dist/cli/chunks/pipeline-D3QER35Z.js +19 -0
- package/dist/cli/chunks/platform-T4E7Q3RD.js +2 -0
- package/dist/cli/chunks/plugin-JHW2YPRC.js +27 -0
- package/dist/cli/chunks/prime-radiant-advanced-wasm-G7CFNNQV.js +2 -0
- package/dist/cli/chunks/protocol-executor-SPUVRDWT.js +2 -0
- package/dist/cli/chunks/protocol-handler-2BQQ4HDM.js +20 -0
- package/dist/cli/chunks/prove-UQ6JFT73.js +3 -0
- package/dist/cli/chunks/qe-reasoning-bank-3HBK2FVD.js +2 -0
- package/dist/cli/chunks/quality-JRZYMC77.js +7 -0
- package/dist/cli/chunks/queen-coordinator-RW3NKO5A.js +2 -0
- package/dist/cli/chunks/real-embeddings-GK63VF35.js +2 -0
- package/dist/cli/chunks/roocode-installer-F4E2LAYR.js +4 -0
- package/dist/cli/chunks/router-RJGHWDQ3.js +2 -0
- package/dist/cli/chunks/routing-feedback-ZXBXFKX6.js +2 -0
- package/dist/cli/chunks/routing-handler-VNKFUUGB.js +20 -0
- package/dist/cli/chunks/ruvector-commands-2TLNHC3A.js +8 -0
- package/dist/cli/chunks/rvf-dual-writer-MQW2SJLT.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-LKFKTMUN.js +2 -0
- package/dist/cli/chunks/safe-db-G22E5ROA.js +2 -0
- package/dist/cli/chunks/schedule-Y7VVCPYV.js +2 -0
- package/dist/cli/chunks/scheduler-AUQIFQB7.js +2 -0
- package/dist/cli/chunks/security-EBEG2OPU.js +14 -0
- package/dist/cli/chunks/shared-rvf-dual-writer-BVSCQAFS.js +2 -0
- package/dist/cli/chunks/sqlite-persistence-JAVHUGGL.js +2 -0
- package/dist/cli/chunks/status-handler-VZ32M4G4.js +45 -0
- package/dist/cli/chunks/structural-health-K6LRCKV6.js +2 -0
- package/dist/cli/chunks/sync-MHSHNLIM.js +23 -0
- package/dist/cli/chunks/task-handler-JNOIBZ2G.js +49 -0
- package/dist/cli/chunks/task-handlers-P5DSUKND.js +2 -0
- package/dist/cli/chunks/test-DO22BNIL.js +33 -0
- package/dist/cli/chunks/test-scheduling-VLRQZEFL.js +15 -0
- package/dist/cli/chunks/token-bootstrap-4VJKGVMK.js +2 -0
- package/dist/cli/chunks/token-usage-LG3PXRXH.js +25 -0
- package/dist/cli/chunks/transformers-GY7SIKEU.js +2 -0
- package/dist/cli/chunks/tree-sitter-wasm-parser-FT2KB66N.js +2 -0
- package/dist/cli/chunks/types-QJGNBKP2.js +2 -0
- package/dist/cli/chunks/unified-memory-XYGENQUT.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-MVEGQBF3.js +2 -0
- package/dist/cli/chunks/unified-persistence-PFRCWEUG.js +2 -0
- package/dist/cli/chunks/validate-VQCRSVNQ.js +21 -0
- package/dist/cli/chunks/validate-swarm-A5DHAWTP.js +14 -0
- package/dist/cli/chunks/vibium-RZBSL4EB.js +2 -0
- package/dist/cli/chunks/visual-security-V47BLGJM.js +2 -0
- package/dist/cli/chunks/web-tree-sitter-7C4NXEOF.js +2 -0
- package/dist/cli/chunks/windsurf-installer-ES3KPQG3.js +7 -0
- package/dist/cli/chunks/witness-chain-BR63P4A7.js +2 -0
- package/dist/cli/chunks/workflow-JETHX4ML.js +51 -0
- package/dist/cli/chunks/workflow-orchestrator-7PZMX3JZ.js +2 -0
- package/dist/cli/chunks/wrappers-WP5RH745.js +2 -0
- package/dist/cli/commands/daemon.d.ts +13 -0
- package/dist/cli/commands/daemon.js +224 -0
- package/dist/cli/commands/hooks-handlers/hooks-shared.js +2 -1
- package/dist/cli/commands/plugin.d.ts +12 -0
- package/dist/cli/commands/plugin.js +135 -0
- package/dist/cli/commands/workflow.d.ts +10 -0
- package/dist/cli/commands/workflow.js +587 -0
- package/dist/cli/handlers/brain-handler.js +13 -8
- package/dist/cli/handlers/heartbeat-handler.d.ts +1 -0
- package/dist/cli/handlers/heartbeat-handler.js +20 -10
- package/dist/cli/handlers/hypergraph-handler.js +3 -3
- package/dist/cli/handlers/init-handler.js +10 -9
- package/dist/cli/handlers/interfaces.d.ts +4 -4
- package/dist/cli/index.js +159 -638
- package/dist/cli/lazy-registry.d.ts +27 -0
- package/dist/cli/lazy-registry.js +70 -0
- package/dist/context/compaction/context-budget.d.ts +71 -0
- package/dist/context/compaction/context-budget.js +120 -0
- package/dist/context/compaction/index.d.ts +96 -0
- package/dist/context/compaction/index.js +259 -0
- package/dist/context/compaction/llm-caller-adapter.d.ts +14 -0
- package/dist/context/compaction/llm-caller-adapter.js +47 -0
- package/dist/context/compaction/tier1-microcompact.d.ts +33 -0
- package/dist/context/compaction/tier1-microcompact.js +47 -0
- package/dist/context/compaction/tier2-session-summary.d.ts +72 -0
- package/dist/context/compaction/tier2-session-summary.js +172 -0
- package/dist/context/compaction/tier3-llm-compact.d.ts +65 -0
- package/dist/context/compaction/tier3-llm-compact.js +166 -0
- package/dist/context/compaction/tier4-reactive.d.ts +54 -0
- package/dist/context/compaction/tier4-reactive.js +129 -0
- package/dist/coordination/consensus/providers/claude-provider.d.ts +1 -0
- package/dist/coordination/consensus/providers/claude-provider.js +23 -3
- package/dist/domains/test-generation/generators/base-test-generator.d.ts +1 -1
- package/dist/domains/test-generation/generators/base-test-generator.js +11 -11
- package/dist/domains/test-generation/generators/go-test-generator.js +12 -12
- package/dist/domains/test-generation/generators/junit5-generator.js +9 -9
- package/dist/domains/test-generation/generators/kotlin-junit-generator.js +10 -10
- package/dist/domains/test-generation/generators/pytest-generator.js +8 -8
- package/dist/domains/test-generation/generators/swift-testing-generator.js +8 -8
- package/dist/domains/test-generation/generators/test-value-helpers.d.ts +20 -0
- package/dist/domains/test-generation/generators/test-value-helpers.js +48 -0
- package/dist/domains/test-generation/generators/xunit-generator.js +11 -11
- package/dist/hooks/cross-phase-hooks.d.ts +11 -0
- package/dist/hooks/cross-phase-hooks.js +73 -9
- package/dist/hooks/security/config-snapshot.d.ts +21 -0
- package/dist/hooks/security/config-snapshot.js +33 -0
- package/dist/hooks/security/exit-codes.d.ts +28 -0
- package/dist/hooks/security/exit-codes.js +33 -0
- package/dist/hooks/security/index.d.ts +15 -0
- package/dist/hooks/security/index.js +15 -0
- package/dist/hooks/security/ssrf-guard.d.ts +25 -0
- package/dist/hooks/security/ssrf-guard.js +69 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -2
- package/dist/init/init-wizard-hooks.js +15 -1
- package/dist/init/phases/07-hooks.js +2 -2
- package/dist/init/settings-merge.js +3 -7
- package/dist/kernel/kernel.js +35 -0
- package/dist/kernel/memory-backend.js +3 -1
- package/dist/mcp/bundle.js +416 -362
- package/dist/mcp/entry.js +132 -77
- package/dist/mcp/http-server.js +4 -1
- package/dist/mcp/index.d.ts +2 -2
- package/dist/mcp/index.js +5 -4
- package/dist/mcp/middleware/batch-executor.d.ts +46 -0
- package/dist/mcp/middleware/batch-executor.js +150 -0
- package/dist/mcp/middleware/microcompact.d.ts +97 -0
- package/dist/mcp/middleware/microcompact.js +179 -0
- package/dist/mcp/middleware/middleware-chain.d.ts +37 -0
- package/dist/mcp/middleware/middleware-chain.js +60 -0
- package/dist/mcp/protocol-server.d.ts +16 -0
- package/dist/mcp/protocol-server.js +140 -36
- package/dist/mcp/services/session-durability-middleware.d.ts +22 -0
- package/dist/mcp/services/session-durability-middleware.js +64 -0
- package/dist/mcp/services/session-resume.d.ts +29 -0
- package/dist/mcp/services/session-resume.js +221 -0
- package/dist/mcp/services/session-store.d.ts +84 -0
- package/dist/mcp/services/session-store.js +163 -0
- package/dist/mcp/tool-registry.d.ts +9 -0
- package/dist/mcp/tool-registry.js +30 -1
- package/dist/mcp/types.d.ts +1 -0
- package/dist/plugins/cache.d.ts +44 -0
- package/dist/plugins/cache.js +149 -0
- package/dist/plugins/index.d.ts +15 -0
- package/dist/plugins/index.js +15 -0
- package/dist/plugins/lifecycle.d.ts +67 -0
- package/dist/plugins/lifecycle.js +175 -0
- package/dist/plugins/manifest.d.ts +45 -0
- package/dist/plugins/manifest.js +173 -0
- package/dist/plugins/resolver.d.ts +37 -0
- package/dist/plugins/resolver.js +80 -0
- package/dist/plugins/security.d.ts +23 -0
- package/dist/plugins/security.js +125 -0
- package/dist/plugins/sources/github.d.ts +17 -0
- package/dist/plugins/sources/github.js +77 -0
- package/dist/plugins/sources/local.d.ts +20 -0
- package/dist/plugins/sources/local.js +32 -0
- package/dist/plugins/sources/npm.d.ts +18 -0
- package/dist/plugins/sources/npm.js +82 -0
- package/dist/shared/llm/retry.d.ts +5 -2
- package/dist/shared/llm/retry.js +7 -3
- package/dist/shared/prompt-cache-latch.d.ts +41 -0
- package/dist/shared/prompt-cache-latch.js +63 -0
- package/dist/shared/retry-engine.d.ts +77 -0
- package/dist/shared/retry-engine.js +194 -0
- package/dist/workers/daemon.d.ts +8 -0
- package/dist/workers/daemon.js +13 -0
- package/dist/workers/quality-daemon/ci-monitor.d.ts +55 -0
- package/dist/workers/quality-daemon/ci-monitor.js +147 -0
- package/dist/workers/quality-daemon/coverage-delta.d.ts +72 -0
- package/dist/workers/quality-daemon/coverage-delta.js +135 -0
- package/dist/workers/quality-daemon/git-watcher.d.ts +51 -0
- package/dist/workers/quality-daemon/git-watcher.js +209 -0
- package/dist/workers/quality-daemon/index.d.ts +119 -0
- package/dist/workers/quality-daemon/index.js +343 -0
- package/dist/workers/quality-daemon/nightly-consolidation.d.ts +74 -0
- package/dist/workers/quality-daemon/nightly-consolidation.js +136 -0
- package/dist/workers/quality-daemon/notification-service.d.ts +67 -0
- package/dist/workers/quality-daemon/notification-service.js +178 -0
- package/dist/workers/quality-daemon/persistent-memory.d.ts +31 -0
- package/dist/workers/quality-daemon/persistent-memory.js +30 -0
- package/dist/workers/quality-daemon/priority-queue.d.ts +97 -0
- package/dist/workers/quality-daemon/priority-queue.js +126 -0
- package/dist/workers/quality-daemon/test-suggester.d.ts +50 -0
- package/dist/workers/quality-daemon/test-suggester.js +121 -0
- package/dist/workers/worker-manager.js +2 -1
- package/package.json +1 -1
- package/dist/mcp/server.d.ts +0 -46
- package/dist/mcp/server.js +0 -802
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Tier 4: Reactive Compaction (IMP-08)
|
|
3
|
+
*
|
|
4
|
+
* Last-resort compaction triggered by 413 errors or context overflow
|
|
5
|
+
* detection. Aggressively peels the oldest conversation rounds until
|
|
6
|
+
* the estimated token count drops below the recovery target.
|
|
7
|
+
*
|
|
8
|
+
* This tier is destructive — it drops messages entirely (no summary).
|
|
9
|
+
* It exists to recover from situations where the context window is
|
|
10
|
+
* critically full and the session would otherwise fail.
|
|
11
|
+
*/
|
|
12
|
+
import { estimateTokensPadded } from '../../mcp/middleware/microcompact';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Defaults
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const DEFAULT_RECOVERY_TARGET = 30_000;
|
|
17
|
+
const DEFAULT_MIN_PRESERVED = 4;
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Tier4Reactive
|
|
20
|
+
// ============================================================================
|
|
21
|
+
export class Tier4Reactive {
|
|
22
|
+
recoveryTarget;
|
|
23
|
+
minPreserved;
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
this.recoveryTarget = options.recoveryTarget ?? DEFAULT_RECOVERY_TARGET;
|
|
26
|
+
this.minPreserved = options.minPreservedMessages ?? DEFAULT_MIN_PRESERVED;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Aggressively peel oldest messages until under the recovery target.
|
|
30
|
+
*
|
|
31
|
+
* Algorithm:
|
|
32
|
+
* 1. Compute total tokens.
|
|
33
|
+
* 2. If already under target, return early.
|
|
34
|
+
* 3. Walk forward from the oldest message, dropping messages until
|
|
35
|
+
* remaining tokens are at or below recoveryTarget.
|
|
36
|
+
* 4. Never drop below minPreservedMessages from the tail.
|
|
37
|
+
* 5. When dropping a tool_result, also drop its paired tool_use (and vice versa).
|
|
38
|
+
*/
|
|
39
|
+
compact(messages, trigger = 'context_overflow') {
|
|
40
|
+
if (messages.length === 0) {
|
|
41
|
+
return {
|
|
42
|
+
tier: 4,
|
|
43
|
+
survivingMessages: [],
|
|
44
|
+
survivingTokens: 0,
|
|
45
|
+
droppedCount: 0,
|
|
46
|
+
tokensSaved: 0,
|
|
47
|
+
trigger,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// Annotate tokens
|
|
51
|
+
const annotated = messages.map(m => ({
|
|
52
|
+
...m,
|
|
53
|
+
estimatedTokens: m.estimatedTokens ?? estimateTokensPadded(m.content),
|
|
54
|
+
}));
|
|
55
|
+
const totalTokens = annotated.reduce((s, m) => s + m.estimatedTokens, 0);
|
|
56
|
+
// Already under target?
|
|
57
|
+
if (totalTokens <= this.recoveryTarget) {
|
|
58
|
+
return {
|
|
59
|
+
tier: 4,
|
|
60
|
+
survivingMessages: messages,
|
|
61
|
+
survivingTokens: totalTokens,
|
|
62
|
+
droppedCount: 0,
|
|
63
|
+
tokensSaved: 0,
|
|
64
|
+
trigger,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Build pair map: toolUseId -> indices of both tool_use and tool_result
|
|
68
|
+
const pairMap = new Map();
|
|
69
|
+
for (let i = 0; i < annotated.length; i++) {
|
|
70
|
+
const m = annotated[i];
|
|
71
|
+
if (m.toolUseId) {
|
|
72
|
+
const existing = pairMap.get(m.toolUseId) ?? [];
|
|
73
|
+
existing.push(i);
|
|
74
|
+
pairMap.set(m.toolUseId, existing);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Mark messages for dropping
|
|
78
|
+
const dropped = new Set();
|
|
79
|
+
let remainingTokens = totalTokens;
|
|
80
|
+
// The tail we must preserve
|
|
81
|
+
const preserveFrom = Math.max(0, annotated.length - this.minPreserved);
|
|
82
|
+
for (let i = 0; i < annotated.length; i++) {
|
|
83
|
+
if (remainingTokens <= this.recoveryTarget)
|
|
84
|
+
break;
|
|
85
|
+
if (i >= preserveFrom)
|
|
86
|
+
break; // Don't touch the preserved tail
|
|
87
|
+
if (dropped.has(i))
|
|
88
|
+
continue;
|
|
89
|
+
// Drop this message
|
|
90
|
+
dropped.add(i);
|
|
91
|
+
remainingTokens -= annotated[i].estimatedTokens;
|
|
92
|
+
// If part of a pair, drop the partner too
|
|
93
|
+
if (annotated[i].toolUseId) {
|
|
94
|
+
const partners = pairMap.get(annotated[i].toolUseId) ?? [];
|
|
95
|
+
for (const partnerIdx of partners) {
|
|
96
|
+
if (!dropped.has(partnerIdx) && partnerIdx < preserveFrom) {
|
|
97
|
+
dropped.add(partnerIdx);
|
|
98
|
+
remainingTokens -= annotated[partnerIdx].estimatedTokens;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const surviving = annotated.filter((_, i) => !dropped.has(i));
|
|
104
|
+
const survivingTokens = surviving.reduce((s, m) => s + m.estimatedTokens, 0);
|
|
105
|
+
return {
|
|
106
|
+
tier: 4,
|
|
107
|
+
survivingMessages: surviving,
|
|
108
|
+
survivingTokens,
|
|
109
|
+
droppedCount: dropped.size,
|
|
110
|
+
tokensSaved: totalTokens - survivingTokens,
|
|
111
|
+
trigger,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convenience: check if a given HTTP status or error message indicates
|
|
116
|
+
* a context overflow that should trigger reactive compaction.
|
|
117
|
+
*/
|
|
118
|
+
static isContextOverflow(statusOrMessage) {
|
|
119
|
+
if (typeof statusOrMessage === 'number') {
|
|
120
|
+
return statusOrMessage === 413;
|
|
121
|
+
}
|
|
122
|
+
const lower = statusOrMessage.toLowerCase();
|
|
123
|
+
return lower.includes('context_length_exceeded')
|
|
124
|
+
|| lower.includes('maximum context length')
|
|
125
|
+
|| lower.includes('too many tokens')
|
|
126
|
+
|| lower.includes('413');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=tier4-reactive.js.map
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { toErrorMessage, toError } from '../../../shared/error-utils.js';
|
|
11
11
|
import { BaseModelProvider, } from '../model-provider';
|
|
12
|
+
import { PromptCacheLatch } from '../../../shared/prompt-cache-latch.js';
|
|
12
13
|
// ============================================================================
|
|
13
14
|
// Claude Model Provider Implementation
|
|
14
15
|
// ============================================================================
|
|
@@ -49,6 +50,8 @@ export class ClaudeModelProvider extends BaseModelProvider {
|
|
|
49
50
|
config;
|
|
50
51
|
apiKey;
|
|
51
52
|
baseUrl;
|
|
53
|
+
// IMP-05: Prompt cache latch — stabilizes API params to maximize cache hits
|
|
54
|
+
cacheLatch = new PromptCacheLatch();
|
|
52
55
|
/**
|
|
53
56
|
* Create a new Claude provider
|
|
54
57
|
*
|
|
@@ -87,11 +90,28 @@ export class ClaudeModelProvider extends BaseModelProvider {
|
|
|
87
90
|
if (this.disposed) {
|
|
88
91
|
throw new Error('Provider has been disposed');
|
|
89
92
|
}
|
|
90
|
-
const
|
|
91
|
-
const
|
|
93
|
+
const requestedModel = options?.model || this.config.defaultModel;
|
|
94
|
+
const requestedMaxTokens = options?.maxTokens || 4096;
|
|
92
95
|
const temperature = options?.temperature ?? 0.7;
|
|
93
96
|
const timeout = options?.timeout || this.config.defaultTimeout;
|
|
94
|
-
const
|
|
97
|
+
const requestedSystem = options?.systemPrompt || this.getDefaultSystemPrompt();
|
|
98
|
+
// IMP-05: Latch stable params to prevent prompt cache busting.
|
|
99
|
+
// If caller explicitly overrides, reset and re-latch.
|
|
100
|
+
if (this.cacheLatch.has('model') && this.cacheLatch.get('model') !== requestedModel) {
|
|
101
|
+
this.cacheLatch.reset('model');
|
|
102
|
+
}
|
|
103
|
+
if (this.cacheLatch.has('max_tokens') && this.cacheLatch.get('max_tokens') !== requestedMaxTokens) {
|
|
104
|
+
this.cacheLatch.reset('max_tokens');
|
|
105
|
+
}
|
|
106
|
+
if (this.cacheLatch.has('system') && this.cacheLatch.get('system') !== requestedSystem) {
|
|
107
|
+
this.cacheLatch.reset('system');
|
|
108
|
+
}
|
|
109
|
+
this.cacheLatch.latch('model', requestedModel);
|
|
110
|
+
this.cacheLatch.latch('max_tokens', requestedMaxTokens);
|
|
111
|
+
this.cacheLatch.latch('system', requestedSystem);
|
|
112
|
+
const model = this.cacheLatch.get('model');
|
|
113
|
+
const maxTokens = this.cacheLatch.get('max_tokens');
|
|
114
|
+
const systemPrompt = this.cacheLatch.get('system');
|
|
95
115
|
const request = {
|
|
96
116
|
model,
|
|
97
117
|
max_tokens: maxTokens,
|
|
@@ -43,7 +43,7 @@ export declare abstract class BaseTestGenerator implements ITestGenerator {
|
|
|
43
43
|
private static readonly TYPE_VALUE_TABLE;
|
|
44
44
|
/**
|
|
45
45
|
* Generate a test value for a parameter based on its type and name
|
|
46
|
-
* Uses
|
|
46
|
+
* Uses lightweight test value helpers for realistic test data
|
|
47
47
|
*
|
|
48
48
|
* @param param - Parameter information
|
|
49
49
|
* @returns Generated test value as a string
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @module test-generation/generators
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { testValues } from './test-value-helpers';
|
|
11
11
|
/**
|
|
12
12
|
* BaseTestGenerator - Abstract base class for test generators
|
|
13
13
|
*
|
|
@@ -33,21 +33,21 @@ export class BaseTestGenerator {
|
|
|
33
33
|
* Checked in order; first match wins.
|
|
34
34
|
*/
|
|
35
35
|
static NAME_VALUE_TABLE = [
|
|
36
|
-
['id', () => `'${
|
|
37
|
-
['email', () => `'${
|
|
38
|
-
['name', () => `'${
|
|
39
|
-
['url', () => `'${
|
|
40
|
-
['date', () => `new Date('${
|
|
41
|
-
['phone', () => `'${
|
|
42
|
-
['address', () => `'${
|
|
36
|
+
['id', () => `'${testValues.uuid()}'`],
|
|
37
|
+
['email', () => `'${testValues.email()}'`],
|
|
38
|
+
['name', () => `'${testValues.fullName()}'`],
|
|
39
|
+
['url', () => `'${testValues.url()}'`],
|
|
40
|
+
['date', () => `new Date('${testValues.recentDate()}')`],
|
|
41
|
+
['phone', () => `'${testValues.phone()}'`],
|
|
42
|
+
['address', () => `'${testValues.streetAddress()}'`],
|
|
43
43
|
];
|
|
44
44
|
/**
|
|
45
45
|
* Type-based value generators. Each entry is [typeSubstring, generatorFn].
|
|
46
46
|
* Checked in order; first match wins.
|
|
47
47
|
*/
|
|
48
48
|
static TYPE_VALUE_TABLE = [
|
|
49
|
-
['string', () => `'${
|
|
50
|
-
['number', () => String(
|
|
49
|
+
['string', () => `'${testValues.word()}'`],
|
|
50
|
+
['number', () => String(testValues.int(1, 100))],
|
|
51
51
|
['boolean', () => 'true'],
|
|
52
52
|
['[]', () => '[]'],
|
|
53
53
|
['array', () => '[]'],
|
|
@@ -59,7 +59,7 @@ export class BaseTestGenerator {
|
|
|
59
59
|
];
|
|
60
60
|
/**
|
|
61
61
|
* Generate a test value for a parameter based on its type and name
|
|
62
|
-
* Uses
|
|
62
|
+
* Uses lightweight test value helpers for realistic test data
|
|
63
63
|
*
|
|
64
64
|
* @param param - Parameter information
|
|
65
65
|
* @returns Generated test value as a string
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*
|
|
15
15
|
* @module test-generation/generators
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
17
|
+
import { testValues } from './test-value-helpers';
|
|
18
18
|
import { BaseTestGenerator } from './base-test-generator';
|
|
19
19
|
/**
|
|
20
20
|
* GoTestGenerator - Test generator for Go's testing package
|
|
@@ -496,28 +496,28 @@ func Test${funcName}_Cover_${lines[0]}_${lines[lines.length - 1]}(t *testing.T)
|
|
|
496
496
|
// Infer from param name
|
|
497
497
|
if (name.includes('id') && !name.includes('valid')) {
|
|
498
498
|
if (type.includes('int'))
|
|
499
|
-
return String(
|
|
500
|
-
return `"${
|
|
499
|
+
return String(testValues.int(1, 1000));
|
|
500
|
+
return `"${testValues.uuid()}"`;
|
|
501
501
|
}
|
|
502
502
|
if (name.includes('name'))
|
|
503
|
-
return `"${
|
|
503
|
+
return `"${testValues.fullName()}"`;
|
|
504
504
|
if (name.includes('email'))
|
|
505
|
-
return `"${
|
|
505
|
+
return `"${testValues.email()}"`;
|
|
506
506
|
if (name.includes('url'))
|
|
507
|
-
return `"${
|
|
507
|
+
return `"${testValues.url()}"`;
|
|
508
508
|
// Infer from type
|
|
509
509
|
if (type.includes('string') || type === 'str')
|
|
510
|
-
return `"${
|
|
510
|
+
return `"${testValues.word()}"`;
|
|
511
511
|
if (type.includes('int64'))
|
|
512
|
-
return `int64(${
|
|
512
|
+
return `int64(${testValues.int(1, 100)})`;
|
|
513
513
|
if (type.includes('int32'))
|
|
514
|
-
return `int32(${
|
|
514
|
+
return `int32(${testValues.int(1, 100)})`;
|
|
515
515
|
if (type.includes('int'))
|
|
516
|
-
return String(
|
|
516
|
+
return String(testValues.int(1, 100));
|
|
517
517
|
if (type.includes('float64'))
|
|
518
|
-
return `${
|
|
518
|
+
return `${testValues.float(1, 100, 2)}`;
|
|
519
519
|
if (type.includes('float32'))
|
|
520
|
-
return `float32(${
|
|
520
|
+
return `float32(${testValues.float(1, 100, 2)})`;
|
|
521
521
|
if (type.includes('bool'))
|
|
522
522
|
return 'true';
|
|
523
523
|
if (type.includes('[]byte'))
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module test-generation/generators
|
|
13
13
|
*/
|
|
14
|
-
import {
|
|
14
|
+
import { testValues } from './test-value-helpers';
|
|
15
15
|
import { BaseTestGenerator } from './base-test-generator';
|
|
16
16
|
import { detectSpringAnnotations } from '../detectors/spring-detector.js';
|
|
17
17
|
/**
|
|
@@ -488,24 +488,24 @@ class ${moduleName}CoverageTest {
|
|
|
488
488
|
const name = param.name.toLowerCase();
|
|
489
489
|
// Infer from param name
|
|
490
490
|
if (name.includes('id'))
|
|
491
|
-
return `${
|
|
491
|
+
return `${testValues.int(1, 1000)}L`;
|
|
492
492
|
if (name.includes('email'))
|
|
493
|
-
return `"${
|
|
493
|
+
return `"${testValues.email()}"`;
|
|
494
494
|
if (name.includes('name'))
|
|
495
|
-
return `"${
|
|
495
|
+
return `"${testValues.fullName()}"`;
|
|
496
496
|
if (name.includes('url'))
|
|
497
|
-
return `"${
|
|
497
|
+
return `"${testValues.url()}"`;
|
|
498
498
|
// Infer from type
|
|
499
499
|
if (type === 'long' || type === 'Long')
|
|
500
|
-
return `${
|
|
500
|
+
return `${testValues.int(1, 1000)}L`;
|
|
501
501
|
if (type === 'int' || type === 'integer' || type === 'Integer')
|
|
502
|
-
return String(
|
|
502
|
+
return String(testValues.int(1, 100));
|
|
503
503
|
if (type === 'double' || type === 'Double' || type === 'float' || type === 'Float')
|
|
504
|
-
return `${
|
|
504
|
+
return `${testValues.float(0, 100)}`;
|
|
505
505
|
if (type === 'boolean' || type === 'Boolean')
|
|
506
506
|
return 'true';
|
|
507
507
|
if (type.includes('string'))
|
|
508
|
-
return `"${
|
|
508
|
+
return `"${testValues.word()}"`;
|
|
509
509
|
if (type.includes('list'))
|
|
510
510
|
return 'List.of()';
|
|
511
511
|
if (type.includes('map'))
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module test-generation/generators
|
|
13
13
|
*/
|
|
14
|
-
import {
|
|
14
|
+
import { testValues } from './test-value-helpers';
|
|
15
15
|
import { BaseTestGenerator } from './base-test-generator';
|
|
16
16
|
/**
|
|
17
17
|
* KotlinJUnitGenerator - Test generator for Kotlin's JUnit 5 + MockK framework
|
|
@@ -493,26 +493,26 @@ class ${moduleName}CoverageTest {
|
|
|
493
493
|
const name = param.name.toLowerCase();
|
|
494
494
|
// Infer from param name
|
|
495
495
|
if (name.includes('id'))
|
|
496
|
-
return `${
|
|
496
|
+
return `${testValues.int(1, 1000)}L`;
|
|
497
497
|
if (name.includes('email'))
|
|
498
|
-
return `"${
|
|
498
|
+
return `"${testValues.email()}"`;
|
|
499
499
|
if (name.includes('name'))
|
|
500
|
-
return `"${
|
|
500
|
+
return `"${testValues.fullName()}"`;
|
|
501
501
|
if (name.includes('url'))
|
|
502
|
-
return `"${
|
|
502
|
+
return `"${testValues.url()}"`;
|
|
503
503
|
// Infer from type
|
|
504
504
|
if (type === 'long')
|
|
505
|
-
return `${
|
|
505
|
+
return `${testValues.int(1, 1000)}L`;
|
|
506
506
|
if (type === 'int')
|
|
507
|
-
return String(
|
|
507
|
+
return String(testValues.int(1, 100));
|
|
508
508
|
if (type === 'double')
|
|
509
|
-
return `${
|
|
509
|
+
return `${testValues.float(0, 100)}`;
|
|
510
510
|
if (type === 'float')
|
|
511
|
-
return `${
|
|
511
|
+
return `${testValues.float(0, 100)}f`;
|
|
512
512
|
if (type === 'boolean')
|
|
513
513
|
return 'true';
|
|
514
514
|
if (type === 'string')
|
|
515
|
-
return `"${
|
|
515
|
+
return `"${testValues.word()}"`;
|
|
516
516
|
if (type.includes('list'))
|
|
517
517
|
return 'emptyList()';
|
|
518
518
|
if (type.includes('map'))
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module test-generation/generators
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import { testValues } from './test-value-helpers';
|
|
14
14
|
import { BaseTestGenerator } from './base-test-generator';
|
|
15
15
|
/**
|
|
16
16
|
* PytestGenerator - Test generator for Python's pytest framework
|
|
@@ -412,18 +412,18 @@ class Test${this.pascalCase(moduleName)}Coverage:
|
|
|
412
412
|
const name = param.name.toLowerCase();
|
|
413
413
|
// Infer from param name
|
|
414
414
|
if (name.includes('id'))
|
|
415
|
-
return `"${
|
|
415
|
+
return `"${testValues.uuid()}"`;
|
|
416
416
|
if (name.includes('name'))
|
|
417
|
-
return `"${
|
|
417
|
+
return `"${testValues.fullName()}"`;
|
|
418
418
|
if (name.includes('email'))
|
|
419
|
-
return `"${
|
|
419
|
+
return `"${testValues.email()}"`;
|
|
420
420
|
if (name.includes('url'))
|
|
421
|
-
return `"${
|
|
421
|
+
return `"${testValues.url()}"`;
|
|
422
422
|
// Infer from type
|
|
423
423
|
if (type.includes('str'))
|
|
424
|
-
return `"${
|
|
424
|
+
return `"${testValues.word()}"`;
|
|
425
425
|
if (type.includes('int') || type.includes('number')) {
|
|
426
|
-
return String(
|
|
426
|
+
return String(testValues.int(1, 100));
|
|
427
427
|
}
|
|
428
428
|
if (type.includes('bool'))
|
|
429
429
|
return 'True';
|
|
@@ -432,7 +432,7 @@ class Test${this.pascalCase(moduleName)}Coverage:
|
|
|
432
432
|
if (type.includes('dict') || type.includes('{}'))
|
|
433
433
|
return '{}';
|
|
434
434
|
if (type.includes('float'))
|
|
435
|
-
return String(
|
|
435
|
+
return String(testValues.float(0, 100));
|
|
436
436
|
return 'None';
|
|
437
437
|
}
|
|
438
438
|
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @module test-generation/generators
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
16
|
+
import { testValues } from './test-value-helpers';
|
|
17
17
|
import { BaseTestGenerator } from './base-test-generator';
|
|
18
18
|
/**
|
|
19
19
|
* SwiftTestingGenerator - Test generator for Apple's Swift Testing framework
|
|
@@ -425,20 +425,20 @@ struct ${moduleName}CoverageTests {
|
|
|
425
425
|
const lower = type.toLowerCase();
|
|
426
426
|
// Infer from param name
|
|
427
427
|
if (name.includes('id'))
|
|
428
|
-
return `"${
|
|
428
|
+
return `"${testValues.uuid()}"`;
|
|
429
429
|
if (name.includes('email'))
|
|
430
|
-
return `"${
|
|
430
|
+
return `"${testValues.email()}"`;
|
|
431
431
|
if (name.includes('name'))
|
|
432
|
-
return `"${
|
|
432
|
+
return `"${testValues.fullName()}"`;
|
|
433
433
|
if (name.includes('url'))
|
|
434
|
-
return `"${
|
|
434
|
+
return `"${testValues.url()}"`;
|
|
435
435
|
// Infer from type
|
|
436
436
|
if (lower === 'string')
|
|
437
|
-
return `"${
|
|
437
|
+
return `"${testValues.word()}"`;
|
|
438
438
|
if (lower === 'int')
|
|
439
|
-
return String(
|
|
439
|
+
return String(testValues.int(1, 100));
|
|
440
440
|
if (lower === 'double' || lower === 'float' || lower === 'cgfloat')
|
|
441
|
-
return String(
|
|
441
|
+
return String(testValues.float(0, 100, 2));
|
|
442
442
|
if (lower === 'bool')
|
|
443
443
|
return 'true';
|
|
444
444
|
if (lower.startsWith('[') && lower.endsWith(']'))
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight test value generators — replaces @faker-js/faker in generators.
|
|
3
|
+
*
|
|
4
|
+
* These produce plausible string literals for generated test code.
|
|
5
|
+
* They do NOT need cryptographic randomness or statistical distributions —
|
|
6
|
+
* they only produce placeholder values embedded in source code output.
|
|
7
|
+
*/
|
|
8
|
+
export declare const testValues: {
|
|
9
|
+
uuid: () => string;
|
|
10
|
+
email: () => string;
|
|
11
|
+
fullName: () => string;
|
|
12
|
+
url: () => string;
|
|
13
|
+
recentDate: () => string;
|
|
14
|
+
phone: () => string;
|
|
15
|
+
streetAddress: () => string;
|
|
16
|
+
word: () => string;
|
|
17
|
+
int: (min?: number, max?: number) => number;
|
|
18
|
+
float: (min?: number, max?: number, fractionDigits?: number) => number;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=test-value-helpers.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight test value generators — replaces @faker-js/faker in generators.
|
|
3
|
+
*
|
|
4
|
+
* These produce plausible string literals for generated test code.
|
|
5
|
+
* They do NOT need cryptographic randomness or statistical distributions —
|
|
6
|
+
* they only produce placeholder values embedded in source code output.
|
|
7
|
+
*/
|
|
8
|
+
import { randomBytes, randomInt, randomUUID } from 'node:crypto';
|
|
9
|
+
function randomHex(bytes) {
|
|
10
|
+
return randomBytes(bytes).toString('hex');
|
|
11
|
+
}
|
|
12
|
+
export const testValues = {
|
|
13
|
+
uuid: () => randomUUID(),
|
|
14
|
+
email: () => `user_${randomHex(3)}@example.com`,
|
|
15
|
+
fullName: () => {
|
|
16
|
+
const first = ['Alice', 'Bob', 'Carol', 'Dave', 'Eve', 'Frank'];
|
|
17
|
+
const last = ['Smith', 'Jones', 'Lee', 'Garcia', 'Chen', 'Novak'];
|
|
18
|
+
return `${first[randomInt(first.length)]} ${last[randomInt(last.length)]}`;
|
|
19
|
+
},
|
|
20
|
+
url: () => `https://example.com/${randomHex(4)}`,
|
|
21
|
+
recentDate: () => new Date(Date.now() - randomInt(7 * 86400000)).toISOString(),
|
|
22
|
+
phone: () => `+1${String(randomInt(2000000000, 9999999999))}`,
|
|
23
|
+
streetAddress: () => `${randomInt(1, 9999)} Main St`,
|
|
24
|
+
word: () => {
|
|
25
|
+
const words = ['alpha', 'bravo', 'charlie', 'delta', 'echo', 'foxtrot', 'golf', 'hotel'];
|
|
26
|
+
return words[randomInt(words.length)];
|
|
27
|
+
},
|
|
28
|
+
int: (min = 1, max = 100) => {
|
|
29
|
+
if (min > max) {
|
|
30
|
+
const t = min;
|
|
31
|
+
min = max;
|
|
32
|
+
max = t;
|
|
33
|
+
}
|
|
34
|
+
return randomInt(min, max + 1);
|
|
35
|
+
},
|
|
36
|
+
float: (min = 0, max = 100, fractionDigits = 2) => {
|
|
37
|
+
if (min > max) {
|
|
38
|
+
const t = min;
|
|
39
|
+
min = max;
|
|
40
|
+
max = t;
|
|
41
|
+
}
|
|
42
|
+
if (min === max)
|
|
43
|
+
return min;
|
|
44
|
+
const raw = min + (randomInt(0, 1_000_001) / 1_000_000) * (max - min);
|
|
45
|
+
return Number(raw.toFixed(fractionDigits));
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=test-value-helpers.js.map
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module test-generation/generators
|
|
13
13
|
*/
|
|
14
|
-
import {
|
|
14
|
+
import { testValues } from './test-value-helpers';
|
|
15
15
|
import { BaseTestGenerator } from './base-test-generator';
|
|
16
16
|
/**
|
|
17
17
|
* XUnitGenerator - Test generator for C#'s xUnit framework
|
|
@@ -363,25 +363,25 @@ namespace Tests.${className}.Coverage
|
|
|
363
363
|
const name = param.name.toLowerCase();
|
|
364
364
|
// Infer from param name
|
|
365
365
|
if (name.includes('id') && (type.includes('int') || type === 'unknown')) {
|
|
366
|
-
return String(
|
|
366
|
+
return String(testValues.int(1, 1000));
|
|
367
367
|
}
|
|
368
368
|
if (name.includes('id'))
|
|
369
|
-
return `"${
|
|
369
|
+
return `"${testValues.uuid()}"`;
|
|
370
370
|
if (name.includes('name'))
|
|
371
|
-
return `"${
|
|
371
|
+
return `"${testValues.fullName()}"`;
|
|
372
372
|
if (name.includes('email'))
|
|
373
|
-
return `"${
|
|
373
|
+
return `"${testValues.email()}"`;
|
|
374
374
|
if (name.includes('url'))
|
|
375
|
-
return `"${
|
|
375
|
+
return `"${testValues.url()}"`;
|
|
376
376
|
// Infer from type
|
|
377
377
|
if (type === 'int' || type === 'int32' || type === 'int64' || type === 'long') {
|
|
378
|
-
return String(
|
|
378
|
+
return String(testValues.int(1, 100));
|
|
379
379
|
}
|
|
380
380
|
if (type === 'double' || type === 'float' || type === 'decimal') {
|
|
381
|
-
return `${
|
|
381
|
+
return `${testValues.float(0, 100, 2)}m`;
|
|
382
382
|
}
|
|
383
383
|
if (type === 'string' || type.includes('string'))
|
|
384
|
-
return `"${
|
|
384
|
+
return `"${testValues.word()}"`;
|
|
385
385
|
if (type === 'bool' || type === 'boolean')
|
|
386
386
|
return 'true';
|
|
387
387
|
if (type.includes('list<') || type.includes('ienumerable<') || type.includes('[]')) {
|
|
@@ -467,10 +467,10 @@ namespace Tests.${className}.Coverage
|
|
|
467
467
|
const values = params.map(p => {
|
|
468
468
|
const type = p.type?.toLowerCase() || '';
|
|
469
469
|
if (type.includes('int') || type.includes('number')) {
|
|
470
|
-
return String(
|
|
470
|
+
return String(testValues.int(1, 100));
|
|
471
471
|
}
|
|
472
472
|
if (type.includes('string') || type === 'unknown') {
|
|
473
|
-
return `"${
|
|
473
|
+
return `"${testValues.word()}"`;
|
|
474
474
|
}
|
|
475
475
|
return 'null';
|
|
476
476
|
});
|
|
@@ -26,6 +26,17 @@ export declare class CrossPhaseHookExecutor {
|
|
|
26
26
|
private querySignalsForInjection;
|
|
27
27
|
formatSignalsForInjection(signals: CrossPhaseSignal[]): string;
|
|
28
28
|
private getRecommendations;
|
|
29
|
+
/**
|
|
30
|
+
* IMP-07: When AQE_HOOKS_MANAGED_ONLY is set, only hooks whose names start
|
|
31
|
+
* with "managed:" are allowed to execute. All other hooks are filtered out.
|
|
32
|
+
*/
|
|
33
|
+
private filterManagedHooks;
|
|
34
|
+
/**
|
|
35
|
+
* IMP-07: SSRF guard — if a target string looks like a URL (has a scheme),
|
|
36
|
+
* validate it against the SSRF blocklist. Returns true when the URL is
|
|
37
|
+
* blocked and the caller should abort the action.
|
|
38
|
+
*/
|
|
39
|
+
private isBlockedUrl;
|
|
29
40
|
private checkConditions;
|
|
30
41
|
private evaluateCondition;
|
|
31
42
|
private getValueFromPath;
|