@jterrats/open-orchestra 0.3.1 → 0.4.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 +50 -0
- package/dist/autonomous-phase-lifecycle.d.ts +25 -0
- package/dist/autonomous-phase-lifecycle.js +194 -0
- package/dist/autonomous-phase-lifecycle.js.map +1 -0
- package/dist/autonomous-run-state.d.ts +6 -0
- package/dist/autonomous-run-state.js +91 -0
- package/dist/autonomous-run-state.js.map +1 -0
- package/dist/autonomous-run-store.d.ts +12 -0
- package/dist/autonomous-run-store.js +64 -0
- package/dist/autonomous-run-store.js.map +1 -0
- package/dist/autonomous-workflow-constants.d.ts +6 -0
- package/dist/autonomous-workflow-constants.js +36 -0
- package/dist/autonomous-workflow-constants.js.map +1 -0
- package/dist/autonomous-workflow.d.ts +6 -45
- package/dist/autonomous-workflow.js +4 -385
- package/dist/autonomous-workflow.js.map +1 -1
- package/dist/benchmark.d.ts +2 -1
- package/dist/benchmark.js +70 -0
- package/dist/benchmark.js.map +1 -1
- package/dist/cli.js +31 -2
- package/dist/cli.js.map +1 -1
- package/dist/command-utils.d.ts +6 -0
- package/dist/command-utils.js +19 -0
- package/dist/command-utils.js.map +1 -0
- package/dist/commands.d.ts +8 -40
- package/dist/commands.js +59 -803
- package/dist/commands.js.map +1 -1
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -1
- package/dist/defaults.d.ts +17 -0
- package/dist/defaults.js +17 -0
- package/dist/defaults.js.map +1 -1
- package/dist/instruction-commands.d.ts +5 -0
- package/dist/instruction-commands.js +98 -0
- package/dist/instruction-commands.js.map +1 -0
- package/dist/metrics-commands.d.ts +3 -0
- package/dist/metrics-commands.js +114 -0
- package/dist/metrics-commands.js.map +1 -0
- package/dist/model-commands.d.ts +13 -0
- package/dist/model-commands.js +199 -0
- package/dist/model-commands.js.map +1 -0
- package/dist/model-providers.d.ts +26 -1
- package/dist/model-providers.js +257 -1
- package/dist/model-providers.js.map +1 -1
- package/dist/notifications.d.ts +31 -0
- package/dist/notifications.js +165 -0
- package/dist/notifications.js.map +1 -0
- package/dist/phase-executor.d.ts +18 -0
- package/dist/phase-executor.js +218 -0
- package/dist/phase-executor.js.map +1 -0
- package/dist/release-commands.d.ts +10 -0
- package/dist/release-commands.js +116 -0
- package/dist/release-commands.js.map +1 -1
- package/dist/runtime-adapters.d.ts +5 -1
- package/dist/runtime-adapters.js +27 -0
- package/dist/runtime-adapters.js.map +1 -1
- package/dist/runtime-commands.d.ts +9 -0
- package/dist/runtime-commands.js +156 -0
- package/dist/runtime-commands.js.map +1 -0
- package/dist/runtime-execution-adapters.d.ts +2 -0
- package/dist/runtime-execution-adapters.js +163 -0
- package/dist/runtime-execution-adapters.js.map +1 -0
- package/dist/runtime-execution-renderer.d.ts +10 -0
- package/dist/runtime-execution-renderer.js +110 -0
- package/dist/runtime-execution-renderer.js.map +1 -0
- package/dist/runtime-execution.d.ts +27 -0
- package/dist/runtime-execution.js +147 -0
- package/dist/runtime-execution.js.map +1 -0
- package/dist/skills-commands.d.ts +9 -0
- package/dist/skills-commands.js +130 -0
- package/dist/skills-commands.js.map +1 -0
- package/dist/sprint-commands.d.ts +5 -0
- package/dist/sprint-commands.js +120 -0
- package/dist/sprint-commands.js.map +1 -0
- package/dist/sprint-metrics.d.ts +9 -0
- package/dist/sprint-metrics.js +203 -0
- package/dist/sprint-metrics.js.map +1 -0
- package/dist/telemetry-commands.d.ts +7 -0
- package/dist/telemetry-commands.js +82 -0
- package/dist/telemetry-commands.js.map +1 -0
- package/dist/tool-commands.d.ts +3 -0
- package/dist/tool-commands.js +67 -0
- package/dist/tool-commands.js.map +1 -0
- package/dist/types.d.ts +177 -0
- package/dist/types.js.map +1 -1
- package/dist/workflow-services.d.ts +3 -1
- package/dist/workflow-services.js +16 -6
- package/dist/workflow-services.js.map +1 -1
- package/docs/autonomous-workflow.md +28 -1
- package/docs/benchmark.md +18 -0
- package/docs/runtime-llm-flow.md +80 -9
- package/package.json +1 -1
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { ensureDir, resolveWorkflowPath } from "./fs-utils.js";
|
|
4
|
+
import { renderSkills } from "./skills.js";
|
|
5
|
+
import { appendEvent, readEvents, writeArtifact } from "./workspace.js";
|
|
6
|
+
import { checkUsageBudget, completeWithProviderFallback, getTaskContext, getWorkflowConfig, recordDecision, recordModelProvenance, } from "./workflow-services.js";
|
|
7
|
+
const DEFAULT_ARCHITECT_SIZING = "m [3 points]";
|
|
8
|
+
export async function phaseExecutionMode(root, role) {
|
|
9
|
+
const routing = await phaseRouting(root, role);
|
|
10
|
+
return routing.provider === "none" ? "deterministic" : "llm";
|
|
11
|
+
}
|
|
12
|
+
export async function executePhaseWithLlm({ root, run, phase, phaseIndex, }) {
|
|
13
|
+
const budget = await checkUsageBudget(run.taskId, root);
|
|
14
|
+
if (!budget.passed) {
|
|
15
|
+
throw new Error(`budget exceeded before ${phase.phase}: ${budget.violations.join("; ")}`);
|
|
16
|
+
}
|
|
17
|
+
const routing = await phaseRouting(root, phase.role);
|
|
18
|
+
if (routing.provider === "none") {
|
|
19
|
+
return {
|
|
20
|
+
mode: "deterministic",
|
|
21
|
+
outcome: { kind: "done", notes: phase.summary },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const prompt = await buildPhasePrompt({ root, run, phase, phaseIndex });
|
|
25
|
+
const result = await completeWithProviderFallback(routing, prompt.user, {
|
|
26
|
+
root,
|
|
27
|
+
taskId: run.taskId,
|
|
28
|
+
role: phase.role,
|
|
29
|
+
jsonMode: true,
|
|
30
|
+
providerMode: "real",
|
|
31
|
+
});
|
|
32
|
+
const response = result.response;
|
|
33
|
+
const output = parsePhaseOutput(response.content);
|
|
34
|
+
const artifact = await writePhaseArtifact({
|
|
35
|
+
root,
|
|
36
|
+
run,
|
|
37
|
+
phase,
|
|
38
|
+
response,
|
|
39
|
+
output,
|
|
40
|
+
fallbackUsed: result.fallbackUsed,
|
|
41
|
+
});
|
|
42
|
+
await recordModelProvenance({
|
|
43
|
+
task: run.taskId,
|
|
44
|
+
role: phase.role,
|
|
45
|
+
provider: response.provider,
|
|
46
|
+
model: response.model,
|
|
47
|
+
promptId: `workflow:${run.id}:${phase.phase}`,
|
|
48
|
+
responseId: response.id,
|
|
49
|
+
inputTokens: response.usage.inputTokens,
|
|
50
|
+
outputTokens: response.usage.outputTokens,
|
|
51
|
+
estimatedCostUsd: 0,
|
|
52
|
+
finishReason: response.finishReason,
|
|
53
|
+
}, root);
|
|
54
|
+
await appendEvent(root, {
|
|
55
|
+
type: "AUTONOMOUS_PHASE_LLM_COMPLETED",
|
|
56
|
+
taskId: run.taskId,
|
|
57
|
+
actor: phase.role,
|
|
58
|
+
summary: `LLM phase completed: ${phase.phase}`,
|
|
59
|
+
artifacts: [artifact],
|
|
60
|
+
metadata: {
|
|
61
|
+
runId: run.id,
|
|
62
|
+
phase: phase.phase,
|
|
63
|
+
provider: response.provider,
|
|
64
|
+
model: response.model,
|
|
65
|
+
responseId: response.id,
|
|
66
|
+
fallbackUsed: result.fallbackUsed,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
if (phase.role === "architect") {
|
|
70
|
+
await recordArchitectSizing(root, run.taskId, output);
|
|
71
|
+
}
|
|
72
|
+
const outcome = phaseOutcome(phase, output);
|
|
73
|
+
return { mode: "llm", artifact, output, outcome };
|
|
74
|
+
}
|
|
75
|
+
export async function buildPhasePrompt({ root, run, phase, phaseIndex, }) {
|
|
76
|
+
const context = await getTaskContext(run.taskId, root);
|
|
77
|
+
const skills = await renderSkills({
|
|
78
|
+
target: "generic",
|
|
79
|
+
taskId: run.taskId,
|
|
80
|
+
skillIds: undefined,
|
|
81
|
+
root,
|
|
82
|
+
});
|
|
83
|
+
const priorHandoff = await latestHandoffContent(root, run.taskId);
|
|
84
|
+
const fakeResponse = defaultStructuredOutput(phase);
|
|
85
|
+
return {
|
|
86
|
+
system: [
|
|
87
|
+
`You are the ${phase.role} phase agent for Open Orchestra.`,
|
|
88
|
+
skills.content,
|
|
89
|
+
].join("\n\n"),
|
|
90
|
+
user: [
|
|
91
|
+
"Use the task context and prior handoff to produce structured phase output.",
|
|
92
|
+
`Run: ${run.id}`,
|
|
93
|
+
`Phase index: ${phaseIndex}`,
|
|
94
|
+
`Phase: ${phase.phase}`,
|
|
95
|
+
`Role: ${phase.role}`,
|
|
96
|
+
"",
|
|
97
|
+
"Task context JSON:",
|
|
98
|
+
JSON.stringify(context, null, 2),
|
|
99
|
+
"",
|
|
100
|
+
"Prior handoff:",
|
|
101
|
+
priorHandoff || "No prior handoff.",
|
|
102
|
+
"",
|
|
103
|
+
"Return JSON only with this shape:",
|
|
104
|
+
JSON.stringify(defaultStructuredOutput(phase), null, 2),
|
|
105
|
+
"",
|
|
106
|
+
`FAKE_JSON_RESPONSE:${JSON.stringify(fakeResponse)}`,
|
|
107
|
+
].join("\n"),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export function parsePhaseOutput(content) {
|
|
111
|
+
const parsed = JSON.parse(extractJson(content));
|
|
112
|
+
return {
|
|
113
|
+
summary: stringOrDefault(parsed.summary, "Phase completed"),
|
|
114
|
+
notes: stringOrDefault(parsed.notes, parsed.summary ?? "Phase completed"),
|
|
115
|
+
verdict: parsed.verdict === "fail" ? "fail" : "pass",
|
|
116
|
+
findings: Array.isArray(parsed.findings)
|
|
117
|
+
? parsed.findings.map((finding) => String(finding))
|
|
118
|
+
: [],
|
|
119
|
+
decisions: Array.isArray(parsed.decisions)
|
|
120
|
+
? parsed.decisions.map((decision) => String(decision))
|
|
121
|
+
: [],
|
|
122
|
+
evidence: Array.isArray(parsed.evidence)
|
|
123
|
+
? parsed.evidence.map((item) => String(item))
|
|
124
|
+
: [],
|
|
125
|
+
handoff: stringOrDefault(parsed.handoff, parsed.notes ?? "Phase handoff ready"),
|
|
126
|
+
sizing: typeof parsed.sizing === "string" && parsed.sizing.trim()
|
|
127
|
+
? parsed.sizing
|
|
128
|
+
: DEFAULT_ARCHITECT_SIZING,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async function phaseRouting(root, role) {
|
|
132
|
+
const config = await getWorkflowConfig(root);
|
|
133
|
+
return config.providers.byRole?.[role] ?? config.providers.defaults;
|
|
134
|
+
}
|
|
135
|
+
function phaseOutcome(phase, output) {
|
|
136
|
+
if (phase.phase === "qa" && output.verdict === "fail") {
|
|
137
|
+
return {
|
|
138
|
+
kind: "qa_fail",
|
|
139
|
+
notes: output.findings.join("; ") || output.notes,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return { kind: "done", notes: output.notes };
|
|
143
|
+
}
|
|
144
|
+
async function recordArchitectSizing(root, taskId, output) {
|
|
145
|
+
await recordDecision({
|
|
146
|
+
task: taskId,
|
|
147
|
+
owner: "architect",
|
|
148
|
+
title: "Story sizing",
|
|
149
|
+
context: output.summary,
|
|
150
|
+
decision: output.sizing ?? DEFAULT_ARCHITECT_SIZING,
|
|
151
|
+
consequences: output.handoff,
|
|
152
|
+
status: "accepted",
|
|
153
|
+
}, root);
|
|
154
|
+
}
|
|
155
|
+
async function writePhaseArtifact({ root, run, phase, response, output, fallbackUsed, }) {
|
|
156
|
+
const directory = path.join("runs", run.taskId, phase.phase);
|
|
157
|
+
await ensureDir(resolveWorkflowPath(root, directory));
|
|
158
|
+
return writeArtifact(root, directory, `${run.id}-${phase.phase}.md`, [
|
|
159
|
+
`# ${phase.phase}: ${run.taskId}`,
|
|
160
|
+
"",
|
|
161
|
+
`- Role: ${phase.role}`,
|
|
162
|
+
`- Provider: ${response.provider}`,
|
|
163
|
+
`- Model: ${response.model}`,
|
|
164
|
+
`- Response: ${response.id}`,
|
|
165
|
+
`- Fallback used: ${String(fallbackUsed)}`,
|
|
166
|
+
"",
|
|
167
|
+
"## Summary",
|
|
168
|
+
output.summary,
|
|
169
|
+
"",
|
|
170
|
+
"## Notes",
|
|
171
|
+
output.notes,
|
|
172
|
+
"",
|
|
173
|
+
"## Structured Output",
|
|
174
|
+
"```json",
|
|
175
|
+
JSON.stringify(output, null, 2),
|
|
176
|
+
"```",
|
|
177
|
+
"",
|
|
178
|
+
].join("\n"));
|
|
179
|
+
}
|
|
180
|
+
async function latestHandoffContent(root, taskId) {
|
|
181
|
+
const events = await readEvents(root);
|
|
182
|
+
const artifact = [...events]
|
|
183
|
+
.reverse()
|
|
184
|
+
.find((event) => event.taskId === taskId && event.type === "HANDOFF_READY")
|
|
185
|
+
?.artifacts?.[0];
|
|
186
|
+
if (!artifact)
|
|
187
|
+
return "";
|
|
188
|
+
return readFile(path.join(root, artifact), "utf8").catch(() => "");
|
|
189
|
+
}
|
|
190
|
+
function defaultStructuredOutput(phase) {
|
|
191
|
+
const output = {
|
|
192
|
+
summary: `${phase.role} completed ${phase.phase}`,
|
|
193
|
+
notes: phase.summary,
|
|
194
|
+
verdict: "pass",
|
|
195
|
+
findings: [],
|
|
196
|
+
decisions: phase.role === "architect" ? ["Use incremental implementation"] : [],
|
|
197
|
+
evidence: [],
|
|
198
|
+
handoff: `${phase.phase} output is ready for the next phase.`,
|
|
199
|
+
};
|
|
200
|
+
if (phase.role === "architect") {
|
|
201
|
+
output.sizing = DEFAULT_ARCHITECT_SIZING;
|
|
202
|
+
}
|
|
203
|
+
return output;
|
|
204
|
+
}
|
|
205
|
+
function extractJson(content) {
|
|
206
|
+
const trimmed = content.trim();
|
|
207
|
+
if (trimmed.startsWith("{"))
|
|
208
|
+
return trimmed;
|
|
209
|
+
const start = trimmed.indexOf("{");
|
|
210
|
+
const end = trimmed.lastIndexOf("}");
|
|
211
|
+
if (start >= 0 && end > start)
|
|
212
|
+
return trimmed.slice(start, end + 1);
|
|
213
|
+
throw new Error("phase provider response did not contain JSON output");
|
|
214
|
+
}
|
|
215
|
+
function stringOrDefault(value, fallback) {
|
|
216
|
+
return typeof value === "string" && value.trim() ? value : fallback;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=phase-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-executor.js","sourceRoot":"","sources":["../src/phase-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
import type { CliIo, CliOptions } from "./types.js";
|
|
2
|
+
export interface ReleaseCheck {
|
|
3
|
+
name: string;
|
|
4
|
+
passed: boolean;
|
|
5
|
+
detail?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ReleaseCheckResult {
|
|
8
|
+
passed: boolean;
|
|
9
|
+
checks: ReleaseCheck[];
|
|
10
|
+
}
|
|
11
|
+
export declare function releaseCheckCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
2
12
|
export declare function releaseCandidateCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
3
13
|
export declare function releaseTagCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
4
14
|
export declare function releaseEvidenceCommand(options: CliOptions, io: CliIo): Promise<void>;
|
package/dist/release-commands.js
CHANGED
|
@@ -1,5 +1,121 @@
|
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { promisify } from "node:util";
|
|
1
4
|
import { requireArg } from "./args.js";
|
|
2
5
|
import { attachReleaseEvidence, generateCandidateReleasePlan, recordReleaseTagApproval, writeCandidateReleasePlan, } from "./release-candidate.js";
|
|
6
|
+
const execFileAsync = promisify(execFile);
|
|
7
|
+
export async function releaseCheckCommand(options, io) {
|
|
8
|
+
const root = typeof options.root === "string" ? options.root : process.cwd();
|
|
9
|
+
const result = await runReleaseChecks(root);
|
|
10
|
+
if (options.json) {
|
|
11
|
+
io.log(JSON.stringify(result, null, 2));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
for (const check of result.checks) {
|
|
15
|
+
const icon = check.passed ? "✓" : "✗";
|
|
16
|
+
const detail = check.detail ? ` — ${check.detail}` : "";
|
|
17
|
+
io.log(` ${icon} ${check.name}${detail}`);
|
|
18
|
+
}
|
|
19
|
+
if (result.passed) {
|
|
20
|
+
io.log("\nRelease check passed.");
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const failed = result.checks.filter((c) => !c.passed).length;
|
|
24
|
+
io.log(`\nRelease check failed (${failed} issue${failed === 1 ? "" : "s"}).`);
|
|
25
|
+
process.exitCode = 1;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function runReleaseChecks(root) {
|
|
29
|
+
const checks = [];
|
|
30
|
+
// 1. Lint
|
|
31
|
+
checks.push(await runScript(root, "lint", "npm run lint"));
|
|
32
|
+
// 2. Typecheck
|
|
33
|
+
checks.push(await runScript(root, "typecheck", "npm run typecheck"));
|
|
34
|
+
// 3. Secret scan
|
|
35
|
+
checks.push(await runScript(root, "secret-scan", "npm run secret-scan"));
|
|
36
|
+
// 4. Tests
|
|
37
|
+
checks.push(await runScript(root, "tests", "npm test"));
|
|
38
|
+
// 5. package.json version matches latest git tag
|
|
39
|
+
checks.push(await checkVersionMatchesTag(root));
|
|
40
|
+
// 6. No uncommitted changes
|
|
41
|
+
checks.push(await checkCleanWorkingTree(root));
|
|
42
|
+
return {
|
|
43
|
+
passed: checks.every((c) => c.passed),
|
|
44
|
+
checks,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async function runScript(root, name, cmd) {
|
|
48
|
+
const [bin, ...args] = cmd.split(" ");
|
|
49
|
+
try {
|
|
50
|
+
await runProcess(bin, args, root);
|
|
51
|
+
return { name, passed: true };
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const msg = err instanceof Error
|
|
55
|
+
? (err.message.split("\n")[0] ?? err.message)
|
|
56
|
+
: String(err);
|
|
57
|
+
return { name, passed: false, detail: msg };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function runProcess(command, args, cwd) {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const child = spawn(command, args, { cwd, stdio: "ignore" });
|
|
63
|
+
child.on("error", reject);
|
|
64
|
+
child.on("close", (code, signal) => {
|
|
65
|
+
if (code === 0) {
|
|
66
|
+
resolve();
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const reason = signal !== null ? `signal ${signal}` : `exit code ${code ?? "unknown"}`;
|
|
70
|
+
reject(new Error(`Command failed: ${command} ${args.join(" ")} (${reason})`));
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async function checkVersionMatchesTag(root) {
|
|
75
|
+
const name = "version matches latest tag";
|
|
76
|
+
try {
|
|
77
|
+
const pkg = JSON.parse(await readFile(`${root}/package.json`, "utf8"));
|
|
78
|
+
const version = pkg.version;
|
|
79
|
+
if (!version)
|
|
80
|
+
return { name, passed: false, detail: "no version in package.json" };
|
|
81
|
+
const { stdout } = await execFileAsync("git", ["tag", "--sort=-creatordate"], { cwd: root });
|
|
82
|
+
const tags = stdout.trim().split("\n").filter(Boolean);
|
|
83
|
+
const latest = tags.find((t) => t.match(/^v\d+\.\d+\.\d+$/));
|
|
84
|
+
if (!latest)
|
|
85
|
+
return { name, passed: false, detail: "no semver tags found" };
|
|
86
|
+
const tagVersion = latest.slice(1);
|
|
87
|
+
if (tagVersion === version)
|
|
88
|
+
return { name, passed: true };
|
|
89
|
+
return {
|
|
90
|
+
name,
|
|
91
|
+
passed: false,
|
|
92
|
+
detail: `package.json=${version} latest tag=${latest}`,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
return { name, passed: false, detail: String(err) };
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async function checkCleanWorkingTree(root) {
|
|
100
|
+
const name = "clean working tree";
|
|
101
|
+
try {
|
|
102
|
+
const { stdout } = await execFileAsync("git", ["status", "--porcelain"], {
|
|
103
|
+
cwd: root,
|
|
104
|
+
});
|
|
105
|
+
const dirty = stdout.trim();
|
|
106
|
+
if (!dirty)
|
|
107
|
+
return { name, passed: true };
|
|
108
|
+
const lines = dirty.split("\n").length;
|
|
109
|
+
return {
|
|
110
|
+
name,
|
|
111
|
+
passed: false,
|
|
112
|
+
detail: `${lines} uncommitted file${lines === 1 ? "" : "s"}`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
return { name, passed: false, detail: String(err) };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
3
119
|
export async function releaseCandidateCommand(options, io) {
|
|
4
120
|
const version = stringOption(options.version);
|
|
5
121
|
if (options["dry-run"]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-commands.js","sourceRoot":"","sources":["../src/release-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAGhC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAmB,EACnB,EAAS;IAET,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,4BAA4B,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IACD,EAAE,CAAC,GAAG,CAAC,kCAAkC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAmB,EACnB,EAAS;IAET,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC;QAC3C,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;KACnC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAmB,EACnB,EAAS;IAET,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC;QACxC,IAAI,EAAE,wBAAwB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3D,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC;QACvC,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;KACzC,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IACD,EAAE,CAAC,GAAG,CAAC,6BAA6B,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC7C,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,YAAY,CACnB,KAA8C;IAE9C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC"}
|
|
1
|
+
{"version":3,"file":"release-commands.js","sourceRoot":"","sources":["../src/release-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import type { RuntimeAdapter, SkillRenderTarget } from "./types.js";
|
|
1
|
+
import type { RuntimeAdapter, RuntimeExecutionAdapter, RuntimeExecutionId, SkillRenderTarget } from "./types.js";
|
|
2
2
|
export declare function listRuntimeAdapters(): RuntimeAdapter[];
|
|
3
|
+
export declare function listRuntimeExecutionAdapters(): RuntimeExecutionAdapter[];
|
|
3
4
|
export declare function listRuntimeTargets(): SkillRenderTarget[];
|
|
4
5
|
export declare function getRuntimeAdapter(target: SkillRenderTarget): RuntimeAdapter;
|
|
6
|
+
export declare function getRuntimeExecutionAdapter(runtimeId: RuntimeExecutionId): RuntimeExecutionAdapter;
|
|
7
|
+
export declare function isRuntimeExecutionId(value: string): value is RuntimeExecutionId;
|
|
8
|
+
export declare function parseRuntimeExecutionId(value: string): RuntimeExecutionId;
|
|
5
9
|
export declare function isRuntimeTarget(value: string): value is SkillRenderTarget;
|
|
6
10
|
export declare function parseRuntimeTarget(value: string): SkillRenderTarget;
|
package/dist/runtime-adapters.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { runtimeExecutionAdapters } from "./runtime-execution-adapters.js";
|
|
1
2
|
const runtimeAdapters = [
|
|
2
3
|
{
|
|
3
4
|
target: "generic",
|
|
@@ -66,6 +67,9 @@ const runtimeAdapters = [
|
|
|
66
67
|
export function listRuntimeAdapters() {
|
|
67
68
|
return runtimeAdapters.map((adapter) => ({ ...adapter }));
|
|
68
69
|
}
|
|
70
|
+
export function listRuntimeExecutionAdapters() {
|
|
71
|
+
return runtimeExecutionAdapters.map((adapter) => cloneExecutionAdapter(adapter));
|
|
72
|
+
}
|
|
69
73
|
export function listRuntimeTargets() {
|
|
70
74
|
return runtimeAdapters.map((adapter) => adapter.target);
|
|
71
75
|
}
|
|
@@ -76,6 +80,22 @@ export function getRuntimeAdapter(target) {
|
|
|
76
80
|
}
|
|
77
81
|
return { ...adapter };
|
|
78
82
|
}
|
|
83
|
+
export function getRuntimeExecutionAdapter(runtimeId) {
|
|
84
|
+
const adapter = runtimeExecutionAdapters.find((candidate) => candidate.id === runtimeId);
|
|
85
|
+
if (!adapter) {
|
|
86
|
+
throw new Error("unknown runtime execution adapter: " + runtimeId);
|
|
87
|
+
}
|
|
88
|
+
return cloneExecutionAdapter(adapter);
|
|
89
|
+
}
|
|
90
|
+
export function isRuntimeExecutionId(value) {
|
|
91
|
+
return runtimeExecutionAdapters.some((adapter) => adapter.id === value);
|
|
92
|
+
}
|
|
93
|
+
export function parseRuntimeExecutionId(value) {
|
|
94
|
+
if (isRuntimeExecutionId(value)) {
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
throw new Error("unknown runtime execution adapter: " + value);
|
|
98
|
+
}
|
|
79
99
|
export function isRuntimeTarget(value) {
|
|
80
100
|
return runtimeAdapters.some((adapter) => adapter.target === value);
|
|
81
101
|
}
|
|
@@ -85,4 +105,11 @@ export function parseRuntimeTarget(value) {
|
|
|
85
105
|
}
|
|
86
106
|
throw new Error("unknown runtime target: " + value);
|
|
87
107
|
}
|
|
108
|
+
function cloneExecutionAdapter(adapter) {
|
|
109
|
+
return {
|
|
110
|
+
...adapter,
|
|
111
|
+
execution: { ...adapter.execution },
|
|
112
|
+
subagents: { ...adapter.subagents },
|
|
113
|
+
};
|
|
114
|
+
}
|
|
88
115
|
//# sourceMappingURL=runtime-adapters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-adapters.js","sourceRoot":"","sources":["../src/runtime-adapters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime-adapters.js","sourceRoot":"","sources":["../src/runtime-adapters.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,eAAe,GAAqB;IACxC;QACE,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,KAAK;QACX,uBAAuB,EAAE,CAAC,cAAc,CAAC;QACzC,yBAAyB,EAAE,KAAK;QAChC,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,KAAK;QACtB,QAAQ,EACN,yFAAyF;KAC5F;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,KAAK;QACX,uBAAuB,EAAE,CAAC,WAAW,CAAC;QACtC,yBAAyB,EAAE,KAAK;QAChC,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,IAAI;QACrB,QAAQ,EACN,wFAAwF;KAC3F;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,KAAK;QACX,uBAAuB,EAAE,CAAC,kCAAkC,CAAC;QAC7D,yBAAyB,EAAE,KAAK;QAChC,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,IAAI;QACrB,QAAQ,EACN,sFAAsF;KACzF;IACD;QACE,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,KAAK;QACX,uBAAuB,EAAE,CAAC,WAAW,CAAC;QACtC,yBAAyB,EAAE,KAAK;QAChC,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,KAAK;QACtB,QAAQ,EACN,mFAAmF;KACtF;IACD;QACE,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,KAAK;QACX,uBAAuB,EAAE;YACvB,qCAAqC;YACrC,2BAA2B;SAC5B;QACD,yBAAyB,EAAE,IAAI;QAC/B,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,KAAK;QACtB,QAAQ,EACN,8EAA8E;KACjF;IACD;QACE,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,UAAU;QACjB,IAAI,EAAE,KAAK;QACX,uBAAuB,EAAE,CAAC,mCAAmC,CAAC;QAC9D,yBAAyB,EAAE,KAAK;QAChC,qBAAqB,EAAE,IAAI;QAC3B,eAAe,EAAE,IAAI;QACrB,QAAQ,EACN,4FAA4F;KAC/F;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC9C,qBAAqB,CAAC,OAAO,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAClC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAC3C,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,SAA6B;IAE7B,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAC3C,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAC1C,CAAC;IACF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,SAAS,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAa;IAEb,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAgC;IAEhC,OAAO;QACL,GAAG,OAAO;QACV,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;QACnC,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CliIo, CliOptions } from "./types.js";
|
|
2
|
+
export declare function commandsManifestCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
3
|
+
export declare function runtimeAdaptersCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
4
|
+
export declare function runtimeBriefCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
5
|
+
export declare function runtimeDelegatePlanCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
6
|
+
export declare function runtimeHandoffCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
7
|
+
export declare function runtimeBootstrapCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
8
|
+
export declare function protocolRenderCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
9
|
+
export declare function protocolBlockCommand(options: CliOptions, io: CliIo): Promise<void>;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { requireArg } from "./args.js";
|
|
4
|
+
import { removeUndefined, parseCsv, stringOption } from "./command-utils.js";
|
|
5
|
+
import { listCommandManifest } from "./command-manifest.js";
|
|
6
|
+
import { resolveWorkspaceWritePath } from "./fs-utils.js";
|
|
7
|
+
import { listRuntimeAdapters, parseRuntimeTarget } from "./runtime-adapters.js";
|
|
8
|
+
import { renderRuntimeBootstrap, upsertRuntimeBootstrapBlock, } from "./runtime-bootstrap.js";
|
|
9
|
+
import { recordRuntimeHandoff, renderRuntimeBrief, renderRuntimeDelegationPacket, } from "./runtime-execution.js";
|
|
10
|
+
import { renderSubagentProtocol, upsertSubagentProtocolBlock, } from "./subagent-protocol.js";
|
|
11
|
+
export async function commandsManifestCommand(options, io) {
|
|
12
|
+
const manifest = listCommandManifest();
|
|
13
|
+
if (options.json) {
|
|
14
|
+
io.log(JSON.stringify(manifest, null, 2));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
for (const command of manifest) {
|
|
18
|
+
io.log(command.command + " - " + command.summary);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function runtimeAdaptersCommand(options, io) {
|
|
22
|
+
const adapters = listRuntimeAdapters();
|
|
23
|
+
if (options.json) {
|
|
24
|
+
io.log(JSON.stringify(adapters, null, 2));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
for (const adapter of adapters) {
|
|
28
|
+
io.log(adapter.target +
|
|
29
|
+
" - " +
|
|
30
|
+
adapter.label +
|
|
31
|
+
" (" +
|
|
32
|
+
adapter.defaultInstructionFiles.join(", ") +
|
|
33
|
+
")");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function runtimeBriefCommand(options, io) {
|
|
37
|
+
const taskId = requireArg(options, "task");
|
|
38
|
+
const runtime = stringOption(options.runtime);
|
|
39
|
+
const brief = await renderRuntimeBrief({
|
|
40
|
+
taskId,
|
|
41
|
+
...(runtime ? { runtime } : {}),
|
|
42
|
+
});
|
|
43
|
+
if (options.json) {
|
|
44
|
+
io.log(JSON.stringify(brief, null, 2));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
io.log(brief.content);
|
|
48
|
+
io.log(`\nArtifact: ${brief.artifact}`);
|
|
49
|
+
}
|
|
50
|
+
export async function runtimeDelegatePlanCommand(options, io) {
|
|
51
|
+
const taskId = requireArg(options, "task");
|
|
52
|
+
const roles = parseCsv(options.roles);
|
|
53
|
+
if (roles.length === 0) {
|
|
54
|
+
throw new Error("runtime delegate-plan requires --roles");
|
|
55
|
+
}
|
|
56
|
+
const runtime = stringOption(options.runtime);
|
|
57
|
+
const packet = await renderRuntimeDelegationPacket({
|
|
58
|
+
taskId,
|
|
59
|
+
...(runtime ? { runtime } : {}),
|
|
60
|
+
roles,
|
|
61
|
+
});
|
|
62
|
+
if (options.json) {
|
|
63
|
+
io.log(JSON.stringify(packet, null, 2));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
io.log(packet.content);
|
|
67
|
+
io.log(`\nArtifact: ${packet.artifact}`);
|
|
68
|
+
}
|
|
69
|
+
export async function runtimeHandoffCommand(options, io) {
|
|
70
|
+
const taskId = requireArg(options, "task");
|
|
71
|
+
const runtime = requireArg(options, "runtime");
|
|
72
|
+
const artifact = stringOption(options.artifact);
|
|
73
|
+
const summary = stringOption(options.summary);
|
|
74
|
+
const sessionId = stringOption(options["session-id"]);
|
|
75
|
+
const event = await recordRuntimeHandoff({
|
|
76
|
+
taskId,
|
|
77
|
+
runtime,
|
|
78
|
+
...(artifact ? { artifact } : {}),
|
|
79
|
+
...(summary ? { summary } : {}),
|
|
80
|
+
...(sessionId ? { sessionId } : {}),
|
|
81
|
+
});
|
|
82
|
+
if (options.json) {
|
|
83
|
+
io.log(JSON.stringify(event, null, 2));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
io.log(`Runtime handoff recorded: ${event.id}`);
|
|
87
|
+
}
|
|
88
|
+
export async function runtimeBootstrapCommand(options, io) {
|
|
89
|
+
const target = parseSkillRenderTarget(stringOption(options.target) ?? "generic");
|
|
90
|
+
const bootstrap = renderRuntimeBootstrap(target);
|
|
91
|
+
const filePath = stringOption(options.file);
|
|
92
|
+
if (filePath) {
|
|
93
|
+
const resolvedFilePath = resolveWorkspaceWritePath(process.cwd(), path.normalize(filePath));
|
|
94
|
+
const existing = await readFile(resolvedFilePath, "utf8").catch(() => "");
|
|
95
|
+
const result = upsertRuntimeBootstrapBlock(existing, bootstrap, {
|
|
96
|
+
force: Boolean(options.force),
|
|
97
|
+
});
|
|
98
|
+
if (!options.check && !options["dry-run"] && !result.drift) {
|
|
99
|
+
await writeFile(resolvedFilePath, result.content);
|
|
100
|
+
}
|
|
101
|
+
if (options.json) {
|
|
102
|
+
io.log(JSON.stringify(result, null, 2));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
io.log(result.changed
|
|
106
|
+
? "Runtime bootstrap changed"
|
|
107
|
+
: "Runtime bootstrap unchanged");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (options.json) {
|
|
111
|
+
io.log(JSON.stringify(bootstrap, null, 2));
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
io.log(bootstrap.content);
|
|
115
|
+
}
|
|
116
|
+
export async function protocolRenderCommand(options, io) {
|
|
117
|
+
const protocol = await renderSubagentProtocol(removeUndefined({
|
|
118
|
+
target: parseSkillRenderTarget(stringOption(options.target) ?? "generic"),
|
|
119
|
+
taskId: stringOption(options.task),
|
|
120
|
+
}));
|
|
121
|
+
if (options.json) {
|
|
122
|
+
io.log(JSON.stringify(protocol, null, 2));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
io.log(protocol.content);
|
|
126
|
+
}
|
|
127
|
+
export async function protocolBlockCommand(options, io) {
|
|
128
|
+
const filePath = requireArg(options, "file");
|
|
129
|
+
const protocol = await renderSubagentProtocol(removeUndefined({
|
|
130
|
+
target: parseSkillRenderTarget(stringOption(options.target) ?? "generic"),
|
|
131
|
+
taskId: stringOption(options.task),
|
|
132
|
+
}));
|
|
133
|
+
const existing = await readFile(filePath, "utf8").catch(() => "");
|
|
134
|
+
const result = upsertSubagentProtocolBlock(existing, protocol, {
|
|
135
|
+
force: Boolean(options.force),
|
|
136
|
+
});
|
|
137
|
+
const shouldWrite = !options.check && !options["dry-run"] && !result.drift && result.changed;
|
|
138
|
+
if (shouldWrite) {
|
|
139
|
+
await writeFile(filePath, result.content);
|
|
140
|
+
}
|
|
141
|
+
if (options.json) {
|
|
142
|
+
io.log(JSON.stringify(result, null, 2));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (result.drift) {
|
|
146
|
+
io.log("Drift detected for subagent protocol block");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
io.log(result.changed
|
|
150
|
+
? "Subagent protocol block changed"
|
|
151
|
+
: "Subagent protocol block unchanged");
|
|
152
|
+
}
|
|
153
|
+
function parseSkillRenderTarget(value) {
|
|
154
|
+
return parseRuntimeTarget(value);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=runtime-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-commands.js","sourceRoot":"","sources":["../src/runtime-commands.ts"],"names":[],"mappings":"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"}
|