@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,53 @@
1
+ import { z } from "zod";
2
+ export declare const WorkflowStageSchema: z.ZodEnum<["INTAKE", "UNDERSTAND", "PLAN", "BUILD", "VERIFY", "SHIP"]>;
3
+ export type WorkflowStage = z.infer<typeof WorkflowStageSchema>;
4
+ export declare const WorkflowSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ name: z.ZodString;
7
+ stages: z.ZodArray<z.ZodEnum<["INTAKE", "UNDERSTAND", "PLAN", "BUILD", "VERIFY", "SHIP"]>, "many">;
8
+ }, "strip", z.ZodTypeAny, {
9
+ id: string;
10
+ name: string;
11
+ stages: ("INTAKE" | "UNDERSTAND" | "PLAN" | "BUILD" | "VERIFY" | "SHIP")[];
12
+ }, {
13
+ id: string;
14
+ name: string;
15
+ stages: ("INTAKE" | "UNDERSTAND" | "PLAN" | "BUILD" | "VERIFY" | "SHIP")[];
16
+ }>;
17
+ export declare const WorkflowsConfigSchema: z.ZodObject<{
18
+ workflows: z.ZodArray<z.ZodObject<{
19
+ id: z.ZodString;
20
+ name: z.ZodString;
21
+ stages: z.ZodArray<z.ZodEnum<["INTAKE", "UNDERSTAND", "PLAN", "BUILD", "VERIFY", "SHIP"]>, "many">;
22
+ }, "strip", z.ZodTypeAny, {
23
+ id: string;
24
+ name: string;
25
+ stages: ("INTAKE" | "UNDERSTAND" | "PLAN" | "BUILD" | "VERIFY" | "SHIP")[];
26
+ }, {
27
+ id: string;
28
+ name: string;
29
+ stages: ("INTAKE" | "UNDERSTAND" | "PLAN" | "BUILD" | "VERIFY" | "SHIP")[];
30
+ }>, "many">;
31
+ }, "strip", z.ZodTypeAny, {
32
+ workflows: {
33
+ id: string;
34
+ name: string;
35
+ stages: ("INTAKE" | "UNDERSTAND" | "PLAN" | "BUILD" | "VERIFY" | "SHIP")[];
36
+ }[];
37
+ }, {
38
+ workflows: {
39
+ id: string;
40
+ name: string;
41
+ stages: ("INTAKE" | "UNDERSTAND" | "PLAN" | "BUILD" | "VERIFY" | "SHIP")[];
42
+ }[];
43
+ }>;
44
+ export type Workflow = z.infer<typeof WorkflowSchema>;
45
+ export declare class PipelineEngine {
46
+ private configPath;
47
+ private workflows;
48
+ constructor(configPath: string);
49
+ load(): Promise<void>;
50
+ getWorkflow(id: string): Workflow | undefined;
51
+ getWorkflows(): Workflow[];
52
+ }
53
+ //# sourceMappingURL=pipeline-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-engine.d.ts","sourceRoot":"","sources":["../src/pipeline-engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB,wEAO9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,cAAc;;;;;;;;;;;;EAIzB,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;EAEhC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,qBAAa,cAAc;IAGb,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,SAAS,CAAoC;gBAEjC,UAAU,EAAE,MAAM;IAEhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI7C,YAAY,IAAI,QAAQ,EAAE;CAG3B"}
@@ -0,0 +1,47 @@
1
+ import * as fs from "fs/promises";
2
+ import { z } from "zod";
3
+ export const WorkflowStageSchema = z.enum([
4
+ "INTAKE",
5
+ "UNDERSTAND",
6
+ "PLAN",
7
+ "BUILD",
8
+ "VERIFY",
9
+ "SHIP",
10
+ ]);
11
+ export const WorkflowSchema = z.object({
12
+ id: z.string(),
13
+ name: z.string(),
14
+ stages: z.array(WorkflowStageSchema),
15
+ });
16
+ export const WorkflowsConfigSchema = z.object({
17
+ workflows: z.array(WorkflowSchema),
18
+ });
19
+ export class PipelineEngine {
20
+ configPath;
21
+ workflows = new Map();
22
+ constructor(configPath) {
23
+ this.configPath = configPath;
24
+ }
25
+ async load() {
26
+ try {
27
+ const data = await fs.readFile(this.configPath, "utf-8");
28
+ const parsed = WorkflowsConfigSchema.parse(JSON.parse(data));
29
+ this.workflows.clear();
30
+ for (const wf of parsed.workflows) {
31
+ this.workflows.set(wf.id, wf);
32
+ }
33
+ }
34
+ catch (e) {
35
+ if (e.code !== "ENOENT") {
36
+ throw e;
37
+ }
38
+ }
39
+ }
40
+ getWorkflow(id) {
41
+ return this.workflows.get(id);
42
+ }
43
+ getWorkflows() {
44
+ return Array.from(this.workflows.values());
45
+ }
46
+ }
47
+ //# sourceMappingURL=pipeline-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline-engine.js","sourceRoot":"","sources":["../src/pipeline-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACxC,QAAQ;IACR,YAAY;IACZ,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;CACP,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;CACnC,CAAC,CAAC;AAIH,MAAM,OAAO,cAAc;IAGL;IAFZ,SAAS,GAA0B,IAAI,GAAG,EAAE,CAAC;IAErD,YAAoB,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;IAE1C,KAAK,CAAC,IAAI;QACR,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACvB,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACnD,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { OrgEngine } from "./org-engine.js";
2
+ export interface PromptParts {
3
+ soul: string;
4
+ agents: string;
5
+ orgContext: string;
6
+ }
7
+ export declare function loadWorkerDocs(workerDir: string): Promise<{
8
+ soul: string;
9
+ agents: string;
10
+ }>;
11
+ export declare function assemblePrompt(parts: PromptParts): string;
12
+ export declare function buildWorkerPrompt(workerDir: string, orgEngine: OrgEngine, workerName: string): Promise<string>;
13
+ //# sourceMappingURL=prompt-assembler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAM3C;AAoED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAczD;AAED,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAQjB"}
@@ -0,0 +1,84 @@
1
+ import * as fs from "fs/promises";
2
+ import * as path from "path";
3
+ export async function loadWorkerDocs(workerDir) {
4
+ const [soul, agents] = await Promise.all([
5
+ fs.readFile(path.join(workerDir, "SOUL.md"), "utf-8").catch(() => ""),
6
+ fs.readFile(path.join(workerDir, "AGENTS.md"), "utf-8").catch(() => ""),
7
+ ]);
8
+ return { soul, agents };
9
+ }
10
+ function buildOrgContext(orgEngine, workerName) {
11
+ const sections = [];
12
+ // Offices summary
13
+ const offices = orgEngine.getOffices();
14
+ if (offices.length > 0) {
15
+ sections.push("## Organization Offices");
16
+ for (const o of offices) {
17
+ sections.push(`- **${o.name}** (${o.id}): ${o.description}`);
18
+ }
19
+ }
20
+ // Worker's role details
21
+ const role = orgEngine.getRole(workerName);
22
+ if (role) {
23
+ sections.push("\n## Your Role");
24
+ sections.push(`- Office: ${role.office}`);
25
+ sections.push(`- Capabilities: ${role.capabilities.join(", ")}`);
26
+ const auth = role.decision_authority;
27
+ for (const [key, values] of Object.entries(auth)) {
28
+ sections.push(`- ${key}: ${values.join(", ")}`);
29
+ }
30
+ }
31
+ // Collaboration partners
32
+ const pairs = orgEngine.getCollaborationPairs().filter((p) => p.from === workerName || p.to === workerName);
33
+ if (pairs.length > 0) {
34
+ sections.push("\n## Collaboration");
35
+ for (const p of pairs) {
36
+ const partner = p.from === workerName ? p.to : p.from;
37
+ const dir = p.bidirectional ? "↔" : "→";
38
+ sections.push(`- ${workerName} ${dir} ${partner}: ${p.on}`);
39
+ }
40
+ }
41
+ // Escalation rules for this worker
42
+ const rules = orgEngine.getEscalationRules().filter((r) => r.worker === workerName || r.worker === "any");
43
+ if (rules.length > 0) {
44
+ sections.push("\n## Escalation Rules");
45
+ for (const r of rules) {
46
+ const suffix = r.then ? ` → ${r.then}` : "";
47
+ sections.push(`- ${r.trigger}: escalate to ${r.escalate_to}${suffix}`);
48
+ }
49
+ }
50
+ // Team roster (other workers)
51
+ const allWorkers = orgEngine.getWorkers();
52
+ const peers = allWorkers.filter((w) => w !== orgEngine.getWorker(workerName));
53
+ if (peers.length > 0) {
54
+ sections.push("\n## Team Roster");
55
+ for (const w of peers) {
56
+ const wName = Object.entries(allWorkers).find(([, v]) => v === w)?.[0] || "";
57
+ sections.push(`- ${w.role} (${w.office ?? "unassigned"}): ${w.responsibility}`);
58
+ }
59
+ }
60
+ return sections.join("\n");
61
+ }
62
+ export function assemblePrompt(parts) {
63
+ const sections = [];
64
+ if (parts.soul) {
65
+ sections.push(parts.soul.trim());
66
+ }
67
+ if (parts.agents) {
68
+ sections.push(parts.agents.trim());
69
+ }
70
+ if (parts.orgContext) {
71
+ sections.push(parts.orgContext.trim());
72
+ }
73
+ return sections.join("\n\n---\n\n");
74
+ }
75
+ export async function buildWorkerPrompt(workerDir, orgEngine, workerName) {
76
+ const docs = await loadWorkerDocs(workerDir);
77
+ const orgContext = buildOrgContext(orgEngine, workerName);
78
+ return assemblePrompt({
79
+ soul: docs.soul,
80
+ agents: docs.agents,
81
+ orgContext,
82
+ });
83
+ }
84
+ //# sourceMappingURL=prompt-assembler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-assembler.js","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { DecisionStatus } from "./decision-queue.js";
2
+ import type { WorkflowStage } from "./pipeline-engine.js";
3
+ export interface QueueEntry {
4
+ sessionKey: string;
5
+ stage: WorkflowStage;
6
+ worker: string;
7
+ message: string;
8
+ status: DecisionStatus;
9
+ reason?: string;
10
+ operator?: string;
11
+ requestedAt: number;
12
+ decidedAt?: number;
13
+ }
14
+ export interface QueueEvent {
15
+ sessionKey: string;
16
+ status: "approved" | "rejected";
17
+ reason?: string;
18
+ operator?: string;
19
+ }
20
+ export type QueueEntryUpdate = Partial<Pick<QueueEntry, "status" | "reason" | "operator" | "decidedAt">>;
21
+ export interface QueueBackend {
22
+ /** Add a new entry in pending state. */
23
+ enqueue(entry: QueueEntry): Promise<QueueEntry>;
24
+ /** Get an entry by sessionKey. */
25
+ get(sessionKey: string): Promise<QueueEntry | undefined>;
26
+ /** List entries, optionally filtered by status. */
27
+ list(filter?: DecisionStatus): Promise<QueueEntry[]>;
28
+ /** Update specific fields on an entry. Returns null if not found. */
29
+ update(sessionKey: string, update: QueueEntryUpdate): Promise<QueueEntry | null>;
30
+ /** Remove an entry. Returns true if it existed. */
31
+ remove(sessionKey: string): Promise<boolean>;
32
+ /** Load entries from external source. No-op on failure. */
33
+ load(filePath: string): Promise<void>;
34
+ /** Persist pending entries. Atomic write. No-op without file path. */
35
+ save(filePath?: string): Promise<void>;
36
+ /** Best-effort save. Silent on failure. */
37
+ trySave(): Promise<void>;
38
+ /**
39
+ * Remove pending entries older than maxAgeMs.
40
+ * Returns count of removed entries.
41
+ */
42
+ cleanup(maxAgeMs: number): Promise<number>;
43
+ }
44
+ //# sourceMappingURL=queue-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-backend.d.ts","sourceRoot":"","sources":["../src/queue-backend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC;AAEzG,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhD,kCAAkC;IAClC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAEzD,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAErD,qEAAqE;IACrE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAEjF,mDAAmD;IACnD,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C,2DAA2D;IAC3D,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,sEAAsE;IACtE,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,2CAA2C;IAC3C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C"}
@@ -0,0 +1,4 @@
1
+ // QueueBackend interface — abstracts storage for DecisionQueue.
2
+ // Implementations: MemoryQueueBackend (default), FileQueueBackend.
3
+ export {};
4
+ //# sourceMappingURL=queue-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-backend.js","sourceRoot":"","sources":["../src/queue-backend.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,mEAAmE"}
@@ -0,0 +1,16 @@
1
+ import type { Lease, LeaseProvider } from "./lease-provider.js";
2
+ export declare class RedisLeaseProvider implements LeaseProvider {
3
+ private client;
4
+ private readonly url;
5
+ private readonly prefix;
6
+ constructor(url: string, prefix?: string);
7
+ private key;
8
+ private ensureClient;
9
+ acquire(sessionKey: string, nodeId: string, ttlSeconds: number): Promise<boolean>;
10
+ renew(sessionKey: string, nodeId: string, ttlSeconds: number): Promise<boolean>;
11
+ release(sessionKey: string, nodeId: string): Promise<boolean>;
12
+ get(sessionKey: string): Promise<Lease | undefined>;
13
+ cleanup(): Promise<number>;
14
+ close(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=redis-lease-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-lease-provider.d.ts","sourceRoot":"","sources":["../src/redis-lease-provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEhE,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,GAAG,EAAE,MAAM,EAAE,MAAM,SAAgB;IAK/C,OAAO,CAAC,GAAG;YAIG,YAAY;IAUpB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBjF,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB/E,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU7D,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAiBnD,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAM1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
@@ -0,0 +1,96 @@
1
+ // RedisLeaseProvider — Redis-backed LeaseProvider implementation.
2
+ // Preserves LeaseProvider interface. Uses Redis SET NX EX for atomic acquire with TTL.
3
+ import { createClient } from "redis";
4
+ export class RedisLeaseProvider {
5
+ client = null;
6
+ url;
7
+ prefix;
8
+ constructor(url, prefix = "ai-company:") {
9
+ this.url = url;
10
+ this.prefix = prefix;
11
+ }
12
+ key(sessionKey) {
13
+ return `${this.prefix}lease:${sessionKey}`;
14
+ }
15
+ async ensureClient() {
16
+ if (this.client)
17
+ return this.client;
18
+ this.client = createClient({ url: this.url });
19
+ this.client.on("error", (err) => {
20
+ console.error(`[redis-lease] Connection error: ${err.message}`);
21
+ });
22
+ await this.client.connect();
23
+ return this.client;
24
+ }
25
+ async acquire(sessionKey, nodeId, ttlSeconds) {
26
+ const client = await this.ensureClient();
27
+ const now = Date.now();
28
+ const value = JSON.stringify({
29
+ sessionKey,
30
+ nodeId,
31
+ acquiredAt: now,
32
+ expiresAt: now + ttlSeconds * 1000,
33
+ });
34
+ // SET NX EX — atomic acquire with TTL
35
+ const result = await client.set(this.key(sessionKey), value, {
36
+ NX: true,
37
+ EX: ttlSeconds,
38
+ });
39
+ return result === "OK";
40
+ }
41
+ async renew(sessionKey, nodeId, ttlSeconds) {
42
+ const client = await this.ensureClient();
43
+ const lease = await this.get(sessionKey);
44
+ if (!lease || lease.nodeId !== nodeId) {
45
+ return false;
46
+ }
47
+ const now = Date.now();
48
+ const value = JSON.stringify({
49
+ sessionKey,
50
+ nodeId,
51
+ acquiredAt: lease.acquiredAt,
52
+ expiresAt: now + ttlSeconds * 1000,
53
+ });
54
+ await client.set(this.key(sessionKey), value, { EX: ttlSeconds });
55
+ return true;
56
+ }
57
+ async release(sessionKey, nodeId) {
58
+ const client = await this.ensureClient();
59
+ const lease = await this.get(sessionKey);
60
+ if (!lease || lease.nodeId !== nodeId) {
61
+ return false;
62
+ }
63
+ await client.del(this.key(sessionKey));
64
+ return true;
65
+ }
66
+ async get(sessionKey) {
67
+ const client = await this.ensureClient();
68
+ const data = await client.get(this.key(sessionKey));
69
+ if (!data)
70
+ return undefined;
71
+ try {
72
+ const lease = JSON.parse(data);
73
+ if (lease.expiresAt <= Date.now()) {
74
+ // Expired — clean up
75
+ await client.del(this.key(sessionKey));
76
+ return undefined;
77
+ }
78
+ return lease;
79
+ }
80
+ catch {
81
+ return undefined;
82
+ }
83
+ }
84
+ async cleanup() {
85
+ // Redis TTL handles expiry automatically.
86
+ // This is a no-op — expired keys are removed by Redis.
87
+ return 0;
88
+ }
89
+ async close() {
90
+ if (this.client) {
91
+ await this.client.quit();
92
+ this.client = null;
93
+ }
94
+ }
95
+ }
96
+ //# sourceMappingURL=redis-lease-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-lease-provider.js","sourceRoot":"","sources":["../src/redis-lease-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { DecisionStatus } from "./decision-queue.js";
2
+ import type { QueueBackend, QueueEntry, QueueEntryUpdate } from "./queue-backend.js";
3
+ export declare class RedisQueueBackend implements QueueBackend {
4
+ private client;
5
+ private readonly url;
6
+ private readonly prefix;
7
+ constructor(url: string, prefix?: string);
8
+ private key;
9
+ private indexKey;
10
+ private ensureClient;
11
+ enqueue(entry: QueueEntry): Promise<QueueEntry>;
12
+ get(sessionKey: string): Promise<QueueEntry | undefined>;
13
+ list(filter?: DecisionStatus): Promise<QueueEntry[]>;
14
+ update(sessionKey: string, update: QueueEntryUpdate): Promise<QueueEntry | null>;
15
+ remove(sessionKey: string): Promise<boolean>;
16
+ load(_filePath: string): Promise<void>;
17
+ save(_filePath?: string): Promise<void>;
18
+ trySave(): Promise<void>;
19
+ cleanup(maxAgeMs: number): Promise<number>;
20
+ close(): Promise<void>;
21
+ private parseEntry;
22
+ }
23
+ //# sourceMappingURL=redis-queue-backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-queue-backend.d.ts","sourceRoot":"","sources":["../src/redis-queue-backend.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAErF,qBAAa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,GAAG,EAAE,MAAM,EAAE,MAAM,SAAgB;IAK/C,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;YAIF,YAAY;IAUpB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAiB/C,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAOxD,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAapD,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAahF,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS5C,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAe1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5B,OAAO,CAAC,UAAU;CAanB"}
@@ -0,0 +1,131 @@
1
+ // RedisQueueBackend — Redis-backed QueueBackend implementation.
2
+ // Preserves QueueBackend interface. Uses Redis hashes for entry storage.
3
+ import { createClient } from "redis";
4
+ export class RedisQueueBackend {
5
+ client = null;
6
+ url;
7
+ prefix;
8
+ constructor(url, prefix = "ai-company:") {
9
+ this.url = url;
10
+ this.prefix = prefix;
11
+ }
12
+ key(sessionKey) {
13
+ return `${this.prefix}queue:${sessionKey}`;
14
+ }
15
+ indexKey() {
16
+ return `${this.prefix}queue:index`;
17
+ }
18
+ async ensureClient() {
19
+ if (this.client)
20
+ return this.client;
21
+ this.client = createClient({ url: this.url });
22
+ this.client.on("error", (err) => {
23
+ console.error(`[redis-queue] Connection error: ${err.message}`);
24
+ });
25
+ await this.client.connect();
26
+ return this.client;
27
+ }
28
+ async enqueue(entry) {
29
+ const client = await this.ensureClient();
30
+ await client.hSet(this.key(entry.sessionKey), {
31
+ sessionKey: entry.sessionKey,
32
+ stage: entry.stage,
33
+ worker: entry.worker,
34
+ message: entry.message,
35
+ status: entry.status,
36
+ reason: entry.reason ?? "",
37
+ operator: entry.operator ?? "",
38
+ requestedAt: String(entry.requestedAt),
39
+ decidedAt: String(entry.decidedAt ?? ""),
40
+ });
41
+ await client.sAdd(this.indexKey(), entry.sessionKey);
42
+ return entry;
43
+ }
44
+ async get(sessionKey) {
45
+ const client = await this.ensureClient();
46
+ const data = await client.hGetAll(this.key(sessionKey));
47
+ if (!data.sessionKey)
48
+ return undefined;
49
+ return this.parseEntry(data);
50
+ }
51
+ async list(filter) {
52
+ const client = await this.ensureClient();
53
+ const keys = await client.sMembers(this.indexKey());
54
+ const entries = [];
55
+ for (const sessionKey of keys) {
56
+ const entry = await this.get(sessionKey);
57
+ if (entry && (!filter || entry.status === filter)) {
58
+ entries.push(entry);
59
+ }
60
+ }
61
+ return entries;
62
+ }
63
+ async update(sessionKey, update) {
64
+ const client = await this.ensureClient();
65
+ const exists = await client.exists(this.key(sessionKey));
66
+ if (!exists)
67
+ return null;
68
+ const fields = {};
69
+ if (update.status !== undefined)
70
+ fields.status = update.status;
71
+ if (update.reason !== undefined)
72
+ fields.reason = update.reason;
73
+ if (update.operator !== undefined)
74
+ fields.operator = update.operator;
75
+ if (update.decidedAt !== undefined)
76
+ fields.decidedAt = String(update.decidedAt);
77
+ await client.hSet(this.key(sessionKey), fields);
78
+ return (await this.get(sessionKey)) ?? null;
79
+ }
80
+ async remove(sessionKey) {
81
+ const client = await this.ensureClient();
82
+ const existed = await client.del(this.key(sessionKey));
83
+ if (existed) {
84
+ await client.sRem(this.indexKey(), sessionKey);
85
+ }
86
+ return existed > 0;
87
+ }
88
+ async load(_filePath) {
89
+ // Redis is the source of truth — load is a no-op for the distributed backend.
90
+ }
91
+ async save(_filePath) {
92
+ // Redis is the source of truth — save is a no-op for the distributed backend.
93
+ }
94
+ async trySave() {
95
+ // Redis is the source of truth — trySave is a no-op.
96
+ }
97
+ async cleanup(maxAgeMs) {
98
+ const client = await this.ensureClient();
99
+ const keys = await client.sMembers(this.indexKey());
100
+ const now = Date.now();
101
+ let removed = 0;
102
+ for (const sessionKey of keys) {
103
+ const entry = await this.get(sessionKey);
104
+ if (entry && entry.status === "pending" && now - entry.requestedAt > maxAgeMs) {
105
+ await this.remove(sessionKey);
106
+ removed++;
107
+ }
108
+ }
109
+ return removed;
110
+ }
111
+ async close() {
112
+ if (this.client) {
113
+ await this.client.quit();
114
+ this.client = null;
115
+ }
116
+ }
117
+ parseEntry(data) {
118
+ return {
119
+ sessionKey: data.sessionKey,
120
+ stage: data.stage,
121
+ worker: data.worker,
122
+ message: data.message,
123
+ status: data.status,
124
+ reason: data.reason || undefined,
125
+ operator: data.operator || undefined,
126
+ requestedAt: Number(data.requestedAt),
127
+ decidedAt: data.decidedAt ? Number(data.decidedAt) : undefined,
128
+ };
129
+ }
130
+ }
131
+ //# sourceMappingURL=redis-queue-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-queue-backend.js","sourceRoot":"","sources":["../src/redis-queue-backend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Command } from "commander";
2
+ import type { DispatchService } from "./dispatch-service.js";
3
+ import type { SessionApi } from "./types.js";
4
+ export interface AiCompanyCliDeps {
5
+ program: Command;
6
+ dispatchService: Pick<DispatchService, "dispatch" | "status" | "result">;
7
+ session: SessionApi;
8
+ log: (msg: string) => void;
9
+ }
10
+ export declare function registerAiCompanyCli(deps: AiCompanyCliDeps): void;
11
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;IACzE,OAAO,EAAE,UAAU,CAAC;IACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAuFjE"}