prose-qa 0.1.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/LICENSE +21 -0
- package/README.md +570 -0
- package/dist/agent/bash.d.ts +52 -0
- package/dist/agent/bash.d.ts.map +1 -0
- package/dist/agent/bash.js +186 -0
- package/dist/agent/bash.js.map +1 -0
- package/dist/agent/bash.test.d.ts +2 -0
- package/dist/agent/bash.test.d.ts.map +1 -0
- package/dist/agent/bash.test.js +70 -0
- package/dist/agent/bash.test.js.map +1 -0
- package/dist/agent/llm-model.d.ts +5 -0
- package/dist/agent/llm-model.d.ts.map +1 -0
- package/dist/agent/llm-model.js +29 -0
- package/dist/agent/llm-model.js.map +1 -0
- package/dist/agent/llm-model.test.d.ts +2 -0
- package/dist/agent/llm-model.test.d.ts.map +1 -0
- package/dist/agent/llm-model.test.js +28 -0
- package/dist/agent/llm-model.test.js.map +1 -0
- package/dist/agent/prompt.d.ts +17 -0
- package/dist/agent/prompt.d.ts.map +1 -0
- package/dist/agent/prompt.js +97 -0
- package/dist/agent/prompt.js.map +1 -0
- package/dist/agent/prompt.test.d.ts +2 -0
- package/dist/agent/prompt.test.d.ts.map +1 -0
- package/dist/agent/prompt.test.js +124 -0
- package/dist/agent/prompt.test.js.map +1 -0
- package/dist/agent/provider-options.d.ts +8 -0
- package/dist/agent/provider-options.d.ts.map +1 -0
- package/dist/agent/provider-options.js +115 -0
- package/dist/agent/provider-options.js.map +1 -0
- package/dist/agent/provider-options.test.d.ts +2 -0
- package/dist/agent/provider-options.test.d.ts.map +1 -0
- package/dist/agent/provider-options.test.js +114 -0
- package/dist/agent/provider-options.test.js.map +1 -0
- package/dist/agent/runner.d.ts +27 -0
- package/dist/agent/runner.d.ts.map +1 -0
- package/dist/agent/runner.js +291 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/agent/verdict-retry-prompt.d.ts +3 -0
- package/dist/agent/verdict-retry-prompt.d.ts.map +1 -0
- package/dist/agent/verdict-retry-prompt.js +18 -0
- package/dist/agent/verdict-retry-prompt.js.map +1 -0
- package/dist/agent/verdict-retry-prompt.test.d.ts +2 -0
- package/dist/agent/verdict-retry-prompt.test.d.ts.map +1 -0
- package/dist/agent/verdict-retry-prompt.test.js +25 -0
- package/dist/agent/verdict-retry-prompt.test.js.map +1 -0
- package/dist/agent/verdict.d.ts +31 -0
- package/dist/agent/verdict.d.ts.map +1 -0
- package/dist/agent/verdict.js +123 -0
- package/dist/agent/verdict.js.map +1 -0
- package/dist/agent/verdict.test.d.ts +2 -0
- package/dist/agent/verdict.test.d.ts.map +1 -0
- package/dist/agent/verdict.test.js +156 -0
- package/dist/agent/verdict.test.js.map +1 -0
- package/dist/analyze/build-context.d.ts +58 -0
- package/dist/analyze/build-context.d.ts.map +1 -0
- package/dist/analyze/build-context.js +141 -0
- package/dist/analyze/build-context.js.map +1 -0
- package/dist/analyze/build-context.test.d.ts +2 -0
- package/dist/analyze/build-context.test.d.ts.map +1 -0
- package/dist/analyze/build-context.test.js +118 -0
- package/dist/analyze/build-context.test.js.map +1 -0
- package/dist/analyze/compare-runs.d.ts +49 -0
- package/dist/analyze/compare-runs.d.ts.map +1 -0
- package/dist/analyze/compare-runs.js +214 -0
- package/dist/analyze/compare-runs.js.map +1 -0
- package/dist/analyze/compare-runs.test.d.ts +2 -0
- package/dist/analyze/compare-runs.test.d.ts.map +1 -0
- package/dist/analyze/compare-runs.test.js +139 -0
- package/dist/analyze/compare-runs.test.js.map +1 -0
- package/dist/analyze/diff-hunks.d.ts +16 -0
- package/dist/analyze/diff-hunks.d.ts.map +1 -0
- package/dist/analyze/diff-hunks.js +287 -0
- package/dist/analyze/diff-hunks.js.map +1 -0
- package/dist/analyze/diff-hunks.test.d.ts +2 -0
- package/dist/analyze/diff-hunks.test.d.ts.map +1 -0
- package/dist/analyze/diff-hunks.test.js +54 -0
- package/dist/analyze/diff-hunks.test.js.map +1 -0
- package/dist/analyze/hunk-editor.d.ts +8 -0
- package/dist/analyze/hunk-editor.d.ts.map +1 -0
- package/dist/analyze/hunk-editor.js +129 -0
- package/dist/analyze/hunk-editor.js.map +1 -0
- package/dist/analyze/hunk-editor.test.d.ts +2 -0
- package/dist/analyze/hunk-editor.test.d.ts.map +1 -0
- package/dist/analyze/hunk-editor.test.js +48 -0
- package/dist/analyze/hunk-editor.test.js.map +1 -0
- package/dist/analyze/index.d.ts +23 -0
- package/dist/analyze/index.d.ts.map +1 -0
- package/dist/analyze/index.js +122 -0
- package/dist/analyze/index.js.map +1 -0
- package/dist/analyze/llm-fix.d.ts +11 -0
- package/dist/analyze/llm-fix.d.ts.map +1 -0
- package/dist/analyze/llm-fix.js +76 -0
- package/dist/analyze/llm-fix.js.map +1 -0
- package/dist/analyze/parse-proposal.d.ts +41 -0
- package/dist/analyze/parse-proposal.d.ts.map +1 -0
- package/dist/analyze/parse-proposal.js +53 -0
- package/dist/analyze/parse-proposal.js.map +1 -0
- package/dist/analyze/parse-proposal.test.d.ts +2 -0
- package/dist/analyze/parse-proposal.test.d.ts.map +1 -0
- package/dist/analyze/parse-proposal.test.js +40 -0
- package/dist/analyze/parse-proposal.test.js.map +1 -0
- package/dist/analyze/repl.d.ts +28 -0
- package/dist/analyze/repl.d.ts.map +1 -0
- package/dist/analyze/repl.js +284 -0
- package/dist/analyze/repl.js.map +1 -0
- package/dist/analyze/repl.test.d.ts +2 -0
- package/dist/analyze/repl.test.d.ts.map +1 -0
- package/dist/analyze/repl.test.js +101 -0
- package/dist/analyze/repl.test.js.map +1 -0
- package/dist/analyze/suggest.d.ts +5 -0
- package/dist/analyze/suggest.d.ts.map +1 -0
- package/dist/analyze/suggest.js +75 -0
- package/dist/analyze/suggest.js.map +1 -0
- package/dist/analyze/suggest.test.d.ts +2 -0
- package/dist/analyze/suggest.test.d.ts.map +1 -0
- package/dist/analyze/suggest.test.js +53 -0
- package/dist/analyze/suggest.test.js.map +1 -0
- package/dist/analyze/validate-markdown.d.ts +3 -0
- package/dist/analyze/validate-markdown.d.ts.map +1 -0
- package/dist/analyze/validate-markdown.js +25 -0
- package/dist/analyze/validate-markdown.js.map +1 -0
- package/dist/artifacts/policy.d.ts +9 -0
- package/dist/artifacts/policy.d.ts.map +1 -0
- package/dist/artifacts/policy.js +46 -0
- package/dist/artifacts/policy.js.map +1 -0
- package/dist/artifacts/policy.test.d.ts +2 -0
- package/dist/artifacts/policy.test.d.ts.map +1 -0
- package/dist/artifacts/policy.test.js +73 -0
- package/dist/artifacts/policy.test.js.map +1 -0
- package/dist/auth/resolve.d.ts +22 -0
- package/dist/auth/resolve.d.ts.map +1 -0
- package/dist/auth/resolve.js +148 -0
- package/dist/auth/resolve.js.map +1 -0
- package/dist/auth/store.d.ts +23 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +103 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/cache/generate.d.ts +8 -0
- package/dist/cache/generate.d.ts.map +1 -0
- package/dist/cache/generate.js +61 -0
- package/dist/cache/generate.js.map +1 -0
- package/dist/cache/hash.d.ts +5 -0
- package/dist/cache/hash.d.ts.map +1 -0
- package/dist/cache/hash.js +21 -0
- package/dist/cache/hash.js.map +1 -0
- package/dist/cache/hash.test.d.ts +2 -0
- package/dist/cache/hash.test.d.ts.map +1 -0
- package/dist/cache/hash.test.js +42 -0
- package/dist/cache/hash.test.js.map +1 -0
- package/dist/cache/resolve.d.ts +5 -0
- package/dist/cache/resolve.d.ts.map +1 -0
- package/dist/cache/resolve.js +8 -0
- package/dist/cache/resolve.js.map +1 -0
- package/dist/cache/store.d.ts +20 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +90 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/store.test.d.ts +2 -0
- package/dist/cache/store.test.d.ts.map +1 -0
- package/dist/cache/store.test.js +101 -0
- package/dist/cache/store.test.js.map +1 -0
- package/dist/cli/analyze.d.ts +21 -0
- package/dist/cli/analyze.d.ts.map +1 -0
- package/dist/cli/analyze.js +148 -0
- package/dist/cli/analyze.js.map +1 -0
- package/dist/cli/concurrency.d.ts +17 -0
- package/dist/cli/concurrency.d.ts.map +1 -0
- package/dist/cli/concurrency.js +56 -0
- package/dist/cli/concurrency.js.map +1 -0
- package/dist/cli/concurrency.test.d.ts +2 -0
- package/dist/cli/concurrency.test.d.ts.map +1 -0
- package/dist/cli/concurrency.test.js +74 -0
- package/dist/cli/concurrency.test.js.map +1 -0
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +14 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/help.d.ts +23 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +458 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/help.test.d.ts +2 -0
- package/dist/cli/help.test.d.ts.map +1 -0
- package/dist/cli/help.test.js +41 -0
- package/dist/cli/help.test.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +300 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/mcp.d.ts +6 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +17 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/record.d.ts +27 -0
- package/dist/cli/record.d.ts.map +1 -0
- package/dist/cli/record.js +244 -0
- package/dist/cli/record.js.map +1 -0
- package/dist/cli/run.d.ts +11 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +676 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/subprocess.d.ts +19 -0
- package/dist/cli/subprocess.d.ts.map +1 -0
- package/dist/cli/subprocess.js +142 -0
- package/dist/cli/subprocess.js.map +1 -0
- package/dist/cli/subprocess.test.d.ts +2 -0
- package/dist/cli/subprocess.test.d.ts.map +1 -0
- package/dist/cli/subprocess.test.js +76 -0
- package/dist/cli/subprocess.test.js.map +1 -0
- package/dist/cli/tags.d.ts +5 -0
- package/dist/cli/tags.d.ts.map +1 -0
- package/dist/cli/tags.js +33 -0
- package/dist/cli/tags.js.map +1 -0
- package/dist/cli/tags.test.d.ts +2 -0
- package/dist/cli/tags.test.d.ts.map +1 -0
- package/dist/cli/tags.test.js +31 -0
- package/dist/cli/tags.test.js.map +1 -0
- package/dist/config/env-vars.d.ts +2 -0
- package/dist/config/env-vars.d.ts.map +1 -0
- package/dist/config/env-vars.js +14 -0
- package/dist/config/env-vars.js.map +1 -0
- package/dist/config/env.d.ts +2 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +9 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/lightpanda.d.ts +6 -0
- package/dist/config/lightpanda.d.ts.map +1 -0
- package/dist/config/lightpanda.js +38 -0
- package/dist/config/lightpanda.js.map +1 -0
- package/dist/config/lightpanda.test.d.ts +2 -0
- package/dist/config/lightpanda.test.d.ts.map +1 -0
- package/dist/config/lightpanda.test.js +46 -0
- package/dist/config/lightpanda.test.js.map +1 -0
- package/dist/config/load.d.ts +22 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +242 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/load.test.d.ts +2 -0
- package/dist/config/load.test.d.ts.map +1 -0
- package/dist/config/load.test.js +86 -0
- package/dist/config/load.test.js.map +1 -0
- package/dist/config/set.d.ts +8 -0
- package/dist/config/set.d.ts.map +1 -0
- package/dist/config/set.js +93 -0
- package/dist/config/set.js.map +1 -0
- package/dist/config/set.test.d.ts +2 -0
- package/dist/config/set.test.d.ts.map +1 -0
- package/dist/config/set.test.js +98 -0
- package/dist/config/set.test.js.map +1 -0
- package/dist/healing/classify.d.ts +15 -0
- package/dist/healing/classify.d.ts.map +1 -0
- package/dist/healing/classify.js +209 -0
- package/dist/healing/classify.js.map +1 -0
- package/dist/healing/classify.test.d.ts +2 -0
- package/dist/healing/classify.test.d.ts.map +1 -0
- package/dist/healing/classify.test.js +167 -0
- package/dist/healing/classify.test.js.map +1 -0
- package/dist/healing/recovery-prompt.d.ts +3 -0
- package/dist/healing/recovery-prompt.d.ts.map +1 -0
- package/dist/healing/recovery-prompt.js +22 -0
- package/dist/healing/recovery-prompt.js.map +1 -0
- package/dist/mcp/inline-scenario.d.ts +13 -0
- package/dist/mcp/inline-scenario.d.ts.map +1 -0
- package/dist/mcp/inline-scenario.js +23 -0
- package/dist/mcp/inline-scenario.js.map +1 -0
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +186 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/skill.d.ts +5 -0
- package/dist/mcp/skill.d.ts.map +1 -0
- package/dist/mcp/skill.js +38 -0
- package/dist/mcp/skill.js.map +1 -0
- package/dist/mcp/skill.test.d.ts +2 -0
- package/dist/mcp/skill.test.d.ts.map +1 -0
- package/dist/mcp/skill.test.js +18 -0
- package/dist/mcp/skill.test.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +61 -0
- package/dist/paths.js.map +1 -0
- package/dist/prompt/load.d.ts +4 -0
- package/dist/prompt/load.d.ts.map +1 -0
- package/dist/prompt/load.js +19 -0
- package/dist/prompt/load.js.map +1 -0
- package/dist/recorder/bridge-process.d.ts +14 -0
- package/dist/recorder/bridge-process.d.ts.map +1 -0
- package/dist/recorder/bridge-process.js +133 -0
- package/dist/recorder/bridge-process.js.map +1 -0
- package/dist/recorder/bridge-process.test.d.ts +2 -0
- package/dist/recorder/bridge-process.test.d.ts.map +1 -0
- package/dist/recorder/bridge-process.test.js +36 -0
- package/dist/recorder/bridge-process.test.js.map +1 -0
- package/dist/recorder/bridge-worker.d.ts +2 -0
- package/dist/recorder/bridge-worker.d.ts.map +1 -0
- package/dist/recorder/bridge-worker.js +76 -0
- package/dist/recorder/bridge-worker.js.map +1 -0
- package/dist/recorder/bridge.d.ts +12 -0
- package/dist/recorder/bridge.d.ts.map +1 -0
- package/dist/recorder/bridge.js +61 -0
- package/dist/recorder/bridge.js.map +1 -0
- package/dist/recorder/bridge.test.d.ts +2 -0
- package/dist/recorder/bridge.test.d.ts.map +1 -0
- package/dist/recorder/bridge.test.js +21 -0
- package/dist/recorder/bridge.test.js.map +1 -0
- package/dist/recorder/enrich-event.d.ts +31 -0
- package/dist/recorder/enrich-event.d.ts.map +1 -0
- package/dist/recorder/enrich-event.js +91 -0
- package/dist/recorder/enrich-event.js.map +1 -0
- package/dist/recorder/events.d.ts +11 -0
- package/dist/recorder/events.d.ts.map +1 -0
- package/dist/recorder/events.js +42 -0
- package/dist/recorder/events.js.map +1 -0
- package/dist/recorder/events.test.d.ts +2 -0
- package/dist/recorder/events.test.d.ts.map +1 -0
- package/dist/recorder/events.test.js +40 -0
- package/dist/recorder/events.test.js.map +1 -0
- package/dist/recorder/generate-scenario.d.ts +16 -0
- package/dist/recorder/generate-scenario.d.ts.map +1 -0
- package/dist/recorder/generate-scenario.js +78 -0
- package/dist/recorder/generate-scenario.js.map +1 -0
- package/dist/recorder/in-page-helpers.d.ts +6 -0
- package/dist/recorder/in-page-helpers.d.ts.map +1 -0
- package/dist/recorder/in-page-helpers.js +238 -0
- package/dist/recorder/in-page-helpers.js.map +1 -0
- package/dist/recorder/in-page-helpers.test.d.ts +2 -0
- package/dist/recorder/in-page-helpers.test.d.ts.map +1 -0
- package/dist/recorder/in-page-helpers.test.js +186 -0
- package/dist/recorder/in-page-helpers.test.js.map +1 -0
- package/dist/recorder/page-script.d.ts +7 -0
- package/dist/recorder/page-script.d.ts.map +1 -0
- package/dist/recorder/page-script.js +132 -0
- package/dist/recorder/page-script.js.map +1 -0
- package/dist/recorder/redact.d.ts +8 -0
- package/dist/recorder/redact.d.ts.map +1 -0
- package/dist/recorder/redact.js +26 -0
- package/dist/recorder/redact.js.map +1 -0
- package/dist/recorder/redact.test.d.ts +2 -0
- package/dist/recorder/redact.test.d.ts.map +1 -0
- package/dist/recorder/redact.test.js +27 -0
- package/dist/recorder/redact.test.js.map +1 -0
- package/dist/recorder/session.d.ts +8 -0
- package/dist/recorder/session.d.ts.map +1 -0
- package/dist/recorder/session.js +28 -0
- package/dist/recorder/session.js.map +1 -0
- package/dist/recorder/snapshot-match.d.ts +22 -0
- package/dist/recorder/snapshot-match.d.ts.map +1 -0
- package/dist/recorder/snapshot-match.js +102 -0
- package/dist/recorder/snapshot-match.js.map +1 -0
- package/dist/recorder/snapshot-match.test.d.ts +2 -0
- package/dist/recorder/snapshot-match.test.d.ts.map +1 -0
- package/dist/recorder/snapshot-match.test.js +34 -0
- package/dist/recorder/snapshot-match.test.js.map +1 -0
- package/dist/redact/env-secrets.d.ts +14 -0
- package/dist/redact/env-secrets.d.ts.map +1 -0
- package/dist/redact/env-secrets.js +86 -0
- package/dist/redact/env-secrets.js.map +1 -0
- package/dist/redact/env-secrets.test.d.ts +2 -0
- package/dist/redact/env-secrets.test.d.ts.map +1 -0
- package/dist/redact/env-secrets.test.js +103 -0
- package/dist/redact/env-secrets.test.js.map +1 -0
- package/dist/reporter/export.d.ts +14 -0
- package/dist/reporter/export.d.ts.map +1 -0
- package/dist/reporter/export.js +53 -0
- package/dist/reporter/export.js.map +1 -0
- package/dist/reporter/export.test.d.ts +2 -0
- package/dist/reporter/export.test.d.ts.map +1 -0
- package/dist/reporter/export.test.js +100 -0
- package/dist/reporter/export.test.js.map +1 -0
- package/dist/reporter/index.d.ts +11 -0
- package/dist/reporter/index.d.ts.map +1 -0
- package/dist/reporter/index.js +161 -0
- package/dist/reporter/index.js.map +1 -0
- package/dist/reporter/index.test.d.ts +2 -0
- package/dist/reporter/index.test.d.ts.map +1 -0
- package/dist/reporter/index.test.js +61 -0
- package/dist/reporter/index.test.js.map +1 -0
- package/dist/scenarios/globs.d.ts +15 -0
- package/dist/scenarios/globs.d.ts.map +1 -0
- package/dist/scenarios/globs.js +48 -0
- package/dist/scenarios/globs.js.map +1 -0
- package/dist/scenarios/globs.test.d.ts +2 -0
- package/dist/scenarios/globs.test.d.ts.map +1 -0
- package/dist/scenarios/globs.test.js +53 -0
- package/dist/scenarios/globs.test.js.map +1 -0
- package/dist/scenarios/parser.d.ts +15 -0
- package/dist/scenarios/parser.d.ts.map +1 -0
- package/dist/scenarios/parser.js +278 -0
- package/dist/scenarios/parser.js.map +1 -0
- package/dist/scenarios/parser.test.d.ts +2 -0
- package/dist/scenarios/parser.test.d.ts.map +1 -0
- package/dist/scenarios/parser.test.js +373 -0
- package/dist/scenarios/parser.test.js.map +1 -0
- package/dist/skills/loader.d.ts +10 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +98 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/types/config.d.ts +131 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/recorder.d.ts +71 -0
- package/dist/types/recorder.d.ts.map +1 -0
- package/dist/types/recorder.js +2 -0
- package/dist/types/recorder.js.map +1 -0
- package/dist/types/scenario.d.ts +41 -0
- package/dist/types/scenario.d.ts.map +1 -0
- package/dist/types/scenario.js +2 -0
- package/dist/types/scenario.js.map +1 -0
- package/dist/types/skill.d.ts +20 -0
- package/dist/types/skill.d.ts.map +1 -0
- package/dist/types/skill.js +13 -0
- package/dist/types/skill.js.map +1 -0
- package/dist/types/verdict.d.ts +82 -0
- package/dist/types/verdict.d.ts.map +1 -0
- package/dist/types/verdict.js +13 -0
- package/dist/types/verdict.js.map +1 -0
- package/package.json +75 -0
- package/pqa.config.ts +82 -0
- package/prompt/ANALYZE-FLAKY.md +62 -0
- package/prompt/ANALYZE.md +110 -0
- package/prompt/CACHE-HINTS.md +49 -0
- package/prompt/RECORD.md +114 -0
- package/prompt/SYSTEM.md +118 -0
- package/skills/agent-browser/SKILL.md +2438 -0
- package/skills/create-pqa-scenario/SKILL.md +273 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { classifyFailure } from "../healing/classify.js";
|
|
5
|
+
import { parseScenarioFile } from "../scenarios/parser.js";
|
|
6
|
+
import { suggestScenarioFixes } from "./suggest.js";
|
|
7
|
+
export function listRunDirs(cwd) {
|
|
8
|
+
const runsRoot = path.join(cwd, ".pqa", "runs");
|
|
9
|
+
if (!existsSync(runsRoot)) {
|
|
10
|
+
throw new Error(`No runs directory at ${runsRoot}`);
|
|
11
|
+
}
|
|
12
|
+
const dirs = readdirSync(runsRoot)
|
|
13
|
+
.map((name) => path.join(runsRoot, name))
|
|
14
|
+
.filter((p) => statSync(p).isDirectory())
|
|
15
|
+
.sort((a, b) => statSync(b).mtimeMs - statSync(a).mtimeMs);
|
|
16
|
+
if (dirs.length === 0) {
|
|
17
|
+
throw new Error(`No runs found under ${runsRoot}`);
|
|
18
|
+
}
|
|
19
|
+
return dirs;
|
|
20
|
+
}
|
|
21
|
+
export function resolveRunDir(cwd, runPathOrId) {
|
|
22
|
+
if (!runPathOrId) {
|
|
23
|
+
return listRunDirs(cwd)[0];
|
|
24
|
+
}
|
|
25
|
+
const runsRoot = path.join(cwd, ".pqa", "runs");
|
|
26
|
+
const resolved = path.isAbsolute(runPathOrId)
|
|
27
|
+
? runPathOrId
|
|
28
|
+
: path.resolve(cwd, runPathOrId);
|
|
29
|
+
if (existsSync(resolved) && statSync(resolved).isDirectory()) {
|
|
30
|
+
return resolved;
|
|
31
|
+
}
|
|
32
|
+
const byId = path.join(runsRoot, runPathOrId);
|
|
33
|
+
if (existsSync(byId) && statSync(byId).isDirectory()) {
|
|
34
|
+
return byId;
|
|
35
|
+
}
|
|
36
|
+
throw new Error(`Run directory not found: ${runPathOrId}`);
|
|
37
|
+
}
|
|
38
|
+
export function resolveRunDirs(cwd, runIds, lastN) {
|
|
39
|
+
if (runIds.length > 0) {
|
|
40
|
+
return runIds.map((id) => resolveRunDir(cwd, id));
|
|
41
|
+
}
|
|
42
|
+
if (lastN !== undefined) {
|
|
43
|
+
if (lastN < 2) {
|
|
44
|
+
throw new Error("--last requires at least 2 runs for multi-run analysis");
|
|
45
|
+
}
|
|
46
|
+
const dirs = listRunDirs(cwd);
|
|
47
|
+
if (dirs.length < 2) {
|
|
48
|
+
throw new Error(`Multi-run analysis requires at least 2 runs; found ${dirs.length}`);
|
|
49
|
+
}
|
|
50
|
+
return dirs.slice(0, lastN);
|
|
51
|
+
}
|
|
52
|
+
return [resolveRunDir(cwd)];
|
|
53
|
+
}
|
|
54
|
+
export function loadRunReport(runDir) {
|
|
55
|
+
const reportPath = path.join(runDir, "report.json");
|
|
56
|
+
if (!existsSync(reportPath)) {
|
|
57
|
+
throw new Error(`Missing report.json in ${runDir}`);
|
|
58
|
+
}
|
|
59
|
+
return JSON.parse(readFileSync(reportPath, "utf-8"));
|
|
60
|
+
}
|
|
61
|
+
export function analyzeRun(runDir, cwd) {
|
|
62
|
+
const report = loadRunReport(runDir);
|
|
63
|
+
const findings = [];
|
|
64
|
+
for (const result of report.results) {
|
|
65
|
+
if (result.status !== "fail" && result.status !== "error")
|
|
66
|
+
continue;
|
|
67
|
+
let scenario;
|
|
68
|
+
try {
|
|
69
|
+
scenario = parseScenarioFile(path.isAbsolute(result.filePath)
|
|
70
|
+
? result.filePath
|
|
71
|
+
: path.resolve(cwd, result.filePath));
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
scenario = undefined;
|
|
75
|
+
}
|
|
76
|
+
const classified = classifyFailure(result, scenario);
|
|
77
|
+
const suggestions = suggestScenarioFixes(result, scenario, classified);
|
|
78
|
+
findings.push({
|
|
79
|
+
scenario: result.scenario,
|
|
80
|
+
filePath: result.filePath,
|
|
81
|
+
status: result.status,
|
|
82
|
+
failureKind: classified.kind,
|
|
83
|
+
confidence: classified.confidence,
|
|
84
|
+
suggestions,
|
|
85
|
+
signals: classified.signals,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
runId: report.runId,
|
|
90
|
+
analyzedAt: new Date().toISOString(),
|
|
91
|
+
findings,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function formatAnalyzeReport(report) {
|
|
95
|
+
if (report.findings.length === 0) {
|
|
96
|
+
return chalk.green(`Run ${report.runId}: no failed scenarios to analyze.`);
|
|
97
|
+
}
|
|
98
|
+
const lines = [
|
|
99
|
+
chalk.bold(`Analyze run ${report.runId}`),
|
|
100
|
+
chalk.dim(`Analyzed at ${report.analyzedAt}`),
|
|
101
|
+
"",
|
|
102
|
+
];
|
|
103
|
+
for (const f of report.findings) {
|
|
104
|
+
const kindColor = f.failureKind === "scenario_issue"
|
|
105
|
+
? chalk.yellow
|
|
106
|
+
: f.failureKind === "product"
|
|
107
|
+
? chalk.red
|
|
108
|
+
: f.failureKind === "transient"
|
|
109
|
+
? chalk.cyan
|
|
110
|
+
: chalk.gray;
|
|
111
|
+
lines.push(`${chalk.bold(f.scenario)} ${chalk.dim(`(${f.status})`)} — ${kindColor(f.failureKind)} [${f.confidence}]`);
|
|
112
|
+
if (f.signals.length > 0) {
|
|
113
|
+
lines.push(chalk.dim(` signals: ${f.signals.join(", ")}`));
|
|
114
|
+
}
|
|
115
|
+
for (const s of f.suggestions) {
|
|
116
|
+
lines.push(` • ${s}`);
|
|
117
|
+
}
|
|
118
|
+
lines.push("");
|
|
119
|
+
}
|
|
120
|
+
return lines.join("\n");
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PqaConfig } from "../types/config.js";
|
|
2
|
+
import type { FlakyLlmAnalyzeContext, LlmAnalyzeContext } from "./build-context.js";
|
|
3
|
+
import { type ScenarioFixProposal } from "./parse-proposal.js";
|
|
4
|
+
export interface LlmFixResult {
|
|
5
|
+
proposal: ScenarioFixProposal | null;
|
|
6
|
+
rawText: string;
|
|
7
|
+
parseError?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function proposeScenarioFixWithLlm(config: PqaConfig, context: LlmAnalyzeContext, cwd: string): Promise<LlmFixResult>;
|
|
10
|
+
export declare function proposeFlakyScenarioFixWithLlm(config: PqaConfig, context: FlakyLlmAnalyzeContext, cwd: string): Promise<LlmFixResult>;
|
|
11
|
+
//# sourceMappingURL=llm-fix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-fix.d.ts","sourceRoot":"","sources":["../../src/analyze/llm-fix.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsFD,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,iBAAiB,EAC1B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,YAAY,CAAC,CAOvB;AAED,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,sBAAsB,EAC/B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,YAAY,CAAC,CAOvB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { generateText } from "ai";
|
|
3
|
+
import { createLlmModel } from "../agent/llm-model.js";
|
|
4
|
+
import { resolveBundledPath } from "../paths.js";
|
|
5
|
+
import { extractScenarioFixProposal, } from "./parse-proposal.js";
|
|
6
|
+
import { validateScenarioMarkdown } from "./validate-markdown.js";
|
|
7
|
+
async function validateAndRetryProposal(config, system, formatRef, proposal, rawText) {
|
|
8
|
+
if (!proposal.shouldEditScenario) {
|
|
9
|
+
return { proposal, rawText };
|
|
10
|
+
}
|
|
11
|
+
const markdown = proposal.revisedMarkdown?.trim();
|
|
12
|
+
if (!markdown) {
|
|
13
|
+
return {
|
|
14
|
+
proposal,
|
|
15
|
+
rawText,
|
|
16
|
+
parseError: "shouldEditScenario is true but revisedMarkdown is missing",
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
validateScenarioMarkdown(markdown);
|
|
21
|
+
return { proposal, rawText };
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
const parseError = `revisedMarkdown failed parse: ${String(err)}`;
|
|
25
|
+
const retry = await generateText({
|
|
26
|
+
model: createLlmModel(config),
|
|
27
|
+
system: `${system}\n\n---\n\n## Reference: scenario format\n\n${formatRef}`,
|
|
28
|
+
prompt: `The revised scenario failed to parse: ${parseError}\n\nReturn ONLY fixed JSON with valid revisedMarkdown.\n\nPrevious JSON:\n\`\`\`json\n${JSON.stringify(proposal, null, 2)}\n\`\`\``,
|
|
29
|
+
maxOutputTokens: 8192,
|
|
30
|
+
});
|
|
31
|
+
const retried = extractScenarioFixProposal(retry.text);
|
|
32
|
+
if (!retried?.shouldEditScenario || !retried.revisedMarkdown?.trim()) {
|
|
33
|
+
return { proposal, rawText: retry.text, parseError };
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
validateScenarioMarkdown(retried.revisedMarkdown);
|
|
37
|
+
return { proposal: retried, rawText: retry.text };
|
|
38
|
+
}
|
|
39
|
+
catch (retryErr) {
|
|
40
|
+
return {
|
|
41
|
+
proposal: retried,
|
|
42
|
+
rawText: retry.text,
|
|
43
|
+
parseError: `revisedMarkdown failed parse after retry: ${String(retryErr)}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function runLlmProposal(config, cwd, systemRelPath, userPrompt) {
|
|
49
|
+
const systemPath = resolveBundledPath(cwd, systemRelPath);
|
|
50
|
+
const formatPath = resolveBundledPath(cwd, "prompt/references/scenario-format.md");
|
|
51
|
+
const system = readFileSync(systemPath, "utf-8");
|
|
52
|
+
const formatRef = readFileSync(formatPath, "utf-8");
|
|
53
|
+
const fullSystem = `${system}\n\n---\n\n## Reference: scenario format\n\n${formatRef}`;
|
|
54
|
+
const { text } = await generateText({
|
|
55
|
+
model: createLlmModel(config),
|
|
56
|
+
system: fullSystem,
|
|
57
|
+
prompt: userPrompt,
|
|
58
|
+
maxOutputTokens: 8192,
|
|
59
|
+
});
|
|
60
|
+
const proposal = extractScenarioFixProposal(text);
|
|
61
|
+
if (!proposal) {
|
|
62
|
+
return {
|
|
63
|
+
proposal: null,
|
|
64
|
+
rawText: text,
|
|
65
|
+
parseError: "LLM response did not contain valid proposal JSON",
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return validateAndRetryProposal(config, system, formatRef, proposal, text);
|
|
69
|
+
}
|
|
70
|
+
export async function proposeScenarioFixWithLlm(config, context, cwd) {
|
|
71
|
+
return runLlmProposal(config, cwd, "prompt/ANALYZE.md", `Analyze this failed run and propose scenario fixes.\n\n\`\`\`json\n${JSON.stringify(context, null, 2)}\n\`\`\`\n\nReply with ONLY the JSON code block from the output schema.`);
|
|
72
|
+
}
|
|
73
|
+
export async function proposeFlakyScenarioFixWithLlm(config, context, cwd) {
|
|
74
|
+
return runLlmProposal(config, cwd, "prompt/ANALYZE-FLAKY.md", `Compare pass vs fail runs for this flaky scenario and propose stabilizing edits.\n\n\`\`\`json\n${JSON.stringify(context, null, 2)}\n\`\`\`\n\nReply with ONLY the JSON code block from the output schema.`);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=llm-fix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-fix.js","sourceRoot":"","sources":["../../src/analyze/llm-fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const FlakeDiagnosisSchema: z.ZodObject<{
|
|
3
|
+
type: z.ZodEnum<{
|
|
4
|
+
product: "product";
|
|
5
|
+
false_negative: "false_negative";
|
|
6
|
+
false_positive: "false_positive";
|
|
7
|
+
timing_flake: "timing_flake";
|
|
8
|
+
agent_drift: "agent_drift";
|
|
9
|
+
}>;
|
|
10
|
+
confidence: z.ZodEnum<{
|
|
11
|
+
low: "low";
|
|
12
|
+
medium: "medium";
|
|
13
|
+
high: "high";
|
|
14
|
+
}>;
|
|
15
|
+
explanation: z.ZodString;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
export declare const ScenarioFixProposalSchema: z.ZodObject<{
|
|
18
|
+
shouldEditScenario: z.ZodBoolean;
|
|
19
|
+
rationale: z.ZodString;
|
|
20
|
+
changes: z.ZodArray<z.ZodString>;
|
|
21
|
+
revisedMarkdown: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
22
|
+
flakeDiagnosis: z.ZodOptional<z.ZodObject<{
|
|
23
|
+
type: z.ZodEnum<{
|
|
24
|
+
product: "product";
|
|
25
|
+
false_negative: "false_negative";
|
|
26
|
+
false_positive: "false_positive";
|
|
27
|
+
timing_flake: "timing_flake";
|
|
28
|
+
agent_drift: "agent_drift";
|
|
29
|
+
}>;
|
|
30
|
+
confidence: z.ZodEnum<{
|
|
31
|
+
low: "low";
|
|
32
|
+
medium: "medium";
|
|
33
|
+
high: "high";
|
|
34
|
+
}>;
|
|
35
|
+
explanation: z.ZodString;
|
|
36
|
+
}, z.core.$strip>>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export type FlakeDiagnosis = z.infer<typeof FlakeDiagnosisSchema>;
|
|
39
|
+
export type ScenarioFixProposal = z.infer<typeof ScenarioFixProposalSchema>;
|
|
40
|
+
export declare function extractScenarioFixProposal(text: string): ScenarioFixProposal | null;
|
|
41
|
+
//# sourceMappingURL=parse-proposal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-proposal.d.ts","sourceRoot":"","sources":["../../src/analyze/parse-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;iBAU/B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;iBAMpC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAiCnF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const FlakeDiagnosisSchema = z.object({
|
|
3
|
+
type: z.enum([
|
|
4
|
+
"false_negative",
|
|
5
|
+
"false_positive",
|
|
6
|
+
"timing_flake",
|
|
7
|
+
"agent_drift",
|
|
8
|
+
"product",
|
|
9
|
+
]),
|
|
10
|
+
confidence: z.enum(["high", "medium", "low"]),
|
|
11
|
+
explanation: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export const ScenarioFixProposalSchema = z.object({
|
|
14
|
+
shouldEditScenario: z.boolean(),
|
|
15
|
+
rationale: z.string(),
|
|
16
|
+
changes: z.array(z.string()),
|
|
17
|
+
revisedMarkdown: z.string().nullable().optional(),
|
|
18
|
+
flakeDiagnosis: FlakeDiagnosisSchema.optional(),
|
|
19
|
+
});
|
|
20
|
+
export function extractScenarioFixProposal(text) {
|
|
21
|
+
const jsonBlock = /```(?:json)?\s*([\s\S]*?)```/g;
|
|
22
|
+
let match;
|
|
23
|
+
const candidates = [];
|
|
24
|
+
while ((match = jsonBlock.exec(text)) !== null) {
|
|
25
|
+
candidates.push(match[1].trim());
|
|
26
|
+
}
|
|
27
|
+
candidates.push(text.trim());
|
|
28
|
+
for (const candidate of candidates.reverse()) {
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(candidate);
|
|
31
|
+
const result = ScenarioFixProposalSchema.safeParse(parsed);
|
|
32
|
+
if (result.success)
|
|
33
|
+
return result.data;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// continue
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const inline = /\{[\s\S]*"shouldEditScenario"\s*:\s*(?:true|false)[\s\S]*\}/.exec(text);
|
|
40
|
+
if (inline) {
|
|
41
|
+
try {
|
|
42
|
+
const parsed = JSON.parse(inline[0]);
|
|
43
|
+
const result = ScenarioFixProposalSchema.safeParse(parsed);
|
|
44
|
+
if (result.success)
|
|
45
|
+
return result.data;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// continue
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=parse-proposal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-proposal.js","sourceRoot":"","sources":["../../src/analyze/parse-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACX,gBAAgB;QAChB,gBAAgB;QAChB,cAAc;QACd,aAAa;QACb,SAAS;KACV,CAAC;IACF,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,cAAc,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAKH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,SAAS,GAAG,+BAA+B,CAAC;IAClD,IAAI,KAA6B,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAY,CAAC;YAChD,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GACV,6DAA6D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAY,CAAC;YAChD,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3D,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-proposal.test.d.ts","sourceRoot":"","sources":["../../src/analyze/parse-proposal.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { describe, it } from "node:test";
|
|
3
|
+
import { extractScenarioFixProposal } from "./parse-proposal.js";
|
|
4
|
+
describe("extractScenarioFixProposal", () => {
|
|
5
|
+
it("parses JSON from fenced block", () => {
|
|
6
|
+
const text = `\`\`\`json
|
|
7
|
+
{
|
|
8
|
+
"shouldEditScenario": true,
|
|
9
|
+
"rationale": "Move checkpoint earlier.",
|
|
10
|
+
"changes": ["Move Then item"],
|
|
11
|
+
"revisedMarkdown": "---\\nname: x\\n---\\n"
|
|
12
|
+
}
|
|
13
|
+
\`\`\``;
|
|
14
|
+
const proposal = extractScenarioFixProposal(text);
|
|
15
|
+
assert.ok(proposal);
|
|
16
|
+
assert.equal(proposal.shouldEditScenario, true);
|
|
17
|
+
assert.equal(proposal.changes[0], "Move Then item");
|
|
18
|
+
});
|
|
19
|
+
it("returns null for invalid payload", () => {
|
|
20
|
+
assert.equal(extractScenarioFixProposal("not json"), null);
|
|
21
|
+
});
|
|
22
|
+
it("parses optional flakeDiagnosis", () => {
|
|
23
|
+
const text = `\`\`\`json
|
|
24
|
+
{
|
|
25
|
+
"shouldEditScenario": false,
|
|
26
|
+
"rationale": "Product bug.",
|
|
27
|
+
"changes": [],
|
|
28
|
+
"flakeDiagnosis": {
|
|
29
|
+
"type": "false_negative",
|
|
30
|
+
"confidence": "high",
|
|
31
|
+
"explanation": "Then checked too late."
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
\`\`\``;
|
|
35
|
+
const proposal = extractScenarioFixProposal(text);
|
|
36
|
+
assert.ok(proposal?.flakeDiagnosis);
|
|
37
|
+
assert.equal(proposal.flakeDiagnosis.type, "false_negative");
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=parse-proposal.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-proposal.test.js","sourceRoot":"","sources":["../../src/analyze/parse-proposal.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG;;;;;;;OAOV,CAAC;QACJ,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,QAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,IAAI,GAAG;;;;;;;;;;;OAWV,CAAC;QACJ,MAAM,QAAQ,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,QAAS,CAAC,cAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AnalyzeFinding, AnalyzeReport } from "./index.js";
|
|
2
|
+
import type { FlakyAnalyzeReport } from "./compare-runs.js";
|
|
3
|
+
import { type DiffHunk } from "./diff-hunks.js";
|
|
4
|
+
import type { ScenarioFixProposal } from "./parse-proposal.js";
|
|
5
|
+
export interface LlmReplEntry {
|
|
6
|
+
finding: AnalyzeFinding;
|
|
7
|
+
proposal: ScenarioFixProposal | null;
|
|
8
|
+
parseError?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AnalyzeReplOptions {
|
|
11
|
+
heuristicReport: AnalyzeReport;
|
|
12
|
+
flakyReport?: FlakyAnalyzeReport;
|
|
13
|
+
llmEntries: LlmReplEntry[];
|
|
14
|
+
cwd: string;
|
|
15
|
+
ask?: (prompt: string) => Promise<string>;
|
|
16
|
+
waitForKey?: (message: string) => Promise<void>;
|
|
17
|
+
editHunk?: (hunk: DiffHunk, filePath: string) => DiffHunk | null;
|
|
18
|
+
}
|
|
19
|
+
export interface AnalyzeReplResult {
|
|
20
|
+
appliedFiles: string[];
|
|
21
|
+
quit: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function waitForAnyKey(message: string, waitForKey?: (message: string) => Promise<void>): Promise<void>;
|
|
24
|
+
export declare function formatHunkDisplay(hunk: DiffHunk, index: number, total: number, filePath: string): string;
|
|
25
|
+
export declare function runAnalyzeRepl(options: AnalyzeReplOptions): Promise<AnalyzeReplResult>;
|
|
26
|
+
export declare function formatHeuristicSummary(report: AnalyzeReport): string;
|
|
27
|
+
export declare function formatFlakySummary(report: FlakyAnalyzeReport): string;
|
|
28
|
+
//# sourceMappingURL=repl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/analyze/repl.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAML,KAAK,QAAQ,EACd,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAM/D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,aAAa,CAAC;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,KAAK,QAAQ,GAAG,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AASD,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AA8GD,wBAAsB,cAAc,CAClC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAkI5B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAiCpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CA4CrE"}
|