@revisium/orchestrator 0.1.0-alpha.2 → 0.1.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/control-plane/bootstrap.config.json +103 -2
- package/control-plane/default-playbook/catalog/pipelines.json +360 -0
- package/control-plane/default-playbook/catalog/roles.json +56 -0
- package/control-plane/default-playbook/package.json +5 -0
- package/control-plane/default-playbook/playbook.json +13 -0
- package/control-plane/default-playbook/prompts/analyst.md +27 -0
- package/control-plane/default-playbook/prompts/developer.md +26 -0
- package/control-plane/default-playbook/prompts/integrator.md +20 -0
- package/control-plane/default-playbook/prompts/orchestrator.md +23 -0
- package/control-plane/default-playbook/prompts/reviewer.md +28 -0
- package/control-plane/default-playbook/prompts/watcher.md +24 -0
- package/dist/cli/commands/bootstrap.js +68 -7
- package/dist/cli/commands/bootstrap.js.map +1 -1
- package/dist/cli/commands/inbox.js +0 -21
- package/dist/cli/commands/inbox.js.map +1 -1
- package/dist/cli/commands/run.js +76 -49
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/needs-host.js +7 -8
- package/dist/cli/needs-host.js.map +1 -1
- package/dist/cli/program.js +0 -2
- package/dist/cli/program.js.map +1 -1
- package/dist/config.js +18 -1
- package/dist/config.js.map +1 -1
- package/dist/control-plane/client-transport.js +73 -40
- package/dist/control-plane/client-transport.js.map +1 -1
- package/dist/control-plane/data-access.js +3 -2
- package/dist/control-plane/data-access.js.map +1 -1
- package/dist/control-plane/definitions.js +1 -1
- package/dist/control-plane/definitions.js.map +1 -1
- package/dist/control-plane/json-fields.js +2 -0
- package/dist/control-plane/json-fields.js.map +1 -1
- package/dist/control-plane/schema-migration.js +86 -0
- package/dist/control-plane/schema-migration.js.map +1 -0
- package/dist/control-plane/seed-default-playbook.js +71 -0
- package/dist/control-plane/seed-default-playbook.js.map +1 -0
- package/dist/control-plane/tables.js +1 -0
- package/dist/control-plane/tables.js.map +1 -1
- package/dist/e2e/kit/agents.js +113 -0
- package/dist/e2e/kit/agents.js.map +1 -0
- package/dist/e2e/kit/assertions.js +119 -0
- package/dist/e2e/kit/assertions.js.map +1 -0
- package/dist/e2e/kit/crash.js +44 -0
- package/dist/e2e/kit/crash.js.map +1 -0
- package/dist/e2e/kit/drive.js +49 -0
- package/dist/e2e/kit/drive.js.map +1 -0
- package/dist/e2e/kit/env.js +16 -0
- package/dist/e2e/kit/env.js.map +1 -0
- package/dist/e2e/kit/fake-integrator.js +42 -0
- package/dist/e2e/kit/fake-integrator.js.map +1 -0
- package/dist/e2e/kit/gh-emulator.js +49 -0
- package/dist/e2e/kit/gh-emulator.js.map +1 -0
- package/dist/e2e/kit/git-target-repo.js +83 -0
- package/dist/e2e/kit/git-target-repo.js.map +1 -0
- package/dist/e2e/kit/harness.js +59 -0
- package/dist/e2e/kit/harness.js.map +1 -0
- package/dist/e2e/kit/index.js +14 -0
- package/dist/e2e/kit/index.js.map +1 -0
- package/dist/e2e/kit/mcp.js +32 -0
- package/dist/e2e/kit/mcp.js.map +1 -0
- package/dist/e2e/kit/scenarios.js +196 -0
- package/dist/e2e/kit/scenarios.js.map +1 -0
- package/dist/e2e/recovery-crash-child.js +29 -0
- package/dist/e2e/recovery-crash-child.js.map +1 -0
- package/dist/e2e/recovery-dd-crash-child.js +42 -0
- package/dist/e2e/recovery-dd-crash-child.js.map +1 -0
- package/dist/engine/ensure-postgres.js +13 -1
- package/dist/engine/ensure-postgres.js.map +1 -1
- package/dist/mcp/mcp-capabilities.js +1 -0
- package/dist/mcp/mcp-capabilities.js.map +1 -1
- package/dist/mcp/mcp-facade.service.js +24 -3
- package/dist/mcp/mcp-facade.service.js.map +1 -1
- package/dist/mcp/mcp-tools.js +16 -7
- package/dist/mcp/mcp-tools.js.map +1 -1
- package/dist/pipeline/data-driven-task.workflow.js +493 -0
- package/dist/pipeline/data-driven-task.workflow.js.map +1 -0
- package/dist/pipeline/data-driven-template.js +57 -0
- package/dist/pipeline/data-driven-template.js.map +1 -0
- package/dist/pipeline/develop-task.workflow.js +151 -316
- package/dist/pipeline/develop-task.workflow.js.map +1 -1
- package/dist/pipeline/pipeline.module.js +1 -1
- package/dist/pipeline/route-contract.js +82 -0
- package/dist/pipeline/route-contract.js.map +1 -0
- package/dist/pipeline-core/index.js +16 -0
- package/dist/pipeline-core/index.js.map +1 -0
- package/dist/pipeline-core/interpret.js +351 -0
- package/dist/pipeline-core/interpret.js.map +1 -0
- package/dist/pipeline-core/kit/assertions.js +61 -0
- package/dist/pipeline-core/kit/assertions.js.map +1 -0
- package/dist/pipeline-core/kit/builders.js +136 -0
- package/dist/pipeline-core/kit/builders.js.map +1 -0
- package/dist/pipeline-core/kit/drive.js +96 -0
- package/dist/pipeline-core/kit/drive.js.map +1 -0
- package/dist/pipeline-core/kit/fixtures.js +248 -0
- package/dist/pipeline-core/kit/fixtures.js.map +1 -0
- package/dist/pipeline-core/kit/index.js +13 -0
- package/dist/pipeline-core/kit/index.js.map +1 -0
- package/dist/pipeline-core/types.js +132 -0
- package/dist/pipeline-core/types.js.map +1 -0
- package/dist/pipeline-core/validate.js +1192 -0
- package/dist/pipeline-core/validate.js.map +1 -0
- package/dist/playbook/catalog-loader.js +14 -1
- package/dist/playbook/catalog-loader.js.map +1 -1
- package/dist/playbook/import-mapper.js +14 -38
- package/dist/playbook/import-mapper.js.map +1 -1
- package/dist/playbook/manifest.js +1 -1
- package/dist/revisium/playbooks.service.js +95 -17
- package/dist/revisium/playbooks.service.js.map +1 -1
- package/dist/revisium/roles.service.js +1 -1
- package/dist/revisium/roles.service.js.map +1 -1
- package/dist/revisium/run.service.js +16 -0
- package/dist/revisium/run.service.js.map +1 -1
- package/dist/run/append-event.js +24 -1
- package/dist/run/append-event.js.map +1 -1
- package/dist/run/block-run.js +17 -0
- package/dist/run/block-run.js.map +1 -0
- package/dist/run/create-run.js +28 -5
- package/dist/run/create-run.js.map +1 -1
- package/dist/run/inspect-run.js +9 -0
- package/dist/run/inspect-run.js.map +1 -1
- package/dist/run/run-outputs.js +88 -0
- package/dist/run/run-outputs.js.map +1 -0
- package/dist/run/terminal-run-status.js +89 -7
- package/dist/run/terminal-run-status.js.map +1 -1
- package/dist/runners/claude-code.service.js +4 -0
- package/dist/runners/claude-code.service.js.map +1 -1
- package/dist/runners/integrator.js +25 -9
- package/dist/runners/integrator.js.map +1 -1
- package/dist/task-control-plane/task-control-plane-api.service.js +247 -28
- package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
- package/dist/worker/artifact-store.js +111 -0
- package/dist/worker/artifact-store.js.map +1 -0
- package/dist/worker/build-context.js +17 -0
- package/dist/worker/build-context.js.map +1 -1
- package/dist/worker/claude-code-runner.js +44 -5
- package/dist/worker/claude-code-runner.js.map +1 -1
- package/dist/worker/process-executor.js +23 -2
- package/dist/worker/process-executor.js.map +1 -1
- package/dist/worker/runner-dispatch.js +1 -0
- package/dist/worker/runner-dispatch.js.map +1 -1
- package/dist/worker/runner.js +11 -1
- package/dist/worker/runner.js.map +1 -1
- package/dist/worker/stub-runner.js +7 -45
- package/dist/worker/stub-runner.js.map +1 -1
- package/package.json +3 -1
- package/dist/cli/commands/work.js +0 -149
- package/dist/cli/commands/work.js.map +0 -1
- package/dist/worker/git-worktree-manager.js +0 -84
- package/dist/worker/git-worktree-manager.js.map +0 -1
- package/dist/worker/loop.js +0 -122
- package/dist/worker/loop.js.map +0 -1
- package/dist/worker/script-runner.js +0 -28
- package/dist/worker/script-runner.js.map +0 -1
- package/dist/worker/worker-id.js +0 -18
- package/dist/worker/worker-id.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-context.js","sourceRoot":"","sources":["../../src/worker/build-context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGlD,wFAAwF;AAExF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAA0B,EAC1B,IAAU,EACV,IAAU;IAEV,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,6FAA6F;IAC7F,iFAAiF;IACjF,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;QACjD,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAwC,EAAE,EAAE;KAC5F,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,YAAY;SAC9B,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ;QAClC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CACnC;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3E,MAAM,KAAK,GAAa;QACtB,YAAY,IAAI,CAAC,IAAI,EAAE;QACvB,IAAI,CAAC,YAAY;QACjB,mBAAmB,iBAAiB,EAAE;QACtC,YAAY,SAAS,EAAE;KACxB,CAAC;IAEF,IAAI,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;IACjD,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC;IAE9C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"build-context.js","sourceRoot":"","sources":["../../src/worker/build-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RunAgentError } from './runner.js';
|
|
1
2
|
import { noopWorktreeManager } from './worktree-manager.js';
|
|
2
3
|
import { REVO_RESULT_CONTRACT, parseTransportEnvelope, extractAgentResult, normalizeNextSteps, } from './result-envelope.js';
|
|
3
4
|
const DEFAULT_TIMEOUT_MS = 600_000;
|
|
@@ -64,6 +65,22 @@ function buildCosts(step, profile, env) {
|
|
|
64
65
|
},
|
|
65
66
|
];
|
|
66
67
|
}
|
|
68
|
+
function withProcessArtifact(agentArtifacts, process) {
|
|
69
|
+
if (!process)
|
|
70
|
+
return agentArtifacts;
|
|
71
|
+
const processEntry = {
|
|
72
|
+
ref: process.ref,
|
|
73
|
+
stdoutTail: process.stdoutTail,
|
|
74
|
+
stderrTail: process.stderrTail,
|
|
75
|
+
};
|
|
76
|
+
if (agentArtifacts && typeof agentArtifacts === 'object' && !Array.isArray(agentArtifacts)) {
|
|
77
|
+
return { ...agentArtifacts, process: processEntry };
|
|
78
|
+
}
|
|
79
|
+
return { agent: agentArtifacts ?? null, process: processEntry };
|
|
80
|
+
}
|
|
81
|
+
function runnerError(message, process) {
|
|
82
|
+
return new RunAgentError(message, withProcessArtifact(undefined, process));
|
|
83
|
+
}
|
|
67
84
|
export function createClaudeCodeRunner(deps) {
|
|
68
85
|
const fallbackTimeoutMs = deps.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
69
86
|
const command = deps.command ?? DEFAULT_COMMAND;
|
|
@@ -75,26 +92,41 @@ export function createClaudeCodeRunner(deps) {
|
|
|
75
92
|
// 0008 #5: per-role data overrides the hardcoded defaults (timeout + permission mode).
|
|
76
93
|
const timeoutMs = role.timeoutMs ?? fallbackTimeoutMs;
|
|
77
94
|
const permissionMode = role.permissionMode ?? 'default';
|
|
95
|
+
let processArtifact;
|
|
78
96
|
try {
|
|
97
|
+
const args = buildArgs(profile.modelId, role.allowedTools, permissionMode, profile.params);
|
|
98
|
+
processArtifact = deps.artifactStore?.startProcess({
|
|
99
|
+
runId: step.runId,
|
|
100
|
+
attemptId,
|
|
101
|
+
stepId: step.id,
|
|
102
|
+
role: role.name,
|
|
103
|
+
command,
|
|
104
|
+
args,
|
|
105
|
+
cwd,
|
|
106
|
+
timeoutMs,
|
|
107
|
+
});
|
|
79
108
|
const req = {
|
|
80
109
|
command,
|
|
81
|
-
args
|
|
110
|
+
args,
|
|
82
111
|
cwd,
|
|
83
112
|
timeoutMs,
|
|
84
113
|
input: buildPrompt(context, attemptId),
|
|
114
|
+
onStdoutChunk: (chunk) => processArtifact?.appendStdout(chunk),
|
|
115
|
+
onStderrChunk: (chunk) => processArtifact?.appendStderr(chunk),
|
|
85
116
|
};
|
|
86
117
|
const result = await deps.executor(req);
|
|
118
|
+
const processSnapshot = processArtifact?.finish({ code: result.code, timedOut: result.timedOut });
|
|
87
119
|
// Timeout / process failure → throw; the loop's catch → failStep returns the step to ready
|
|
88
120
|
// (backoff) or dead at the attempt cap. No loop change needed.
|
|
89
121
|
if (result.timedOut) {
|
|
90
|
-
throw
|
|
122
|
+
throw runnerError(`claude-code runner exceeded ${timeoutMs}ms`, processSnapshot);
|
|
91
123
|
}
|
|
92
124
|
if (result.code !== 0) {
|
|
93
|
-
throw
|
|
125
|
+
throw runnerError(`claude-code runner exited with code ${String(result.code)}: ${tail(result.stderr || result.stdout)}`, processSnapshot);
|
|
94
126
|
}
|
|
95
127
|
const transport = parseTransportEnvelope(result.stdout);
|
|
96
128
|
if (transport.isError) {
|
|
97
|
-
throw
|
|
129
|
+
throw runnerError(`claude-code runner reported is_error: ${tail(transport.text)}`, processSnapshot);
|
|
98
130
|
}
|
|
99
131
|
const agent = extractAgentResult(transport.text);
|
|
100
132
|
const costs = buildCosts(step, profile, transport);
|
|
@@ -102,6 +134,7 @@ export function createClaudeCodeRunner(deps) {
|
|
|
102
134
|
if (agent.needsHuman) {
|
|
103
135
|
const parked = {
|
|
104
136
|
output: agent.output,
|
|
137
|
+
artifacts: withProcessArtifact(agent.artifacts, processSnapshot),
|
|
105
138
|
nextSteps: [],
|
|
106
139
|
costs,
|
|
107
140
|
needsHuman: true,
|
|
@@ -111,7 +144,7 @@ export function createClaudeCodeRunner(deps) {
|
|
|
111
144
|
}
|
|
112
145
|
const success = {
|
|
113
146
|
output: agent.output,
|
|
114
|
-
artifacts: agent.artifacts,
|
|
147
|
+
artifacts: withProcessArtifact(agent.artifacts, processSnapshot),
|
|
115
148
|
nextSteps: normalizeNextSteps(agent.nextSteps, step),
|
|
116
149
|
costs,
|
|
117
150
|
needsHuman: false,
|
|
@@ -119,6 +152,12 @@ export function createClaudeCodeRunner(deps) {
|
|
|
119
152
|
};
|
|
120
153
|
return success;
|
|
121
154
|
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
if (err instanceof RunAgentError)
|
|
157
|
+
throw err;
|
|
158
|
+
const processSnapshot = processArtifact?.finish({ error: String(err) });
|
|
159
|
+
throw runnerError(String(err), processSnapshot);
|
|
160
|
+
}
|
|
122
161
|
finally {
|
|
123
162
|
try {
|
|
124
163
|
await manager.release(cwd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code-runner.js","sourceRoot":"","sources":["../../src/worker/claude-code-runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-code-runner.js","sourceRoot":"","sources":["../../src/worker/claude-code-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,10 +29,31 @@ export const spawnExecutor = (req) => new Promise((resolve, reject) => {
|
|
|
29
29
|
let stderr = '';
|
|
30
30
|
let timedOut = false;
|
|
31
31
|
let settled = false;
|
|
32
|
+
if (child.pid !== undefined)
|
|
33
|
+
req.onSpawn?.(child.pid);
|
|
32
34
|
child.stdout?.setEncoding('utf8');
|
|
33
35
|
child.stderr?.setEncoding('utf8');
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
// Guard the sink callbacks: a throw here (e.g. a failed artifact write) would otherwise
|
|
37
|
+
// escape the stream 'data' handler as an uncaughtException and crash the worker. The
|
|
38
|
+
// in-memory capture above is unaffected, so the result envelope is still collected.
|
|
39
|
+
child.stdout?.on('data', (chunk) => {
|
|
40
|
+
stdout += chunk;
|
|
41
|
+
try {
|
|
42
|
+
req.onStdoutChunk?.(chunk);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
console.warn(`Warning: onStdoutChunk sink failed: ${String(err)}`);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
child.stderr?.on('data', (chunk) => {
|
|
49
|
+
stderr += chunk;
|
|
50
|
+
try {
|
|
51
|
+
req.onStderrChunk?.(chunk);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
console.warn(`Warning: onStderrChunk sink failed: ${String(err)}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
36
57
|
const timer = setTimeout(() => {
|
|
37
58
|
timedOut = true;
|
|
38
59
|
killGroup(child);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-executor.js","sourceRoot":"","sources":["../../src/worker/process-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"process-executor.js","sourceRoot":"","sources":["../../src/worker/process-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ export function createRunAgent(deps) {
|
|
|
9
9
|
case 'codex':
|
|
10
10
|
throw new Error('RUNNER_NOT_IMPLEMENTED: codex runner is a later plan');
|
|
11
11
|
case 'script':
|
|
12
|
+
case 'stub-agent':
|
|
12
13
|
if (!deps.script)
|
|
13
14
|
throw new Error('RUNNER_NOT_IMPLEMENTED: script runner not wired');
|
|
14
15
|
return deps.script(args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-dispatch.js","sourceRoot":"","sources":["../../src/worker/runner-dispatch.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,6FAA6F;AAC7F,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,IAAiD;IAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/B,KAAK,OAAO;gBACV,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,KAAK,QAAQ;
|
|
1
|
+
{"version":3,"file":"runner-dispatch.js","sourceRoot":"","sources":["../../src/worker/runner-dispatch.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,6FAA6F;AAC7F,yDAAyD;AACzD,MAAM,UAAU,cAAc,CAAC,IAAiD;IAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,EAAE;QACpB,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,KAAK,aAAa;gBAChB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/B,KAAK,OAAO;gBACV,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,KAAK,QAAQ,CAAC;YACd,KAAK,YAAY;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACrF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3B;gBACE,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/worker/runner.js
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export class RunAgentError extends Error {
|
|
2
|
+
artifacts;
|
|
3
|
+
constructor(message, artifacts) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'RunAgentError';
|
|
6
|
+
this.artifacts = artifacts;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function artifactsFromRunAgentError(err) {
|
|
10
|
+
return err instanceof RunAgentError ? err.artifacts : undefined;
|
|
11
|
+
}
|
|
2
12
|
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/worker/runner.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/worker/runner.ts"],"names":[],"mappings":"AAsBA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,SAAS,CAAW;IAE7B,YAAY,OAAe,EAAE,SAAmB;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAY;IACrD,OAAO,GAAG,YAAY,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAClE,CAAC"}
|
|
@@ -1,56 +1,18 @@
|
|
|
1
1
|
// Zero-cost stub runner for integration testing and smoke verification.
|
|
2
|
-
// Teaches the full architect→developer→reviewer→integrator chain so the pipeline
|
|
3
|
-
// workflow can complete end-to-end with zero cost.
|
|
4
2
|
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
3
|
+
// GENERIC (plan 0015 slice 4): the stub is role-AGNOSTIC. It emits a passing result
|
|
4
|
+
// (`output.verdict:'PASS'`) regardless of role so e2e happy paths complete end-to-end at zero cost.
|
|
5
|
+
// Real, scenario-specific verdicts are scripted by the e2e kit's agent; the stub no longer encodes any
|
|
6
|
+
// pipeline-role knowledge (no role-name branching, no `nextSteps` — the data-driven engine sequences
|
|
7
|
+
// nodes from the template, never from a runner-returned chain).
|
|
10
8
|
export const stubRunAgent = async ({ role, step, context }) => {
|
|
11
9
|
const output = {
|
|
12
10
|
echo: `[stub] role=${role.name} step=${step.id} contextSize=${context.length}`,
|
|
11
|
+
verdict: 'PASS',
|
|
13
12
|
};
|
|
14
|
-
const nextSteps = [];
|
|
15
|
-
if (role.name === 'architect') {
|
|
16
|
-
output.phase = 'plan';
|
|
17
|
-
nextSteps.push({
|
|
18
|
-
taskId: step.taskId,
|
|
19
|
-
role: 'developer',
|
|
20
|
-
kind: 'implement',
|
|
21
|
-
input: { from: step.id },
|
|
22
|
-
modelProfile: step.modelProfile,
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
else if (role.name === 'developer') {
|
|
26
|
-
output.phase = 'implement';
|
|
27
|
-
nextSteps.push({
|
|
28
|
-
taskId: step.taskId,
|
|
29
|
-
role: 'reviewer',
|
|
30
|
-
kind: 'review',
|
|
31
|
-
input: { from: step.id },
|
|
32
|
-
modelProfile: step.modelProfile,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
else if (role.name === 'reviewer') {
|
|
36
|
-
output.phase = 'review';
|
|
37
|
-
output.verdict = 'PASS';
|
|
38
|
-
nextSteps.push({
|
|
39
|
-
taskId: step.taskId,
|
|
40
|
-
role: 'integrator',
|
|
41
|
-
kind: 'integrate',
|
|
42
|
-
input: { from: step.id },
|
|
43
|
-
modelProfile: step.modelProfile,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
else if (role.name === 'integrator') {
|
|
47
|
-
output.phase = 'integrate';
|
|
48
|
-
// no next steps — end of chain
|
|
49
|
-
}
|
|
50
|
-
// other roles: no output phase, no next steps
|
|
51
13
|
const result = {
|
|
52
14
|
output,
|
|
53
|
-
nextSteps,
|
|
15
|
+
nextSteps: [],
|
|
54
16
|
costs: [],
|
|
55
17
|
needsHuman: false,
|
|
56
18
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub-runner.js","sourceRoot":"","sources":["../../src/worker/stub-runner.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"stub-runner.js","sourceRoot":"","sources":["../../src/worker/stub-runner.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,EAAE;AACF,oFAAoF;AACpF,oGAAoG;AACpG,uGAAuG;AACvG,qGAAqG;AACrG,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAa,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IACtE,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,eAAe,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,gBAAgB,OAAO,CAAC,MAAM,EAAE;QAC9E,OAAO,EAAE,MAAM;KAChB,CAAC;IAEF,MAAM,MAAM,GAAkB;QAC5B,MAAM;QACN,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,KAAK;KAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revisium/orchestrator",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.4",
|
|
4
4
|
"description": "Local orchestrator for software-development tasks driven by short-lived AI agents",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agents",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"dist/",
|
|
29
29
|
"bin/",
|
|
30
30
|
"control-plane/bootstrap.config.json",
|
|
31
|
+
"control-plane/default-playbook/",
|
|
31
32
|
"revisium.config.json"
|
|
32
33
|
],
|
|
33
34
|
"publishConfig": {
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
"smoke:pr-poller": "tsx scripts/smoke-pr-poller.ts",
|
|
49
50
|
"smoke:mvp": "tsx scripts/smoke-mvp.ts",
|
|
50
51
|
"test": "tsx --test $(find src -name '*.test.ts' | sort)",
|
|
52
|
+
"test:e2e": "export REVO_E2E_REAL=1 REVO_DATA_DIR=~/.revisium-orchestrator-e2e REVO_PORT=19422 REVO_PG_PORT=15640 REVO_DEV_TASKS_CONCURRENCY=8 && tsx scripts/e2e-setup.ts && tsx --test --test-concurrency=1 src/e2e/*.e2e.test.ts",
|
|
51
53
|
"test:cov": "mkdir -p coverage && node --import tsx --test --experimental-test-coverage --test-reporter=spec --test-reporter=lcov --test-reporter-destination=stdout --test-reporter-destination=coverage/lcov.info $(find src -name '*.test.ts' | sort)",
|
|
52
54
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
53
55
|
"lint:ci": "eslint . --max-warnings 0",
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { ControlPlaneError, createControlPlaneDataAccess, loadRole, loadModelProfile } from '../../control-plane/index.js';
|
|
2
|
-
import { makeResolveCwd as sharedMakeResolveCwd } from '../../control-plane/resolve-cwd.js';
|
|
3
|
-
import { stubRunAgent } from '../../worker/stub-runner.js';
|
|
4
|
-
import { createClaudeCodeRunner } from '../../worker/claude-code-runner.js';
|
|
5
|
-
import { GitWorktreeManager } from '../../worker/git-worktree-manager.js';
|
|
6
|
-
import { createRunAgent } from '../../worker/runner-dispatch.js';
|
|
7
|
-
import { createScriptRunner } from '../../worker/script-runner.js';
|
|
8
|
-
import { spawnExecutor } from '../../worker/process-executor.js';
|
|
9
|
-
import { runWorker } from '../../worker/loop.js';
|
|
10
|
-
import { resolveWorkerId } from '../../worker/worker-id.js';
|
|
11
|
-
import { warnLiveCost, requireLiveFlag } from '../live-guard.js';
|
|
12
|
-
function formatCause(error) {
|
|
13
|
-
if (error instanceof ControlPlaneError) {
|
|
14
|
-
const status = error.status === undefined ? '' : ` status=${error.status}`;
|
|
15
|
-
return `${error.code}${status}: ${error.message}`;
|
|
16
|
-
}
|
|
17
|
-
if (error instanceof Error)
|
|
18
|
-
return error.message;
|
|
19
|
-
return String(error);
|
|
20
|
-
}
|
|
21
|
-
function printHint(error) {
|
|
22
|
-
if (error.code === 'DAEMON_NOT_RUNNING') {
|
|
23
|
-
console.error('Run: revo revisium start');
|
|
24
|
-
}
|
|
25
|
-
if (error.code === 'BOOTSTRAP_NOT_APPLIED') {
|
|
26
|
-
console.error('Run: revo bootstrap --commit');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* makeResolveCwd — delegates to the shared resolve-cwd module (B1 fix).
|
|
31
|
-
* Kept here for backward compatibility with existing call sites in workCommand.
|
|
32
|
-
* Now accepts absolute existing dirs (the external target repo case), rejects
|
|
33
|
-
* non-existent/non-dir paths, and guards relative '../..' traversal.
|
|
34
|
-
*/
|
|
35
|
-
export function makeResolveCwd(da, base = process.cwd()) {
|
|
36
|
-
return sharedMakeResolveCwd(da, base);
|
|
37
|
-
}
|
|
38
|
-
export async function workCommand(options) {
|
|
39
|
-
const roles = options.roles ? options.roles.split(',').map((r) => r.trim()).filter(Boolean) : ['architect', 'developer'];
|
|
40
|
-
if (roles.length === 0) {
|
|
41
|
-
console.error('Error: --roles produced an empty list; provide at least one role name');
|
|
42
|
-
process.exitCode = 1;
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const runnerMode = options.runner ?? 'stub';
|
|
46
|
-
if (runnerMode !== 'stub' && runnerMode !== 'auto') {
|
|
47
|
-
console.error(`Error: --runner must be 'stub' or 'auto', got: ${runnerMode}`);
|
|
48
|
-
process.exitCode = 1;
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
if (options.live && runnerMode !== 'auto') {
|
|
52
|
-
console.error('Error: --live requires --runner auto');
|
|
53
|
-
process.exitCode = 1;
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (options.worktrees && runnerMode === 'stub') {
|
|
57
|
-
console.warn('--worktrees has no effect with --runner stub');
|
|
58
|
-
}
|
|
59
|
-
const runnerTimeoutMs = options.runnerTimeoutMs === undefined ? 600000 : Number(options.runnerTimeoutMs);
|
|
60
|
-
if (!Number.isFinite(runnerTimeoutMs) || runnerTimeoutMs <= 0) {
|
|
61
|
-
console.error(`Error: --runner-timeout-ms must be a positive number, got: ${String(options.runnerTimeoutMs)}`);
|
|
62
|
-
process.exitCode = 1;
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const workerId = resolveWorkerId(options.workerId);
|
|
66
|
-
const idleSleepMs = options.idleSleep === undefined ? 5000 : Number(options.idleSleep);
|
|
67
|
-
if (!Number.isFinite(idleSleepMs) || idleSleepMs < 0) {
|
|
68
|
-
console.error(`Error: --idle-sleep must be a non-negative number, got: ${String(options.idleSleep)}`);
|
|
69
|
-
process.exitCode = 1;
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const once = options.once ?? false;
|
|
73
|
-
// Cost guard: fail fast BEFORE connecting to Revisium.
|
|
74
|
-
// --runner auto requires --live. Check here so tests don't need a live Revisium daemon.
|
|
75
|
-
if (runnerMode === 'auto') {
|
|
76
|
-
if (!requireLiveFlag(options.live ?? false, 'auto'))
|
|
77
|
-
return;
|
|
78
|
-
// Emit cost warning immediately so the user sees it before any daemon connection.
|
|
79
|
-
warnLiveCost();
|
|
80
|
-
}
|
|
81
|
-
const abortController = new AbortController();
|
|
82
|
-
process.once('SIGINT', () => {
|
|
83
|
-
console.log('\nStopping after current step…');
|
|
84
|
-
abortController.abort();
|
|
85
|
-
});
|
|
86
|
-
try {
|
|
87
|
-
const da = createControlPlaneDataAccess();
|
|
88
|
-
await da.assertReady();
|
|
89
|
-
// The injected runAgent is the ONLY thing that changes between modes — runWorker/WorkerDeps and
|
|
90
|
-
// the loop are untouched (invariant 2). stub stays the default (zero cost; real claude is opt-in).
|
|
91
|
-
let runAgent;
|
|
92
|
-
if (runnerMode === 'auto') {
|
|
93
|
-
const { run: prReadinessRun } = await import('../../poller/pr-readiness.js');
|
|
94
|
-
const scriptRunner = createScriptRunner({ scripts: { 'ci-poller': { run: prReadinessRun } } });
|
|
95
|
-
runAgent = createRunAgent({
|
|
96
|
-
claudeCode: createClaudeCodeRunner({
|
|
97
|
-
executor: spawnExecutor,
|
|
98
|
-
resolveCwd: makeResolveCwd(da),
|
|
99
|
-
timeoutMs: runnerTimeoutMs,
|
|
100
|
-
worktreeManager: options.worktrees ? new GitWorktreeManager() : undefined,
|
|
101
|
-
}),
|
|
102
|
-
script: scriptRunner,
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
runAgent = stubRunAgent;
|
|
107
|
-
}
|
|
108
|
-
await runWorker({
|
|
109
|
-
da,
|
|
110
|
-
loadRole: (name) => loadRole(name),
|
|
111
|
-
loadModelProfile: (level) => loadModelProfile(level),
|
|
112
|
-
runAgent,
|
|
113
|
-
}, {
|
|
114
|
-
workerId,
|
|
115
|
-
roles,
|
|
116
|
-
once,
|
|
117
|
-
idleSleepMs,
|
|
118
|
-
signal: abortController.signal,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
if (error instanceof ControlPlaneError) {
|
|
123
|
-
console.error(`Error: ${formatCause(error)}`);
|
|
124
|
-
printHint(error);
|
|
125
|
-
}
|
|
126
|
-
else if (error instanceof Error) {
|
|
127
|
-
console.error(`Error: ${error.message}`);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
console.error(`Error: ${String(error)}`);
|
|
131
|
-
}
|
|
132
|
-
process.exitCode = 1;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
export function registerWork(program) {
|
|
136
|
-
program
|
|
137
|
-
.command('work')
|
|
138
|
-
.description('Run the worker loop. --runner stub (default, zero-cost) or auto (real claude-code dispatch)')
|
|
139
|
-
.option('--once', 'Process one step then exit; exit immediately when idle')
|
|
140
|
-
.option('--roles <csv>', 'Comma-separated list of roles to claim', 'architect,developer')
|
|
141
|
-
.option('--worker-id <id>', 'Override the stable worker identity')
|
|
142
|
-
.option('--idle-sleep <ms>', 'Milliseconds to sleep when no step is available', '5000')
|
|
143
|
-
.option('--runner <mode>', "Runner mode: 'stub' (default, zero-cost) or 'auto' (real claude-code dispatch)", 'stub')
|
|
144
|
-
.option('--runner-timeout-ms <n>', 'Timeout in ms for the real (auto) runner', '600000')
|
|
145
|
-
.option('--worktrees', 'Use per-step git worktrees with --runner auto (git-level isolation only; npm install and port bindings are NOT isolated)')
|
|
146
|
-
.option('--live', 'Use the REAL Claude runner AND the real git/gh integrator — THIS WILL CALL claude, INCUR COST, AND PUSH/OPEN A PR (requires --runner auto)', false)
|
|
147
|
-
.action(workCommand);
|
|
148
|
-
}
|
|
149
|
-
//# sourceMappingURL=work.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"work.js","sourceRoot":"","sources":["../../../src/cli/commands/work.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { existsSync, lstatSync, rmSync, symlinkSync } from 'node:fs';
|
|
3
|
-
import { basename, dirname, isAbsolute, join, resolve } from 'node:path';
|
|
4
|
-
function git(args, cwd) {
|
|
5
|
-
return execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
|
|
6
|
-
}
|
|
7
|
-
function branchName(stepId) {
|
|
8
|
-
return `run/${stepId}`;
|
|
9
|
-
}
|
|
10
|
-
function stepIdFromWorktreePath(worktreePath) {
|
|
11
|
-
return basename(worktreePath);
|
|
12
|
-
}
|
|
13
|
-
function gitRootFromExistingPath(path) {
|
|
14
|
-
return git(['rev-parse', '--show-toplevel'], path);
|
|
15
|
-
}
|
|
16
|
-
function gitCommonRootFromExistingPath(path) {
|
|
17
|
-
const commonDir = git(['rev-parse', '--git-common-dir'], path);
|
|
18
|
-
const absoluteCommonDir = isAbsolute(commonDir) ? commonDir : resolve(path, commonDir);
|
|
19
|
-
return dirname(absoluteCommonDir);
|
|
20
|
-
}
|
|
21
|
-
function gitRootFromWorktreePath(worktreePath) {
|
|
22
|
-
if (existsSync(worktreePath)) {
|
|
23
|
-
return gitCommonRootFromExistingPath(worktreePath);
|
|
24
|
-
}
|
|
25
|
-
const worktreesDir = dirname(worktreePath);
|
|
26
|
-
if (basename(worktreesDir) !== '.worktrees')
|
|
27
|
-
return null;
|
|
28
|
-
const candidate = dirname(worktreesDir);
|
|
29
|
-
return existsSync(join(candidate, '.git')) ? candidate : null;
|
|
30
|
-
}
|
|
31
|
-
function deleteBranchIfPresent(gitRoot, stepId) {
|
|
32
|
-
try {
|
|
33
|
-
git(['branch', '-D', branchName(stepId)], gitRoot);
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
// Missing branches are expected after partial cleanup or manual recovery.
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function pruneWorktrees(gitRoot) {
|
|
40
|
-
try {
|
|
41
|
-
git(['worktree', 'prune'], gitRoot);
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
console.warn(`Warning: git worktree prune failed in ${gitRoot}`);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
export class GitWorktreeManager {
|
|
48
|
-
async create(stepId, baseDir) {
|
|
49
|
-
const gitRoot = gitRootFromExistingPath(baseDir);
|
|
50
|
-
const worktreePath = join(gitRoot, '.worktrees', stepId);
|
|
51
|
-
await this.release(worktreePath);
|
|
52
|
-
git(['worktree', 'add', '-b', branchName(stepId), worktreePath, 'HEAD'], gitRoot);
|
|
53
|
-
const sourceNodeModules = join(gitRoot, 'node_modules');
|
|
54
|
-
const targetNodeModules = join(worktreePath, 'node_modules');
|
|
55
|
-
if (existsSync(sourceNodeModules)) {
|
|
56
|
-
if (existsSync(targetNodeModules) || lstatSync(targetNodeModules, { throwIfNoEntry: false }) !== undefined) {
|
|
57
|
-
rmSync(targetNodeModules, { recursive: true, force: true });
|
|
58
|
-
}
|
|
59
|
-
symlinkSync(sourceNodeModules, targetNodeModules, 'dir');
|
|
60
|
-
}
|
|
61
|
-
return worktreePath;
|
|
62
|
-
}
|
|
63
|
-
async release(worktreePath) {
|
|
64
|
-
const gitRoot = gitRootFromWorktreePath(worktreePath);
|
|
65
|
-
if (gitRoot === null)
|
|
66
|
-
return;
|
|
67
|
-
if (existsSync(worktreePath)) {
|
|
68
|
-
try {
|
|
69
|
-
git(['worktree', 'remove', '--force', worktreePath], gitRoot);
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
console.warn(`Warning: git worktree remove failed for ${worktreePath}; deleting directory directly`);
|
|
73
|
-
rmSync(worktreePath, { recursive: true, force: true });
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (existsSync(worktreePath)) {
|
|
77
|
-
console.warn(`Warning: worktree path still exists after git removal: ${worktreePath}; deleting directory directly`);
|
|
78
|
-
rmSync(worktreePath, { recursive: true, force: true });
|
|
79
|
-
}
|
|
80
|
-
pruneWorktrees(gitRoot);
|
|
81
|
-
deleteBranchIfPresent(gitRoot, stepIdFromWorktreePath(worktreePath));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
//# sourceMappingURL=git-worktree-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-worktree-manager.js","sourceRoot":"","sources":["../../src/worker/git-worktree-manager.ts"],"names":[],"mappings":"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"}
|