@sentry/warden 0.22.0 → 0.24.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 +427 -0
- package/README.md +4 -1
- 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 +13 -5
- 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 +12 -6
- 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/main.d.ts +41 -2
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +294 -75
- 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 +1 -1
- package/dist/cli/output/index.d.ts.map +1 -1
- package/dist/cli/output/index.js +1 -1
- 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 +64 -28
- package/dist/cli/output/ink-runner.js.map +1 -1
- package/dist/cli/output/jsonl.d.ts +37 -0
- package/dist/cli/output/jsonl.d.ts.map +1 -1
- package/dist/cli/output/jsonl.js +6 -0
- 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 +8 -5
- package/dist/cli/output/tasks.d.ts.map +1 -1
- package/dist/cli/output/tasks.js +113 -71
- 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 +147 -277
- 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 +23 -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 +40 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +11 -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/SPEC.md +112 -0
- package/skills/warden/references/cli-reference.md +2 -2
- package/skills/warden/references/config-schema.md +29 -13
- package/skills/warden/references/configuration.md +20 -8
- package/skills/warden/references/creating-skills.md +3 -0
- package/skills/warden-sweep/SPEC.md +126 -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
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { performance } from 'node:perf_hooks';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseJsonFromOutput } from '../sdk/json-output.js';
|
|
4
|
+
import { buildJsonOutputSection, buildTaggedSection, joinPromptSections } from '../sdk/prompt-sections.js';
|
|
5
|
+
import { aggregateUsage, emptyUsage } from '../sdk/usage.js';
|
|
6
|
+
const SKILL_BUILDER_READ_TOOLS = ['Read', 'Grep', 'Glob', 'WebFetch', 'WebSearch'];
|
|
7
|
+
const SKILL_BUILDER_WRITE_TOOLS = ['Read', 'Grep', 'Glob', 'Write', 'Edit', 'Bash', 'WebFetch', 'WebSearch'];
|
|
8
|
+
const STRUCTURED_REPAIR_MAX_TURNS = 1;
|
|
9
|
+
const STRUCTURED_REPAIR_MAX_CHARS = 60_000;
|
|
10
|
+
export class StructuredSkillBuilderAgentError extends Error {
|
|
11
|
+
constructor(message, options) {
|
|
12
|
+
super(message, options);
|
|
13
|
+
this.name = 'StructuredSkillBuilderAgentError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function formatRuntimeFailure(result) {
|
|
17
|
+
if (result.errors.length > 0) {
|
|
18
|
+
return result.errors.join('; ');
|
|
19
|
+
}
|
|
20
|
+
return `Runtime status: ${result.status}`;
|
|
21
|
+
}
|
|
22
|
+
function previewText(value, maxLength = 1200) {
|
|
23
|
+
const trimmed = value?.trim();
|
|
24
|
+
if (!trimmed)
|
|
25
|
+
return '<empty>';
|
|
26
|
+
if (trimmed.length <= maxLength)
|
|
27
|
+
return trimmed;
|
|
28
|
+
return `${trimmed.slice(0, maxLength)}...`;
|
|
29
|
+
}
|
|
30
|
+
function formatAgentFailure(message, details) {
|
|
31
|
+
const lines = [message];
|
|
32
|
+
if (details.responseModel) {
|
|
33
|
+
lines.push(` Model: ${details.responseModel}`);
|
|
34
|
+
}
|
|
35
|
+
if (details.durationMs !== undefined) {
|
|
36
|
+
lines.push(` Duration: ${(details.durationMs / 1000).toFixed(1)}s`);
|
|
37
|
+
}
|
|
38
|
+
if (details.usage) {
|
|
39
|
+
lines.push(` Usage: ${details.usage.inputTokens.toLocaleString()} input / ` +
|
|
40
|
+
`${details.usage.outputTokens.toLocaleString()} output tokens / ` +
|
|
41
|
+
`$${details.usage.costUSD.toFixed(4)}`);
|
|
42
|
+
}
|
|
43
|
+
if (details.numTurns !== undefined) {
|
|
44
|
+
lines.push(` Turns: ${details.numTurns}`);
|
|
45
|
+
}
|
|
46
|
+
if (details.stderr?.trim()) {
|
|
47
|
+
lines.push(' Claude Code stderr:');
|
|
48
|
+
lines.push(` ${previewText(details.stderr).replace(/\n/g, '\n ')}`);
|
|
49
|
+
}
|
|
50
|
+
if (details.rawText !== undefined) {
|
|
51
|
+
lines.push(' Raw output:');
|
|
52
|
+
lines.push(` ${previewText(details.rawText).replace(/\n/g, '\n ')}`);
|
|
53
|
+
}
|
|
54
|
+
return lines.join('\n');
|
|
55
|
+
}
|
|
56
|
+
function resultFailureDetails(result, stderr, startedAt) {
|
|
57
|
+
return {
|
|
58
|
+
rawText: result?.text,
|
|
59
|
+
stderr,
|
|
60
|
+
usage: result?.usage,
|
|
61
|
+
durationMs: result?.durationMs ?? performance.now() - startedAt,
|
|
62
|
+
responseModel: result?.responseModel,
|
|
63
|
+
numTurns: result?.numTurns,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function truncateForRepair(output) {
|
|
67
|
+
if (output.length <= STRUCTURED_REPAIR_MAX_CHARS) {
|
|
68
|
+
return output;
|
|
69
|
+
}
|
|
70
|
+
return `${output.slice(0, STRUCTURED_REPAIR_MAX_CHARS)}\n[... truncated]`;
|
|
71
|
+
}
|
|
72
|
+
function structuredRepairSystemPrompt() {
|
|
73
|
+
return `You repair model output into strict JSON for Warden.
|
|
74
|
+
|
|
75
|
+
Return only valid JSON matching the provided JSON Schema. Do not include markdown, prose, code fences, or explanations. Preserve the original structured content whenever possible and do not invent extra fields.`;
|
|
76
|
+
}
|
|
77
|
+
function structuredRepairPrompt(args) {
|
|
78
|
+
return joinPromptSections([
|
|
79
|
+
`<task>
|
|
80
|
+
Repair this model output into valid JSON that matches the provided JSON Schema.
|
|
81
|
+
</task>`,
|
|
82
|
+
buildJsonOutputSection(`Remove surrounding prose or markdown only when needed.
|
|
83
|
+
Preserve the original structured content as much as possible.
|
|
84
|
+
Do not invent extra fields.`),
|
|
85
|
+
buildTaggedSection('parse_error', args.reason),
|
|
86
|
+
buildTaggedSection('json_schema', JSON.stringify(z.toJSONSchema(args.schema), null, 2)),
|
|
87
|
+
buildTaggedSection('model_output', truncateForRepair(args.output)),
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
async function repairStructuredSkillBuilderOutput(args) {
|
|
91
|
+
const response = await args.runtime.runSkill({
|
|
92
|
+
systemPrompt: structuredRepairSystemPrompt(),
|
|
93
|
+
userPrompt: structuredRepairPrompt({
|
|
94
|
+
schema: args.schema,
|
|
95
|
+
output: args.output,
|
|
96
|
+
reason: args.reason,
|
|
97
|
+
}),
|
|
98
|
+
repoPath: args.repoPath,
|
|
99
|
+
skillName: `${args.skillName}:structured-output-repair`,
|
|
100
|
+
tools: { allowed: [] },
|
|
101
|
+
options: {
|
|
102
|
+
model: args.model,
|
|
103
|
+
maxTurns: STRUCTURED_REPAIR_MAX_TURNS,
|
|
104
|
+
abortController: args.abortController,
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
if (response.authError) {
|
|
108
|
+
return {
|
|
109
|
+
success: false,
|
|
110
|
+
error: `repair_failed: ${response.authError}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (!response.result) {
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
error: 'repair_failed: no_result',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
if (response.result.status !== 'success') {
|
|
120
|
+
return {
|
|
121
|
+
success: false,
|
|
122
|
+
error: `repair_failed: ${formatRuntimeFailure(response.result)}`,
|
|
123
|
+
usage: response.result.usage,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const parsed = await parseJsonFromOutput({
|
|
127
|
+
output: response.result.text,
|
|
128
|
+
schema: args.schema,
|
|
129
|
+
});
|
|
130
|
+
if (!parsed.success) {
|
|
131
|
+
return {
|
|
132
|
+
success: false,
|
|
133
|
+
error: `repair_failed: ${parsed.error}`,
|
|
134
|
+
json: parsed.json,
|
|
135
|
+
usage: response.result.usage,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
success: true,
|
|
140
|
+
data: parsed.data,
|
|
141
|
+
json: parsed.json,
|
|
142
|
+
repaired: true,
|
|
143
|
+
usage: response.result.usage,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export async function runStructuredSkillBuilderAgent(args) {
|
|
147
|
+
const startedAt = performance.now();
|
|
148
|
+
const { runtime } = args;
|
|
149
|
+
const response = await runtime.runSkill({
|
|
150
|
+
systemPrompt: args.systemPrompt,
|
|
151
|
+
userPrompt: args.userPrompt,
|
|
152
|
+
repoPath: args.repoPath,
|
|
153
|
+
skillName: args.skillName,
|
|
154
|
+
tools: { allowed: args.writeAccess ? SKILL_BUILDER_WRITE_TOOLS : SKILL_BUILDER_READ_TOOLS },
|
|
155
|
+
allowMutatingTools: args.writeAccess,
|
|
156
|
+
options: {
|
|
157
|
+
model: args.model,
|
|
158
|
+
maxTurns: args.maxTurns,
|
|
159
|
+
abortController: args.abortController,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
if (response.authError) {
|
|
163
|
+
throw new StructuredSkillBuilderAgentError(response.authError);
|
|
164
|
+
}
|
|
165
|
+
if (!response.result) {
|
|
166
|
+
throw new StructuredSkillBuilderAgentError(formatAgentFailure('Skill builder agent returned no result', resultFailureDetails(undefined, response.stderr, startedAt)));
|
|
167
|
+
}
|
|
168
|
+
if (response.result.status !== 'success') {
|
|
169
|
+
throw new StructuredSkillBuilderAgentError(formatAgentFailure(formatRuntimeFailure(response.result), resultFailureDetails(response.result, response.stderr, startedAt)));
|
|
170
|
+
}
|
|
171
|
+
const repairUsages = [];
|
|
172
|
+
let parsed = await parseJsonFromOutput({
|
|
173
|
+
output: response.result.text,
|
|
174
|
+
schema: args.schema,
|
|
175
|
+
});
|
|
176
|
+
if (!parsed.success) {
|
|
177
|
+
const skillRepair = await repairStructuredSkillBuilderOutput({
|
|
178
|
+
runtime,
|
|
179
|
+
repoPath: args.repoPath,
|
|
180
|
+
skillName: args.skillName,
|
|
181
|
+
schema: args.schema,
|
|
182
|
+
output: response.result.text,
|
|
183
|
+
reason: parsed.error,
|
|
184
|
+
model: args.repair?.model ?? args.model,
|
|
185
|
+
abortController: args.abortController,
|
|
186
|
+
});
|
|
187
|
+
if (skillRepair.usage) {
|
|
188
|
+
repairUsages.push(skillRepair.usage);
|
|
189
|
+
}
|
|
190
|
+
if (skillRepair.success) {
|
|
191
|
+
parsed = skillRepair;
|
|
192
|
+
}
|
|
193
|
+
else if (args.repair?.apiKey) {
|
|
194
|
+
const auxiliaryRepair = await parseJsonFromOutput({
|
|
195
|
+
output: response.result.text,
|
|
196
|
+
schema: args.schema,
|
|
197
|
+
repair: {
|
|
198
|
+
runtime,
|
|
199
|
+
apiKey: args.repair.apiKey,
|
|
200
|
+
model: args.repair.model,
|
|
201
|
+
maxRetries: args.repair.maxRetries,
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
if (auxiliaryRepair.usage) {
|
|
205
|
+
repairUsages.push(auxiliaryRepair.usage);
|
|
206
|
+
}
|
|
207
|
+
parsed = auxiliaryRepair.success
|
|
208
|
+
? auxiliaryRepair
|
|
209
|
+
: {
|
|
210
|
+
...auxiliaryRepair,
|
|
211
|
+
error: `${skillRepair.error}; ${auxiliaryRepair.error}`,
|
|
212
|
+
json: auxiliaryRepair.json ?? skillRepair.json ?? parsed.json,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
parsed = skillRepair;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (!parsed.success) {
|
|
220
|
+
const label = parsed.error.startsWith('no_json')
|
|
221
|
+
? `Skill builder agent returned no JSON: ${parsed.error}`
|
|
222
|
+
: parsed.error.startsWith('invalid_json')
|
|
223
|
+
? `Skill builder agent returned invalid JSON: ${parsed.error}`
|
|
224
|
+
: `Skill builder agent output failed validation or repair: ${parsed.error}`;
|
|
225
|
+
throw new StructuredSkillBuilderAgentError(formatAgentFailure(label, {
|
|
226
|
+
...resultFailureDetails(response.result, response.stderr, startedAt),
|
|
227
|
+
rawText: parsed.json ?? response.result.text,
|
|
228
|
+
usage: aggregateUsage([response.result.usage ?? emptyUsage(), ...repairUsages]),
|
|
229
|
+
}));
|
|
230
|
+
}
|
|
231
|
+
const usage = aggregateUsage([response.result.usage ?? emptyUsage(), ...repairUsages]);
|
|
232
|
+
return {
|
|
233
|
+
data: parsed.data,
|
|
234
|
+
usage,
|
|
235
|
+
durationMs: response.result.durationMs ?? performance.now() - startedAt,
|
|
236
|
+
responseModel: response.result.responseModel,
|
|
237
|
+
numTurns: response.result.numTurns,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=agentic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentic.js","sourceRoot":"","sources":["../../src/skill-builder/agentic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoring-provider.d.ts","sourceRoot":"","sources":["../../src/skill-builder/authoring-provider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAkDvE,wBAAgB,wBAAwB,CAAC,IAAI,GAAE;IAC7C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,2BAA2B,CA0BnC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
3
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
const DEFAULT_AUTHORING_SKILL_NAME = 'skill-writer';
|
|
6
|
+
const AUTHORING_PROVIDER_ENV = 'WARDEN_SKILL_AUTHORING_ROOT';
|
|
7
|
+
function hashDirectory(rootDir) {
|
|
8
|
+
const hash = createHash('sha256');
|
|
9
|
+
function visit(relativeDir) {
|
|
10
|
+
const absoluteDir = join(rootDir, relativeDir);
|
|
11
|
+
for (const entry of readdirSync(absoluteDir, { withFileTypes: true })
|
|
12
|
+
.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
13
|
+
if (entry.name === '.git' || entry.name === 'node_modules') {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const relativePath = relativeDir ? `${relativeDir}/${entry.name}` : entry.name;
|
|
17
|
+
const absolutePath = join(rootDir, relativePath);
|
|
18
|
+
if (entry.isDirectory()) {
|
|
19
|
+
visit(relativePath);
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (!entry.isFile()) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
hash.update(relativePath);
|
|
26
|
+
hash.update('\0');
|
|
27
|
+
hash.update(readFileSync(absolutePath));
|
|
28
|
+
hash.update('\0');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
visit('');
|
|
32
|
+
return hash.digest('hex');
|
|
33
|
+
}
|
|
34
|
+
function candidateAuthoringSkillRoots() {
|
|
35
|
+
const fromEnv = process.env[AUTHORING_PROVIDER_ENV];
|
|
36
|
+
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
37
|
+
return [
|
|
38
|
+
fromEnv ? resolve(fromEnv) : undefined,
|
|
39
|
+
join(packageRoot, 'src', 'internal-skills', DEFAULT_AUTHORING_SKILL_NAME),
|
|
40
|
+
].filter((path) => Boolean(path));
|
|
41
|
+
}
|
|
42
|
+
function authoringSkillName(rootDir) {
|
|
43
|
+
const content = readFileSync(join(rootDir, 'SKILL.md'), 'utf-8');
|
|
44
|
+
const match = /^name:\s*["']?([^"'\n]+)["']?$/m.exec(content);
|
|
45
|
+
return match?.[1]?.trim() || basename(rootDir);
|
|
46
|
+
}
|
|
47
|
+
export function resolveAuthoringProvider(args = {}) {
|
|
48
|
+
const roots = args.authoringSkillRoot
|
|
49
|
+
? [resolve(args.authoringSkillRoot)]
|
|
50
|
+
: candidateAuthoringSkillRoots();
|
|
51
|
+
for (const rootDir of roots) {
|
|
52
|
+
const skillPath = join(rootDir, 'SKILL.md');
|
|
53
|
+
if (!existsSync(skillPath)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const stat = statSync(skillPath);
|
|
57
|
+
if (!stat.isFile()) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
name: authoringSkillName(rootDir),
|
|
62
|
+
rootDir,
|
|
63
|
+
contentHash: hashDirectory(rootDir),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const searched = roots.map((root) => `- ${root}`).join('\n');
|
|
67
|
+
throw new Error(`Unable to find generated-skill authoring provider "${DEFAULT_AUTHORING_SKILL_NAME}". ` +
|
|
68
|
+
`Set ${AUTHORING_PROVIDER_ENV} or ensure the internal provider is packaged in one of:\n${searched}`);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=authoring-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authoring-provider.js","sourceRoot":"","sources":["../../src/skill-builder/authoring-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { SkillDefinition } from '../config/schema.js';
|
|
3
|
+
export declare const GENERATED_SKILLS_DIR = ".warden/skills";
|
|
4
|
+
export declare const GENERATED_SKILL_DEFINITION_FILE = "warden.yaml";
|
|
5
|
+
export declare const BUILD_STATE_FILE = "build-state.json";
|
|
6
|
+
export declare const GeneratedSkillDefinitionSchema: z.ZodObject<{
|
|
7
|
+
version: z.ZodLiteral<1>;
|
|
8
|
+
kind: z.ZodLiteral<"generated-skill">;
|
|
9
|
+
name: z.ZodString;
|
|
10
|
+
prompt: z.ZodString;
|
|
11
|
+
instructions: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
12
|
+
coverage: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
+
}, z.core.$loose>;
|
|
14
|
+
export type GeneratedSkillDefinition = z.infer<typeof GeneratedSkillDefinitionSchema>;
|
|
15
|
+
/** A generated skill target resolved from a CLI name or filesystem path. */
|
|
16
|
+
export interface GeneratedSkillTarget {
|
|
17
|
+
displayName: string;
|
|
18
|
+
isPath: boolean;
|
|
19
|
+
rootDir: string;
|
|
20
|
+
}
|
|
21
|
+
export interface GeneratedSkillArtifactFile {
|
|
22
|
+
path: string;
|
|
23
|
+
content: string;
|
|
24
|
+
bytes: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function inferGeneratedSkillDescription(name: string, prompt: string): string;
|
|
27
|
+
export declare function getGeneratedSkillRoot(repoRoot: string, skillName: string): string;
|
|
28
|
+
export declare function generatedSkillDefinitionRootExists(rootDir: string): boolean;
|
|
29
|
+
/** Resolve a generated skill CLI target using the shared name and path semantics. */
|
|
30
|
+
export declare function resolveGeneratedSkillTarget(repoRoot: string, target: string): GeneratedSkillTarget;
|
|
31
|
+
export declare function resolveGeneratedSkillRoot(repoRoot: string, skillName: string): string;
|
|
32
|
+
export declare function loadGeneratedSkillDefinition(rootDir: string): {
|
|
33
|
+
content: string;
|
|
34
|
+
data: GeneratedSkillDefinition;
|
|
35
|
+
};
|
|
36
|
+
export declare function buildGeneratedSkillDefinition(rootDir: string): SkillDefinition;
|
|
37
|
+
export declare function createGeneratedSkillDefinition(args: {
|
|
38
|
+
repoRoot: string;
|
|
39
|
+
name: string;
|
|
40
|
+
prompt: string;
|
|
41
|
+
rootDir?: string;
|
|
42
|
+
}): SkillDefinition;
|
|
43
|
+
export declare function clearGeneratedSkillArtifacts(rootDir: string): void;
|
|
44
|
+
/** Read generated runtime artifacts while excluding Warden-owned metadata files. */
|
|
45
|
+
export declare function readGeneratedSkillArtifactFiles(rootDir: string): GeneratedSkillArtifactFile[];
|
|
46
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/skill-builder/definition.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,+BAA+B,gBAAgB,CAAC;AAC7D,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAQnD,eAAO,MAAM,8BAA8B;;;;;;;iBAO3B,CAAC;AAEjB,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,4EAA4E;AAC5E,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAuBD,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgBnF;AAUD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3E;AAED,qFAAqF;AACrF,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,oBAAoB,CAclG;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASrF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,wBAAwB,CAAC;CAChC,CAkBA;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAQ9E;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,eAAe,CAYlB;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAUlE;AAED,oFAAoF;AACpF,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,0BAA0B,EAAE,CA+B7F"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { isPathLike, resolvePathTarget } from '../utils/path.js';
|
|
6
|
+
export const GENERATED_SKILLS_DIR = '.warden/skills';
|
|
7
|
+
export const GENERATED_SKILL_DEFINITION_FILE = 'warden.yaml';
|
|
8
|
+
export const BUILD_STATE_FILE = 'build-state.json';
|
|
9
|
+
const DESCRIPTION_MAX_LENGTH = 88;
|
|
10
|
+
const EXISTING_GENERATED_SKILL_DIRS = [
|
|
11
|
+
GENERATED_SKILLS_DIR,
|
|
12
|
+
'.agents/skills',
|
|
13
|
+
'.claude/skills',
|
|
14
|
+
];
|
|
15
|
+
export const GeneratedSkillDefinitionSchema = z.object({
|
|
16
|
+
version: z.literal(1),
|
|
17
|
+
kind: z.literal('generated-skill'),
|
|
18
|
+
name: z.string().min(1),
|
|
19
|
+
prompt: z.string().min(1),
|
|
20
|
+
instructions: z.array(z.string().min(1)).optional(),
|
|
21
|
+
coverage: z.array(z.string().min(1)).optional(),
|
|
22
|
+
}).passthrough();
|
|
23
|
+
function safePathSegment(value) {
|
|
24
|
+
return value.replace(/[^a-zA-Z0-9._-]/g, '-');
|
|
25
|
+
}
|
|
26
|
+
function firstSentence(value) {
|
|
27
|
+
return value.trim().split(/(?<=[.!?])\s+/)[0] ?? value.trim();
|
|
28
|
+
}
|
|
29
|
+
function normalizeOneLine(value) {
|
|
30
|
+
return value.replace(/\s+/g, ' ').trim();
|
|
31
|
+
}
|
|
32
|
+
function ensureSentenceEnding(value) {
|
|
33
|
+
const trimmed = value.trim().replace(/[,;:]+$/, '');
|
|
34
|
+
return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
|
|
35
|
+
}
|
|
36
|
+
function firstClause(value) {
|
|
37
|
+
return value.split(/[,;:]\s+/)[0] ?? value;
|
|
38
|
+
}
|
|
39
|
+
export function inferGeneratedSkillDescription(name, prompt) {
|
|
40
|
+
const fallback = `${name}.`;
|
|
41
|
+
const sentence = normalizeOneLine(firstSentence(prompt));
|
|
42
|
+
if (!sentence) {
|
|
43
|
+
return fallback;
|
|
44
|
+
}
|
|
45
|
+
let description = sentence;
|
|
46
|
+
if (description.length > DESCRIPTION_MAX_LENGTH && /[,;:]\s+/.test(description)) {
|
|
47
|
+
description = firstClause(description);
|
|
48
|
+
}
|
|
49
|
+
description = ensureSentenceEnding(description);
|
|
50
|
+
if (description.length > DESCRIPTION_MAX_LENGTH) {
|
|
51
|
+
description = `${description.slice(0, DESCRIPTION_MAX_LENGTH - 3).trimEnd()}...`;
|
|
52
|
+
}
|
|
53
|
+
return description;
|
|
54
|
+
}
|
|
55
|
+
function yamlBlock(value, indent = ' ') {
|
|
56
|
+
return value.split('\n').map((line) => `${indent}${line}`).join('\n');
|
|
57
|
+
}
|
|
58
|
+
function getGeneratedSkillsRoot(repoRoot) {
|
|
59
|
+
return join(repoRoot, GENERATED_SKILLS_DIR);
|
|
60
|
+
}
|
|
61
|
+
export function getGeneratedSkillRoot(repoRoot, skillName) {
|
|
62
|
+
return join(getGeneratedSkillsRoot(repoRoot), safePathSegment(skillName));
|
|
63
|
+
}
|
|
64
|
+
export function generatedSkillDefinitionRootExists(rootDir) {
|
|
65
|
+
return existsSync(join(rootDir, GENERATED_SKILL_DEFINITION_FILE));
|
|
66
|
+
}
|
|
67
|
+
/** Resolve a generated skill CLI target using the shared name and path semantics. */
|
|
68
|
+
export function resolveGeneratedSkillTarget(repoRoot, target) {
|
|
69
|
+
if (isPathLike(target)) {
|
|
70
|
+
return {
|
|
71
|
+
displayName: target,
|
|
72
|
+
isPath: true,
|
|
73
|
+
rootDir: resolvePathTarget(target, repoRoot),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
displayName: target,
|
|
78
|
+
isPath: false,
|
|
79
|
+
rootDir: resolveGeneratedSkillRoot(repoRoot, target),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export function resolveGeneratedSkillRoot(repoRoot, skillName) {
|
|
83
|
+
const safeName = safePathSegment(skillName);
|
|
84
|
+
for (const dir of EXISTING_GENERATED_SKILL_DIRS) {
|
|
85
|
+
const rootDir = join(repoRoot, dir, safeName);
|
|
86
|
+
if (generatedSkillDefinitionRootExists(rootDir)) {
|
|
87
|
+
return rootDir;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return getGeneratedSkillRoot(repoRoot, skillName);
|
|
91
|
+
}
|
|
92
|
+
export function loadGeneratedSkillDefinition(rootDir) {
|
|
93
|
+
const definitionPath = join(rootDir, GENERATED_SKILL_DEFINITION_FILE);
|
|
94
|
+
const content = readFileSync(definitionPath, 'utf-8');
|
|
95
|
+
let parsed;
|
|
96
|
+
try {
|
|
97
|
+
parsed = parseYaml(content);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
throw new Error(`Generated skill definition is not valid YAML: ${definitionPath}`, { cause: error });
|
|
101
|
+
}
|
|
102
|
+
const validation = GeneratedSkillDefinitionSchema.safeParse(parsed);
|
|
103
|
+
if (!validation.success) {
|
|
104
|
+
throw new Error(`Generated skill definition is invalid: ${validation.error.message}`, {
|
|
105
|
+
cause: validation.error,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return { content, data: validation.data };
|
|
109
|
+
}
|
|
110
|
+
export function buildGeneratedSkillDefinition(rootDir) {
|
|
111
|
+
const { data } = loadGeneratedSkillDefinition(rootDir);
|
|
112
|
+
return {
|
|
113
|
+
name: data.name,
|
|
114
|
+
description: inferGeneratedSkillDescription(data.name, data.prompt),
|
|
115
|
+
prompt: data.prompt,
|
|
116
|
+
rootDir,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
export function createGeneratedSkillDefinition(args) {
|
|
120
|
+
const rootDir = args.rootDir ?? getGeneratedSkillRoot(args.repoRoot, args.name);
|
|
121
|
+
mkdirSync(rootDir, { recursive: true });
|
|
122
|
+
writeFileSync(join(rootDir, GENERATED_SKILL_DEFINITION_FILE), `version: 1
|
|
123
|
+
kind: generated-skill
|
|
124
|
+
name: ${args.name}
|
|
125
|
+
prompt: |-
|
|
126
|
+
${yamlBlock(args.prompt.trim())}
|
|
127
|
+
`, 'utf-8');
|
|
128
|
+
return buildGeneratedSkillDefinition(rootDir);
|
|
129
|
+
}
|
|
130
|
+
export function clearGeneratedSkillArtifacts(rootDir) {
|
|
131
|
+
if (!existsSync(rootDir)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
for (const entry of readdirSync(rootDir, { withFileTypes: true })) {
|
|
135
|
+
if (entry.name === GENERATED_SKILL_DEFINITION_FILE || entry.name === BUILD_STATE_FILE) {
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
rmSync(join(rootDir, entry.name), { recursive: true, force: true });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Read generated runtime artifacts while excluding Warden-owned metadata files. */
|
|
142
|
+
export function readGeneratedSkillArtifactFiles(rootDir) {
|
|
143
|
+
if (!existsSync(rootDir)) {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
const files = [];
|
|
147
|
+
function visit(relativeDir) {
|
|
148
|
+
for (const entry of readdirSync(join(rootDir, relativeDir), { withFileTypes: true })) {
|
|
149
|
+
const relativePath = relativeDir ? `${relativeDir}/${entry.name}` : entry.name;
|
|
150
|
+
if (!relativeDir && (entry.name === GENERATED_SKILL_DEFINITION_FILE || entry.name === BUILD_STATE_FILE)) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (entry.isDirectory()) {
|
|
154
|
+
visit(relativePath);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (!entry.isFile()) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
const content = readFileSync(join(rootDir, relativePath), 'utf-8');
|
|
161
|
+
files.push({
|
|
162
|
+
path: relativePath,
|
|
163
|
+
content,
|
|
164
|
+
bytes: Buffer.byteLength(content, 'utf-8'),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
visit('');
|
|
169
|
+
return files.sort((a, b) => a.path.localeCompare(b.path));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/skill-builder/definition.ts"],"names":[],"mappings":"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"}
|