@sentry/warden 0.21.0 → 0.23.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/.oxlintrc.json +169 -0
- package/CHANGELOG.md +390 -0
- package/README.md +4 -4
- package/dist/cli/args.d.ts +6 -2
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +175 -207
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +16 -5
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/build.d.ts +13 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/build.js +384 -0
- package/dist/cli/commands/build.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +10 -2
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/runs.d.ts.map +1 -1
- package/dist/cli/commands/runs.js +79 -15
- package/dist/cli/commands/runs.js.map +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +4 -1
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js +8 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/files.d.ts.map +1 -1
- package/dist/cli/files.js +27 -9
- package/dist/cli/files.js.map +1 -1
- package/dist/cli/help.d.ts +4 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +448 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.js +2 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/input.d.ts +12 -0
- package/dist/cli/input.d.ts.map +1 -1
- package/dist/cli/input.js +60 -0
- package/dist/cli/input.js.map +1 -1
- package/dist/cli/log-cleanup.d.ts.map +1 -1
- package/dist/cli/log-cleanup.js +4 -0
- package/dist/cli/log-cleanup.js.map +1 -1
- package/dist/cli/main.d.ts +39 -2
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +482 -100
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output/box.js +1 -1
- package/dist/cli/output/formatters.d.ts +10 -2
- package/dist/cli/output/formatters.d.ts.map +1 -1
- package/dist/cli/output/formatters.js +32 -9
- package/dist/cli/output/formatters.js.map +1 -1
- package/dist/cli/output/index.d.ts +2 -2
- package/dist/cli/output/index.d.ts.map +1 -1
- package/dist/cli/output/index.js +2 -2
- package/dist/cli/output/index.js.map +1 -1
- package/dist/cli/output/ink-runner.d.ts +3 -1
- package/dist/cli/output/ink-runner.d.ts.map +1 -1
- package/dist/cli/output/ink-runner.js +79 -25
- package/dist/cli/output/ink-runner.js.map +1 -1
- package/dist/cli/output/jsonl-schema-gen.d.ts.map +1 -1
- package/dist/cli/output/jsonl-schema-gen.js +4 -2
- package/dist/cli/output/jsonl-schema-gen.js.map +1 -1
- package/dist/cli/output/jsonl.d.ts +147 -4
- package/dist/cli/output/jsonl.d.ts.map +1 -1
- package/dist/cli/output/jsonl.js +183 -7
- package/dist/cli/output/jsonl.js.map +1 -1
- package/dist/cli/output/live-status.d.ts +48 -0
- package/dist/cli/output/live-status.d.ts.map +1 -0
- package/dist/cli/output/live-status.js +173 -0
- package/dist/cli/output/live-status.js.map +1 -0
- package/dist/cli/output/reporter.d.ts +4 -0
- package/dist/cli/output/reporter.d.ts.map +1 -1
- package/dist/cli/output/reporter.js +20 -3
- package/dist/cli/output/reporter.js.map +1 -1
- package/dist/cli/output/tasks.d.ts +11 -5
- package/dist/cli/output/tasks.d.ts.map +1 -1
- package/dist/cli/output/tasks.js +126 -68
- package/dist/cli/output/tasks.js.map +1 -1
- package/dist/cli/signals.d.ts +15 -0
- package/dist/cli/signals.d.ts.map +1 -0
- package/dist/cli/signals.js +26 -0
- package/dist/cli/signals.js.map +1 -0
- package/dist/config/loader.d.ts +48 -7
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +228 -32
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +55 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +34 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/diff/context.d.ts +9 -2
- package/dist/diff/context.d.ts.map +1 -1
- package/dist/diff/context.js +65 -17
- package/dist/diff/context.js.map +1 -1
- package/dist/evals/runner.d.ts.map +1 -1
- package/dist/evals/runner.js +16 -0
- package/dist/evals/runner.js.map +1 -1
- package/dist/event/context.d.ts.map +1 -1
- package/dist/event/context.js +1 -0
- package/dist/event/context.js.map +1 -1
- package/dist/event/schedule-context.d.ts.map +1 -1
- package/dist/event/schedule-context.js +1 -0
- package/dist/event/schedule-context.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/output/dedup.d.ts +8 -11
- package/dist/output/dedup.d.ts.map +1 -1
- package/dist/output/dedup.js +39 -37
- package/dist/output/dedup.js.map +1 -1
- package/dist/output/github-checks.d.ts +1 -0
- package/dist/output/github-checks.d.ts.map +1 -1
- package/dist/output/github-checks.js +9 -7
- package/dist/output/github-checks.js.map +1 -1
- package/dist/sdk/analyze.d.ts.map +1 -1
- package/dist/sdk/analyze.js +166 -276
- package/dist/sdk/analyze.js.map +1 -1
- package/dist/sdk/circuit-breaker.d.ts +26 -0
- package/dist/sdk/circuit-breaker.d.ts.map +1 -0
- package/dist/sdk/circuit-breaker.js +53 -0
- package/dist/sdk/circuit-breaker.js.map +1 -0
- package/dist/sdk/errors.d.ts +5 -0
- package/dist/sdk/errors.d.ts.map +1 -1
- package/dist/sdk/errors.js +27 -0
- package/dist/sdk/errors.js.map +1 -1
- package/dist/sdk/extract.d.ts +18 -9
- package/dist/sdk/extract.d.ts.map +1 -1
- package/dist/sdk/extract.js +95 -87
- package/dist/sdk/extract.js.map +1 -1
- package/dist/sdk/fix-quality.d.ts +5 -0
- package/dist/sdk/fix-quality.d.ts.map +1 -1
- package/dist/sdk/fix-quality.js +42 -23
- package/dist/sdk/fix-quality.js.map +1 -1
- package/dist/sdk/haiku.d.ts +6 -0
- package/dist/sdk/haiku.d.ts.map +1 -1
- package/dist/sdk/haiku.js +75 -49
- package/dist/sdk/haiku.js.map +1 -1
- package/dist/sdk/json-output.d.ts +31 -0
- package/dist/sdk/json-output.d.ts.map +1 -0
- package/dist/sdk/json-output.js +98 -0
- package/dist/sdk/json-output.js.map +1 -0
- package/dist/sdk/model-pricing.json +56 -16
- package/dist/sdk/post-process.d.ts +29 -0
- package/dist/sdk/post-process.d.ts.map +1 -0
- package/dist/sdk/post-process.js +65 -0
- package/dist/sdk/post-process.js.map +1 -0
- package/dist/sdk/prepare.d.ts.map +1 -1
- package/dist/sdk/prepare.js +4 -1
- package/dist/sdk/prepare.js.map +1 -1
- package/dist/sdk/pricing.d.ts +18 -0
- package/dist/sdk/pricing.d.ts.map +1 -1
- package/dist/sdk/pricing.js +108 -3
- package/dist/sdk/pricing.js.map +1 -1
- package/dist/sdk/prompt-sections.d.ts +56 -0
- package/dist/sdk/prompt-sections.d.ts.map +1 -0
- package/dist/sdk/prompt-sections.js +118 -0
- package/dist/sdk/prompt-sections.js.map +1 -0
- package/dist/sdk/prompt.d.ts +2 -17
- package/dist/sdk/prompt.d.ts.map +1 -1
- package/dist/sdk/prompt.js +15 -37
- package/dist/sdk/prompt.js.map +1 -1
- package/dist/sdk/report-files.d.ts +15 -0
- package/dist/sdk/report-files.d.ts.map +1 -0
- package/dist/sdk/report-files.js +20 -0
- package/dist/sdk/report-files.js.map +1 -0
- package/dist/sdk/runner.d.ts +9 -1
- package/dist/sdk/runner.d.ts.map +1 -1
- package/dist/sdk/runner.js +6 -0
- package/dist/sdk/runner.js.map +1 -1
- package/dist/sdk/runtimes/claude.d.ts +3 -0
- package/dist/sdk/runtimes/claude.d.ts.map +1 -0
- package/dist/sdk/runtimes/claude.js +376 -0
- package/dist/sdk/runtimes/claude.js.map +1 -0
- package/dist/sdk/runtimes/index.d.ts +12 -0
- package/dist/sdk/runtimes/index.d.ts.map +1 -0
- package/dist/sdk/runtimes/index.js +22 -0
- package/dist/sdk/runtimes/index.js.map +1 -0
- package/dist/sdk/runtimes/types.d.ts +116 -0
- package/dist/sdk/runtimes/types.d.ts.map +1 -0
- package/dist/sdk/runtimes/types.js +17 -0
- package/dist/sdk/runtimes/types.js.map +1 -0
- package/dist/sdk/types.d.ts +42 -2
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/types.js.map +1 -1
- package/dist/sdk/usage.d.ts +21 -6
- package/dist/sdk/usage.d.ts.map +1 -1
- package/dist/sdk/usage.js +36 -23
- package/dist/sdk/usage.js.map +1 -1
- package/dist/sdk/verify.d.ts +25 -0
- package/dist/sdk/verify.d.ts.map +1 -0
- package/dist/sdk/verify.js +226 -0
- package/dist/sdk/verify.js.map +1 -0
- package/dist/skill-builder/agentic.d.ts +33 -0
- package/dist/skill-builder/agentic.d.ts.map +1 -0
- package/dist/skill-builder/agentic.js +240 -0
- package/dist/skill-builder/agentic.js.map +1 -0
- package/dist/skill-builder/authoring-provider.d.ts +5 -0
- package/dist/skill-builder/authoring-provider.d.ts.map +1 -0
- package/dist/skill-builder/authoring-provider.js +70 -0
- package/dist/skill-builder/authoring-provider.js.map +1 -0
- package/dist/skill-builder/definition.d.ts +46 -0
- package/dist/skill-builder/definition.d.ts.map +1 -0
- package/dist/skill-builder/definition.js +171 -0
- package/dist/skill-builder/definition.js.map +1 -0
- package/dist/skill-builder/outline-contract.d.ts +113 -0
- package/dist/skill-builder/outline-contract.d.ts.map +1 -0
- package/dist/skill-builder/outline-contract.js +73 -0
- package/dist/skill-builder/outline-contract.js.map +1 -0
- package/dist/skill-builder/outline-state.d.ts +158 -0
- package/dist/skill-builder/outline-state.d.ts.map +1 -0
- package/dist/skill-builder/outline-state.js +87 -0
- package/dist/skill-builder/outline-state.js.map +1 -0
- package/dist/skill-builder/outline.d.ts +36 -0
- package/dist/skill-builder/outline.d.ts.map +1 -0
- package/dist/skill-builder/outline.js +345 -0
- package/dist/skill-builder/outline.js.map +1 -0
- package/dist/skill-builder/skill-contract.d.ts +97 -0
- package/dist/skill-builder/skill-contract.d.ts.map +1 -0
- package/dist/skill-builder/skill-contract.js +58 -0
- package/dist/skill-builder/skill-contract.js.map +1 -0
- package/dist/skill-builder/skill-prompts.d.ts +61 -0
- package/dist/skill-builder/skill-prompts.d.ts.map +1 -0
- package/dist/skill-builder/skill-prompts.js +285 -0
- package/dist/skill-builder/skill-prompts.js.map +1 -0
- package/dist/skill-builder/skill.d.ts +23 -0
- package/dist/skill-builder/skill.d.ts.map +1 -0
- package/dist/skill-builder/skill.js +563 -0
- package/dist/skill-builder/skill.js.map +1 -0
- package/dist/skills/index.d.ts +2 -2
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/loader.d.ts +20 -6
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +88 -141
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/remote.d.ts +11 -7
- package/dist/skills/remote.d.ts.map +1 -1
- package/dist/skills/remote.js +62 -162
- package/dist/skills/remote.js.map +1 -1
- package/dist/triggers/matcher.d.ts.map +1 -1
- package/dist/triggers/matcher.js +28 -15
- package/dist/triggers/matcher.js.map +1 -1
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +24 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/path.d.ts +17 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +36 -0
- package/dist/utils/path.js.map +1 -0
- package/package.json +8 -8
- package/policies/README.md +22 -0
- package/policies/code-comments.md +20 -0
- package/policies/policy-template.md +14 -0
- package/skills/warden/SKILL.md +5 -5
- package/skills/warden/SOURCES.md +39 -0
- package/skills/warden/SPEC.md +112 -0
- package/skills/warden/references/cli-reference.md +11 -4
- package/skills/warden/references/config-schema.md +38 -13
- package/skills/warden/references/configuration.md +29 -8
- package/skills/warden-sweep/SKILL.md +43 -365
- package/skills/warden-sweep/SOURCES.md +43 -0
- package/skills/warden-sweep/SPEC.md +126 -0
- package/skills/warden-sweep/references/issue-phase.md +24 -0
- package/skills/warden-sweep/references/organize-phase.md +31 -0
- package/skills/warden-sweep/references/patch-phase.md +142 -0
- package/skills/warden-sweep/references/resume-and-artifacts.md +51 -0
- package/skills/warden-sweep/references/scan-phase.md +46 -0
- package/skills/warden-sweep/references/script-interfaces.md +127 -0
- package/skills/warden-sweep/references/verify-phase.md +69 -0
- package/src/builtin-skills/security-review/SKILL.md +81 -0
- package/src/builtin-skills/security-review/SPEC.md +77 -0
- package/src/builtin-skills/security-review/references/github-workflows.md +186 -0
- package/src/builtin-skills/security-review/references/javascript-typescript.md +69 -0
- package/src/builtin-skills/security-review/references/python.md +70 -0
- package/src/internal-skills/skill-writer/EVAL.md +124 -0
- package/src/internal-skills/skill-writer/SKILL.md +159 -0
- package/src/internal-skills/skill-writer/SOURCES.md +94 -0
- package/src/internal-skills/skill-writer/SPEC.md +153 -0
- package/src/internal-skills/skill-writer/references/artifact-layouts/argument-driven-skill-layout.md +32 -0
- package/src/internal-skills/skill-writer/references/artifact-layouts/asset-template-skill-layout.md +30 -0
- package/src/internal-skills/skill-writer/references/artifact-layouts/inline-skill-layout.md +28 -0
- package/src/internal-skills/skill-writer/references/artifact-layouts/reference-backed-skill-layout.md +35 -0
- package/src/internal-skills/skill-writer/references/artifact-layouts/script-backed-skill-layout.md +31 -0
- package/src/internal-skills/skill-writer/references/authoring-path.md +91 -0
- package/src/internal-skills/skill-writer/references/claude-code/argument-substitutions.md +20 -0
- package/src/internal-skills/skill-writer/references/claude-code/dynamic-context.md +16 -0
- package/src/internal-skills/skill-writer/references/claude-code/frontmatter-and-invocation.md +33 -0
- package/src/internal-skills/skill-writer/references/claude-code/hook-backed-skills.md +28 -0
- package/src/internal-skills/skill-writer/references/claude-code/subagent-fork-skills.md +22 -0
- package/src/internal-skills/skill-writer/references/description-optimization.md +28 -0
- package/src/internal-skills/skill-writer/references/design-principles.md +74 -0
- package/src/internal-skills/skill-writer/references/evaluation-path.md +73 -0
- package/src/internal-skills/skill-writer/references/examples/documentation-skill.md +70 -0
- package/src/internal-skills/skill-writer/references/examples/evaluator-loop-skill.md +38 -0
- package/src/internal-skills/skill-writer/references/examples/hook-backed-skill.md +39 -0
- package/src/internal-skills/skill-writer/references/examples/router-skill.md +41 -0
- package/src/internal-skills/skill-writer/references/examples/security-review-skill.md +69 -0
- package/src/internal-skills/skill-writer/references/examples/subagent-fork-skill.md +39 -0
- package/src/internal-skills/skill-writer/references/examples/workflow-process-skill.md +65 -0
- package/src/internal-skills/skill-writer/references/execution-shapes.md +68 -0
- package/src/internal-skills/skill-writer/references/iteration-evidence.md +82 -0
- package/src/internal-skills/skill-writer/references/iteration-path.md +40 -0
- package/src/internal-skills/skill-writer/references/mode-selection.md +67 -0
- package/src/internal-skills/skill-writer/references/output-contracts.md +68 -0
- package/src/internal-skills/skill-writer/references/reference-architecture.md +71 -0
- package/src/internal-skills/skill-writer/references/registration-validation.md +67 -0
- package/src/internal-skills/skill-writer/references/source-discovery.md +60 -0
- package/src/internal-skills/skill-writer/references/spec-template.md +118 -0
- package/src/internal-skills/skill-writer/references/structure-troubleshooting.md +111 -0
- package/src/internal-skills/skill-writer/references/synthesis-path.md +119 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/evaluator-loops.md +25 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/orchestrator-workers.md +25 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/parallel-workflows.md +21 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/plan-validate-execute.md +26 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/prompt-chaining.md +24 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/routing-workflows.md +28 -0
- package/src/internal-skills/skill-writer/references/workflow-mechanics/validation-loops.md +26 -0
- package/src/internal-skills/skill-writer/scripts/quick_validate.py +158 -0
- package/src/internal-skills/skill-writer/scripts/quick_validate_test.py +79 -0
package/dist/sdk/types.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import type { Finding, UsageStats, SkippedFile, RetryConfig, ErrorCode, HunkFailure } from '../types/index.js';
|
|
2
2
|
import type { HunkWithContext } from '../diff/index.js';
|
|
3
3
|
import type { ChunkingConfig } from '../config/schema.js';
|
|
4
|
+
import type { RuntimeName } from './runtimes/index.js';
|
|
5
|
+
import type { ProviderFailureCircuitBreaker } from './circuit-breaker.js';
|
|
4
6
|
/** A single auxiliary usage entry, keyed by agent name (e.g. 'extraction', 'dedup'). */
|
|
5
7
|
export interface AuxiliaryUsageEntry {
|
|
6
8
|
agent: string;
|
|
7
9
|
usage: UsageStats;
|
|
8
10
|
}
|
|
11
|
+
export interface FindingProcessingEvent {
|
|
12
|
+
stage: 'dedupe' | 'verification' | 'merge' | 'fix_gate';
|
|
13
|
+
action: 'dropped' | 'rejected' | 'revised' | 'merged' | 'stripped_fix';
|
|
14
|
+
finding: Finding;
|
|
15
|
+
reason?: string;
|
|
16
|
+
replacement?: Finding;
|
|
17
|
+
}
|
|
9
18
|
/** Default concurrency for file-level parallel processing (standalone SDK usage only) */
|
|
10
19
|
export declare const DEFAULT_FILE_CONCURRENCY = 5;
|
|
11
20
|
/** Threshold in characters above which to warn about large prompts (~25k tokens) */
|
|
@@ -31,6 +40,24 @@ export interface HunkAnalysisResult {
|
|
|
31
40
|
/** Usage from auxiliary LLM calls (e.g., extraction repair) */
|
|
32
41
|
auxiliaryUsage?: AuxiliaryUsageEntry[];
|
|
33
42
|
}
|
|
43
|
+
/** Result from one completed chunk, suitable for durable run logging. */
|
|
44
|
+
export interface ChunkAnalysisResult {
|
|
45
|
+
filename: string;
|
|
46
|
+
model?: string;
|
|
47
|
+
index: number;
|
|
48
|
+
total: number;
|
|
49
|
+
lineRange: string;
|
|
50
|
+
findings: Finding[];
|
|
51
|
+
usage: UsageStats;
|
|
52
|
+
durationMs: number;
|
|
53
|
+
failed: boolean;
|
|
54
|
+
extractionFailed: boolean;
|
|
55
|
+
failureCode?: ErrorCode;
|
|
56
|
+
failureMessage?: string;
|
|
57
|
+
extractionError?: string;
|
|
58
|
+
extractionPreview?: string;
|
|
59
|
+
auxiliaryUsage?: AuxiliaryUsageEntry[];
|
|
60
|
+
}
|
|
34
61
|
/**
|
|
35
62
|
* Callbacks for progress reporting during skill execution.
|
|
36
63
|
*/
|
|
@@ -51,6 +78,8 @@ export interface SkillRunnerCallbacks {
|
|
|
51
78
|
onExtractionFailure?: (file: string, lineRange: string, error: string, preview: string) => void;
|
|
52
79
|
/** Called with extraction result details (debug mode) */
|
|
53
80
|
onExtractionResult?: (file: string, lineRange: string, findingsCount: number, method: 'regex' | 'llm' | 'none') => void;
|
|
81
|
+
/** Called when a finding is dropped, revised, merged, or otherwise changed after analysis. */
|
|
82
|
+
onFindingProcessing?: (event: FindingProcessingEvent) => void;
|
|
54
83
|
/** Called when hunk analysis fails (SDK error, API error, abort) */
|
|
55
84
|
onHunkFailed?: (file: string, lineRange: string, error: string) => void;
|
|
56
85
|
}
|
|
@@ -65,13 +94,21 @@ export interface SkillRunnerOptions {
|
|
|
65
94
|
concurrency?: number;
|
|
66
95
|
/** Delay in milliseconds between batch starts when parallel=true (default: 0) */
|
|
67
96
|
batchDelayMs?: number;
|
|
68
|
-
/** Model to use for analysis (e.g., 'claude-sonnet-4-
|
|
97
|
+
/** Model to use for analysis (e.g., 'claude-sonnet-4-5'). Uses SDK default if not specified. */
|
|
69
98
|
model?: string;
|
|
99
|
+
/** Runtime backend for all model-backed execution. Defaults to Claude. */
|
|
100
|
+
runtime?: RuntimeName;
|
|
101
|
+
/** Model to use for auxiliary structured model calls. Uses runtime default if not specified. */
|
|
102
|
+
auxiliaryModel?: string;
|
|
103
|
+
/** Model to use for post-analysis synthesis/consolidation. Falls back to auxiliaryModel when not specified. */
|
|
104
|
+
synthesisModel?: string;
|
|
70
105
|
/** Progress callbacks */
|
|
71
106
|
callbacks?: SkillRunnerCallbacks;
|
|
72
107
|
/** Abort controller for cancellation on SIGINT */
|
|
73
108
|
abortController?: AbortController;
|
|
74
|
-
/**
|
|
109
|
+
/** Shared circuit breaker for run-scoped auth/provider failures */
|
|
110
|
+
circuitBreaker?: ProviderFailureCircuitBreaker;
|
|
111
|
+
/** Path to Claude Code CLI executable. Required in CI environments when using the Claude runtime. */
|
|
75
112
|
pathToClaudeCodeExecutable?: string;
|
|
76
113
|
/** Retry configuration for transient API failures */
|
|
77
114
|
retry?: RetryConfig;
|
|
@@ -81,6 +118,8 @@ export interface SkillRunnerOptions {
|
|
|
81
118
|
maxContextFiles?: number;
|
|
82
119
|
/** Max retries for auxiliary Haiku calls (extraction repair, merging, dedup, fix evaluation). Default: 5 */
|
|
83
120
|
auxiliaryMaxRetries?: number;
|
|
121
|
+
/** Verify candidate findings in a second read-only pass. Defaults to true. */
|
|
122
|
+
verifyFindings?: boolean;
|
|
84
123
|
}
|
|
85
124
|
/**
|
|
86
125
|
* A file prepared for analysis with its hunks.
|
|
@@ -114,6 +153,7 @@ export interface FileAnalysisCallbacks {
|
|
|
114
153
|
skillStartTime?: number;
|
|
115
154
|
onHunkStart?: (hunkNum: number, totalHunks: number, lineRange: string) => void;
|
|
116
155
|
onHunkComplete?: (hunkNum: number, findings: Finding[], usage: UsageStats) => void;
|
|
156
|
+
onChunkComplete?: (chunk: ChunkAnalysisResult) => void;
|
|
117
157
|
/** Called when a prompt exceeds the large prompt threshold */
|
|
118
158
|
onLargePrompt?: (lineRange: string, chars: number, estimatedTokens: number) => void;
|
|
119
159
|
/** Called with prompt size info in debug mode */
|
package/dist/sdk/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC/G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAoBA,yFAAyF;AACzF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,oFAAoF;AACpF,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC"}
|
package/dist/sdk/usage.d.ts
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
|
-
import type { SDKResultMessage } from '@anthropic-ai/claude-agent-sdk';
|
|
2
1
|
import type { UsageStats, AuxiliaryUsageMap } from '../types/index.js';
|
|
3
2
|
import type { AuxiliaryUsageEntry } from './types.js';
|
|
3
|
+
export interface RuntimeUsageResult {
|
|
4
|
+
usage?: {
|
|
5
|
+
input_tokens?: number | null;
|
|
6
|
+
output_tokens?: number | null;
|
|
7
|
+
cache_read_input_tokens?: number | null;
|
|
8
|
+
cache_creation_input_tokens?: number | null;
|
|
9
|
+
cache_creation?: {
|
|
10
|
+
ephemeral_1h_input_tokens?: number | null;
|
|
11
|
+
ephemeral_5m_input_tokens?: number | null;
|
|
12
|
+
} | null;
|
|
13
|
+
server_tool_use?: {
|
|
14
|
+
web_search_requests?: number | null;
|
|
15
|
+
} | null;
|
|
16
|
+
} | null;
|
|
17
|
+
total_cost_usd?: number | null;
|
|
18
|
+
}
|
|
4
19
|
/**
|
|
5
|
-
* Extract usage stats from
|
|
20
|
+
* Extract usage stats from a runtime result message.
|
|
6
21
|
*
|
|
7
22
|
* The Anthropic API reports `input_tokens` as only the non-cached portion.
|
|
8
|
-
* We normalize so that `inputTokens` is the
|
|
9
|
-
* (non-cached + cache_read + cache_creation), with
|
|
10
|
-
*
|
|
23
|
+
* We normalize so that `inputTokens` is the total input token count
|
|
24
|
+
* (non-cached + cache_read + cache_creation), with cache fields reported
|
|
25
|
+
* separately as subsets of that total.
|
|
11
26
|
*/
|
|
12
|
-
export declare function extractUsage(result:
|
|
27
|
+
export declare function extractUsage(result: RuntimeUsageResult): UsageStats;
|
|
13
28
|
/**
|
|
14
29
|
* Create empty usage stats.
|
|
15
30
|
*/
|
package/dist/sdk/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/sdk/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/sdk/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5C,cAAc,CAAC,EAAE;YACf,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;YAC1C,yBAAyB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SAC3C,GAAG,IAAI,CAAC;QACT,eAAe,CAAC,EAAE;YAChB,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;SACrC,GAAG,IAAI,CAAC;KACV,GAAG,IAAI,CAAC;IACT,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAqBnE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAWvC;AAeD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAAE,GAC7B,iBAAiB,GAAG,SAAS,CAc/B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,iBAAiB,GAAG,SAAS,EAChC,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAC/B,iBAAiB,GAAG,SAAS,CAa/B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
package/dist/sdk/usage.js
CHANGED
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Extract usage stats from
|
|
2
|
+
* Extract usage stats from a runtime result message.
|
|
3
3
|
*
|
|
4
4
|
* The Anthropic API reports `input_tokens` as only the non-cached portion.
|
|
5
|
-
* We normalize so that `inputTokens` is the
|
|
6
|
-
* (non-cached + cache_read + cache_creation), with
|
|
7
|
-
*
|
|
5
|
+
* We normalize so that `inputTokens` is the total input token count
|
|
6
|
+
* (non-cached + cache_read + cache_creation), with cache fields reported
|
|
7
|
+
* separately as subsets of that total.
|
|
8
8
|
*/
|
|
9
9
|
export function extractUsage(result) {
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
10
|
+
const usage = result.usage;
|
|
11
|
+
const rawInput = usage?.input_tokens ?? 0;
|
|
12
|
+
const cacheRead = usage?.cache_read_input_tokens ?? 0;
|
|
13
|
+
const rawCacheCreation = usage?.cache_creation_input_tokens ?? 0;
|
|
14
|
+
const cacheCreation1h = usage?.cache_creation?.ephemeral_1h_input_tokens ?? 0;
|
|
15
|
+
const tieredCacheCreation5m = usage?.cache_creation?.ephemeral_5m_input_tokens ?? 0;
|
|
16
|
+
const hasTieredCacheCreation = usage?.cache_creation !== undefined && usage.cache_creation !== null;
|
|
17
|
+
const tieredCacheCreation = tieredCacheCreation5m + cacheCreation1h;
|
|
18
|
+
const cacheCreation = Math.max(rawCacheCreation, tieredCacheCreation);
|
|
19
|
+
const cacheCreation5m = hasTieredCacheCreation ? tieredCacheCreation5m : rawCacheCreation;
|
|
13
20
|
return {
|
|
14
21
|
inputTokens: rawInput + cacheRead + cacheCreation,
|
|
15
|
-
outputTokens:
|
|
22
|
+
outputTokens: usage?.output_tokens ?? 0,
|
|
16
23
|
cacheReadInputTokens: cacheRead,
|
|
17
24
|
cacheCreationInputTokens: cacheCreation,
|
|
18
|
-
|
|
25
|
+
cacheCreation5mInputTokens: cacheCreation5m,
|
|
26
|
+
cacheCreation1hInputTokens: cacheCreation1h,
|
|
27
|
+
webSearchRequests: usage?.server_tool_use?.web_search_requests ?? 0,
|
|
28
|
+
costUSD: result.total_cost_usd ?? 0,
|
|
19
29
|
};
|
|
20
30
|
}
|
|
21
31
|
/**
|
|
@@ -27,20 +37,29 @@ export function emptyUsage() {
|
|
|
27
37
|
outputTokens: 0,
|
|
28
38
|
cacheReadInputTokens: 0,
|
|
29
39
|
cacheCreationInputTokens: 0,
|
|
40
|
+
cacheCreation5mInputTokens: 0,
|
|
41
|
+
cacheCreation1hInputTokens: 0,
|
|
42
|
+
webSearchRequests: 0,
|
|
30
43
|
costUSD: 0,
|
|
31
44
|
};
|
|
32
45
|
}
|
|
46
|
+
function addUsage(a, b) {
|
|
47
|
+
return {
|
|
48
|
+
inputTokens: a.inputTokens + b.inputTokens,
|
|
49
|
+
outputTokens: a.outputTokens + b.outputTokens,
|
|
50
|
+
cacheReadInputTokens: (a.cacheReadInputTokens ?? 0) + (b.cacheReadInputTokens ?? 0),
|
|
51
|
+
cacheCreationInputTokens: (a.cacheCreationInputTokens ?? 0) + (b.cacheCreationInputTokens ?? 0),
|
|
52
|
+
cacheCreation5mInputTokens: (a.cacheCreation5mInputTokens ?? 0) + (b.cacheCreation5mInputTokens ?? 0),
|
|
53
|
+
cacheCreation1hInputTokens: (a.cacheCreation1hInputTokens ?? 0) + (b.cacheCreation1hInputTokens ?? 0),
|
|
54
|
+
webSearchRequests: (a.webSearchRequests ?? 0) + (b.webSearchRequests ?? 0),
|
|
55
|
+
costUSD: a.costUSD + b.costUSD,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
33
58
|
/**
|
|
34
59
|
* Aggregate multiple usage stats into one.
|
|
35
60
|
*/
|
|
36
61
|
export function aggregateUsage(usages) {
|
|
37
|
-
return usages.reduce(
|
|
38
|
-
inputTokens: acc.inputTokens + u.inputTokens,
|
|
39
|
-
outputTokens: acc.outputTokens + u.outputTokens,
|
|
40
|
-
cacheReadInputTokens: (acc.cacheReadInputTokens ?? 0) + (u.cacheReadInputTokens ?? 0),
|
|
41
|
-
cacheCreationInputTokens: (acc.cacheCreationInputTokens ?? 0) + (u.cacheCreationInputTokens ?? 0),
|
|
42
|
-
costUSD: acc.costUSD + u.costUSD,
|
|
43
|
-
}), emptyUsage());
|
|
62
|
+
return usages.reduce(addUsage, emptyUsage());
|
|
44
63
|
}
|
|
45
64
|
/**
|
|
46
65
|
* Aggregate auxiliary usage entries by agent name.
|
|
@@ -54,13 +73,7 @@ export function aggregateAuxiliaryUsage(entries) {
|
|
|
54
73
|
for (const { agent, usage } of entries) {
|
|
55
74
|
const existing = map[agent];
|
|
56
75
|
if (existing) {
|
|
57
|
-
map[agent] =
|
|
58
|
-
inputTokens: existing.inputTokens + usage.inputTokens,
|
|
59
|
-
outputTokens: existing.outputTokens + usage.outputTokens,
|
|
60
|
-
cacheReadInputTokens: (existing.cacheReadInputTokens ?? 0) + (usage.cacheReadInputTokens ?? 0),
|
|
61
|
-
cacheCreationInputTokens: (existing.cacheCreationInputTokens ?? 0) + (usage.cacheCreationInputTokens ?? 0),
|
|
62
|
-
costUSD: existing.costUSD + usage.costUSD,
|
|
63
|
-
};
|
|
76
|
+
map[agent] = addUsage(existing, usage);
|
|
64
77
|
}
|
|
65
78
|
else {
|
|
66
79
|
map[agent] = { ...usage };
|
package/dist/sdk/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/sdk/usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/sdk/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SkillDefinition } from '../config/schema.js';
|
|
2
|
+
import { type Finding, type UsageStats } from '../types/index.js';
|
|
3
|
+
import { type RuntimeName } from './runtimes/index.js';
|
|
4
|
+
import type { FindingProcessingEvent } from './types.js';
|
|
5
|
+
import { type PromptPRContext } from './prompt-sections.js';
|
|
6
|
+
export interface VerifyFindingsOptions {
|
|
7
|
+
repoPath: string;
|
|
8
|
+
skill: SkillDefinition;
|
|
9
|
+
runtime?: RuntimeName;
|
|
10
|
+
model?: string;
|
|
11
|
+
maxTurns?: number;
|
|
12
|
+
abortController?: AbortController;
|
|
13
|
+
pathToClaudeCodeExecutable?: string;
|
|
14
|
+
prContext?: PromptPRContext;
|
|
15
|
+
onFindingProcessing?: (event: FindingProcessingEvent) => void;
|
|
16
|
+
}
|
|
17
|
+
export interface VerifyFindingsResult {
|
|
18
|
+
findings: Finding[];
|
|
19
|
+
usage?: UsageStats;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Verify candidate findings with a second read-only repo-aware agent pass.
|
|
23
|
+
*/
|
|
24
|
+
export declare function verifyFindings(findings: Finding[], options: VerifyFindingsOptions): Promise<VerifyFindingsResult>;
|
|
25
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/sdk/verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAiB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAUjF,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAgMD;;GAEG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA4E/B"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { FindingSchema } from '../types/index.js';
|
|
3
|
+
import { aggregateUsage } from './usage.js';
|
|
4
|
+
import { extractBalancedJson } from './extract.js';
|
|
5
|
+
import { WardenAuthenticationError, classifyError, isAuthenticationError, isAuthenticationErrorMessage, isSubprocessError, } from './errors.js';
|
|
6
|
+
import { getRuntime, getRuntimeProviderOptions, } from './runtimes/index.js';
|
|
7
|
+
import { runPool } from '../utils/index.js';
|
|
8
|
+
import { buildChangedFilesSection, buildJsonOutputSection, buildPullRequestContextSection, buildTaggedSection, joinPromptSections, } from './prompt-sections.js';
|
|
9
|
+
const VerificationVerdictSchema = z.object({
|
|
10
|
+
verdict: z.enum(['keep', 'revise', 'reject']),
|
|
11
|
+
finding: FindingSchema.nullish(),
|
|
12
|
+
reason: z.string().optional(),
|
|
13
|
+
});
|
|
14
|
+
const JSON_OBJECT_START = /\{/g;
|
|
15
|
+
const VERIFICATION_CONCURRENCY = 4;
|
|
16
|
+
function isAbortRequested(error, abortController) {
|
|
17
|
+
return (abortController?.signal.aborted ?? false) || classifyError(error).code === 'aborted';
|
|
18
|
+
}
|
|
19
|
+
function buildVerificationSystemPrompt(skill) {
|
|
20
|
+
return `<role>
|
|
21
|
+
You are Warden's finding verifier. You validate one candidate finding at a time.
|
|
22
|
+
Your job is to deeply trace the code, look for mitigations and intent, then keep, revise, or reject the candidate.
|
|
23
|
+
</role>
|
|
24
|
+
|
|
25
|
+
<tools>
|
|
26
|
+
Use read-only tools to inspect the repository. Read the reported file and use Grep/Glob to trace callers, imports, wrappers, guards, validators, and related code.
|
|
27
|
+
</tools>
|
|
28
|
+
|
|
29
|
+
<skill_instructions>
|
|
30
|
+
The candidate was produced for this skill. Use these criteria as the only scope for verification:
|
|
31
|
+
|
|
32
|
+
${skill.prompt}
|
|
33
|
+
</skill_instructions>
|
|
34
|
+
|
|
35
|
+
<verification_stance>
|
|
36
|
+
- Keep findings only when the issue is still real after tracing.
|
|
37
|
+
- Revise findings when the issue is real but the severity, confidence, title, description, or verification needs a narrower scope.
|
|
38
|
+
- Reject findings when the path is mitigated, unreachable, intentional, outside skill scope, or not proven from the inspected code.
|
|
39
|
+
- Prefer rejection or lower severity when reachability or impact depends on unproven assumptions.
|
|
40
|
+
</verification_stance>
|
|
41
|
+
|
|
42
|
+
${buildJsonOutputSection(`
|
|
43
|
+
{"verdict":"keep|revise|reject","finding":{...},"reason":"short reason"}
|
|
44
|
+
|
|
45
|
+
Use "finding" only for verdict "revise". For revised findings, return the complete Warden finding object and keep the original id.
|
|
46
|
+
`)}`;
|
|
47
|
+
}
|
|
48
|
+
function buildVerificationUserPrompt(finding, prContext) {
|
|
49
|
+
return joinPromptSections([
|
|
50
|
+
buildPullRequestContextSection(prContext),
|
|
51
|
+
buildChangedFilesSection(prContext, finding.location?.path),
|
|
52
|
+
buildTaggedSection('candidate_finding', JSON.stringify(finding, null, 2)),
|
|
53
|
+
`<task>
|
|
54
|
+
Verify this candidate. Return keep, revise, or reject.
|
|
55
|
+
</task>`,
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
function parseVerificationVerdict(text) {
|
|
59
|
+
for (const match of text.matchAll(JSON_OBJECT_START)) {
|
|
60
|
+
if (match.index === undefined)
|
|
61
|
+
continue;
|
|
62
|
+
const json = extractBalancedJson(text, match.index);
|
|
63
|
+
if (!json)
|
|
64
|
+
continue;
|
|
65
|
+
try {
|
|
66
|
+
const parsed = JSON.parse(json);
|
|
67
|
+
const result = VerificationVerdictSchema.safeParse(parsed);
|
|
68
|
+
if (result.success) {
|
|
69
|
+
return result.data;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Keep scanning in case prose or another object appears before the verdict.
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
function applyVerdict(finding, verdict) {
|
|
79
|
+
if (!verdict || verdict.verdict === 'keep') {
|
|
80
|
+
return finding;
|
|
81
|
+
}
|
|
82
|
+
if (verdict.verdict === 'reject') {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
if (!verdict.finding) {
|
|
86
|
+
return finding;
|
|
87
|
+
}
|
|
88
|
+
// Verification runs after hunk validation, so revisions keep the original
|
|
89
|
+
// validated anchors and fix payload.
|
|
90
|
+
const revised = { ...verdict.finding, id: finding.id };
|
|
91
|
+
if (finding.location) {
|
|
92
|
+
revised.location = finding.location;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
delete revised.location;
|
|
96
|
+
}
|
|
97
|
+
if (finding.additionalLocations) {
|
|
98
|
+
revised.additionalLocations = finding.additionalLocations;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
delete revised.additionalLocations;
|
|
102
|
+
}
|
|
103
|
+
if (finding.suggestedFix) {
|
|
104
|
+
revised.suggestedFix = finding.suggestedFix;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
delete revised.suggestedFix;
|
|
108
|
+
}
|
|
109
|
+
if (finding.elapsedMs !== undefined) {
|
|
110
|
+
revised.elapsedMs = finding.elapsedMs;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
delete revised.elapsedMs;
|
|
114
|
+
}
|
|
115
|
+
const result = FindingSchema.safeParse(revised);
|
|
116
|
+
return result.success ? result.data : finding;
|
|
117
|
+
}
|
|
118
|
+
function throwIfAuthenticationFailure(authError, result) {
|
|
119
|
+
if (authError) {
|
|
120
|
+
throw new WardenAuthenticationError(authError);
|
|
121
|
+
}
|
|
122
|
+
if (!result)
|
|
123
|
+
return;
|
|
124
|
+
const authMessage = result.errors.find(isAuthenticationErrorMessage);
|
|
125
|
+
if (result.status === 'auth_error') {
|
|
126
|
+
throw new WardenAuthenticationError(authMessage);
|
|
127
|
+
}
|
|
128
|
+
if (authMessage) {
|
|
129
|
+
throw new WardenAuthenticationError(authMessage);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function notifyVerdict(options, finding, verdict, next) {
|
|
133
|
+
if (!verdict)
|
|
134
|
+
return;
|
|
135
|
+
if (verdict.verdict === 'reject') {
|
|
136
|
+
options.onFindingProcessing?.({
|
|
137
|
+
stage: 'verification',
|
|
138
|
+
action: 'rejected',
|
|
139
|
+
finding,
|
|
140
|
+
reason: verdict.reason,
|
|
141
|
+
});
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (verdict.verdict === 'revise' && next) {
|
|
145
|
+
options.onFindingProcessing?.({
|
|
146
|
+
stage: 'verification',
|
|
147
|
+
action: 'revised',
|
|
148
|
+
finding,
|
|
149
|
+
replacement: next,
|
|
150
|
+
reason: verdict.reason,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function rejectUnverifiedFinding(options, finding, reason) {
|
|
155
|
+
options.onFindingProcessing?.({
|
|
156
|
+
stage: 'verification',
|
|
157
|
+
action: 'rejected',
|
|
158
|
+
finding,
|
|
159
|
+
reason,
|
|
160
|
+
});
|
|
161
|
+
return { finding: undefined };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Verify candidate findings with a second read-only repo-aware agent pass.
|
|
165
|
+
*/
|
|
166
|
+
export async function verifyFindings(findings, options) {
|
|
167
|
+
if (findings.length === 0) {
|
|
168
|
+
return { findings };
|
|
169
|
+
}
|
|
170
|
+
const runtimeName = options.runtime ?? 'claude';
|
|
171
|
+
const runtime = getRuntime(runtimeName);
|
|
172
|
+
const systemPrompt = buildVerificationSystemPrompt(options.skill);
|
|
173
|
+
const results = await runPool(findings, VERIFICATION_CONCURRENCY, async (finding) => {
|
|
174
|
+
if (options.abortController?.signal.aborted) {
|
|
175
|
+
return rejectUnverifiedFinding(options, finding, 'verification aborted before start');
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
const { result, authError } = await runtime.runSkill({
|
|
179
|
+
systemPrompt,
|
|
180
|
+
userPrompt: buildVerificationUserPrompt(finding, options.prContext),
|
|
181
|
+
repoPath: options.repoPath,
|
|
182
|
+
skillName: `${options.skill.name}:verification`,
|
|
183
|
+
options: {
|
|
184
|
+
model: options.model,
|
|
185
|
+
maxTurns: options.maxTurns,
|
|
186
|
+
abortController: options.abortController,
|
|
187
|
+
},
|
|
188
|
+
tools: options.skill.tools,
|
|
189
|
+
providerOptions: getRuntimeProviderOptions(runtimeName, {
|
|
190
|
+
pathToClaudeCodeExecutable: options.pathToClaudeCodeExecutable,
|
|
191
|
+
}),
|
|
192
|
+
});
|
|
193
|
+
throwIfAuthenticationFailure(authError, result);
|
|
194
|
+
const verdict = result?.status === 'success'
|
|
195
|
+
? parseVerificationVerdict(result.text)
|
|
196
|
+
: null;
|
|
197
|
+
const next = applyVerdict(finding, verdict);
|
|
198
|
+
notifyVerdict(options, finding, verdict, next);
|
|
199
|
+
return { finding: next ?? undefined, usage: result?.usage };
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (isAbortRequested(error, options.abortController)) {
|
|
203
|
+
return rejectUnverifiedFinding(options, finding, 'verification aborted before verdict');
|
|
204
|
+
}
|
|
205
|
+
if (error instanceof WardenAuthenticationError) {
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
if (isSubprocessError(error)) {
|
|
209
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
210
|
+
throw new WardenAuthenticationError(`Claude Code subprocess failed (${errorMessage}).\n` +
|
|
211
|
+
`This usually means the claude CLI cannot run in this environment.`, { cause: error });
|
|
212
|
+
}
|
|
213
|
+
if (isAuthenticationError(error)) {
|
|
214
|
+
throw new WardenAuthenticationError(undefined, { cause: error });
|
|
215
|
+
}
|
|
216
|
+
return { finding };
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
const verified = results.flatMap((result) => result.finding ? [result.finding] : []);
|
|
220
|
+
const usage = results.map((result) => result.usage).filter((u) => u !== undefined);
|
|
221
|
+
return {
|
|
222
|
+
findings: verified,
|
|
223
|
+
usage: usage.length > 0 ? aggregateUsage(usage) : undefined,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/sdk/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { UsageStats } from '../types/index.js';
|
|
3
|
+
import type { Runtime } from '../sdk/runtimes/index.js';
|
|
4
|
+
export interface StructuredSkillBuilderAgentResult<T> {
|
|
5
|
+
data: T;
|
|
6
|
+
usage: UsageStats;
|
|
7
|
+
durationMs: number;
|
|
8
|
+
responseModel?: string;
|
|
9
|
+
numTurns?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class StructuredSkillBuilderAgentError extends Error {
|
|
12
|
+
constructor(message: string, options?: {
|
|
13
|
+
cause?: unknown;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export declare function runStructuredSkillBuilderAgent<T>(args: {
|
|
17
|
+
runtime: Runtime;
|
|
18
|
+
repoPath: string;
|
|
19
|
+
skillName: string;
|
|
20
|
+
systemPrompt: string;
|
|
21
|
+
userPrompt: string;
|
|
22
|
+
schema: z.ZodType<T>;
|
|
23
|
+
model?: string;
|
|
24
|
+
maxTurns?: number;
|
|
25
|
+
writeAccess?: boolean;
|
|
26
|
+
abortController?: AbortController;
|
|
27
|
+
repair?: {
|
|
28
|
+
apiKey?: string;
|
|
29
|
+
model?: string;
|
|
30
|
+
maxRetries?: number;
|
|
31
|
+
};
|
|
32
|
+
}): Promise<StructuredSkillBuilderAgentResult<T>>;
|
|
33
|
+
//# sourceMappingURL=agentic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic.d.ts","sourceRoot":"","sources":["../../src/skill-builder/agentic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,0BAA0B,CAAC;AAOxE,MAAM,WAAW,iCAAiC,CAAC,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAgKD,wBAAsB,8BAA8B,CAAC,CAAC,EAAE,IAAI,EAAE;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CA2GhD"}
|