@deriest/ai-engineering-company 1.15.2

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 (237) hide show
  1. package/CHANGELOG.md +807 -0
  2. package/LICENSE +8 -0
  3. package/README.md +291 -0
  4. package/assets/knowledge/.gitkeep +0 -0
  5. package/assets/offices/architecture/README.md +32 -0
  6. package/assets/offices/engineering/README.md +53 -0
  7. package/assets/offices/governance/README.md +30 -0
  8. package/assets/offices/product/README.md +37 -0
  9. package/assets/organization/organization.json +260 -0
  10. package/assets/organization/validation.md +107 -0
  11. package/assets/prompts/.gitkeep +0 -0
  12. package/assets/templates/.gitkeep +0 -0
  13. package/assets/workers/architect/AGENTS.md +49 -0
  14. package/assets/workers/architect/SOUL.md +21 -0
  15. package/assets/workers/architect/config.json +7 -0
  16. package/assets/workers/backend-engineer/AGENTS.md +67 -0
  17. package/assets/workers/backend-engineer/HEARTBEAT.md +5 -0
  18. package/assets/workers/backend-engineer/IDENTITY.md +27 -0
  19. package/assets/workers/backend-engineer/SOUL.md +24 -0
  20. package/assets/workers/backend-engineer/TOOLS.md +44 -0
  21. package/assets/workers/backend-engineer/USER.md +21 -0
  22. package/assets/workers/backend-engineer/company/scripts/wp3/harness-spec.md +31 -0
  23. package/assets/workers/backend-engineer/company/scripts/wp3/lib/semver-range.js +81 -0
  24. package/assets/workers/backend-engineer/company/scripts/wp3/lib/test-mr4.js +6 -0
  25. package/assets/workers/backend-engineer/config.json +7 -0
  26. package/assets/workers/backend-engineer/openclaw-workspace-state.json +4 -0
  27. package/assets/workers/designer/AGENTS.md +49 -0
  28. package/assets/workers/designer/SOUL.md +20 -0
  29. package/assets/workers/designer/config.json +7 -0
  30. package/assets/workers/dispatcher/AGENTS.md +158 -0
  31. package/assets/workers/dispatcher/HEARTBEAT.md +5 -0
  32. package/assets/workers/dispatcher/IDENTITY.md +6 -0
  33. package/assets/workers/dispatcher/ROUTING.md +136 -0
  34. package/assets/workers/dispatcher/SOUL.md +18 -0
  35. package/assets/workers/dispatcher/TOOLS.md +32 -0
  36. package/assets/workers/dispatcher/USER.md +15 -0
  37. package/assets/workers/dispatcher/config.json +7 -0
  38. package/assets/workers/dispatcher/openclaw-workspace-state.json +4 -0
  39. package/assets/workers/frontend-engineer/AGENTS.md +53 -0
  40. package/assets/workers/frontend-engineer/SOUL.md +23 -0
  41. package/assets/workers/frontend-engineer/config.json +7 -0
  42. package/assets/workers/governor/AGENTS.md +57 -0
  43. package/assets/workers/governor/SOUL.md +20 -0
  44. package/assets/workers/governor/config.json +7 -0
  45. package/assets/workers/infrastructure-engineer/AGENTS.md +51 -0
  46. package/assets/workers/infrastructure-engineer/SOUL.md +21 -0
  47. package/assets/workers/infrastructure-engineer/config.json +7 -0
  48. package/assets/workers/product-manager/AGENTS.md +52 -0
  49. package/assets/workers/product-manager/HEARTBEAT.md +5 -0
  50. package/assets/workers/product-manager/IDENTITY.md +27 -0
  51. package/assets/workers/product-manager/SOUL.md +20 -0
  52. package/assets/workers/product-manager/TOOLS.md +44 -0
  53. package/assets/workers/product-manager/USER.md +21 -0
  54. package/assets/workers/product-manager/config.json +7 -0
  55. package/assets/workers/product-manager/openclaw-workspace-state.json +4 -0
  56. package/assets/workers/qa-engineer/AGENTS.md +50 -0
  57. package/assets/workers/qa-engineer/HEARTBEAT.md +5 -0
  58. package/assets/workers/qa-engineer/IDENTITY.md +27 -0
  59. package/assets/workers/qa-engineer/SOUL.md +22 -0
  60. package/assets/workers/qa-engineer/TOOLS.md +44 -0
  61. package/assets/workers/qa-engineer/USER.md +21 -0
  62. package/assets/workers/qa-engineer/config.json +7 -0
  63. package/assets/workers/qa-engineer/openclaw-workspace-state.json +4 -0
  64. package/assets/workers/researcher/AGENTS.md +50 -0
  65. package/assets/workers/researcher/HEARTBEAT.md +5 -0
  66. package/assets/workers/researcher/IDENTITY.md +27 -0
  67. package/assets/workers/researcher/SOUL.md +20 -0
  68. package/assets/workers/researcher/TOOLS.md +44 -0
  69. package/assets/workers/researcher/USER.md +21 -0
  70. package/assets/workers/researcher/config.json +7 -0
  71. package/assets/workers/researcher/openclaw-workspace-state.json +4 -0
  72. package/config/offices.json +19 -0
  73. package/config/policies.json +10 -0
  74. package/config/workflows.json +9 -0
  75. package/dist/audit-logger.d.ts +49 -0
  76. package/dist/audit-logger.d.ts.map +1 -0
  77. package/dist/audit-logger.js +131 -0
  78. package/dist/audit-logger.js.map +1 -0
  79. package/dist/cli.d.ts +17 -0
  80. package/dist/cli.d.ts.map +1 -0
  81. package/dist/cli.js +218 -0
  82. package/dist/cli.js.map +1 -0
  83. package/dist/commands/aicompany.d.ts +12 -0
  84. package/dist/commands/aicompany.d.ts.map +1 -0
  85. package/dist/commands/aicompany.js +101 -0
  86. package/dist/commands/aicompany.js.map +1 -0
  87. package/dist/decision-queue.d.ts +31 -0
  88. package/dist/decision-queue.d.ts.map +1 -0
  89. package/dist/decision-queue.js +86 -0
  90. package/dist/decision-queue.js.map +1 -0
  91. package/dist/dispatch-service.d.ts +43 -0
  92. package/dist/dispatch-service.d.ts.map +1 -0
  93. package/dist/dispatch-service.js +569 -0
  94. package/dist/dispatch-service.js.map +1 -0
  95. package/dist/dispatcher.d.ts +24 -0
  96. package/dist/dispatcher.d.ts.map +1 -0
  97. package/dist/dispatcher.js +84 -0
  98. package/dist/dispatcher.js.map +1 -0
  99. package/dist/file-queue-backend.d.ts +16 -0
  100. package/dist/file-queue-backend.d.ts.map +1 -0
  101. package/dist/file-queue-backend.js +93 -0
  102. package/dist/file-queue-backend.js.map +1 -0
  103. package/dist/gateway.d.ts +14 -0
  104. package/dist/gateway.d.ts.map +1 -0
  105. package/dist/gateway.js +138 -0
  106. package/dist/gateway.js.map +1 -0
  107. package/dist/index.d.ts +4 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +277 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/lease-provider.d.ts +31 -0
  112. package/dist/lease-provider.d.ts.map +1 -0
  113. package/dist/lease-provider.js +4 -0
  114. package/dist/lease-provider.js.map +1 -0
  115. package/dist/memory-lease-provider.d.ts +10 -0
  116. package/dist/memory-lease-provider.d.ts.map +1 -0
  117. package/dist/memory-lease-provider.js +54 -0
  118. package/dist/memory-lease-provider.js.map +1 -0
  119. package/dist/memory-queue-backend.d.ts +16 -0
  120. package/dist/memory-queue-backend.d.ts.map +1 -0
  121. package/dist/memory-queue-backend.js +93 -0
  122. package/dist/memory-queue-backend.js.map +1 -0
  123. package/dist/metrics-registry.d.ts +58 -0
  124. package/dist/metrics-registry.d.ts.map +1 -0
  125. package/dist/metrics-registry.js +195 -0
  126. package/dist/metrics-registry.js.map +1 -0
  127. package/dist/openclaw.plugin.json +29 -0
  128. package/dist/org-engine.d.ts +134 -0
  129. package/dist/org-engine.d.ts.map +1 -0
  130. package/dist/org-engine.js +129 -0
  131. package/dist/org-engine.js.map +1 -0
  132. package/dist/pipeline-checkpoint.d.ts +44 -0
  133. package/dist/pipeline-checkpoint.d.ts.map +1 -0
  134. package/dist/pipeline-checkpoint.js +90 -0
  135. package/dist/pipeline-checkpoint.js.map +1 -0
  136. package/dist/pipeline-engine.d.ts +53 -0
  137. package/dist/pipeline-engine.d.ts.map +1 -0
  138. package/dist/pipeline-engine.js +47 -0
  139. package/dist/pipeline-engine.js.map +1 -0
  140. package/dist/prompt-assembler.d.ts +13 -0
  141. package/dist/prompt-assembler.d.ts.map +1 -0
  142. package/dist/prompt-assembler.js +84 -0
  143. package/dist/prompt-assembler.js.map +1 -0
  144. package/dist/queue-backend.d.ts +44 -0
  145. package/dist/queue-backend.d.ts.map +1 -0
  146. package/dist/queue-backend.js +4 -0
  147. package/dist/queue-backend.js.map +1 -0
  148. package/dist/redis-lease-provider.d.ts +16 -0
  149. package/dist/redis-lease-provider.d.ts.map +1 -0
  150. package/dist/redis-lease-provider.js +96 -0
  151. package/dist/redis-lease-provider.js.map +1 -0
  152. package/dist/redis-queue-backend.d.ts +23 -0
  153. package/dist/redis-queue-backend.d.ts.map +1 -0
  154. package/dist/redis-queue-backend.js +131 -0
  155. package/dist/redis-queue-backend.js.map +1 -0
  156. package/dist/src/cli.d.ts +11 -0
  157. package/dist/src/cli.d.ts.map +1 -0
  158. package/dist/src/cli.js +100 -0
  159. package/dist/src/cli.js.map +1 -0
  160. package/dist/src/dispatch-service.d.ts +25 -0
  161. package/dist/src/dispatch-service.d.ts.map +1 -0
  162. package/dist/src/dispatch-service.js +201 -0
  163. package/dist/src/dispatch-service.js.map +1 -0
  164. package/dist/src/dispatcher.d.ts +23 -0
  165. package/dist/src/dispatcher.d.ts.map +1 -0
  166. package/dist/src/dispatcher.js +66 -0
  167. package/dist/src/dispatcher.js.map +1 -0
  168. package/dist/src/gateway.d.ts +10 -0
  169. package/dist/src/gateway.d.ts.map +1 -0
  170. package/dist/src/gateway.js +66 -0
  171. package/dist/src/gateway.js.map +1 -0
  172. package/dist/src/index.d.ts +8 -0
  173. package/dist/src/index.d.ts.map +1 -0
  174. package/dist/src/index.js +85 -0
  175. package/dist/src/index.js.map +1 -0
  176. package/dist/src/org-engine.d.ts +134 -0
  177. package/dist/src/org-engine.d.ts.map +1 -0
  178. package/dist/src/org-engine.js +129 -0
  179. package/dist/src/org-engine.js.map +1 -0
  180. package/dist/src/pipeline-engine.d.ts +53 -0
  181. package/dist/src/pipeline-engine.d.ts.map +1 -0
  182. package/dist/src/pipeline-engine.js +47 -0
  183. package/dist/src/pipeline-engine.js.map +1 -0
  184. package/dist/src/prompt-assembler.d.ts +13 -0
  185. package/dist/src/prompt-assembler.d.ts.map +1 -0
  186. package/dist/src/prompt-assembler.js +84 -0
  187. package/dist/src/prompt-assembler.js.map +1 -0
  188. package/dist/src/task-state.d.ts +27 -0
  189. package/dist/src/task-state.d.ts.map +1 -0
  190. package/dist/src/task-state.js +49 -0
  191. package/dist/src/task-state.js.map +1 -0
  192. package/dist/src/tools.d.ts +9 -0
  193. package/dist/src/tools.d.ts.map +1 -0
  194. package/dist/src/tools.js +107 -0
  195. package/dist/src/tools.js.map +1 -0
  196. package/dist/src/types.d.ts +99 -0
  197. package/dist/src/types.d.ts.map +1 -0
  198. package/dist/src/types.js +4 -0
  199. package/dist/src/types.js.map +1 -0
  200. package/dist/src/validation.d.ts +11 -0
  201. package/dist/src/validation.d.ts.map +1 -0
  202. package/dist/src/validation.js +69 -0
  203. package/dist/src/validation.js.map +1 -0
  204. package/dist/src/workboard-gateway.d.ts +82 -0
  205. package/dist/src/workboard-gateway.d.ts.map +1 -0
  206. package/dist/src/workboard-gateway.js +76 -0
  207. package/dist/src/workboard-gateway.js.map +1 -0
  208. package/dist/src/worker-engine.d.ts +38 -0
  209. package/dist/src/worker-engine.d.ts.map +1 -0
  210. package/dist/src/worker-engine.js +73 -0
  211. package/dist/src/worker-engine.js.map +1 -0
  212. package/dist/task-state.d.ts +27 -0
  213. package/dist/task-state.d.ts.map +1 -0
  214. package/dist/task-state.js +62 -0
  215. package/dist/task-state.js.map +1 -0
  216. package/dist/tools.d.ts +11 -0
  217. package/dist/tools.d.ts.map +1 -0
  218. package/dist/tools.js +183 -0
  219. package/dist/tools.js.map +1 -0
  220. package/dist/types.d.ts +99 -0
  221. package/dist/types.d.ts.map +1 -0
  222. package/dist/types.js +4 -0
  223. package/dist/types.js.map +1 -0
  224. package/dist/validation.d.ts +11 -0
  225. package/dist/validation.d.ts.map +1 -0
  226. package/dist/validation.js +69 -0
  227. package/dist/validation.js.map +1 -0
  228. package/dist/workboard-gateway.d.ts +82 -0
  229. package/dist/workboard-gateway.d.ts.map +1 -0
  230. package/dist/workboard-gateway.js +76 -0
  231. package/dist/workboard-gateway.js.map +1 -0
  232. package/dist/worker-engine.d.ts +38 -0
  233. package/dist/worker-engine.d.ts.map +1 -0
  234. package/dist/worker-engine.js +73 -0
  235. package/dist/worker-engine.js.map +1 -0
  236. package/openclaw.plugin.json +42 -0
  237. package/package.json +50 -0
@@ -0,0 +1,569 @@
1
+ import { buildWorkerPrompt } from "./prompt-assembler.js";
2
+ import { validateMessage, validateTimeout, validateLimit, DispatchValidationError, } from "./validation.js";
3
+ export { DispatchValidationError };
4
+ export const DEFAULT_APPROVAL_TIMEOUT_MS = 1_800_000; // 30 minutes
5
+ export class DispatchService {
6
+ subagent;
7
+ session;
8
+ workboard;
9
+ workerEngine;
10
+ taskState;
11
+ dispatcher;
12
+ orgEngine;
13
+ workersDir;
14
+ decisionQueue;
15
+ auditLogger;
16
+ approvalTimeoutMs;
17
+ pipelineCheckpoint;
18
+ metrics;
19
+ leaseProvider;
20
+ nodeId;
21
+ constructor(subagent, session, workboard, workerEngine, taskState, dispatcher, orgEngine, workersDir, decisionQueue, auditLogger, approvalTimeoutMs = DEFAULT_APPROVAL_TIMEOUT_MS, pipelineCheckpoint, metrics, leaseProvider, nodeId = "local") {
22
+ this.subagent = subagent;
23
+ this.session = session;
24
+ this.workboard = workboard;
25
+ this.workerEngine = workerEngine;
26
+ this.taskState = taskState;
27
+ this.dispatcher = dispatcher;
28
+ this.orgEngine = orgEngine;
29
+ this.workersDir = workersDir;
30
+ this.decisionQueue = decisionQueue;
31
+ this.auditLogger = auditLogger;
32
+ this.approvalTimeoutMs = approvalTimeoutMs;
33
+ this.pipelineCheckpoint = pipelineCheckpoint;
34
+ this.metrics = metrics;
35
+ this.leaseProvider = leaseProvider;
36
+ this.nodeId = nodeId;
37
+ }
38
+ async dispatch(message, options, source) {
39
+ const validatedMessage = validateMessage(message);
40
+ const sessionKey = generateSessionKey();
41
+ this.metrics?.increment("dispatch_total");
42
+ if (source) {
43
+ const srcMetric = `dispatch_by_source_${source}`;
44
+ try {
45
+ this.metrics?.increment(srcMetric);
46
+ }
47
+ catch { /* unknown source */ }
48
+ }
49
+ this.auditLogger?.write({
50
+ ts: new Date().toISOString(),
51
+ sessionKey,
52
+ event: "dispatch_requested",
53
+ source,
54
+ messagePreview: validatedMessage.slice(0, 256),
55
+ });
56
+ // Validate worker exists if explicitly requested
57
+ if (options?.worker && this.workerEngine) {
58
+ const worker = this.workerEngine.getWorker(options.worker);
59
+ if (!worker) {
60
+ this.metrics?.increment("dispatch_by_status_error");
61
+ return {
62
+ sessionKey: "",
63
+ runId: "",
64
+ status: "error",
65
+ error: `Unknown worker: ${options.worker}`,
66
+ };
67
+ }
68
+ }
69
+ // Create orchestration plan when no explicit worker
70
+ let plan;
71
+ if (!options?.worker && this.dispatcher) {
72
+ plan = this.dispatcher.createPlan(validatedMessage);
73
+ if (plan.stages.length > 0) {
74
+ const firstStage = plan.stages[0];
75
+ options = { ...options, worker: firstStage.worker.config.name };
76
+ }
77
+ this.auditLogger?.write({
78
+ ts: new Date().toISOString(),
79
+ sessionKey,
80
+ event: "plan_created",
81
+ category: this.dispatcher.classify(validatedMessage),
82
+ workflowId: plan.workflowId,
83
+ stageCount: plan.stages.length,
84
+ });
85
+ }
86
+ // Track task creation
87
+ this.taskState?.create(sessionKey, options?.worker);
88
+ this.auditLogger?.write({
89
+ ts: new Date().toISOString(),
90
+ sessionKey,
91
+ event: "task_created",
92
+ worker: options?.worker,
93
+ });
94
+ // Workboard path: create card → workboard owns execution (no subagent.run here)
95
+ const wb = await this.resolveWorkboard();
96
+ if (wb) {
97
+ const result = await this.dispatchViaWorkboard(wb, sessionKey, validatedMessage, options);
98
+ this.taskState?.transition(sessionKey, result.status === "error" ? "failed" : "submitted", result);
99
+ this.recordStatusMetric(result.status);
100
+ this.auditLogger?.write({
101
+ ts: new Date().toISOString(),
102
+ sessionKey,
103
+ event: "dispatch_completed",
104
+ status: result.status,
105
+ durationMs: result.durationMs,
106
+ error: result.error,
107
+ });
108
+ return result;
109
+ }
110
+ // Direct subagent dispatch — execute full pipeline
111
+ return this.dispatchDirect(sessionKey, validatedMessage, options, plan);
112
+ }
113
+ recordStatusMetric(status) {
114
+ switch (status) {
115
+ case "completed":
116
+ case "submitted":
117
+ this.metrics?.increment("dispatch_by_status_success");
118
+ break;
119
+ case "error":
120
+ this.metrics?.increment("dispatch_by_status_error");
121
+ break;
122
+ case "rejected":
123
+ this.metrics?.increment("dispatch_by_status_rejected");
124
+ break;
125
+ }
126
+ }
127
+ async resolveWorkboard() {
128
+ if (!this.workboard) {
129
+ return null;
130
+ }
131
+ try {
132
+ const available = await this.workboard.isAvailable();
133
+ return available ? this.workboard : null;
134
+ }
135
+ catch {
136
+ return null;
137
+ }
138
+ }
139
+ async dispatchViaWorkboard(wb, sessionKey, message, options) {
140
+ const started = Date.now();
141
+ try {
142
+ const card = await wb.createCard({
143
+ title: message.slice(0, 256),
144
+ description: message.length > 256 ? message : undefined,
145
+ status: "ready",
146
+ priority: options?.timeout && options.timeout < 120_000 ? "high" : "normal",
147
+ });
148
+ const dispatchResult = await wb.dispatchCards();
149
+ const match = dispatchResult.started.find((s) => s.cardId === card.id);
150
+ return {
151
+ sessionKey,
152
+ runId: match?.runId ?? "",
153
+ status: "submitted",
154
+ durationMs: Date.now() - started,
155
+ };
156
+ }
157
+ catch (err) {
158
+ return {
159
+ sessionKey,
160
+ runId: "",
161
+ status: "error",
162
+ error: err instanceof Error ? err.message : String(err),
163
+ durationMs: Date.now() - started,
164
+ };
165
+ }
166
+ }
167
+ async dispatchDirect(sessionKey, message, options, plan) {
168
+ const wait = options?.wait !== false;
169
+ const timeoutMs = validateTimeout(options?.timeout);
170
+ const limit = validateLimit(options?.limit) ?? 50;
171
+ const started = Date.now();
172
+ // Execute full pipeline if plan has multiple stages; otherwise single-stage
173
+ const stages = plan?.stages && plan.stages.length > 1
174
+ ? plan.stages
175
+ : undefined;
176
+ if (stages) {
177
+ // Pipeline requires wait — context chaining needs each stage's output
178
+ const result = await this.executePipeline(sessionKey, message, stages, { wait: true, timeoutMs, limit, started });
179
+ this.recordStatusMetric(result.status);
180
+ this.metrics?.observe("dispatch_duration_ms", result.durationMs ?? Date.now() - started);
181
+ this.auditLogger?.write({
182
+ ts: new Date().toISOString(),
183
+ sessionKey,
184
+ event: "dispatch_completed",
185
+ status: result.status,
186
+ durationMs: result.durationMs,
187
+ messageCount: result.messages?.length,
188
+ error: result.error,
189
+ });
190
+ return result;
191
+ }
192
+ // Single-stage path (original behavior)
193
+ const result = await this.executeStage(sessionKey, message, options?.worker, { wait, timeoutMs, limit, started });
194
+ this.recordStatusMetric(result.status);
195
+ this.metrics?.observe("dispatch_duration_ms", result.durationMs ?? Date.now() - started);
196
+ this.auditLogger?.write({
197
+ ts: new Date().toISOString(),
198
+ sessionKey,
199
+ event: "dispatch_completed",
200
+ status: result.status,
201
+ durationMs: result.durationMs,
202
+ messageCount: result.messages?.length,
203
+ error: result.error,
204
+ });
205
+ return result;
206
+ }
207
+ async resumePipeline(checkpoint) {
208
+ if (!this.dispatcher || !this.workerEngine) {
209
+ return { sessionKey: checkpoint.sessionKey, runId: "", status: "error", error: "Cannot resume: dispatcher or workerEngine not available" };
210
+ }
211
+ const remainingStages = [];
212
+ for (let i = checkpoint.currentStageIndex; i < checkpoint.stages.length; i++) {
213
+ const s = checkpoint.stages[i];
214
+ const workerDef = this.workerEngine.getWorker(s.worker);
215
+ if (!workerDef) {
216
+ return { sessionKey: checkpoint.sessionKey, runId: "", status: "error", error: `Cannot resume: worker '${s.worker}' not found` };
217
+ }
218
+ remainingStages.push({ stage: s.stage, worker: workerDef, context: "", requiresApproval: s.requiresApproval });
219
+ }
220
+ this.taskState?.create(checkpoint.sessionKey);
221
+ const history = checkpoint.history.map((h) => ({ ...h }));
222
+ const timeoutMs = this.approvalTimeoutMs;
223
+ const result = await this.executePipeline(checkpoint.sessionKey, checkpoint.objective, remainingStages, { wait: true, timeoutMs, limit: 50, started: Date.now() }, history);
224
+ this.recordStatusMetric(result.status);
225
+ return result;
226
+ }
227
+ async executePipeline(sessionKey, message, stages, opts, resumeHistory) {
228
+ this.taskState?.transition(sessionKey, "running");
229
+ if (this.leaseProvider && !this.leaseProvider.acquire(sessionKey, this.nodeId, 3600)) {
230
+ this.auditLogger?.write({ ts: new Date().toISOString(), sessionKey, event: "lease_acquire_failed" });
231
+ }
232
+ this.metrics?.increment("pipeline_started_total");
233
+ this.metrics?.gauge("active_pipelines", (this.taskState?.list("running").length ?? 0));
234
+ const pipelineStop = this.metrics?.startTimer("pipeline_duration_ms");
235
+ this.auditLogger?.write({
236
+ ts: new Date().toISOString(),
237
+ sessionKey,
238
+ event: "pipeline_started",
239
+ stageCount: stages.length,
240
+ });
241
+ const originalTask = message;
242
+ const history = resumeHistory ? [...resumeHistory] : [];
243
+ let lastRunId = "";
244
+ let failedStage;
245
+ let failedStageError;
246
+ for (const stagePlan of stages) {
247
+ const workerName = stagePlan.worker.config.name;
248
+ this.metrics?.increment("stage_started_total");
249
+ this.auditLogger?.write({
250
+ ts: new Date().toISOString(),
251
+ sessionKey,
252
+ event: "stage_started",
253
+ stage: stagePlan.stage,
254
+ worker: workerName,
255
+ });
256
+ // Approval gate: pause and wait for operator decision
257
+ if (stagePlan.requiresApproval && this.decisionQueue) {
258
+ this.taskState?.transition(sessionKey, "awaiting_approval");
259
+ this.metrics?.increment("approval_requested_total");
260
+ const approvalStart = Date.now();
261
+ this.auditLogger?.write({
262
+ ts: new Date().toISOString(),
263
+ sessionKey,
264
+ event: "approval_requested",
265
+ stage: stagePlan.stage,
266
+ worker: workerName,
267
+ decisionStatus: "pending",
268
+ });
269
+ this.decisionQueue.enqueue(sessionKey, stagePlan.stage, workerName, originalTask);
270
+ // Wait for operator to approve or reject
271
+ const decision = await this.waitForDecision(sessionKey);
272
+ this.metrics?.observe("approval_latency_ms", Date.now() - approvalStart);
273
+ if (decision.status === "rejected") {
274
+ if (decision.reason === "approval_timeout") {
275
+ this.metrics?.increment("approval_timeout_total");
276
+ }
277
+ pipelineStop?.();
278
+ this.metrics?.increment("pipeline_failed_total");
279
+ this.metrics?.gauge("active_pipelines", (this.taskState?.list("running").length ?? 0));
280
+ const result = {
281
+ sessionKey,
282
+ runId: lastRunId,
283
+ status: "error",
284
+ error: `Pipeline rejected by operator${decision.reason ? `: ${decision.reason}` : ""}`,
285
+ durationMs: Date.now() - opts.started,
286
+ };
287
+ this.taskState?.transition(sessionKey, "failed", result);
288
+ this.pipelineCheckpoint?.fail(sessionKey, `Pipeline rejected by operator${decision.reason ? `: ${decision.reason}` : ""}`);
289
+ this.decisionQueue.remove(sessionKey);
290
+ if (this.leaseProvider && !this.leaseProvider.release(sessionKey, this.nodeId)) {
291
+ this.auditLogger?.write({ ts: new Date().toISOString(), sessionKey, event: "lease_release_failed" });
292
+ }
293
+ return result;
294
+ }
295
+ this.decisionQueue.remove(sessionKey);
296
+ this.taskState?.transition(sessionKey, "running");
297
+ this.metrics?.gauge("active_pipelines", (this.taskState?.list("running").length ?? 0));
298
+ // Checkpoint after approval — stage can now resume without re-approval
299
+ this.pipelineCheckpoint?.set({
300
+ sessionKey,
301
+ objective: originalTask,
302
+ category: this.dispatcher?.classify(originalTask) ?? "engineering",
303
+ currentStageIndex: history.length,
304
+ stageCount: stages.length,
305
+ stages: stages.map((s) => ({ stage: s.stage, worker: s.worker.config.name, requiresApproval: s.requiresApproval })),
306
+ history,
307
+ status: "running",
308
+ decidedBy: decision.operator,
309
+ startedAt: opts.started,
310
+ updatedAt: Date.now(),
311
+ });
312
+ }
313
+ const stageMessage = buildStageMessage(originalTask, stagePlan.stage, workerName, history);
314
+ const result = await this.executeStage(sessionKey, stageMessage, workerName, { wait: opts.wait, timeoutMs: opts.timeoutMs, limit: opts.limit, started: opts.started }, true);
315
+ lastRunId = result.runId || lastRunId;
316
+ if (result.status === "error" || result.status === "timeout") {
317
+ failedStage = stagePlan.stage;
318
+ failedStageError = result.error;
319
+ this.metrics?.increment("stage_failed_total");
320
+ this.metrics?.observe("stage_duration_ms", result.durationMs ?? 0);
321
+ this.auditLogger?.write({
322
+ ts: new Date().toISOString(),
323
+ sessionKey,
324
+ event: "stage_failed",
325
+ stage: stagePlan.stage,
326
+ error: result.error,
327
+ durationMs: result.durationMs,
328
+ });
329
+ this.taskState?.transition(sessionKey, "failed", result);
330
+ break;
331
+ }
332
+ this.metrics?.increment("stage_completed_total");
333
+ this.metrics?.observe("stage_duration_ms", result.durationMs ?? 0);
334
+ this.auditLogger?.write({
335
+ ts: new Date().toISOString(),
336
+ sessionKey,
337
+ event: "stage_completed",
338
+ stage: stagePlan.stage,
339
+ worker: workerName,
340
+ runId: result.runId,
341
+ durationMs: result.durationMs,
342
+ });
343
+ const output = extractStageOutput(result.messages);
344
+ history.push({ stage: stagePlan.stage, worker: workerName, output: output ?? "" });
345
+ // Write checkpoint after each successful stage
346
+ this.pipelineCheckpoint?.set({
347
+ sessionKey,
348
+ objective: originalTask,
349
+ category: this.dispatcher?.classify(originalTask) ?? "engineering",
350
+ currentStageIndex: history.length,
351
+ stageCount: stages.length,
352
+ stages: stages.map((s) => ({ stage: s.stage, worker: s.worker.config.name, requiresApproval: s.requiresApproval })),
353
+ history,
354
+ status: "running",
355
+ startedAt: opts.started,
356
+ updatedAt: Date.now(),
357
+ });
358
+ }
359
+ const totalDuration = Date.now() - opts.started;
360
+ pipelineStop?.();
361
+ if (failedStage) {
362
+ this.metrics?.increment("pipeline_failed_total");
363
+ this.metrics?.gauge("active_pipelines", (this.taskState?.list("running").length ?? 0));
364
+ this.pipelineCheckpoint?.fail(sessionKey, `Pipeline failed at stage ${failedStage}${failedStageError ? `: ${failedStageError}` : ""}`);
365
+ this.auditLogger?.write({
366
+ ts: new Date().toISOString(),
367
+ sessionKey,
368
+ event: "pipeline_failed",
369
+ stage: failedStage,
370
+ durationMs: totalDuration,
371
+ });
372
+ if (this.leaseProvider && !this.leaseProvider.release(sessionKey, this.nodeId)) {
373
+ this.auditLogger?.write({ ts: new Date().toISOString(), sessionKey, event: "lease_release_failed" });
374
+ }
375
+ return {
376
+ sessionKey,
377
+ runId: lastRunId,
378
+ status: "error",
379
+ error: `Pipeline failed at stage ${failedStage}${failedStageError ? `: ${failedStageError}` : ""}`,
380
+ durationMs: totalDuration,
381
+ };
382
+ }
383
+ this.metrics?.increment("pipeline_completed_total");
384
+ this.metrics?.gauge("active_pipelines", (this.taskState?.list("running").length ?? 0));
385
+ const finalMsgs = await this.subagent.getSessionMessages({ sessionKey, limit: opts.limit });
386
+ const finalResult = {
387
+ sessionKey,
388
+ runId: lastRunId,
389
+ status: "completed",
390
+ messages: finalMsgs.messages,
391
+ durationMs: totalDuration,
392
+ };
393
+ this.auditLogger?.write({
394
+ ts: new Date().toISOString(),
395
+ sessionKey,
396
+ event: "pipeline_completed",
397
+ stageCount: stages.length,
398
+ durationMs: totalDuration,
399
+ });
400
+ this.taskState?.transition(sessionKey, "completed", finalResult);
401
+ this.pipelineCheckpoint?.complete(sessionKey);
402
+ if (this.leaseProvider && !this.leaseProvider.release(sessionKey, this.nodeId)) {
403
+ this.auditLogger?.write({ ts: new Date().toISOString(), sessionKey, event: "lease_release_failed" });
404
+ }
405
+ return finalResult;
406
+ }
407
+ async executeStage(sessionKey, message, workerName, opts, pipelineMode = false) {
408
+ const workerDef = workerName && this.workerEngine
409
+ ? this.workerEngine.getWorker(workerName)
410
+ : undefined;
411
+ let prompt = workerDef?.prompt ?? "";
412
+ if (workerName && this.orgEngine && this.workersDir) {
413
+ const workerDir = `${this.workersDir}/${workerName}`;
414
+ prompt = await buildWorkerPrompt(workerDir, this.orgEngine, workerName);
415
+ }
416
+ if (opts?.wait && !pipelineMode) {
417
+ this.taskState?.transition(sessionKey, "running");
418
+ }
419
+ try {
420
+ const { runId } = await this.subagent.run({
421
+ sessionKey,
422
+ message,
423
+ deliver: false,
424
+ worker: workerDef?.config.name,
425
+ prompt,
426
+ model: workerDef?.config.model,
427
+ });
428
+ if (!opts?.wait) {
429
+ if (!pipelineMode)
430
+ this.taskState?.transition(sessionKey, "submitted");
431
+ return { sessionKey, runId, status: "submitted" };
432
+ }
433
+ const waitResult = await this.subagent.waitForRun({ runId, timeoutMs: opts?.timeoutMs });
434
+ const durationMs = Date.now() - (opts?.started ?? Date.now());
435
+ if (waitResult.status === "ok") {
436
+ const msgs = await this.subagent.getSessionMessages({ sessionKey, limit: opts?.limit ?? 50 });
437
+ const result = {
438
+ sessionKey,
439
+ runId,
440
+ status: "completed",
441
+ messages: msgs.messages,
442
+ durationMs,
443
+ };
444
+ if (!pipelineMode)
445
+ this.taskState?.transition(sessionKey, "completed", result);
446
+ return result;
447
+ }
448
+ const result = {
449
+ sessionKey,
450
+ runId,
451
+ status: waitResult.status,
452
+ error: waitResult.error || `Status: ${waitResult.status}`,
453
+ durationMs,
454
+ };
455
+ if (!pipelineMode)
456
+ this.taskState?.transition(sessionKey, "failed", result);
457
+ return result;
458
+ }
459
+ catch (err) {
460
+ const result = {
461
+ sessionKey,
462
+ runId: "",
463
+ status: "error",
464
+ error: err instanceof Error ? err.message : String(err),
465
+ durationMs: Date.now() - (opts?.started ?? Date.now()),
466
+ };
467
+ if (!pipelineMode)
468
+ this.taskState?.transition(sessionKey, "failed", result);
469
+ return result;
470
+ }
471
+ }
472
+ async waitForDecision(sessionKey) {
473
+ // Event-driven: resolve when DecisionQueue emits a decision for this sessionKey.
474
+ const queue = this.decisionQueue;
475
+ if (!queue) {
476
+ throw new Error("DecisionQueue not available");
477
+ }
478
+ // Check if decision already made (in case event fired before listener attached)
479
+ const existing = await queue.get(sessionKey);
480
+ if (existing && existing.status !== "pending") {
481
+ return { status: existing.status, reason: existing.reason, operator: existing.operator };
482
+ }
483
+ const decisionPromise = new Promise((resolve) => {
484
+ const handler = (event) => {
485
+ if (event.sessionKey === sessionKey) {
486
+ queue.removeListener("decision", handler);
487
+ resolve({ status: event.status, reason: event.reason, operator: event.operator });
488
+ }
489
+ };
490
+ queue.on("decision", handler);
491
+ });
492
+ const timeoutPromise = new Promise((resolve) => {
493
+ setTimeout(() => {
494
+ resolve({ status: "rejected", reason: "approval_timeout" });
495
+ }, this.approvalTimeoutMs);
496
+ });
497
+ return Promise.race([decisionPromise, timeoutPromise]);
498
+ }
499
+ status(sessionKey) {
500
+ if (sessionKey) {
501
+ return this.session.getSessionEntry({ sessionKey }) ?? null;
502
+ }
503
+ const all = this.session.listSessionEntries();
504
+ return all.filter((e) => e.key?.startsWith("ai-company:dispatch:"));
505
+ }
506
+ async result(sessionKey, limit) {
507
+ const validatedLimit = validateLimit(limit) ?? 50;
508
+ try {
509
+ const msgs = await this.subagent.getSessionMessages({ sessionKey, limit: validatedLimit });
510
+ if (!msgs.messages?.length) {
511
+ return { sessionKey, status: "empty" };
512
+ }
513
+ return {
514
+ sessionKey,
515
+ status: "ok",
516
+ messageCount: msgs.messages.length,
517
+ messages: msgs.messages,
518
+ };
519
+ }
520
+ catch (err) {
521
+ return {
522
+ sessionKey,
523
+ status: "empty",
524
+ error: err instanceof Error ? err.message : String(err),
525
+ };
526
+ }
527
+ }
528
+ }
529
+ function generateSessionKey() {
530
+ const ts = new Date()
531
+ .toISOString()
532
+ .replace(/[-:]/g, "")
533
+ .replace(/\.\d+Z$/, "Z");
534
+ const rand = Math.random().toString(36).slice(2, 6);
535
+ return `ai-company:dispatch:${ts}-${rand}`;
536
+ }
537
+ function buildStageMessage(originalTask, stage, worker, history) {
538
+ const parts = [`Original Task:\n${originalTask}`];
539
+ if (history.length > 0) {
540
+ parts.push("Pipeline History:");
541
+ for (const h of history) {
542
+ parts.push(`\n--- ${h.stage} (${h.worker}) ---\n${h.output}`);
543
+ }
544
+ }
545
+ parts.push(`\nCurrent Stage: ${stage}`);
546
+ parts.push(`Worker: ${worker}`);
547
+ return parts.join("\n\n");
548
+ }
549
+ function extractStageOutput(messages) {
550
+ if (!messages?.length)
551
+ return null;
552
+ // Extract text from the last assistant message
553
+ for (let i = messages.length - 1; i >= 0; i--) {
554
+ const msg = messages[i];
555
+ if (msg.role !== "assistant")
556
+ continue;
557
+ const content = msg.content;
558
+ if (typeof content === "string")
559
+ return content;
560
+ if (Array.isArray(content)) {
561
+ return content
562
+ .filter((c) => c.type === "text" && typeof c.text === "string")
563
+ .map((c) => c.text)
564
+ .join("\n");
565
+ }
566
+ }
567
+ return null;
568
+ }
569
+ //# sourceMappingURL=dispatch-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-service.js","sourceRoot":"","sources":["../src/dispatch-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { OrgEngine } from "./org-engine.js";
2
+ import type { PipelineEngine, WorkflowStage } from "./pipeline-engine.js";
3
+ import type { WorkerEngine, WorkerDefinition } from "./worker-engine.js";
4
+ export interface StagePlan {
5
+ stage: WorkflowStage;
6
+ worker: WorkerDefinition;
7
+ context: string;
8
+ requiresApproval?: boolean;
9
+ }
10
+ export interface OrchestrationPlan {
11
+ objective: string;
12
+ stages: StagePlan[];
13
+ workflowId: string;
14
+ }
15
+ export declare class Dispatcher {
16
+ private readonly workerEngine;
17
+ private readonly orgEngine;
18
+ private readonly pipelineEngine;
19
+ constructor(workerEngine: WorkerEngine, orgEngine: OrgEngine, pipelineEngine: PipelineEngine);
20
+ classify(objective: string): string;
21
+ selectWorker(capabilities: string[], office: string): WorkerDefinition | undefined;
22
+ createPlan(objective: string): OrchestrationPlan;
23
+ }
24
+ //# sourceMappingURL=dispatcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AASD,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc;IAGjD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAenC,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAqBlF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB;CAgDjD"}