agent-nuvira 3.3.3 → 3.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -5
- package/dist/agent-sdk/src/agent.d.ts +2 -0
- package/dist/agent-sdk/src/agent.d.ts.map +1 -1
- package/dist/agent-sdk/src/define.d.ts +64 -0
- package/dist/agent-sdk/src/define.d.ts.map +1 -0
- package/dist/agent-sdk/src/define.js +76 -0
- package/dist/agent-sdk/src/define.js.map +1 -0
- package/dist/agent-sdk/src/index.d.ts +9 -0
- package/dist/agent-sdk/src/index.d.ts.map +1 -1
- package/dist/agent-sdk/src/index.js +9 -0
- package/dist/agent-sdk/src/index.js.map +1 -1
- package/dist/agent-sdk/src/scaffold.d.ts +11 -0
- package/dist/agent-sdk/src/scaffold.d.ts.map +1 -1
- package/dist/agent-sdk/src/scaffold.js +16 -6
- package/dist/agent-sdk/src/scaffold.js.map +1 -1
- package/dist/agents/long-form-plan.d.ts.map +1 -1
- package/dist/agents/long-form-plan.js +2 -1
- package/dist/agents/long-form-plan.js.map +1 -1
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +5 -4
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/cli/agent.d.ts +2 -2
- package/dist/cli/agent.js +10 -10
- package/dist/cli/chat.d.ts +94 -0
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +354 -20
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts.map +1 -1
- package/dist/cli/cli-program.js +5 -0
- package/dist/cli/cli-program.js.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +9 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +3 -2
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/edit.js +2 -2
- package/dist/cli/eval.d.ts +17 -0
- package/dist/cli/eval.d.ts.map +1 -1
- package/dist/cli/eval.js +105 -2
- package/dist/cli/eval.js.map +1 -1
- package/dist/cli/execute.d.ts +16 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +192 -22
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/loop-executor.d.ts +55 -0
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +212 -13
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/model.d.ts.map +1 -1
- package/dist/cli/model.js +9 -8
- package/dist/cli/model.js.map +1 -1
- package/dist/cli/models.d.ts +1 -1
- package/dist/cli/models.js +4 -4
- package/dist/cli/parity.d.ts +85 -0
- package/dist/cli/parity.d.ts.map +1 -0
- package/dist/cli/parity.js +506 -0
- package/dist/cli/parity.js.map +1 -0
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +2 -1
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/retrieval.d.ts.map +1 -1
- package/dist/cli/retrieval.js +5 -4
- package/dist/cli/retrieval.js.map +1 -1
- package/dist/cli/sdk.js +4 -4
- package/dist/cli/sdk.js.map +1 -1
- package/dist/cli/trace.d.ts.map +1 -1
- package/dist/cli/trace.js +2 -1
- package/dist/cli/trace.js.map +1 -1
- package/dist/cli/workflow.js +2 -2
- package/dist/cli/workflow.js.map +1 -1
- package/dist/config/types.d.ts +44 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/findings/verdicts.d.ts +241 -0
- package/dist/findings/verdicts.d.ts.map +1 -0
- package/dist/findings/verdicts.js +284 -0
- package/dist/findings/verdicts.js.map +1 -0
- package/dist/gateway/adapters.d.ts +65 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +216 -10
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/channel-directory.d.ts +31 -0
- package/dist/gateway/channel-directory.d.ts.map +1 -1
- package/dist/gateway/channel-directory.js +40 -0
- package/dist/gateway/channel-directory.js.map +1 -1
- package/dist/gateway/gateway-log.d.ts +1 -1
- package/dist/gateway/gateway-log.d.ts.map +1 -1
- package/dist/gateway/gateway-log.js.map +1 -1
- package/dist/gateway/hooks.d.ts +87 -19
- package/dist/gateway/hooks.d.ts.map +1 -1
- package/dist/gateway/hooks.js +62 -23
- package/dist/gateway/hooks.js.map +1 -1
- package/dist/gateway/inbound-media.d.ts +147 -0
- package/dist/gateway/inbound-media.d.ts.map +1 -0
- package/dist/gateway/inbound-media.js +317 -0
- package/dist/gateway/inbound-media.js.map +1 -0
- package/dist/gateway/inbox.d.ts +8 -1
- package/dist/gateway/inbox.d.ts.map +1 -1
- package/dist/gateway/inbox.js.map +1 -1
- package/dist/gateway/platform-config.d.ts +14 -0
- package/dist/gateway/platform-config.d.ts.map +1 -1
- package/dist/gateway/platform-config.js +26 -8
- package/dist/gateway/platform-config.js.map +1 -1
- package/dist/gateway/realtime.d.ts +114 -0
- package/dist/gateway/realtime.d.ts.map +1 -0
- package/dist/gateway/realtime.js +402 -0
- package/dist/gateway/realtime.js.map +1 -0
- package/dist/gateway/registry.d.ts +31 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +224 -4
- package/dist/gateway/registry.js.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.js +123 -4
- package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
- package/dist/gateway/whatsapp/bridge.d.ts +6 -2
- package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/bridge.js.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/inference/factory.d.ts +14 -0
- package/dist/inference/factory.d.ts.map +1 -1
- package/dist/inference/factory.js +17 -0
- package/dist/inference/factory.js.map +1 -1
- package/dist/inference/groq-adapter.d.ts +2 -0
- package/dist/inference/groq-adapter.d.ts.map +1 -1
- package/dist/inference/groq-adapter.js +16 -6
- package/dist/inference/groq-adapter.js.map +1 -1
- package/dist/inference/tools.d.ts.map +1 -1
- package/dist/inference/tools.js +29 -0
- package/dist/inference/tools.js.map +1 -1
- package/dist/learning/benchmark.d.ts.map +1 -1
- package/dist/learning/benchmark.js +3 -2
- package/dist/learning/benchmark.js.map +1 -1
- package/dist/learning/continuation.d.ts.map +1 -1
- package/dist/learning/continuation.js +2 -1
- package/dist/learning/continuation.js.map +1 -1
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +2 -1
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/deferred-task.d.ts.map +1 -1
- package/dist/learning/deferred-task.js +13 -4
- package/dist/learning/deferred-task.js.map +1 -1
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +2 -1
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/long-form.d.ts.map +1 -1
- package/dist/learning/long-form.js +2 -1
- package/dist/learning/long-form.js.map +1 -1
- package/dist/learning/model-registry.d.ts.map +1 -1
- package/dist/learning/model-registry.js +2 -1
- package/dist/learning/model-registry.js.map +1 -1
- package/dist/learning/reasoning-cache.d.ts.map +1 -1
- package/dist/learning/reasoning-cache.js +2 -1
- package/dist/learning/reasoning-cache.js.map +1 -1
- package/dist/learning/reasoning-trace.d.ts +37 -1
- package/dist/learning/reasoning-trace.d.ts.map +1 -1
- package/dist/learning/reasoning-trace.js +66 -0
- package/dist/learning/reasoning-trace.js.map +1 -1
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +2 -1
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/learning/retrieval.d.ts.map +1 -1
- package/dist/learning/retrieval.js +2 -1
- package/dist/learning/retrieval.js.map +1 -1
- package/dist/learning/seeded-benchmark.d.ts +160 -0
- package/dist/learning/seeded-benchmark.d.ts.map +1 -0
- package/dist/learning/seeded-benchmark.js +321 -0
- package/dist/learning/seeded-benchmark.js.map +1 -0
- package/dist/learning/seeded-bugs.d.ts +142 -0
- package/dist/learning/seeded-bugs.d.ts.map +1 -0
- package/dist/learning/seeded-bugs.js +535 -0
- package/dist/learning/seeded-bugs.js.map +1 -0
- package/dist/learning/step-checkpoint.d.ts +127 -0
- package/dist/learning/step-checkpoint.d.ts.map +1 -0
- package/dist/learning/step-checkpoint.js +244 -0
- package/dist/learning/step-checkpoint.js.map +1 -0
- package/dist/nlu/intent-confirm.d.ts +23 -1
- package/dist/nlu/intent-confirm.d.ts.map +1 -1
- package/dist/nlu/intent-confirm.js +85 -2
- package/dist/nlu/intent-confirm.js.map +1 -1
- package/dist/nlu/learnings.d.ts +7 -0
- package/dist/nlu/learnings.d.ts.map +1 -1
- package/dist/nlu/learnings.js +7 -0
- package/dist/nlu/learnings.js.map +1 -1
- package/dist/observability/debug-log.d.ts +250 -0
- package/dist/observability/debug-log.d.ts.map +1 -0
- package/dist/observability/debug-log.js +500 -0
- package/dist/observability/debug-log.js.map +1 -0
- package/dist/observability/event-bus.d.ts.map +1 -1
- package/dist/observability/event-bus.js +4 -1
- package/dist/observability/event-bus.js.map +1 -1
- package/dist/observability/otel.d.ts +278 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +590 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/parity/drivers.d.ts +99 -0
- package/dist/parity/drivers.d.ts.map +1 -0
- package/dist/parity/drivers.js +1362 -0
- package/dist/parity/drivers.js.map +1 -0
- package/dist/parity/graph.d.ts +73 -0
- package/dist/parity/graph.d.ts.map +1 -0
- package/dist/parity/graph.js +162 -0
- package/dist/parity/graph.js.map +1 -0
- package/dist/parity/matrix.d.ts +105 -0
- package/dist/parity/matrix.d.ts.map +1 -0
- package/dist/parity/matrix.js +352 -0
- package/dist/parity/matrix.js.map +1 -0
- package/dist/parity/observation.d.ts +444 -0
- package/dist/parity/observation.d.ts.map +1 -0
- package/dist/parity/observation.js +333 -0
- package/dist/parity/observation.js.map +1 -0
- package/dist/parity/scenarios.d.ts +229 -0
- package/dist/parity/scenarios.d.ts.map +1 -0
- package/dist/parity/scenarios.js +175 -0
- package/dist/parity/scenarios.js.map +1 -0
- package/dist/parity/surfaces.d.ts +122 -0
- package/dist/parity/surfaces.d.ts.map +1 -0
- package/dist/parity/surfaces.js +190 -0
- package/dist/parity/surfaces.js.map +1 -0
- package/dist/runtime/fault-injection.d.ts +173 -0
- package/dist/runtime/fault-injection.d.ts.map +1 -0
- package/dist/runtime/fault-injection.js +281 -0
- package/dist/runtime/fault-injection.js.map +1 -0
- package/dist/tools/child-agent-entry.d.ts +23 -0
- package/dist/tools/child-agent-entry.d.ts.map +1 -0
- package/dist/tools/child-agent-entry.js +129 -0
- package/dist/tools/child-agent-entry.js.map +1 -0
- package/dist/tools/child-agent-runtime.d.ts +124 -0
- package/dist/tools/child-agent-runtime.d.ts.map +1 -0
- package/dist/tools/child-agent-runtime.js +704 -0
- package/dist/tools/child-agent-runtime.js.map +1 -0
- package/dist/tools/coding-tools.d.ts.map +1 -1
- package/dist/tools/coding-tools.js +82 -10
- package/dist/tools/coding-tools.js.map +1 -1
- package/dist/tools/delegation-system.d.ts +31 -0
- package/dist/tools/delegation-system.d.ts.map +1 -1
- package/dist/tools/delegation-system.js +70 -9
- package/dist/tools/delegation-system.js.map +1 -1
- package/dist/tools/extract/docx.d.ts +27 -0
- package/dist/tools/extract/docx.d.ts.map +1 -0
- package/dist/tools/extract/docx.js +48 -0
- package/dist/tools/extract/docx.js.map +1 -0
- package/dist/tools/extract/html-text.d.ts +27 -0
- package/dist/tools/extract/html-text.d.ts.map +1 -0
- package/dist/tools/extract/html-text.js +86 -0
- package/dist/tools/extract/html-text.js.map +1 -0
- package/dist/tools/extract/pdf-ocr.d.ts +58 -0
- package/dist/tools/extract/pdf-ocr.d.ts.map +1 -0
- package/dist/tools/extract/pdf-ocr.js +116 -0
- package/dist/tools/extract/pdf-ocr.js.map +1 -0
- package/dist/tools/extract/pdf.d.ts +65 -0
- package/dist/tools/extract/pdf.d.ts.map +1 -0
- package/dist/tools/extract/pdf.js +197 -0
- package/dist/tools/extract/pdf.js.map +1 -0
- package/dist/tools/extract/pptx.d.ts +32 -0
- package/dist/tools/extract/pptx.d.ts.map +1 -0
- package/dist/tools/extract/pptx.js +77 -0
- package/dist/tools/extract/pptx.js.map +1 -0
- package/dist/tools/extract/xlsx.d.ts +47 -0
- package/dist/tools/extract/xlsx.d.ts.map +1 -0
- package/dist/tools/extract/xlsx.js +111 -0
- package/dist/tools/extract/xlsx.js.map +1 -0
- package/dist/tools/finding-tool.d.ts +76 -0
- package/dist/tools/finding-tool.d.ts.map +1 -0
- package/dist/tools/finding-tool.js +125 -0
- package/dist/tools/finding-tool.js.map +1 -0
- package/dist/tools/messaging-tools.d.ts +41 -11
- package/dist/tools/messaging-tools.d.ts.map +1 -1
- package/dist/tools/messaging-tools.js +104 -55
- package/dist/tools/messaging-tools.js.map +1 -1
- package/dist/tools/neutts-synth.d.ts +27 -3
- package/dist/tools/neutts-synth.d.ts.map +1 -1
- package/dist/tools/neutts-synth.js +57 -13
- package/dist/tools/neutts-synth.js.map +1 -1
- package/dist/tools/pipeline-tool.d.ts +43 -1
- package/dist/tools/pipeline-tool.d.ts.map +1 -1
- package/dist/tools/pipeline-tool.js +13 -2
- package/dist/tools/pipeline-tool.js.map +1 -1
- package/dist/tools/read-extract.d.ts +116 -45
- package/dist/tools/read-extract.d.ts.map +1 -1
- package/dist/tools/read-extract.js +494 -158
- package/dist/tools/read-extract.js.map +1 -1
- package/dist/tools/registry.d.ts +2 -2
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +152 -23
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/subagent-refusal.d.ts +15 -0
- package/dist/tools/subagent-refusal.d.ts.map +1 -0
- package/dist/tools/subagent-refusal.js +18 -0
- package/dist/tools/subagent-refusal.js.map +1 -0
- package/dist/tools/subagent-spawner.d.ts +122 -0
- package/dist/tools/subagent-spawner.d.ts.map +1 -1
- package/dist/tools/subagent-spawner.js +249 -28
- package/dist/tools/subagent-spawner.js.map +1 -1
- package/dist/tools/tool-hooks.d.ts +177 -0
- package/dist/tools/tool-hooks.d.ts.map +1 -0
- package/dist/tools/tool-hooks.js +427 -0
- package/dist/tools/tool-hooks.js.map +1 -0
- package/dist/tools/tool-loop.d.ts +82 -0
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +167 -9
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/tool-refusal.d.ts +68 -0
- package/dist/tools/tool-refusal.d.ts.map +1 -0
- package/dist/tools/tool-refusal.js +78 -0
- package/dist/tools/tool-refusal.js.map +1 -0
- package/dist/tools/toolsets.d.ts +8 -0
- package/dist/tools/toolsets.d.ts.map +1 -1
- package/dist/tools/toolsets.js +12 -2
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/tools/vision-tools.d.ts +88 -83
- package/dist/tools/vision-tools.d.ts.map +1 -1
- package/dist/tools/vision-tools.js +134 -103
- package/dist/tools/vision-tools.js.map +1 -1
- package/dist/tools/worktree.d.ts +210 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +374 -0
- package/dist/tools/worktree.js.map +1 -0
- package/dist/utils/format.d.ts +3 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +32 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/web-dashboard/attachment-extract.d.ts +64 -0
- package/dist/web-dashboard/attachment-extract.d.ts.map +1 -0
- package/dist/web-dashboard/attachment-extract.js +154 -0
- package/dist/web-dashboard/attachment-extract.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +108 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +36 -0
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +37 -0
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +61 -1
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +14 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +247 -13
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +196 -48
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/package.json +18 -3
- package/src/web-dashboard/public/assets/{index-Cyd6tIew.css → index-XJjj2cBX.css} +1 -1
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js +207 -0
- package/src/web-dashboard/public/assets/index-YWF9FpwQ.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/dist/tools/child-agent-worker.js +0 -212
- package/src/web-dashboard/public/assets/index-CxDj7p6i.js +0 -207
- package/src/web-dashboard/public/assets/index-CxDj7p6i.js.map +0 -1
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS7 (#29) — running the seeded-bug suite and scoring it.
|
|
3
|
+
*
|
|
4
|
+
* WHY A SEPARATE MODULE FROM `seeded-bugs.ts`. That file is the SUITE — the
|
|
5
|
+
* defects, their fixes, and the verification that each seed is genuinely broken. It
|
|
6
|
+
* is pure data plus a verifier, and it must stay importable by a test with no
|
|
7
|
+
* provider, no network and no engine. This file is the RUNNER: it scaffolds a
|
|
8
|
+
* workspace, hands it to whatever runs the agent, and scores what came back. The
|
|
9
|
+
* agent is INJECTED (`runAgent`) rather than called here, which is what keeps the
|
|
10
|
+
* scoring testable offline — a fake agent that applies the reference fix and one
|
|
11
|
+
* that does nothing are both first-class inputs, and neither costs a token.
|
|
12
|
+
*
|
|
13
|
+
* THREE THINGS ARE SCORED, and they are kept apart because they fail apart:
|
|
14
|
+
*
|
|
15
|
+
* - DETECTED — did the run say what was wrong? Read from what the agent REPORTED
|
|
16
|
+
* (its own summary), matched against the defect's diagnostic vocabulary. An
|
|
17
|
+
* agent can fix a defect it never understood, and it can describe one it failed
|
|
18
|
+
* to fix; collapsing the two into "passed" hides exactly the difference a
|
|
19
|
+
* benchmark exists to measure.
|
|
20
|
+
* - FIXED — do the checks pass now? The ground truth, and the only one that is
|
|
21
|
+
* not a reading of the model's own prose.
|
|
22
|
+
* - TARGET-ONLY — did anything ELSE change? Measured by diffing every seeded file
|
|
23
|
+
* against its original content and listing files the seed never had. A fix that
|
|
24
|
+
* rewrites three unrelated files is not the same result as one that changes the
|
|
25
|
+
* single responsible line, and "the tests pass" cannot tell them apart.
|
|
26
|
+
*
|
|
27
|
+
* REFUSES TO SCORE AN UNVERIFIED SEED. Every task is verified first, and a seed
|
|
28
|
+
* that is not provably broken (or not provably fixable) aborts the run instead of
|
|
29
|
+
* being scored — a task that already passes measures nothing, and reporting a
|
|
30
|
+
* number for it is worse than reporting none. `nuvira eval verify-seeds` runs the
|
|
31
|
+
* same check from a terminal, so the ratchet needs no provider at all.
|
|
32
|
+
*/
|
|
33
|
+
import { mkdirSync, mkdtempSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
34
|
+
import { tmpdir } from 'node:os';
|
|
35
|
+
import { join } from 'node:path';
|
|
36
|
+
import { SEEDED_BUGS, materializeSeededBug, readWorkspaceFile, runSeedCheck, seededBugById, seededGoal, verifySeededBug, } from './seeded-bugs.js';
|
|
37
|
+
/** Verify every declared seed. Offline, deterministic, no provider. */
|
|
38
|
+
export function verifySeeds(taskIds) {
|
|
39
|
+
const bugs = taskIds && taskIds.length > 0 ? SEEDED_BUGS.filter((b) => taskIds.includes(b.id)) : SEEDED_BUGS;
|
|
40
|
+
return bugs.map((bug) => verifySeededBug(bug));
|
|
41
|
+
}
|
|
42
|
+
/** Every file in a workspace, as workspace-relative paths. */
|
|
43
|
+
function listWorkspaceFiles(dir, prefix = '') {
|
|
44
|
+
const out = [];
|
|
45
|
+
let entries;
|
|
46
|
+
try {
|
|
47
|
+
entries = readdirSync(join(dir, prefix));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
for (const entry of entries) {
|
|
53
|
+
const rel = prefix ? `${prefix}/${entry}` : entry;
|
|
54
|
+
let isDir = false;
|
|
55
|
+
try {
|
|
56
|
+
isDir = statSync(join(dir, rel)).isDirectory();
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (isDir)
|
|
62
|
+
out.push(...listWorkspaceFiles(dir, rel));
|
|
63
|
+
else
|
|
64
|
+
out.push(rel);
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* What changed in the workspace, against the seed it started from.
|
|
70
|
+
*
|
|
71
|
+
* A file the seed never had is a change too (`seeded: false` at the call site), so
|
|
72
|
+
* an agent that writes a scratch file or a new module cannot look tidier than one
|
|
73
|
+
* that edited in place. Deleted seeded files count as changes as well — a
|
|
74
|
+
* "fix" that removes the failing check is not a fix, and this is what makes that
|
|
75
|
+
* visible rather than merely suspicious.
|
|
76
|
+
*/
|
|
77
|
+
export function changeReport(bug, workspace) {
|
|
78
|
+
const seeded = new Map(bug.files.map((file) => [file.path, file.content]));
|
|
79
|
+
const present = listWorkspaceFiles(workspace);
|
|
80
|
+
const changed = [];
|
|
81
|
+
for (const file of present) {
|
|
82
|
+
const content = readWorkspaceFile(workspace, file);
|
|
83
|
+
if (content === null)
|
|
84
|
+
continue;
|
|
85
|
+
if (!seeded.has(file)) {
|
|
86
|
+
changed.push(file); // created by the agent
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (seeded.get(file) !== content)
|
|
90
|
+
changed.push(file);
|
|
91
|
+
}
|
|
92
|
+
for (const path of seeded.keys()) {
|
|
93
|
+
if (!present.includes(path))
|
|
94
|
+
changed.push(path); // deleted by the agent
|
|
95
|
+
}
|
|
96
|
+
const unique = [...new Set(changed)].sort();
|
|
97
|
+
return {
|
|
98
|
+
changedFiles: unique,
|
|
99
|
+
collateral: unique.filter((file) => file !== bug.target),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** Score DETECTED from what the run reported. Case-insensitive substring match. */
|
|
103
|
+
export function detectDefect(bug, summary) {
|
|
104
|
+
const haystack = (summary ?? '').toLowerCase();
|
|
105
|
+
for (const signal of bug.detectionSignals) {
|
|
106
|
+
if (haystack.includes(signal.toLowerCase()))
|
|
107
|
+
return signal;
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 0-1 composite: finding it and fixing it weigh the same, and precision is a
|
|
113
|
+
* MODIFIER on a fix rather than a credit of its own.
|
|
114
|
+
*
|
|
115
|
+
* The precision component is gated on `fixed`, and that gate was added after the
|
|
116
|
+
* first real run: a no-op agent scores 100% on "changed nothing but the target"
|
|
117
|
+
* trivially, so an ungated 0.2 paid a run 20% for doing nothing at all — and made a
|
|
118
|
+
* correct fix with collateral (0.8) look only four times better than a run that
|
|
119
|
+
* never opened the file. "Left the rest alone" is only a fact about judgement once
|
|
120
|
+
* there is a change to judge.
|
|
121
|
+
*
|
|
122
|
+
* perfect (found + fixed + clean) 1.00
|
|
123
|
+
* fixed + clean, never explained it 0.60
|
|
124
|
+
* fixed, explained, touched something else 0.80
|
|
125
|
+
* explained it, never fixed it 0.40
|
|
126
|
+
* did nothing 0.00
|
|
127
|
+
*/
|
|
128
|
+
export function scoreSeededTask(detected, fixed, targetOnly) {
|
|
129
|
+
const found = detected ? 0.4 : 0;
|
|
130
|
+
const repaired = fixed ? 0.4 : 0;
|
|
131
|
+
const precise = fixed && targetOnly ? 0.2 : 0;
|
|
132
|
+
return found + repaired + precise;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Run the suite and score it.
|
|
136
|
+
*
|
|
137
|
+
* Verification happens FIRST, and every task it rejects aborts the run: the point
|
|
138
|
+
* of the benchmark is that its number is trustworthy, and a number computed over a
|
|
139
|
+
* task that was not actually broken is not.
|
|
140
|
+
*/
|
|
141
|
+
export async function runSeededSuite(provider, model, options) {
|
|
142
|
+
const startedAt = Date.now();
|
|
143
|
+
const bugs = options.taskIds && options.taskIds.length > 0
|
|
144
|
+
? options.taskIds.map((id) => seededBugById(id)).filter((b) => Boolean(b))
|
|
145
|
+
: [...SEEDED_BUGS];
|
|
146
|
+
// A filter that matches nothing is not a clean run, it is a run that measured
|
|
147
|
+
// nothing — the same reason an unverified seed aborts rather than scoring. The
|
|
148
|
+
// M2b path reports this too; a suite that returns "0 tasks, 0 failures" reads as
|
|
149
|
+
// a pass to anything that only looks at the summary.
|
|
150
|
+
if (bugs.length === 0) {
|
|
151
|
+
return {
|
|
152
|
+
provider,
|
|
153
|
+
model,
|
|
154
|
+
startedAt,
|
|
155
|
+
endedAt: Date.now(),
|
|
156
|
+
scores: [],
|
|
157
|
+
aborted: `no seeded bug matched ${options.taskIds?.length ? options.taskIds.join(', ') : '(no filter)'} — ` +
|
|
158
|
+
`declared ids: ${SEEDED_BUGS.map((b) => b.id).join(', ')}.`,
|
|
159
|
+
summary: { tasks: 0, verified: 0, detected: 0, fixed: 0, cleanFix: 0, composite: null },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
let verification;
|
|
163
|
+
if (options.verifySeeds !== false) {
|
|
164
|
+
verification = bugs.map((bug) => verifySeededBug(bug));
|
|
165
|
+
const failed = verification.filter((v) => !v.ok);
|
|
166
|
+
if (failed.length > 0) {
|
|
167
|
+
return {
|
|
168
|
+
provider,
|
|
169
|
+
model,
|
|
170
|
+
startedAt,
|
|
171
|
+
endedAt: Date.now(),
|
|
172
|
+
scores: [],
|
|
173
|
+
verification,
|
|
174
|
+
aborted: `${failed.length} seeded bug(s) did not verify (${failed.map((f) => f.id).join(', ')}) — ` +
|
|
175
|
+
'a task that is not provably broken measures nothing, so nothing was scored.',
|
|
176
|
+
summary: { tasks: bugs.length, verified: bugs.length - failed.length, detected: 0, fixed: 0, cleanFix: 0, composite: null },
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const verifiedIds = new Set((verification ?? []).filter((v) => v.ok).map((v) => v.id));
|
|
181
|
+
const scores = [];
|
|
182
|
+
for (let index = 0; index < bugs.length; index += 1) {
|
|
183
|
+
const bug = bugs[index];
|
|
184
|
+
options.onProgress?.(index + 1, bugs.length, bug);
|
|
185
|
+
const workspace = mkdtempSync(join(tmpdir(), `seed-run-${bug.id}-`));
|
|
186
|
+
const taskStart = Date.now();
|
|
187
|
+
let agent = { summary: '', success: false };
|
|
188
|
+
let error;
|
|
189
|
+
try {
|
|
190
|
+
materializeSeededBug(bug, workspace, false);
|
|
191
|
+
try {
|
|
192
|
+
agent = await options.runAgent({ goal: seededGoal(bug), workspace, bug });
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
error = err instanceof Error ? err.message : String(err);
|
|
196
|
+
}
|
|
197
|
+
// The checks run AFTER the agent, in the workspace it actually edited — the
|
|
198
|
+
// same scripts that were failing before it started.
|
|
199
|
+
const checks = bug.checks.map((check) => {
|
|
200
|
+
const result = runSeedCheck(workspace, check);
|
|
201
|
+
return { command: check.command, passed: result.exitCode === 0, output: result.output };
|
|
202
|
+
});
|
|
203
|
+
const { changedFiles, collateral } = changeReport(bug, workspace);
|
|
204
|
+
const detectedBy = detectDefect(bug, agent.summary);
|
|
205
|
+
const fixed = checks.length > 0 && checks.every((c) => c.passed);
|
|
206
|
+
const targetOnly = collateral.length === 0;
|
|
207
|
+
const seedVerified = verification ? verifiedIds.has(bug.id) : true;
|
|
208
|
+
scores.push({
|
|
209
|
+
id: bug.id,
|
|
210
|
+
title: bug.title,
|
|
211
|
+
axis: bug.axis,
|
|
212
|
+
difficulty: bug.difficulty,
|
|
213
|
+
seedVerified,
|
|
214
|
+
detected: detectedBy !== null,
|
|
215
|
+
detectedBy,
|
|
216
|
+
fixed,
|
|
217
|
+
changedFiles,
|
|
218
|
+
collateral,
|
|
219
|
+
targetOnly,
|
|
220
|
+
checks,
|
|
221
|
+
composite: seedVerified ? scoreSeededTask(detectedBy !== null, fixed, targetOnly) : null,
|
|
222
|
+
summary: agent.summary,
|
|
223
|
+
durationMs: Date.now() - taskStart,
|
|
224
|
+
...(error ? { error } : {}),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
if (!options.keepWorkspaces)
|
|
229
|
+
rmSync(workspace, { recursive: true, force: true });
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const scored = scores.filter((s) => s.composite !== null);
|
|
233
|
+
const run = {
|
|
234
|
+
provider,
|
|
235
|
+
model,
|
|
236
|
+
startedAt,
|
|
237
|
+
endedAt: Date.now(),
|
|
238
|
+
scores,
|
|
239
|
+
...(verification ? { verification } : {}),
|
|
240
|
+
summary: {
|
|
241
|
+
tasks: scores.length,
|
|
242
|
+
verified: scores.filter((s) => s.seedVerified).length,
|
|
243
|
+
detected: scores.filter((s) => s.detected).length,
|
|
244
|
+
fixed: scores.filter((s) => s.fixed).length,
|
|
245
|
+
cleanFix: scores.filter((s) => s.fixed && s.targetOnly).length,
|
|
246
|
+
composite: scored.length === 0 ? null : scored.reduce((sum, s) => sum + (s.composite ?? 0), 0) / scored.length,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
return run;
|
|
250
|
+
}
|
|
251
|
+
/** A one-screen report for the terminal. */
|
|
252
|
+
export function formatSeededReport(run) {
|
|
253
|
+
const lines = [
|
|
254
|
+
`Seeded-bug benchmark — ${run.provider}/${run.model}`,
|
|
255
|
+
` ${((run.endedAt - run.startedAt) / 1000).toFixed(1)}s · ${run.scores.length} task(s)`,
|
|
256
|
+
'',
|
|
257
|
+
];
|
|
258
|
+
if (run.aborted) {
|
|
259
|
+
lines.push(`✗ aborted: ${run.aborted}`);
|
|
260
|
+
if (run.verification)
|
|
261
|
+
lines.push('', formatVerificationInline(run.verification));
|
|
262
|
+
return lines.join('\n');
|
|
263
|
+
}
|
|
264
|
+
for (const score of run.scores) {
|
|
265
|
+
const mark = score.fixed && score.detected ? '✅' : score.fixed ? '🟡' : '✗ ';
|
|
266
|
+
lines.push(` ${mark} ${score.id.padEnd(36)} composite ${pct(score.composite)}`);
|
|
267
|
+
lines.push(` found: ${score.detected ? `yes (${score.detectedBy})` : 'no'} · fixed: ${score.fixed ? 'yes' : 'no'} · ` +
|
|
268
|
+
`touched: ${score.changedFiles.length === 0 ? 'nothing' : score.changedFiles.join(', ')}` +
|
|
269
|
+
(score.collateral.length > 0 ? ` (collateral: ${score.collateral.join(', ')})` : ''));
|
|
270
|
+
if (score.error)
|
|
271
|
+
lines.push(` run error: ${score.error}`);
|
|
272
|
+
}
|
|
273
|
+
const s = run.summary;
|
|
274
|
+
lines.push('', ` found ${s.detected}/${s.tasks} · fixed ${s.fixed}/${s.tasks} · fixed without touching anything else ` +
|
|
275
|
+
`${s.cleanFix}/${s.tasks} · composite ${pct(s.composite)}`);
|
|
276
|
+
return lines.join('\n');
|
|
277
|
+
}
|
|
278
|
+
/** The markdown report written into `docs/benchmarks/`. */
|
|
279
|
+
export function formatSeededMarkdown(run) {
|
|
280
|
+
const lines = [
|
|
281
|
+
'# Seeded-bug benchmark',
|
|
282
|
+
'',
|
|
283
|
+
`- **Provider / model:** \`${run.provider}/${run.model}\``,
|
|
284
|
+
`- **Date:** ${new Date(run.startedAt).toISOString().slice(0, 10)}`,
|
|
285
|
+
`- **Duration:** ${((run.endedAt - run.startedAt) / 1000).toFixed(1)}s`,
|
|
286
|
+
`- **Composite:** ${pct(run.summary.composite)} — 40% found + 40% fixed + 20% for touching nothing else (the last only counts when the task was actually fixed)`,
|
|
287
|
+
'',
|
|
288
|
+
];
|
|
289
|
+
if (run.aborted) {
|
|
290
|
+
lines.push('## Aborted', '', run.aborted, '');
|
|
291
|
+
return lines.join('\n');
|
|
292
|
+
}
|
|
293
|
+
lines.push('## Results', '', '| Task | Axis | Difficulty | Found | Fixed | Touched nothing else | Composite |', '|---|---|---|---|---|---|---|');
|
|
294
|
+
for (const score of run.scores) {
|
|
295
|
+
lines.push(`| \`${score.id}\` | ${score.axis} | ${score.difficulty} | ${score.detected ? `yes (${score.detectedBy})` : 'no'} | ` +
|
|
296
|
+
`${score.fixed ? 'yes' : 'no'} | ${score.targetOnly ? 'yes' : `no — ${score.collateral.join(', ')}`} | ${pct(score.composite)} |`);
|
|
297
|
+
}
|
|
298
|
+
const s = run.summary;
|
|
299
|
+
lines.push('', '## Summary', '', `- Found the defect: **${s.detected}/${s.tasks}**`, `- Fixed it: **${s.fixed}/${s.tasks}**`, `- Fixed it without touching anything else: **${s.cleanFix}/${s.tasks}**`, '', '## How to read this', '', '- **Found** is read from what the run REPORTED, matched against the diagnostic', ' vocabulary declared with the defect. An agent can fix a defect it never explained, and', ' explain one it never fixed,', ' which is why the two columns are separate.', '- **Fixed** is ground truth: the same checks that failed before the run passed after it.', '- **Touched nothing else** diffs every seeded file against its original content and lists files', ' the seed never had, so a fix that rewrites unrelated code cannot look like a clean one. It', ' is scored as a modifier on a FIX, not as credit of its own — a run that changed nothing', ' satisfies "changed nothing it should not have" trivially, and earns 0.', '- Every task is verified BEFORE it is scored — a seed that already passes its checks aborts the', ' run rather than contributing a number.', '');
|
|
300
|
+
return lines.join('\n');
|
|
301
|
+
}
|
|
302
|
+
function formatVerificationInline(results) {
|
|
303
|
+
return results
|
|
304
|
+
.map((r) => ` ${r.ok ? '✅' : '✗ '} ${r.id} — seed fails: ${r.seedFails ? 'yes' : 'NO'}, fix passes: ${r.fixPasses ? 'yes' : 'NO'}`)
|
|
305
|
+
.join('\n');
|
|
306
|
+
}
|
|
307
|
+
function pct(value) {
|
|
308
|
+
return value === null ? 'n/a' : `${Math.round(value * 100)}%`;
|
|
309
|
+
}
|
|
310
|
+
/** Where a run's report belongs, matching the M2b convention in `docs/benchmarks/`. */
|
|
311
|
+
export function seededReportPath(provider, model) {
|
|
312
|
+
const safeModel = model.replace(/[/:]/g, '-');
|
|
313
|
+
return join('docs', 'benchmarks', `seeded-bugs-${provider}-${safeModel}.md`);
|
|
314
|
+
}
|
|
315
|
+
/** Write a run's markdown report, returning the path. */
|
|
316
|
+
export function writeSeededReport(run, path = seededReportPath(run.provider, run.model)) {
|
|
317
|
+
mkdirSync(join(path, '..'), { recursive: true });
|
|
318
|
+
writeFileSync(path, formatSeededMarkdown(run), 'utf-8');
|
|
319
|
+
return path;
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=seeded-benchmark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeded-benchmark.js","sourceRoot":"","sources":["../../src/learning/seeded-benchmark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WS7 (#29) — the seeded-bug benchmark.
|
|
3
|
+
*
|
|
4
|
+
* WHY THIS IS TEST INFRASTRUCTURE AND NOT A MATRIX ROW. `src/parity/matrix.ts`
|
|
5
|
+
* says it in one line: the seeded-bug benchmark is not a capability a surface can
|
|
6
|
+
* have, so it has no cells and no parity verdict of its own. What it has is a job —
|
|
7
|
+
* measure whether the agent can FIND and FIX a defect it was not told about, which
|
|
8
|
+
* is the thing a coding agent is for and the thing the M2b suite could only
|
|
9
|
+
* approximate: M2b tasks are written by hand and graded by hidden tests, but
|
|
10
|
+
* nothing proves the task was BROKEN before the agent ran, so a task that already
|
|
11
|
+
* passed measured nothing.
|
|
12
|
+
*
|
|
13
|
+
* THE PROPERTY THAT MAKES THIS A BENCHMARK RATHER THAN A TASK LIST. Every seeded
|
|
14
|
+
* bug is declared TWICE — the broken workspace the agent receives, and the same
|
|
15
|
+
* workspace after a reference fix — and `verifySeededBug` runs the checks against
|
|
16
|
+
* both. The checks must FAIL on the seed (and say so in their own words) and PASS
|
|
17
|
+
* after the fix. A seed that already passes its checks, or a check that cannot
|
|
18
|
+
* pass even when fixed, fails verification and is NOT scored: `runSeededSuite`
|
|
19
|
+
* verifies every task before it runs a single model call. `nuvira eval
|
|
20
|
+
* verify-seeds` exposes the same verification directly, so the ratchet is
|
|
21
|
+
* runnable from a terminal and in CI without a provider.
|
|
22
|
+
*
|
|
23
|
+
* WHAT 'FAILING' HAS TO MEAN. A check that exits non-zero because it crashed —
|
|
24
|
+
* a syntax error, a missing module — would satisfy a naive verification while
|
|
25
|
+
* proving nothing about the bug. So a seed counts as genuinely broken only when
|
|
26
|
+
* its check exits non-zero AND prints the failure marker its own assertions
|
|
27
|
+
* print (`FAIL`). Combined with "the same check passes once the fix is applied",
|
|
28
|
+
* that pins both ends: the check is well-formed, and it is the DEFECT that makes
|
|
29
|
+
* it fail.
|
|
30
|
+
*
|
|
31
|
+
* PLAIN NODE, ON PURPOSE. Every seed is a CommonJS `.js` file with a `.js` test
|
|
32
|
+
* script and no dependencies, so verification is deterministic, offline, and
|
|
33
|
+
* needs nothing but the `node` already running the suite. (A future Python seed
|
|
34
|
+
* would have to be gated on an interpreter actually being present rather than
|
|
35
|
+
* assumed — the honest version of "we also test Python".)
|
|
36
|
+
*
|
|
37
|
+
* Deliberately NOT measured here: collateral damage to files the fix should not
|
|
38
|
+
* touch is scored from a diff of the workspace against the seed
|
|
39
|
+
* (`src/learning/seeded-benchmark.ts`), not from reference patterns, because
|
|
40
|
+
* "this file still contains line X" is a weaker claim than "this file is
|
|
41
|
+
* unchanged" and the benchmark should not make the weak one.
|
|
42
|
+
*/
|
|
43
|
+
/** One file in a seeded workspace. */
|
|
44
|
+
export interface SeedFile {
|
|
45
|
+
path: string;
|
|
46
|
+
content: string;
|
|
47
|
+
}
|
|
48
|
+
/** One check that must fail on the seed and pass after the fix. */
|
|
49
|
+
export interface SeedCheck {
|
|
50
|
+
/** The script to run, relative to the workspace root. */
|
|
51
|
+
file: string;
|
|
52
|
+
/** The command that runs it (cwd = workspace root). */
|
|
53
|
+
command: string;
|
|
54
|
+
}
|
|
55
|
+
/** A deliberately seeded defect, with the workspace on both sides of the fix. */
|
|
56
|
+
export interface SeededBug {
|
|
57
|
+
id: string;
|
|
58
|
+
title: string;
|
|
59
|
+
/** What kind of defect it is — the axis the benchmark reports on. */
|
|
60
|
+
axis: string;
|
|
61
|
+
difficulty: 'easy' | 'medium';
|
|
62
|
+
/**
|
|
63
|
+
* The defect, as GROUND TRUTH. Never shown to the agent: the whole measurement
|
|
64
|
+
* is whether it can find this from the failing check alone.
|
|
65
|
+
*/
|
|
66
|
+
bug: string;
|
|
67
|
+
/** The workspace as the agent receives it: broken, and provably so. */
|
|
68
|
+
files: readonly SeedFile[];
|
|
69
|
+
/**
|
|
70
|
+
* The files the reference fix rewrites. Every path here must also appear in
|
|
71
|
+
* `files` — a fix that adds a file is a different shape and would make the
|
|
72
|
+
* before/after diff meaningless.
|
|
73
|
+
*/
|
|
74
|
+
fixedFiles: readonly SeedFile[];
|
|
75
|
+
/** The file the fix belongs in. Everything else is collateral if it changes. */
|
|
76
|
+
target: string;
|
|
77
|
+
/** Checks that fail on the seed and pass after the reference fix. */
|
|
78
|
+
checks: readonly SeedCheck[];
|
|
79
|
+
/**
|
|
80
|
+
* Substrings (case-insensitive) that count as the agent having IDENTIFIED the
|
|
81
|
+
* defect in what it reported. Diagnostic vocabulary, not the fix: an agent that
|
|
82
|
+
* rewrites the function correctly but reports "done" has fixed it without
|
|
83
|
+
* finding it, and the two are scored apart.
|
|
84
|
+
*/
|
|
85
|
+
detectionSignals: readonly string[];
|
|
86
|
+
/** Token budget for the run, so cost is scored alongside correctness. */
|
|
87
|
+
tokenBudget: number;
|
|
88
|
+
}
|
|
89
|
+
/** The exact request every seeded task makes — uniform, so the score compares competence. */
|
|
90
|
+
export declare function seededGoal(bug: SeededBug): string;
|
|
91
|
+
/**
|
|
92
|
+
* The suite.
|
|
93
|
+
*
|
|
94
|
+
* Each entry is a real defect with a real fix, small enough that a strong model
|
|
95
|
+
* can find it from the failing check and that the reference fix is unambiguous.
|
|
96
|
+
* The axes are the ones that actually bite in production code: an inclusive bound,
|
|
97
|
+
* a comparator that was never given, an async callback in a synchronous-looking
|
|
98
|
+
* call, a falsy guard that eats a legitimate zero, a copy that is only one level
|
|
99
|
+
* deep, a helper that mutates its caller's data, and a denominator that was not
|
|
100
|
+
* updated with the filter beside it.
|
|
101
|
+
*/
|
|
102
|
+
export declare const SEEDED_BUGS: readonly SeededBug[];
|
|
103
|
+
/** A bug by id, or undefined. */
|
|
104
|
+
export declare function seededBugById(id: string): SeededBug | undefined;
|
|
105
|
+
/** Write a workspace to `dir`. `fixed` swaps in the reference fix. */
|
|
106
|
+
export declare function materializeSeededBug(bug: SeededBug, dir: string, fixed?: boolean): string;
|
|
107
|
+
/** One check's outcome in a workspace. */
|
|
108
|
+
export interface SeedCheckResult {
|
|
109
|
+
command: string;
|
|
110
|
+
exitCode: number;
|
|
111
|
+
output: string;
|
|
112
|
+
durationMs: number;
|
|
113
|
+
}
|
|
114
|
+
/** Run one check in a workspace. Never throws — a failure IS the result. */
|
|
115
|
+
export declare function runSeedCheck(workspace: string, check: SeedCheck, timeoutMs?: number): SeedCheckResult;
|
|
116
|
+
/** What verification found for one seed. */
|
|
117
|
+
export interface SeedVerification {
|
|
118
|
+
id: string;
|
|
119
|
+
title: string;
|
|
120
|
+
/** The check FAILED on the seeded workspace, and said so in its own words. */
|
|
121
|
+
seedFails: boolean;
|
|
122
|
+
/** The same check PASSED once the reference fix was applied. */
|
|
123
|
+
fixPasses: boolean;
|
|
124
|
+
ok: boolean;
|
|
125
|
+
/** Human-readable evidence, one line per side. */
|
|
126
|
+
detail: string;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Prove a seed is genuinely broken and genuinely fixable.
|
|
130
|
+
*
|
|
131
|
+
* Both halves are required, and the marker requirement is what stops a check that
|
|
132
|
+
* merely CRASHED from counting as evidence of a bug: a syntax error also exits
|
|
133
|
+
* non-zero, so "it failed" alone would verify nothing. The fix half is what proves
|
|
134
|
+
* the check is well-formed; the marker half is what proves the failure is the
|
|
135
|
+
* defect's.
|
|
136
|
+
*/
|
|
137
|
+
export declare function verifySeededBug(bug: SeededBug): SeedVerification;
|
|
138
|
+
/** A table of verifications, ready to print. */
|
|
139
|
+
export declare function formatSeedVerification(results: readonly SeedVerification[]): string;
|
|
140
|
+
/** Read a file from a workspace, or null. */
|
|
141
|
+
export declare function readWorkspaceFile(workspace: string, path: string): string | null;
|
|
142
|
+
//# sourceMappingURL=seeded-bugs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeded-bugs.d.ts","sourceRoot":"","sources":["../../src/learning/seeded-bugs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAOH,sCAAsC;AACtC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mEAAmE;AACnE,MAAM,WAAW,SAAS;IACxB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC9B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,uEAAuE;IACvE,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B;;;;OAIG;IACH,UAAU,EAAE,SAAS,QAAQ,EAAE,CAAC;IAChC,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAOjD;AA8FD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,SAAS,EAoQ3C,CAAC;AAEF,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAE/D;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,MAAM,CAavF;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,SAAS,GAAG,eAAe,CAyBrG;AAED,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;IACnB,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,gBAAgB,CAsChE;AAOD,gDAAgD;AAChD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,GAAG,MAAM,CAmBnF;AAED,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMhF"}
|