@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.
Files changed (154) hide show
  1. package/control-plane/bootstrap.config.json +103 -2
  2. package/control-plane/default-playbook/catalog/pipelines.json +360 -0
  3. package/control-plane/default-playbook/catalog/roles.json +56 -0
  4. package/control-plane/default-playbook/package.json +5 -0
  5. package/control-plane/default-playbook/playbook.json +13 -0
  6. package/control-plane/default-playbook/prompts/analyst.md +27 -0
  7. package/control-plane/default-playbook/prompts/developer.md +26 -0
  8. package/control-plane/default-playbook/prompts/integrator.md +20 -0
  9. package/control-plane/default-playbook/prompts/orchestrator.md +23 -0
  10. package/control-plane/default-playbook/prompts/reviewer.md +28 -0
  11. package/control-plane/default-playbook/prompts/watcher.md +24 -0
  12. package/dist/cli/commands/bootstrap.js +68 -7
  13. package/dist/cli/commands/bootstrap.js.map +1 -1
  14. package/dist/cli/commands/inbox.js +0 -21
  15. package/dist/cli/commands/inbox.js.map +1 -1
  16. package/dist/cli/commands/run.js +76 -49
  17. package/dist/cli/commands/run.js.map +1 -1
  18. package/dist/cli/needs-host.js +7 -8
  19. package/dist/cli/needs-host.js.map +1 -1
  20. package/dist/cli/program.js +0 -2
  21. package/dist/cli/program.js.map +1 -1
  22. package/dist/config.js +18 -1
  23. package/dist/config.js.map +1 -1
  24. package/dist/control-plane/client-transport.js +73 -40
  25. package/dist/control-plane/client-transport.js.map +1 -1
  26. package/dist/control-plane/data-access.js +3 -2
  27. package/dist/control-plane/data-access.js.map +1 -1
  28. package/dist/control-plane/definitions.js +1 -1
  29. package/dist/control-plane/definitions.js.map +1 -1
  30. package/dist/control-plane/json-fields.js +2 -0
  31. package/dist/control-plane/json-fields.js.map +1 -1
  32. package/dist/control-plane/schema-migration.js +86 -0
  33. package/dist/control-plane/schema-migration.js.map +1 -0
  34. package/dist/control-plane/seed-default-playbook.js +71 -0
  35. package/dist/control-plane/seed-default-playbook.js.map +1 -0
  36. package/dist/control-plane/tables.js +1 -0
  37. package/dist/control-plane/tables.js.map +1 -1
  38. package/dist/e2e/kit/agents.js +113 -0
  39. package/dist/e2e/kit/agents.js.map +1 -0
  40. package/dist/e2e/kit/assertions.js +119 -0
  41. package/dist/e2e/kit/assertions.js.map +1 -0
  42. package/dist/e2e/kit/crash.js +44 -0
  43. package/dist/e2e/kit/crash.js.map +1 -0
  44. package/dist/e2e/kit/drive.js +49 -0
  45. package/dist/e2e/kit/drive.js.map +1 -0
  46. package/dist/e2e/kit/env.js +16 -0
  47. package/dist/e2e/kit/env.js.map +1 -0
  48. package/dist/e2e/kit/fake-integrator.js +42 -0
  49. package/dist/e2e/kit/fake-integrator.js.map +1 -0
  50. package/dist/e2e/kit/gh-emulator.js +49 -0
  51. package/dist/e2e/kit/gh-emulator.js.map +1 -0
  52. package/dist/e2e/kit/git-target-repo.js +83 -0
  53. package/dist/e2e/kit/git-target-repo.js.map +1 -0
  54. package/dist/e2e/kit/harness.js +59 -0
  55. package/dist/e2e/kit/harness.js.map +1 -0
  56. package/dist/e2e/kit/index.js +14 -0
  57. package/dist/e2e/kit/index.js.map +1 -0
  58. package/dist/e2e/kit/mcp.js +32 -0
  59. package/dist/e2e/kit/mcp.js.map +1 -0
  60. package/dist/e2e/kit/scenarios.js +196 -0
  61. package/dist/e2e/kit/scenarios.js.map +1 -0
  62. package/dist/e2e/recovery-crash-child.js +29 -0
  63. package/dist/e2e/recovery-crash-child.js.map +1 -0
  64. package/dist/e2e/recovery-dd-crash-child.js +42 -0
  65. package/dist/e2e/recovery-dd-crash-child.js.map +1 -0
  66. package/dist/engine/ensure-postgres.js +13 -1
  67. package/dist/engine/ensure-postgres.js.map +1 -1
  68. package/dist/mcp/mcp-capabilities.js +1 -0
  69. package/dist/mcp/mcp-capabilities.js.map +1 -1
  70. package/dist/mcp/mcp-facade.service.js +24 -3
  71. package/dist/mcp/mcp-facade.service.js.map +1 -1
  72. package/dist/mcp/mcp-tools.js +16 -7
  73. package/dist/mcp/mcp-tools.js.map +1 -1
  74. package/dist/pipeline/data-driven-task.workflow.js +493 -0
  75. package/dist/pipeline/data-driven-task.workflow.js.map +1 -0
  76. package/dist/pipeline/data-driven-template.js +57 -0
  77. package/dist/pipeline/data-driven-template.js.map +1 -0
  78. package/dist/pipeline/develop-task.workflow.js +151 -316
  79. package/dist/pipeline/develop-task.workflow.js.map +1 -1
  80. package/dist/pipeline/pipeline.module.js +1 -1
  81. package/dist/pipeline/route-contract.js +82 -0
  82. package/dist/pipeline/route-contract.js.map +1 -0
  83. package/dist/pipeline-core/index.js +16 -0
  84. package/dist/pipeline-core/index.js.map +1 -0
  85. package/dist/pipeline-core/interpret.js +351 -0
  86. package/dist/pipeline-core/interpret.js.map +1 -0
  87. package/dist/pipeline-core/kit/assertions.js +61 -0
  88. package/dist/pipeline-core/kit/assertions.js.map +1 -0
  89. package/dist/pipeline-core/kit/builders.js +136 -0
  90. package/dist/pipeline-core/kit/builders.js.map +1 -0
  91. package/dist/pipeline-core/kit/drive.js +96 -0
  92. package/dist/pipeline-core/kit/drive.js.map +1 -0
  93. package/dist/pipeline-core/kit/fixtures.js +248 -0
  94. package/dist/pipeline-core/kit/fixtures.js.map +1 -0
  95. package/dist/pipeline-core/kit/index.js +13 -0
  96. package/dist/pipeline-core/kit/index.js.map +1 -0
  97. package/dist/pipeline-core/types.js +132 -0
  98. package/dist/pipeline-core/types.js.map +1 -0
  99. package/dist/pipeline-core/validate.js +1192 -0
  100. package/dist/pipeline-core/validate.js.map +1 -0
  101. package/dist/playbook/catalog-loader.js +14 -1
  102. package/dist/playbook/catalog-loader.js.map +1 -1
  103. package/dist/playbook/import-mapper.js +14 -38
  104. package/dist/playbook/import-mapper.js.map +1 -1
  105. package/dist/playbook/manifest.js +1 -1
  106. package/dist/revisium/playbooks.service.js +95 -17
  107. package/dist/revisium/playbooks.service.js.map +1 -1
  108. package/dist/revisium/roles.service.js +1 -1
  109. package/dist/revisium/roles.service.js.map +1 -1
  110. package/dist/revisium/run.service.js +16 -0
  111. package/dist/revisium/run.service.js.map +1 -1
  112. package/dist/run/append-event.js +24 -1
  113. package/dist/run/append-event.js.map +1 -1
  114. package/dist/run/block-run.js +17 -0
  115. package/dist/run/block-run.js.map +1 -0
  116. package/dist/run/create-run.js +28 -5
  117. package/dist/run/create-run.js.map +1 -1
  118. package/dist/run/inspect-run.js +9 -0
  119. package/dist/run/inspect-run.js.map +1 -1
  120. package/dist/run/run-outputs.js +88 -0
  121. package/dist/run/run-outputs.js.map +1 -0
  122. package/dist/run/terminal-run-status.js +89 -7
  123. package/dist/run/terminal-run-status.js.map +1 -1
  124. package/dist/runners/claude-code.service.js +4 -0
  125. package/dist/runners/claude-code.service.js.map +1 -1
  126. package/dist/runners/integrator.js +25 -9
  127. package/dist/runners/integrator.js.map +1 -1
  128. package/dist/task-control-plane/task-control-plane-api.service.js +247 -28
  129. package/dist/task-control-plane/task-control-plane-api.service.js.map +1 -1
  130. package/dist/worker/artifact-store.js +111 -0
  131. package/dist/worker/artifact-store.js.map +1 -0
  132. package/dist/worker/build-context.js +17 -0
  133. package/dist/worker/build-context.js.map +1 -1
  134. package/dist/worker/claude-code-runner.js +44 -5
  135. package/dist/worker/claude-code-runner.js.map +1 -1
  136. package/dist/worker/process-executor.js +23 -2
  137. package/dist/worker/process-executor.js.map +1 -1
  138. package/dist/worker/runner-dispatch.js +1 -0
  139. package/dist/worker/runner-dispatch.js.map +1 -1
  140. package/dist/worker/runner.js +11 -1
  141. package/dist/worker/runner.js.map +1 -1
  142. package/dist/worker/stub-runner.js +7 -45
  143. package/dist/worker/stub-runner.js.map +1 -1
  144. package/package.json +3 -1
  145. package/dist/cli/commands/work.js +0 -149
  146. package/dist/cli/commands/work.js.map +0 -1
  147. package/dist/worker/git-worktree-manager.js +0 -84
  148. package/dist/worker/git-worktree-manager.js.map +0 -1
  149. package/dist/worker/loop.js +0 -122
  150. package/dist/worker/loop.js.map +0 -1
  151. package/dist/worker/script-runner.js +0 -28
  152. package/dist/worker/script-runner.js.map +0 -1
  153. package/dist/worker/worker-id.js +0 -18
  154. 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: buildArgs(profile.modelId, role.allowedTools, permissionMode, profile.params),
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 new Error(`claude-code runner exceeded ${timeoutMs}ms`);
122
+ throw runnerError(`claude-code runner exceeded ${timeoutMs}ms`, processSnapshot);
91
123
  }
92
124
  if (result.code !== 0) {
93
- throw new Error(`claude-code runner exited with code ${String(result.code)}: ${tail(result.stderr || result.stdout)}`);
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 new Error(`claude-code runner reported is_error: ${tail(transport.text)}`);
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":"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"}
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
- child.stdout?.on('data', (chunk) => { stdout += chunk; });
35
- child.stderr?.on('data', (chunk) => { stderr += chunk; });
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":"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"}
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;gBACX,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"}
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"}
@@ -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
- // The stub emits `output.verdict:'PASS'` for the reviewer role so the happy path
6
- // completes straight through to integrator (T3 loop tests inject their own fakes).
7
- //
8
- // NOTE: developTask does NOT consume nextSteps for sequencing (the chain is in code
9
- // per ADR-0001 §5); they are kept here for parity with the real runner-contract shape.
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,iFAAiF;AACjF,mDAAmD;AACnD,EAAE;AACF,iFAAiF;AACjF,mFAAmF;AACnF,EAAE;AACF,oFAAoF;AACpF,uFAAuF;AACvF,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;KAC/E,CAAC;IAEF,MAAM,SAAS,GAAkB,EAAE,CAAC;IAEpC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,SAAS,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACxB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACxB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,SAAS,CAAC,IAAI,CAAC;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACxB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;QAC3B,+BAA+B;IACjC,CAAC;IACD,8CAA8C;IAE9C,MAAM,MAAM,GAAkB;QAC5B,MAAM;QACN,SAAS;QACT,KAAK,EAAE,EAAE;QACT,UAAU,EAAE,KAAK;KAClB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
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.2",
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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"}