@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,101 @@
1
+ export function handleAiCompanyCommand(deps) {
2
+ return async (ctx) => {
3
+ const task = ctx.args?.trim();
4
+ if (!task) {
5
+ return { text: "Usage: /aicompany <task description>\n\nDispatch a natural-language engineering task to the AI Engineering Company.\n\nExample: /aicompany build landing page" };
6
+ }
7
+ // Resolve routing info for display (cheap classification, no I/O)
8
+ const routing = deps.dispatcher?.createPlan(task);
9
+ try {
10
+ const result = await deps.dispatchService.dispatch(task, { wait: true }, "command");
11
+ return { text: formatResult(result, task, routing) };
12
+ }
13
+ catch (err) {
14
+ return { text: formatError(task, err, routing) };
15
+ }
16
+ };
17
+ }
18
+ function capitalize(s) {
19
+ return s.charAt(0).toUpperCase() + s.slice(1);
20
+ }
21
+ function statusLabel(status) {
22
+ switch (status) {
23
+ case "completed": return "Completed";
24
+ case "submitted": return "Submitted";
25
+ case "timeout": return "Timed Out";
26
+ case "error": return "Failed";
27
+ default: return status;
28
+ }
29
+ }
30
+ function formatResult(result, task, routing) {
31
+ const firstStage = routing?.stages[0];
32
+ const lines = [
33
+ "🏢 AI Engineering Company",
34
+ "",
35
+ "Task:",
36
+ capitalize(task),
37
+ "",
38
+ ];
39
+ if (firstStage) {
40
+ lines.push("Assigned To:");
41
+ lines.push(firstStage.worker.config.name);
42
+ lines.push("");
43
+ }
44
+ lines.push("Status:");
45
+ lines.push(statusLabel(result.status));
46
+ if (result.durationMs != null) {
47
+ lines.push("");
48
+ lines.push("Duration:");
49
+ lines.push(`${(result.durationMs / 1000).toFixed(1)} s`);
50
+ }
51
+ if (result.error) {
52
+ lines.push("");
53
+ lines.push(`Error: ${result.error}`);
54
+ }
55
+ if (result.messages?.length) {
56
+ lines.push("", "────────────────────────", "");
57
+ for (const msg of result.messages.slice(0, 5)) {
58
+ const text = extractText(msg);
59
+ if (text)
60
+ lines.push(text);
61
+ }
62
+ }
63
+ return lines.join("\n");
64
+ }
65
+ function formatError(task, err, routing) {
66
+ const firstStage = routing?.stages[0];
67
+ const lines = [
68
+ "🏢 AI Engineering Company",
69
+ "",
70
+ "Task:",
71
+ capitalize(task),
72
+ "",
73
+ ];
74
+ if (firstStage) {
75
+ lines.push("Assigned To:");
76
+ lines.push(firstStage.worker.config.name);
77
+ lines.push("");
78
+ }
79
+ lines.push("Status:");
80
+ lines.push("Failed");
81
+ lines.push("");
82
+ lines.push(`Error: ${err instanceof Error ? err.message : String(err)}`);
83
+ return lines.join("\n");
84
+ }
85
+ function extractText(msg) {
86
+ if (typeof msg === "string")
87
+ return msg;
88
+ if (msg && typeof msg === "object" && "content" in msg) {
89
+ const content = msg.content;
90
+ if (typeof content === "string")
91
+ return content;
92
+ if (Array.isArray(content)) {
93
+ return content
94
+ .filter((c) => c.type === "text" && typeof c.text === "string")
95
+ .map((c) => c.text)
96
+ .join("\n");
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+ //# sourceMappingURL=aicompany.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aicompany.js","sourceRoot":"","sources":["../../src/commands/aicompany.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { MetricsRegistry } from "./metrics-registry.js";
3
+ import type { WorkflowStage } from "./pipeline-engine.js";
4
+ import type { QueueBackend, QueueEntry, QueueEvent } from "./queue-backend.js";
5
+ export type DecisionStatus = "pending" | "approved" | "rejected";
6
+ export type DecisionEntry = QueueEntry;
7
+ export type DecisionEvent = QueueEvent;
8
+ export declare class DecisionQueue extends EventEmitter {
9
+ private readonly backend;
10
+ private readonly metrics?;
11
+ constructor(metrics?: MetricsRegistry, backend?: QueueBackend);
12
+ enqueue(sessionKey: string, stage: WorkflowStage, worker: string, message: string): Promise<DecisionEntry>;
13
+ approve(sessionKey: string, operator?: string, reason?: string): Promise<DecisionEntry | null>;
14
+ reject(sessionKey: string, operator?: string, reason?: string): Promise<DecisionEntry | null>;
15
+ get(sessionKey: string): Promise<DecisionEntry | undefined>;
16
+ /** Returns the number of pending entries. Derived from live state. */
17
+ pendingCount(): Promise<number>;
18
+ list(filter?: DecisionStatus): Promise<DecisionEntry[]>;
19
+ remove(sessionKey: string): Promise<boolean>;
20
+ /** Load pending entries from a JSON file. No-op if file is missing or corrupt. */
21
+ load(filePath: string): Promise<void>;
22
+ /** Persist pending entries to the configured file path. Atomic write. */
23
+ save(filePath?: string): Promise<void>;
24
+ /**
25
+ * Remove pending entries older than maxAgeMs.
26
+ * Housekeeping only — no events emitted, no audit, no state transitions.
27
+ * Returns the count of removed entries.
28
+ */
29
+ cleanup(maxAgeMs: number): Promise<number>;
30
+ }
31
+ //# sourceMappingURL=decision-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-queue.d.ts","sourceRoot":"","sources":["../src/decision-queue.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAG/E,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAGjE,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AACvC,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAEvC,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;gBAE/B,OAAO,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,YAAY;IAMvD,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,CAAC;IAYnB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAiB9F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAiB7F,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAIjE,sEAAsE;IAChE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIvD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,kFAAkF;IAC5E,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,yEAAyE;IACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;;OAIG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGjD"}
@@ -0,0 +1,86 @@
1
+ // Decision queue for Human-in-the-Loop approval gates.
2
+ // Delegates storage to QueueBackend (default: MemoryQueueBackend).
3
+ import { EventEmitter } from "node:events";
4
+ import { MemoryQueueBackend } from "./memory-queue-backend.js";
5
+ export class DecisionQueue extends EventEmitter {
6
+ backend;
7
+ metrics;
8
+ constructor(metrics, backend) {
9
+ super();
10
+ this.metrics = metrics;
11
+ this.backend = backend ?? new MemoryQueueBackend();
12
+ }
13
+ async enqueue(sessionKey, stage, worker, message) {
14
+ const entry = {
15
+ sessionKey,
16
+ stage,
17
+ worker,
18
+ message,
19
+ status: "pending",
20
+ requestedAt: Date.now(),
21
+ };
22
+ return this.backend.enqueue(entry);
23
+ }
24
+ async approve(sessionKey, operator, reason) {
25
+ const entry = await this.backend.get(sessionKey);
26
+ if (!entry || entry.status !== "pending") {
27
+ return null;
28
+ }
29
+ await this.backend.update(sessionKey, {
30
+ status: "approved",
31
+ reason,
32
+ operator,
33
+ decidedAt: Date.now(),
34
+ });
35
+ this.metrics?.increment("approval_decided_total");
36
+ this.metrics?.observe("approval_pending_duration_ms", Date.now() - entry.requestedAt);
37
+ this.emit("decision", { sessionKey, status: "approved", reason, operator });
38
+ return (await this.backend.get(sessionKey)) ?? null;
39
+ }
40
+ async reject(sessionKey, operator, reason) {
41
+ const entry = await this.backend.get(sessionKey);
42
+ if (!entry || entry.status !== "pending") {
43
+ return null;
44
+ }
45
+ await this.backend.update(sessionKey, {
46
+ status: "rejected",
47
+ reason,
48
+ operator,
49
+ decidedAt: Date.now(),
50
+ });
51
+ this.metrics?.increment("approval_decided_total");
52
+ this.metrics?.observe("approval_pending_duration_ms", Date.now() - entry.requestedAt);
53
+ this.emit("decision", { sessionKey, status: "rejected", reason, operator });
54
+ return (await this.backend.get(sessionKey)) ?? null;
55
+ }
56
+ async get(sessionKey) {
57
+ return this.backend.get(sessionKey);
58
+ }
59
+ /** Returns the number of pending entries. Derived from live state. */
60
+ async pendingCount() {
61
+ return (await this.backend.list("pending")).length;
62
+ }
63
+ async list(filter) {
64
+ return this.backend.list(filter);
65
+ }
66
+ async remove(sessionKey) {
67
+ return this.backend.remove(sessionKey);
68
+ }
69
+ /** Load pending entries from a JSON file. No-op if file is missing or corrupt. */
70
+ async load(filePath) {
71
+ await this.backend.load(filePath);
72
+ }
73
+ /** Persist pending entries to the configured file path. Atomic write. */
74
+ async save(filePath) {
75
+ await this.backend.save(filePath);
76
+ }
77
+ /**
78
+ * Remove pending entries older than maxAgeMs.
79
+ * Housekeeping only — no events emitted, no audit, no state transitions.
80
+ * Returns the count of removed entries.
81
+ */
82
+ async cleanup(maxAgeMs) {
83
+ return this.backend.cleanup(maxAgeMs);
84
+ }
85
+ }
86
+ //# sourceMappingURL=decision-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision-queue.js","sourceRoot":"","sources":["../src/decision-queue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { AuditLogger, DispatchSource } from "./audit-logger.js";
2
+ import type { DecisionQueue } from "./decision-queue.js";
3
+ import type { Dispatcher } from "./dispatcher.js";
4
+ import type { LeaseProvider } from "./lease-provider.js";
5
+ import type { MetricsRegistry } from "./metrics-registry.js";
6
+ import type { OrgEngine } from "./org-engine.js";
7
+ import type { PipelineCheckpoint, PipelineCheckpointEntry } from "./pipeline-checkpoint.js";
8
+ import type { TaskStateManager } from "./task-state.js";
9
+ import type { SubagentApi, SessionApi, WorkboardGatewayApi, DispatchOptions, DispatchResult, DispatchStatusEntry, DispatchResultMessages } from "./types.js";
10
+ import { DispatchValidationError } from "./validation.js";
11
+ import type { WorkerEngine } from "./worker-engine.js";
12
+ export { DispatchValidationError };
13
+ export declare const DEFAULT_APPROVAL_TIMEOUT_MS = 1800000;
14
+ export declare class DispatchService {
15
+ private readonly subagent;
16
+ private readonly session;
17
+ private readonly workboard?;
18
+ private readonly workerEngine?;
19
+ private readonly taskState?;
20
+ private readonly dispatcher?;
21
+ private readonly orgEngine?;
22
+ private readonly workersDir?;
23
+ private readonly decisionQueue?;
24
+ private readonly auditLogger?;
25
+ private readonly approvalTimeoutMs;
26
+ private readonly pipelineCheckpoint?;
27
+ private readonly metrics?;
28
+ private readonly leaseProvider?;
29
+ private readonly nodeId;
30
+ constructor(subagent: SubagentApi, session: SessionApi, workboard?: WorkboardGatewayApi | undefined, workerEngine?: WorkerEngine | undefined, taskState?: TaskStateManager | undefined, dispatcher?: Dispatcher | undefined, orgEngine?: OrgEngine | undefined, workersDir?: string | undefined, decisionQueue?: DecisionQueue | undefined, auditLogger?: AuditLogger | undefined, approvalTimeoutMs?: number, pipelineCheckpoint?: PipelineCheckpoint | undefined, metrics?: MetricsRegistry | undefined, leaseProvider?: LeaseProvider | undefined, nodeId?: string);
31
+ dispatch(message: string, options?: DispatchOptions, source?: DispatchSource): Promise<DispatchResult>;
32
+ private recordStatusMetric;
33
+ private resolveWorkboard;
34
+ private dispatchViaWorkboard;
35
+ private dispatchDirect;
36
+ resumePipeline(checkpoint: PipelineCheckpointEntry): Promise<DispatchResult>;
37
+ private executePipeline;
38
+ private executeStage;
39
+ private waitForDecision;
40
+ status(sessionKey?: string): DispatchStatusEntry | DispatchStatusEntry[] | null;
41
+ result(sessionKey: string, limit?: number): Promise<DispatchResultMessages>;
42
+ }
43
+ //# sourceMappingURL=dispatch-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-service.d.ts","sourceRoot":"","sources":["../src/dispatch-service.ts"],"names":[],"mappings":"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"}