@ranimontagna/agent-toolkit 0.2.3 → 0.3.1
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/CHANGELOG.md +16 -0
- package/README.md +45 -7
- package/dist/bin/agent-toolkit.js +9 -4
- package/dist/bin/agent-toolkit.js.map +1 -1
- package/dist/src/ariadne/args.d.ts +2 -0
- package/dist/src/ariadne/args.js +146 -0
- package/dist/src/ariadne/args.js.map +1 -0
- package/dist/src/ariadne/checks.d.ts +24 -0
- package/dist/src/ariadne/checks.js +74 -0
- package/dist/src/ariadne/checks.js.map +1 -0
- package/dist/src/ariadne/cli.d.ts +38 -0
- package/dist/src/ariadne/cli.js +206 -0
- package/dist/src/ariadne/cli.js.map +1 -0
- package/dist/src/ariadne/doctor.d.ts +16 -0
- package/dist/src/ariadne/doctor.js +207 -0
- package/dist/src/ariadne/doctor.js.map +1 -0
- package/dist/src/ariadne/git.d.ts +58 -0
- package/dist/src/ariadne/git.js +577 -0
- package/dist/src/ariadne/git.js.map +1 -0
- package/dist/src/ariadne/import.d.ts +2 -0
- package/dist/src/ariadne/import.js +93 -0
- package/dist/src/ariadne/import.js.map +1 -0
- package/dist/src/ariadne/init.d.ts +47 -0
- package/dist/src/ariadne/init.js +345 -0
- package/dist/src/ariadne/init.js.map +1 -0
- package/dist/src/ariadne/lock.d.ts +22 -0
- package/dist/src/ariadne/lock.js +478 -0
- package/dist/src/ariadne/lock.js.map +1 -0
- package/dist/src/ariadne/loop.d.ts +26 -0
- package/dist/src/ariadne/loop.js +1316 -0
- package/dist/src/ariadne/loop.js.map +1 -0
- package/dist/src/ariadne/ownership.d.ts +32 -0
- package/dist/src/ariadne/ownership.js +161 -0
- package/dist/src/ariadne/ownership.js.map +1 -0
- package/dist/src/ariadne/process.d.ts +27 -0
- package/dist/src/ariadne/process.js +302 -0
- package/dist/src/ariadne/process.js.map +1 -0
- package/dist/src/ariadne/prompt.d.ts +11 -0
- package/dist/src/ariadne/prompt.js +29 -0
- package/dist/src/ariadne/prompt.js.map +1 -0
- package/dist/src/ariadne/render.d.ts +7 -0
- package/dist/src/ariadne/render.js +72 -0
- package/dist/src/ariadne/render.js.map +1 -0
- package/dist/src/ariadne/result.d.ts +54 -0
- package/dist/src/ariadne/result.js +129 -0
- package/dist/src/ariadne/result.js.map +1 -0
- package/dist/src/ariadne/runtimes/antigravity.d.ts +2 -0
- package/dist/src/ariadne/runtimes/antigravity.js +17 -0
- package/dist/src/ariadne/runtimes/antigravity.js.map +1 -0
- package/dist/src/ariadne/runtimes/claude.d.ts +2 -0
- package/dist/src/ariadne/runtimes/claude.js +17 -0
- package/dist/src/ariadne/runtimes/claude.js.map +1 -0
- package/dist/src/ariadne/runtimes/codex.d.ts +2 -0
- package/dist/src/ariadne/runtimes/codex.js +24 -0
- package/dist/src/ariadne/runtimes/codex.js.map +1 -0
- package/dist/src/ariadne/runtimes/gemini.d.ts +2 -0
- package/dist/src/ariadne/runtimes/gemini.js +18 -0
- package/dist/src/ariadne/runtimes/gemini.js.map +1 -0
- package/dist/src/ariadne/runtimes/index.d.ts +4 -0
- package/dist/src/ariadne/runtimes/index.js +82 -0
- package/dist/src/ariadne/runtimes/index.js.map +1 -0
- package/dist/src/ariadne/runtimes/opencode.d.ts +2 -0
- package/dist/src/ariadne/runtimes/opencode.js +19 -0
- package/dist/src/ariadne/runtimes/opencode.js.map +1 -0
- package/dist/src/ariadne/runtimes/shared.d.ts +24 -0
- package/dist/src/ariadne/runtimes/shared.js +141 -0
- package/dist/src/ariadne/runtimes/shared.js.map +1 -0
- package/dist/src/ariadne/runtimes/types.d.ts +56 -0
- package/dist/src/ariadne/runtimes/types.js +3 -0
- package/dist/src/ariadne/runtimes/types.js.map +1 -0
- package/dist/src/ariadne/schema.d.ts +11 -0
- package/dist/src/ariadne/schema.js +214 -0
- package/dist/src/ariadne/schema.js.map +1 -0
- package/dist/src/ariadne/status.d.ts +72 -0
- package/dist/src/ariadne/status.js +280 -0
- package/dist/src/ariadne/status.js.map +1 -0
- package/dist/src/ariadne/store.d.ts +99 -0
- package/dist/src/ariadne/store.js +738 -0
- package/dist/src/ariadne/store.js.map +1 -0
- package/dist/src/ariadne/types.d.ts +128 -0
- package/dist/src/ariadne/types.js +5 -0
- package/dist/src/ariadne/types.js.map +1 -0
- package/dist/src/ariadne/usage.d.ts +1 -0
- package/dist/src/ariadne/usage.js +8 -0
- package/dist/src/ariadne/usage.js.map +1 -0
- package/dist/src/build-skills-index.d.ts +3 -0
- package/dist/src/build-skills-index.js +50 -0
- package/dist/src/build-skills-index.js.map +1 -0
- package/dist/src/cli.d.ts +5 -0
- package/dist/src/cli.js +14 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/context.js.map +1 -1
- package/dist/src/lock-update.js.map +1 -1
- package/dist/src/main.js.map +1 -1
- package/dist/src/release.js.map +1 -1
- package/dist/src/skill-targets.js.map +1 -1
- package/dist/src/skills-audit.d.ts +6 -0
- package/dist/src/skills-audit.js +68 -2
- package/dist/src/skills-audit.js.map +1 -1
- package/dist/src/skills-index.d.ts +12 -0
- package/dist/src/skills-index.js +50 -0
- package/dist/src/skills-index.js.map +1 -0
- package/dist/src/stage-agent-skills.d.ts +1 -0
- package/dist/src/stage-agent-skills.js +32 -0
- package/dist/src/stage-agent-skills.js.map +1 -0
- package/dist/src/system.js.map +1 -1
- package/dist/src/tool-lock.d.ts +20 -0
- package/dist/src/tool-lock.js +26 -0
- package/dist/src/tool-lock.js.map +1 -1
- package/dist/src/usage.js +1 -0
- package/dist/src/usage.js.map +1 -1
- package/package.json +15 -8
- package/skills/frontend/accessibility/BRIEF.md +11 -0
- package/skills/frontend/accessibility/NOTICE.md +3 -0
- package/skills/frontend/accessibility/SKILL.md +10 -0
- package/skills/frontend/astro/astro-react-landing/BRIEF.md +10 -0
- package/skills/frontend/astro/astro-react-landing/SKILL.md +42 -0
- package/skills/frontend/design/frontend-design/BRIEF.md +10 -0
- package/skills/frontend/design/frontend-design/SKILL.md +38 -0
- package/skills/frontend/design/ui-ux-pro-max/BRIEF.md +11 -0
- package/skills/frontend/design/ui-ux-pro-max/NOTICE.md +3 -0
- package/skills/frontend/design/ui-ux-pro-max/SKILL.md +15 -0
- package/skills/frontend/gsap/gsap-motion/BRIEF.md +10 -0
- package/skills/frontend/gsap/gsap-motion/SKILL.md +36 -0
- package/skills/frontend/seo/seo-page/BRIEF.md +10 -0
- package/skills/frontend/seo/seo-page/SKILL.md +34 -0
- package/skills/quality/biome-formatting/BRIEF.md +9 -0
- package/skills/quality/biome-formatting/SKILL.md +27 -0
- package/skills/research/instagram-public-research/BRIEF.md +10 -0
- package/skills/research/instagram-public-research/SKILL.md +41 -0
- package/skills/research/research-data-collection/BRIEF.md +11 -0
- package/skills/research/research-data-collection/SKILL.md +40 -0
- package/skills/workflow/ariadne/NOTICE.md +11 -0
- package/skills/workflow/ariadne/SKILL.md +96 -0
- package/skills/workflow/ariadne-prd/NOTICE.md +11 -0
- package/skills/workflow/ariadne-prd/SKILL.md +69 -0
- package/skills.index.json +299 -0
- package/tools.lock.json +40 -21
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AriadneStory } from "./types.js";
|
|
2
|
+
export type IterationPromptInput = {
|
|
3
|
+
runId: string;
|
|
4
|
+
story: AriadneStory;
|
|
5
|
+
projectRoot: string;
|
|
6
|
+
resultPath: string;
|
|
7
|
+
qualityChecks: string[];
|
|
8
|
+
priorFailure?: string;
|
|
9
|
+
hasExistingDiff: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function buildIterationPrompt(input: IterationPromptInput): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function json(value) {
|
|
2
|
+
return `\`\`\`json\n${JSON.stringify(value, null, 2)}\n\`\`\``;
|
|
3
|
+
}
|
|
4
|
+
export function buildIterationPrompt(input) {
|
|
5
|
+
const { story } = input;
|
|
6
|
+
const criteria = story.acceptanceCriteria.map((criterion) => `- ${criterion}`);
|
|
7
|
+
const checks = input.qualityChecks.map((check) => `- ${check}`);
|
|
8
|
+
const diffGuidance = input.hasExistingDiff
|
|
9
|
+
? "An existing uncommitted diff belongs to this story. Preserve it and continue from it."
|
|
10
|
+
: "Start from the current repository state; do not create unrelated changes.";
|
|
11
|
+
const priorFailure = input.priorFailure
|
|
12
|
+
? `\n## Prior failure\n\n${input.priorFailure}\n`
|
|
13
|
+
: "";
|
|
14
|
+
return `# Ariadne iteration\n\nYou are working inside the project described below. Follow the repository instructions before editing. This task is runtime neutral: use the tools available in the repository without assuming a particular model provider or command-line client.\n\n${json({ runId: input.runId, projectRoot: input.projectRoot, resultPath: input.resultPath })}\n\n## Story\n\n${story.id}: ${story.title}\n\n${story.description}\n\n## Acceptance criteria\n\n${criteria.join("\n")}\n\n## Quality checks\n\n${checks.join("\n")}\n\n## Working rules\n\n${diffGuidance}\n\nRead all applicable AGENTS.md files before making changes. Write reusable repository knowledge to an applicable AGENTS.md only when it is genuinely durable.\n\nDo not create commits.\nDo not push or otherwise publish Git changes.\nDo not edit .ariadne/prd.json.\nDo not edit .ariadne/progress.md.\nWork on ${story.id} only.\n${priorFailure}\n## Result file\n\nBefore you finish, write exactly one JSON object to the result path above. Its schema is:\n\n${json({
|
|
15
|
+
schemaVersion: 1,
|
|
16
|
+
runId: "string",
|
|
17
|
+
storyId: "string",
|
|
18
|
+
outcome: "completed | failed",
|
|
19
|
+
criteria: [
|
|
20
|
+
{ criterion: "string", passed: "boolean", evidence: "string" },
|
|
21
|
+
],
|
|
22
|
+
summary: "string",
|
|
23
|
+
filesChanged: ["safe relative path"],
|
|
24
|
+
checksAttempted: ["string"],
|
|
25
|
+
learnings: ["string"],
|
|
26
|
+
failureReason: "string (required when outcome is failed)",
|
|
27
|
+
})}\n`;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/ariadne/prompt.ts"],"names":[],"mappings":"AAYA,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,eAAe,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAC3C,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAChC,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,YAAY,GAAG,KAAK,CAAC,eAAe;QACxC,CAAC,CAAC,uFAAuF;QACzF,CAAC,CAAC,2EAA2E,CAAC;IAChF,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY;QACrC,CAAC,CAAC,yBAAyB,KAAK,CAAC,YAAY,IAAI;QACjD,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,iRAAiR,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,mBAAmB,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,WAAW,iCAAiC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,YAAY,yTAAyT,KAAK,CAAC,EAAE,WAAW,YAAY,oHAAoH,IAAI,CAC3gC;QACE,aAAa,EAAE,CAAC;QAChB,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,oBAAoB;QAC7B,QAAQ,EAAE;YACR,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;SAC/D;QACD,OAAO,EAAE,QAAQ;QACjB,YAAY,EAAE,CAAC,oBAAoB,CAAC;QACpC,eAAe,EAAE,CAAC,QAAQ,CAAC;QAC3B,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,aAAa,EAAE,0CAA0C;KAC1D,CACF,IAAI,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AriadneDoctorReport } from "./doctor.js";
|
|
2
|
+
import type { AriadneStatusReport } from "./status.js";
|
|
3
|
+
import type { AriadneRunSummary } from "./types.js";
|
|
4
|
+
export declare function formatAriadneJson(report: AriadneStatusReport | AriadneDoctorReport): string;
|
|
5
|
+
export declare function formatAriadneStatus(report: AriadneStatusReport): string;
|
|
6
|
+
export declare function formatAriadneRun(report: AriadneRunSummary): string;
|
|
7
|
+
export declare function formatAriadneDoctor(report: AriadneDoctorReport): string;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
export function formatAriadneJson(report) {
|
|
2
|
+
return JSON.stringify(report, null, 2);
|
|
3
|
+
}
|
|
4
|
+
export function formatAriadneStatus(report) {
|
|
5
|
+
const lines = [
|
|
6
|
+
"Ariadne status",
|
|
7
|
+
`Project: ${report.project}`,
|
|
8
|
+
`Branch: ${report.branch.current} (configured: ${report.branch.configured})`,
|
|
9
|
+
report.runtime
|
|
10
|
+
? `Runtime: ${report.runtime.name} (${report.runtime.state}${report.runtime.version ? `, ${report.runtime.version}` : ""})`
|
|
11
|
+
: "Runtime: not configured",
|
|
12
|
+
`Stories: ${report.stories.pending} pending, ${report.stories.inProgress} in progress, ${report.stories.completed} completed, ${report.stories.blocked} blocked`,
|
|
13
|
+
report.activeStory
|
|
14
|
+
? `Active story: ${report.activeStory.id} ${report.activeStory.title} (attempts: ${report.activeStory.attempts})`
|
|
15
|
+
: "Active story: none",
|
|
16
|
+
report.blockedStory
|
|
17
|
+
? `Blocked story: ${report.blockedStory.id} ${report.blockedStory.title} (attempts: ${report.blockedStory.attempts})`
|
|
18
|
+
: "Blocked story: none",
|
|
19
|
+
report.ownershipViolation
|
|
20
|
+
? `Ownership violation: run ${report.ownershipViolation.runId} (${report.ownershipViolation.changed.join(", ")})`
|
|
21
|
+
: "Ownership violation: none",
|
|
22
|
+
report.lastRun
|
|
23
|
+
? `Last run: ${report.lastRun.id} (${report.lastRun.outcome}, ${report.lastRun.durationMs}ms)`
|
|
24
|
+
: "Last run: none",
|
|
25
|
+
`Consecutive failures: ${report.consecutiveFailures}`,
|
|
26
|
+
`Worktree: ${report.dirty ? "dirty" : "clean"}`,
|
|
27
|
+
`Lock: ${report.lock.state}${report.lock.pid ? ` (PID ${report.lock.pid}${report.lock.runId ? `, run ${report.lock.runId}` : ""})` : ""}`,
|
|
28
|
+
`Progress: ${report.paths.progress}`,
|
|
29
|
+
`Runs: ${report.paths.runs}`,
|
|
30
|
+
];
|
|
31
|
+
return lines.join("\n");
|
|
32
|
+
}
|
|
33
|
+
export function formatAriadneRun(report) {
|
|
34
|
+
if (!report.inspection)
|
|
35
|
+
return `Ariadne run: ${report.outcome}.`;
|
|
36
|
+
const inspection = report.inspection;
|
|
37
|
+
const selected = inspection.selectedStory;
|
|
38
|
+
const blocked = inspection.blockedStory;
|
|
39
|
+
return [
|
|
40
|
+
`Ariadne dry run: ${report.outcome}`,
|
|
41
|
+
`Project: ${inspection.project.name} (${inspection.project.root})`,
|
|
42
|
+
`Branch: ${inspection.project.branch}`,
|
|
43
|
+
selected
|
|
44
|
+
? `Selected story: ${selected.id} ${selected.title} (${selected.status}, attempt ${selected.attempts + 1})`
|
|
45
|
+
: "Selected story: none",
|
|
46
|
+
blocked
|
|
47
|
+
? `Blocked story: ${blocked.id} ${blocked.title} (${blocked.attempts} attempts)`
|
|
48
|
+
: "Blocked story: none",
|
|
49
|
+
`Runtime: ${inspection.runtime.name} (${inspection.runtime.state}${inspection.runtime.version ? `, ${inspection.runtime.version}` : ""})`,
|
|
50
|
+
`Prompt: ${inspection.promptPath}`,
|
|
51
|
+
`Invocation: ${JSON.stringify([inspection.invocation.command, ...inspection.invocation.args])}`,
|
|
52
|
+
`Checks: ${inspection.checks.join(", ") || "none"}`,
|
|
53
|
+
`Limits: attempts ${inspection.limits.maxAttemptsPerStory}, iterations ${inspection.limits.maxIterations ?? "unbounded"}, runtime ${inspection.limits.maxRuntimeMs ?? "unbounded"}`,
|
|
54
|
+
].join("\n");
|
|
55
|
+
}
|
|
56
|
+
export function formatAriadneDoctor(report) {
|
|
57
|
+
const lines = [
|
|
58
|
+
`Ariadne doctor: ${report.ok ? "ok" : "issues found"}`,
|
|
59
|
+
"",
|
|
60
|
+
formatAriadneStatus(report.status),
|
|
61
|
+
];
|
|
62
|
+
if (report.issues.length === 0) {
|
|
63
|
+
lines.push("", "Issues: none");
|
|
64
|
+
return lines.join("\n");
|
|
65
|
+
}
|
|
66
|
+
lines.push("", "Issues:");
|
|
67
|
+
for (const issue of report.issues) {
|
|
68
|
+
lines.push(`- ${issue.severity.toUpperCase()} [${issue.code}] ${issue.message}`);
|
|
69
|
+
}
|
|
70
|
+
return lines.join("\n");
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/ariadne/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { QualityCheckResult } from "./checks.js";
|
|
2
|
+
import type { AriadneExternalFileIdentity } from "./store.js";
|
|
3
|
+
import type { AriadneRuntimeName, AriadneStory } from "./types.js";
|
|
4
|
+
export type AgentCriterionResult = {
|
|
5
|
+
criterion: string;
|
|
6
|
+
passed: boolean;
|
|
7
|
+
evidence: string;
|
|
8
|
+
};
|
|
9
|
+
export type AgentResult = {
|
|
10
|
+
schemaVersion: 1;
|
|
11
|
+
runId: string;
|
|
12
|
+
storyId: string;
|
|
13
|
+
outcome: "completed" | "failed";
|
|
14
|
+
criteria: AgentCriterionResult[];
|
|
15
|
+
summary: string;
|
|
16
|
+
filesChanged: string[];
|
|
17
|
+
checksAttempted: string[];
|
|
18
|
+
learnings: string[];
|
|
19
|
+
failureReason?: string;
|
|
20
|
+
};
|
|
21
|
+
export type ExpectedAgentResult = {
|
|
22
|
+
runId: string;
|
|
23
|
+
storyId: string;
|
|
24
|
+
acceptanceCriteria: string[];
|
|
25
|
+
projectRoot: string;
|
|
26
|
+
};
|
|
27
|
+
export type ProgressEntryInput = {
|
|
28
|
+
timestamp: string;
|
|
29
|
+
runId: string;
|
|
30
|
+
story: AriadneStory;
|
|
31
|
+
runtime: AriadneRuntimeName;
|
|
32
|
+
result: AgentResult;
|
|
33
|
+
checks: QualityCheckResult[];
|
|
34
|
+
outcome?: "completed" | "failed" | "blocked" | "interrupted" | "budget_exhausted";
|
|
35
|
+
commit?: string;
|
|
36
|
+
failureCategory?: string;
|
|
37
|
+
failureReason?: string;
|
|
38
|
+
};
|
|
39
|
+
export type CoordinatorProgressEntryInput = {
|
|
40
|
+
timestamp: string;
|
|
41
|
+
runId: string;
|
|
42
|
+
storyId: string;
|
|
43
|
+
runtime: AriadneRuntimeName;
|
|
44
|
+
outcome: "failed" | "blocked" | "interrupted" | "budget_exhausted";
|
|
45
|
+
failureCategory: string;
|
|
46
|
+
failureReason: string;
|
|
47
|
+
};
|
|
48
|
+
export type DurableValidatedResult = Pick<AgentResult, "outcome" | "summary" | "filesChanged" | "learnings">;
|
|
49
|
+
export declare function sanitizeDurableValue(value: string): string;
|
|
50
|
+
export declare function sanitizeValidatedResult(result: DurableValidatedResult): DurableValidatedResult;
|
|
51
|
+
export declare function sanitizeQualityCheckResult(check: QualityCheckResult): QualityCheckResult;
|
|
52
|
+
export declare function readAgentResult(resultPath: string, expected: ExpectedAgentResult, certifiedIdentity?: AriadneExternalFileIdentity): AgentResult;
|
|
53
|
+
export declare function formatProgressEntry(input: ProgressEntryInput): string;
|
|
54
|
+
export declare function formatCoordinatorProgressEntry(input: CoordinatorProgressEntryInput): string;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { validateAgentResult } from "./schema.js";
|
|
4
|
+
const MAX_DURABLE_VALUE_LENGTH = 500;
|
|
5
|
+
export function sanitizeDurableValue(value) {
|
|
6
|
+
let sanitized = value
|
|
7
|
+
.replace(/\b(authorization)\s*([:=])\s*[^\r\n]*/gi, (_match, name, separator) => `${name}${separator === ":" ? ": " : "="}[REDACTED]`)
|
|
8
|
+
.replace(/\p{Cc}+/gu, " ")
|
|
9
|
+
.replace(/\s+/g, " ")
|
|
10
|
+
.trim();
|
|
11
|
+
sanitized = sanitized
|
|
12
|
+
.replace(/\bbearer\s+\S+/gi, "Bearer [REDACTED]")
|
|
13
|
+
.replace(/(--(?:api[-_]?key|token|password|secret|authorization|credential))(?:=|\s+)(?:"[^"]*"|'[^']*'|\S+)/gi, "$1 [REDACTED]")
|
|
14
|
+
.replace(/\b(api[-_]?key|token|password|secret|authorization|credential)\s*([:=])\s*(?:"[^"]*"|'[^']*'|[^\s,;]+)/gi, (_match, name, separator) => `${name}${separator === ":" ? ": " : "="}[REDACTED]`)
|
|
15
|
+
.replace(/\bgh[pousr]_[A-Za-z0-9_]{16,}\b/g, "[REDACTED]")
|
|
16
|
+
.replace(/\bsk-[A-Za-z0-9_-]{16,}\b/g, "[REDACTED]");
|
|
17
|
+
if (sanitized.length <= MAX_DURABLE_VALUE_LENGTH)
|
|
18
|
+
return sanitized;
|
|
19
|
+
return `${sanitized.slice(0, MAX_DURABLE_VALUE_LENGTH - 1)}…`;
|
|
20
|
+
}
|
|
21
|
+
export function sanitizeValidatedResult(result) {
|
|
22
|
+
return {
|
|
23
|
+
outcome: result.outcome,
|
|
24
|
+
summary: sanitizeDurableValue(result.summary),
|
|
25
|
+
filesChanged: result.filesChanged.map(sanitizeDurableValue),
|
|
26
|
+
learnings: result.learnings.map(sanitizeDurableValue),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function sanitizeQualityCheckResult(check) {
|
|
30
|
+
return {
|
|
31
|
+
...check,
|
|
32
|
+
command: sanitizeDurableValue(check.command),
|
|
33
|
+
stdoutPath: path.basename(check.stdoutPath),
|
|
34
|
+
stderrPath: path.basename(check.stderrPath),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function readAgentResult(resultPath, expected, certifiedIdentity) {
|
|
38
|
+
let contents;
|
|
39
|
+
let descriptor;
|
|
40
|
+
try {
|
|
41
|
+
descriptor = fs.openSync(resultPath, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
|
|
42
|
+
const stat = fs.fstatSync(descriptor);
|
|
43
|
+
if (!stat.isFile() ||
|
|
44
|
+
stat.nlink !== 1 ||
|
|
45
|
+
(certifiedIdentity !== undefined &&
|
|
46
|
+
(certifiedIdentity.source !== resultPath ||
|
|
47
|
+
certifiedIdentity.device !== stat.dev ||
|
|
48
|
+
certifiedIdentity.inode !== stat.ino ||
|
|
49
|
+
certifiedIdentity.links !== stat.nlink))) {
|
|
50
|
+
throw new Error("unsafe result identity");
|
|
51
|
+
}
|
|
52
|
+
contents = fs.readFileSync(descriptor, "utf8");
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
throw new Error("Unable to read agent result; inspect machine-local result.json.");
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
if (descriptor !== undefined)
|
|
59
|
+
fs.closeSync(descriptor);
|
|
60
|
+
}
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = JSON.parse(contents);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new Error("Agent result contains invalid JSON; inspect machine-local result.json.");
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
return validateAgentResult(parsed, expected);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw new Error("Agent result failed validation; inspect machine-local result.json.");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function formatProgressEntry(input) {
|
|
76
|
+
const checks = input.checks.map((check) => {
|
|
77
|
+
const outcome = check.status === 0 ? "passed" : "failed";
|
|
78
|
+
return `- ${sanitizeDurableValue(check.command)}: ${outcome} (${check.durationMs}ms)`;
|
|
79
|
+
});
|
|
80
|
+
const outcome = input.outcome ??
|
|
81
|
+
(input.failureCategory === undefined ? input.result.outcome : "failed");
|
|
82
|
+
const lines = [
|
|
83
|
+
`## ${input.timestamp} — ${input.runId}`,
|
|
84
|
+
"",
|
|
85
|
+
`- story: ${sanitizeDurableValue(input.story.id)}`,
|
|
86
|
+
`- runtime: ${input.runtime}`,
|
|
87
|
+
`- outcome: ${outcome}`,
|
|
88
|
+
`- criteria: ${input.result.criteria.filter((criterion) => criterion.passed).length}/${input.result.criteria.length} passed`,
|
|
89
|
+
`- summary: ${sanitizeDurableValue(input.result.summary)}`,
|
|
90
|
+
"- changed files:",
|
|
91
|
+
...(input.result.filesChanged.length > 0
|
|
92
|
+
? input.result.filesChanged.map((file) => ` - ${sanitizeDurableValue(file)}`)
|
|
93
|
+
: [" - none"]),
|
|
94
|
+
"- learnings:",
|
|
95
|
+
...(input.result.learnings.length > 0
|
|
96
|
+
? input.result.learnings.map((learning) => ` - ${sanitizeDurableValue(learning)}`)
|
|
97
|
+
: [" - none"]),
|
|
98
|
+
`- checks attempted: ${input.result.checksAttempted.length}`,
|
|
99
|
+
...checks,
|
|
100
|
+
...(input.commit
|
|
101
|
+
? [`- commit: ${sanitizeDurableValue(input.commit)}`]
|
|
102
|
+
: []),
|
|
103
|
+
...(input.failureCategory
|
|
104
|
+
? [`- failure category: ${sanitizeDurableValue(input.failureCategory)}`]
|
|
105
|
+
: []),
|
|
106
|
+
...(input.failureReason
|
|
107
|
+
? [`- failure reason: ${sanitizeDurableValue(input.failureReason)}`]
|
|
108
|
+
: []),
|
|
109
|
+
"",
|
|
110
|
+
"---",
|
|
111
|
+
"",
|
|
112
|
+
];
|
|
113
|
+
return lines.join("\n");
|
|
114
|
+
}
|
|
115
|
+
export function formatCoordinatorProgressEntry(input) {
|
|
116
|
+
return [
|
|
117
|
+
`## ${input.timestamp} — ${input.runId}`,
|
|
118
|
+
"",
|
|
119
|
+
`- story: ${sanitizeDurableValue(input.storyId)}`,
|
|
120
|
+
`- runtime: ${input.runtime}`,
|
|
121
|
+
`- outcome: ${input.outcome}`,
|
|
122
|
+
`- failure category: ${sanitizeDurableValue(input.failureCategory)}`,
|
|
123
|
+
`- failure reason: ${sanitizeDurableValue(input.failureReason)}`,
|
|
124
|
+
"",
|
|
125
|
+
"---",
|
|
126
|
+
"",
|
|
127
|
+
].join("\n");
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../../src/ariadne/result.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createRuntimeAdapter, promptInstruction } from "./shared.js";
|
|
2
|
+
const minimumVersion = "1.1.8";
|
|
3
|
+
export function createAntigravityRuntime(deps) {
|
|
4
|
+
return createRuntimeAdapter({
|
|
5
|
+
name: "antigravity",
|
|
6
|
+
command: "agy",
|
|
7
|
+
version: { kind: "minimum", version: minimumVersion },
|
|
8
|
+
helpArgs: ["--help"],
|
|
9
|
+
requiredHelp: ["--print", "--dangerously-skip-permissions"],
|
|
10
|
+
invocationArgs: (context) => [
|
|
11
|
+
"--print",
|
|
12
|
+
"--dangerously-skip-permissions",
|
|
13
|
+
promptInstruction(context.relativePromptPath),
|
|
14
|
+
],
|
|
15
|
+
}, deps);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=antigravity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/antigravity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,MAAM,UAAU,wBAAwB,CACtC,IAAsB;IAEtB,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE;QACrD,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,YAAY,EAAE,CAAC,SAAS,EAAE,gCAAgC,CAAC;QAC3D,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3B,SAAS;YACT,gCAAgC;YAChC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC9C;KACF,EACD,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { createRuntimeAdapter, promptInstruction } from "./shared.js";
|
|
2
|
+
export function createClaudeRuntime(deps, version) {
|
|
3
|
+
return createRuntimeAdapter({
|
|
4
|
+
name: "claude",
|
|
5
|
+
command: "claude",
|
|
6
|
+
version: { kind: "exact", version },
|
|
7
|
+
helpArgs: ["--help"],
|
|
8
|
+
requiredHelp: ["--print", "--dangerously-skip-permissions"],
|
|
9
|
+
authArgs: ["auth", "status"],
|
|
10
|
+
invocationArgs: (context) => [
|
|
11
|
+
"--print",
|
|
12
|
+
"--dangerously-skip-permissions",
|
|
13
|
+
promptInstruction(context.relativePromptPath),
|
|
14
|
+
],
|
|
15
|
+
}, deps);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,UAAU,mBAAmB,CACjC,IAAsB,EACtB,OAAe;IAEf,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QACnC,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,YAAY,EAAE,CAAC,SAAS,EAAE,gCAAgC,CAAC;QAC3D,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3B,SAAS;YACT,gCAAgC;YAChC,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC9C;KACF,EACD,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createRuntimeAdapter, promptInstruction } from "./shared.js";
|
|
2
|
+
export function createCodexRuntime(deps, version) {
|
|
3
|
+
return createRuntimeAdapter({
|
|
4
|
+
name: "codex",
|
|
5
|
+
command: "codex",
|
|
6
|
+
version: { kind: "exact", version },
|
|
7
|
+
helpArgs: ["exec", "--help"],
|
|
8
|
+
requiredHelp: [
|
|
9
|
+
"--dangerously-bypass-approvals-and-sandbox",
|
|
10
|
+
"--ephemeral",
|
|
11
|
+
"-C",
|
|
12
|
+
],
|
|
13
|
+
authArgs: ["login", "status"],
|
|
14
|
+
invocationArgs: (context) => [
|
|
15
|
+
"exec",
|
|
16
|
+
"--dangerously-bypass-approvals-and-sandbox",
|
|
17
|
+
"--ephemeral",
|
|
18
|
+
"-C",
|
|
19
|
+
context.projectRoot,
|
|
20
|
+
promptInstruction(context.relativePromptPath),
|
|
21
|
+
],
|
|
22
|
+
}, deps);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,UAAU,kBAAkB,CAChC,IAAsB,EACtB,OAAe;IAEf,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC5B,YAAY,EAAE;YACZ,4CAA4C;YAC5C,aAAa;YACb,IAAI;SACL;QACD,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC7B,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3B,MAAM;YACN,4CAA4C;YAC5C,aAAa;YACb,IAAI;YACJ,OAAO,CAAC,WAAW;YACnB,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC9C;KACF,EACD,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRuntimeAdapter, promptInstruction } from "./shared.js";
|
|
2
|
+
export function createGeminiRuntime(deps, version) {
|
|
3
|
+
return createRuntimeAdapter({
|
|
4
|
+
name: "gemini",
|
|
5
|
+
command: "gemini",
|
|
6
|
+
version: { kind: "exact", version },
|
|
7
|
+
helpArgs: ["--help"],
|
|
8
|
+
requiredHelp: ["--prompt", "--approval-mode", "--skip-trust"],
|
|
9
|
+
invocationArgs: (context) => [
|
|
10
|
+
"--prompt",
|
|
11
|
+
promptInstruction(context.relativePromptPath),
|
|
12
|
+
"--approval-mode",
|
|
13
|
+
"yolo",
|
|
14
|
+
"--skip-trust",
|
|
15
|
+
],
|
|
16
|
+
}, deps);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,UAAU,mBAAmB,CACjC,IAAsB,EACtB,OAAe;IAEf,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QACnC,QAAQ,EAAE,CAAC,QAAQ,CAAC;QACpB,YAAY,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,cAAc,CAAC;QAC7D,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3B,UAAU;YACV,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC;YAC7C,iBAAiB;YACjB,MAAM;YACN,cAAc;SACf;KACF,EACD,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type RuntimeProbeDeps, type RuntimeRegistry, type RuntimeSelection, type RuntimeSelectionInput } from "./types.js";
|
|
2
|
+
export * from "./types.js";
|
|
3
|
+
export declare function createRuntimeRegistry(deps: RuntimeProbeDeps): RuntimeRegistry;
|
|
4
|
+
export declare function selectRuntime(input: RuntimeSelectionInput): Promise<RuntimeSelection>;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { loadToolLock } from "../../tool-lock.js";
|
|
2
|
+
import { createAntigravityRuntime } from "./antigravity.js";
|
|
3
|
+
import { createClaudeRuntime } from "./claude.js";
|
|
4
|
+
import { createCodexRuntime } from "./codex.js";
|
|
5
|
+
import { createGeminiRuntime } from "./gemini.js";
|
|
6
|
+
import { createOpenCodeRuntime } from "./opencode.js";
|
|
7
|
+
import { AriadneRuntimeError, } from "./types.js";
|
|
8
|
+
export * from "./types.js";
|
|
9
|
+
export function createRuntimeRegistry(deps) {
|
|
10
|
+
const lock = loadToolLock();
|
|
11
|
+
return Object.freeze({
|
|
12
|
+
claude: createClaudeRuntime(deps, lock.runtimeClis.claude.version),
|
|
13
|
+
codex: createCodexRuntime(deps, lock.runtimeClis.codex.version),
|
|
14
|
+
opencode: createOpenCodeRuntime(deps, lock.runtimeClis.opencode.version),
|
|
15
|
+
gemini: createGeminiRuntime(deps, lock.runtimeClis.gemini.version),
|
|
16
|
+
antigravity: createAntigravityRuntime(deps),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function selection(name, registry, detections, source) {
|
|
20
|
+
const adapter = registry[name];
|
|
21
|
+
const detection = detections.get(name) ?? adapter.detect();
|
|
22
|
+
return { name, adapter, detection, source };
|
|
23
|
+
}
|
|
24
|
+
function requireSelectablePreference(source, name, registry, detections) {
|
|
25
|
+
const candidate = selection(name, registry, detections, source);
|
|
26
|
+
if (candidate.detection.state === "healthy") {
|
|
27
|
+
return candidate;
|
|
28
|
+
}
|
|
29
|
+
if (source === "explicit" && candidate.detection.state === "unverified") {
|
|
30
|
+
return candidate;
|
|
31
|
+
}
|
|
32
|
+
if (source === "configured") {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
throw new AriadneRuntimeError(`The ${source} runtime ${name} is ${candidate.detection.state}: ${candidate.detection.reason}`);
|
|
36
|
+
}
|
|
37
|
+
export async function selectRuntime(input) {
|
|
38
|
+
const names = Object.keys(input.registry);
|
|
39
|
+
const detections = new Map(names.map((name) => [name, input.registry[name].detect()]));
|
|
40
|
+
if (input.explicit) {
|
|
41
|
+
const explicit = requireSelectablePreference("explicit", input.explicit, input.registry, detections);
|
|
42
|
+
if (explicit)
|
|
43
|
+
return explicit;
|
|
44
|
+
}
|
|
45
|
+
if (input.configured) {
|
|
46
|
+
const configured = requireSelectablePreference("configured", input.configured, input.registry, detections);
|
|
47
|
+
if (configured)
|
|
48
|
+
return configured;
|
|
49
|
+
}
|
|
50
|
+
const healthy = names.filter((name) => detections.get(name)?.state === "healthy");
|
|
51
|
+
if (healthy.length === 1) {
|
|
52
|
+
return selection(healthy[0], input.registry, detections, "automatic");
|
|
53
|
+
}
|
|
54
|
+
if (healthy.length > 1 &&
|
|
55
|
+
input.globalPreferred &&
|
|
56
|
+
healthy.includes(input.globalPreferred)) {
|
|
57
|
+
return selection(input.globalPreferred, input.registry, detections, "global");
|
|
58
|
+
}
|
|
59
|
+
if (healthy.length > 1) {
|
|
60
|
+
if (!input.interactive) {
|
|
61
|
+
throw new AriadneRuntimeError(`Multiple healthy runtimes are available (${healthy.join(", ")}); pass --runtime to choose one.`);
|
|
62
|
+
}
|
|
63
|
+
if (!input.choose) {
|
|
64
|
+
throw new AriadneRuntimeError("Interactive runtime selection requires a choose callback.");
|
|
65
|
+
}
|
|
66
|
+
const choices = healthy.map((name) => detections.get(name));
|
|
67
|
+
const chosen = await input.choose(choices);
|
|
68
|
+
if (!healthy.includes(chosen)) {
|
|
69
|
+
throw new AriadneRuntimeError(`Interactive runtime selection returned invalid choice: ${chosen}.`);
|
|
70
|
+
}
|
|
71
|
+
return selection(chosen, input.registry, detections, "interactive");
|
|
72
|
+
}
|
|
73
|
+
const unverified = names.filter((name) => detections.get(name)?.state === "unverified");
|
|
74
|
+
if (unverified.length === 1) {
|
|
75
|
+
return selection(unverified[0], input.registry, detections, "automatic");
|
|
76
|
+
}
|
|
77
|
+
if (unverified.length > 1) {
|
|
78
|
+
throw new AriadneRuntimeError(`Multiple unverified runtimes are available (${unverified.join(", ")}); pass --runtime to choose one.`);
|
|
79
|
+
}
|
|
80
|
+
throw new AriadneRuntimeError("No healthy or unverified runtime is available. Run ariadne doctor for details.");
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createRuntimeAdapter, promptInstruction } from "./shared.js";
|
|
2
|
+
export function createOpenCodeRuntime(deps, version) {
|
|
3
|
+
return createRuntimeAdapter({
|
|
4
|
+
name: "opencode",
|
|
5
|
+
command: "opencode",
|
|
6
|
+
version: { kind: "exact", version },
|
|
7
|
+
helpArgs: ["run", "--help"],
|
|
8
|
+
requiredHelp: ["--auto", "--dir"],
|
|
9
|
+
authArgs: ["providers", "list"],
|
|
10
|
+
invocationArgs: (context) => [
|
|
11
|
+
"run",
|
|
12
|
+
"--auto",
|
|
13
|
+
"--dir",
|
|
14
|
+
context.projectRoot,
|
|
15
|
+
promptInstruction(context.relativePromptPath),
|
|
16
|
+
],
|
|
17
|
+
}, deps);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=opencode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../../src/ariadne/runtimes/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,UAAU,qBAAqB,CACnC,IAAsB,EACtB,OAAe;IAEf,OAAO,oBAAoB,CACzB;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;QACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC;QAC3B,YAAY,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QACjC,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;QAC/B,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3B,KAAK;YACL,QAAQ;YACR,OAAO;YACP,OAAO,CAAC,WAAW;YACnB,iBAAiB,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC9C;KACF,EACD,IAAI,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AriadneRuntimeName, ProcessResult } from "../types.js";
|
|
2
|
+
import type { AgentOutcome, AriadneRuntimeAdapter, IterationContext, RuntimeProbeDeps } from "./types.js";
|
|
3
|
+
type RuntimeVersionPolicy = {
|
|
4
|
+
kind: "exact";
|
|
5
|
+
version: string;
|
|
6
|
+
} | {
|
|
7
|
+
kind: "minimum";
|
|
8
|
+
version: string;
|
|
9
|
+
};
|
|
10
|
+
export type RuntimeAdapterDefinition = {
|
|
11
|
+
name: AriadneRuntimeName;
|
|
12
|
+
command: string;
|
|
13
|
+
version: RuntimeVersionPolicy;
|
|
14
|
+
helpArgs: string[];
|
|
15
|
+
requiredHelp: string[];
|
|
16
|
+
authArgs?: string[];
|
|
17
|
+
invocationArgs: (context: IterationContext) => string[];
|
|
18
|
+
};
|
|
19
|
+
export declare function parseVersionToken(output: string): string | undefined;
|
|
20
|
+
export declare function compareNumericVersions(left: string, right: string): number;
|
|
21
|
+
export declare function promptInstruction(relativePromptPath: string): string;
|
|
22
|
+
export declare function interpretProcessResult(result: ProcessResult): AgentOutcome;
|
|
23
|
+
export declare function createRuntimeAdapter(definition: RuntimeAdapterDefinition, deps: RuntimeProbeDeps): AriadneRuntimeAdapter;
|
|
24
|
+
export {};
|