@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.
- package/CHANGELOG.md +807 -0
- package/LICENSE +8 -0
- package/README.md +291 -0
- package/assets/knowledge/.gitkeep +0 -0
- package/assets/offices/architecture/README.md +32 -0
- package/assets/offices/engineering/README.md +53 -0
- package/assets/offices/governance/README.md +30 -0
- package/assets/offices/product/README.md +37 -0
- package/assets/organization/organization.json +260 -0
- package/assets/organization/validation.md +107 -0
- package/assets/prompts/.gitkeep +0 -0
- package/assets/templates/.gitkeep +0 -0
- package/assets/workers/architect/AGENTS.md +49 -0
- package/assets/workers/architect/SOUL.md +21 -0
- package/assets/workers/architect/config.json +7 -0
- package/assets/workers/backend-engineer/AGENTS.md +67 -0
- package/assets/workers/backend-engineer/HEARTBEAT.md +5 -0
- package/assets/workers/backend-engineer/IDENTITY.md +27 -0
- package/assets/workers/backend-engineer/SOUL.md +24 -0
- package/assets/workers/backend-engineer/TOOLS.md +44 -0
- package/assets/workers/backend-engineer/USER.md +21 -0
- package/assets/workers/backend-engineer/company/scripts/wp3/harness-spec.md +31 -0
- package/assets/workers/backend-engineer/company/scripts/wp3/lib/semver-range.js +81 -0
- package/assets/workers/backend-engineer/company/scripts/wp3/lib/test-mr4.js +6 -0
- package/assets/workers/backend-engineer/config.json +7 -0
- package/assets/workers/backend-engineer/openclaw-workspace-state.json +4 -0
- package/assets/workers/designer/AGENTS.md +49 -0
- package/assets/workers/designer/SOUL.md +20 -0
- package/assets/workers/designer/config.json +7 -0
- package/assets/workers/dispatcher/AGENTS.md +158 -0
- package/assets/workers/dispatcher/HEARTBEAT.md +5 -0
- package/assets/workers/dispatcher/IDENTITY.md +6 -0
- package/assets/workers/dispatcher/ROUTING.md +136 -0
- package/assets/workers/dispatcher/SOUL.md +18 -0
- package/assets/workers/dispatcher/TOOLS.md +32 -0
- package/assets/workers/dispatcher/USER.md +15 -0
- package/assets/workers/dispatcher/config.json +7 -0
- package/assets/workers/dispatcher/openclaw-workspace-state.json +4 -0
- package/assets/workers/frontend-engineer/AGENTS.md +53 -0
- package/assets/workers/frontend-engineer/SOUL.md +23 -0
- package/assets/workers/frontend-engineer/config.json +7 -0
- package/assets/workers/governor/AGENTS.md +57 -0
- package/assets/workers/governor/SOUL.md +20 -0
- package/assets/workers/governor/config.json +7 -0
- package/assets/workers/infrastructure-engineer/AGENTS.md +51 -0
- package/assets/workers/infrastructure-engineer/SOUL.md +21 -0
- package/assets/workers/infrastructure-engineer/config.json +7 -0
- package/assets/workers/product-manager/AGENTS.md +52 -0
- package/assets/workers/product-manager/HEARTBEAT.md +5 -0
- package/assets/workers/product-manager/IDENTITY.md +27 -0
- package/assets/workers/product-manager/SOUL.md +20 -0
- package/assets/workers/product-manager/TOOLS.md +44 -0
- package/assets/workers/product-manager/USER.md +21 -0
- package/assets/workers/product-manager/config.json +7 -0
- package/assets/workers/product-manager/openclaw-workspace-state.json +4 -0
- package/assets/workers/qa-engineer/AGENTS.md +50 -0
- package/assets/workers/qa-engineer/HEARTBEAT.md +5 -0
- package/assets/workers/qa-engineer/IDENTITY.md +27 -0
- package/assets/workers/qa-engineer/SOUL.md +22 -0
- package/assets/workers/qa-engineer/TOOLS.md +44 -0
- package/assets/workers/qa-engineer/USER.md +21 -0
- package/assets/workers/qa-engineer/config.json +7 -0
- package/assets/workers/qa-engineer/openclaw-workspace-state.json +4 -0
- package/assets/workers/researcher/AGENTS.md +50 -0
- package/assets/workers/researcher/HEARTBEAT.md +5 -0
- package/assets/workers/researcher/IDENTITY.md +27 -0
- package/assets/workers/researcher/SOUL.md +20 -0
- package/assets/workers/researcher/TOOLS.md +44 -0
- package/assets/workers/researcher/USER.md +21 -0
- package/assets/workers/researcher/config.json +7 -0
- package/assets/workers/researcher/openclaw-workspace-state.json +4 -0
- package/config/offices.json +19 -0
- package/config/policies.json +10 -0
- package/config/workflows.json +9 -0
- package/dist/audit-logger.d.ts +49 -0
- package/dist/audit-logger.d.ts.map +1 -0
- package/dist/audit-logger.js +131 -0
- package/dist/audit-logger.js.map +1 -0
- package/dist/cli.d.ts +17 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +218 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/aicompany.d.ts +12 -0
- package/dist/commands/aicompany.d.ts.map +1 -0
- package/dist/commands/aicompany.js +101 -0
- package/dist/commands/aicompany.js.map +1 -0
- package/dist/decision-queue.d.ts +31 -0
- package/dist/decision-queue.d.ts.map +1 -0
- package/dist/decision-queue.js +86 -0
- package/dist/decision-queue.js.map +1 -0
- package/dist/dispatch-service.d.ts +43 -0
- package/dist/dispatch-service.d.ts.map +1 -0
- package/dist/dispatch-service.js +569 -0
- package/dist/dispatch-service.js.map +1 -0
- package/dist/dispatcher.d.ts +24 -0
- package/dist/dispatcher.d.ts.map +1 -0
- package/dist/dispatcher.js +84 -0
- package/dist/dispatcher.js.map +1 -0
- package/dist/file-queue-backend.d.ts +16 -0
- package/dist/file-queue-backend.d.ts.map +1 -0
- package/dist/file-queue-backend.js +93 -0
- package/dist/file-queue-backend.js.map +1 -0
- package/dist/gateway.d.ts +14 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +138 -0
- package/dist/gateway.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +277 -0
- package/dist/index.js.map +1 -0
- package/dist/lease-provider.d.ts +31 -0
- package/dist/lease-provider.d.ts.map +1 -0
- package/dist/lease-provider.js +4 -0
- package/dist/lease-provider.js.map +1 -0
- package/dist/memory-lease-provider.d.ts +10 -0
- package/dist/memory-lease-provider.d.ts.map +1 -0
- package/dist/memory-lease-provider.js +54 -0
- package/dist/memory-lease-provider.js.map +1 -0
- package/dist/memory-queue-backend.d.ts +16 -0
- package/dist/memory-queue-backend.d.ts.map +1 -0
- package/dist/memory-queue-backend.js +93 -0
- package/dist/memory-queue-backend.js.map +1 -0
- package/dist/metrics-registry.d.ts +58 -0
- package/dist/metrics-registry.d.ts.map +1 -0
- package/dist/metrics-registry.js +195 -0
- package/dist/metrics-registry.js.map +1 -0
- package/dist/openclaw.plugin.json +29 -0
- package/dist/org-engine.d.ts +134 -0
- package/dist/org-engine.d.ts.map +1 -0
- package/dist/org-engine.js +129 -0
- package/dist/org-engine.js.map +1 -0
- package/dist/pipeline-checkpoint.d.ts +44 -0
- package/dist/pipeline-checkpoint.d.ts.map +1 -0
- package/dist/pipeline-checkpoint.js +90 -0
- package/dist/pipeline-checkpoint.js.map +1 -0
- package/dist/pipeline-engine.d.ts +53 -0
- package/dist/pipeline-engine.d.ts.map +1 -0
- package/dist/pipeline-engine.js +47 -0
- package/dist/pipeline-engine.js.map +1 -0
- package/dist/prompt-assembler.d.ts +13 -0
- package/dist/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt-assembler.js +84 -0
- package/dist/prompt-assembler.js.map +1 -0
- package/dist/queue-backend.d.ts +44 -0
- package/dist/queue-backend.d.ts.map +1 -0
- package/dist/queue-backend.js +4 -0
- package/dist/queue-backend.js.map +1 -0
- package/dist/redis-lease-provider.d.ts +16 -0
- package/dist/redis-lease-provider.d.ts.map +1 -0
- package/dist/redis-lease-provider.js +96 -0
- package/dist/redis-lease-provider.js.map +1 -0
- package/dist/redis-queue-backend.d.ts +23 -0
- package/dist/redis-queue-backend.d.ts.map +1 -0
- package/dist/redis-queue-backend.js +131 -0
- package/dist/redis-queue-backend.js.map +1 -0
- package/dist/src/cli.d.ts +11 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +100 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/dispatch-service.d.ts +25 -0
- package/dist/src/dispatch-service.d.ts.map +1 -0
- package/dist/src/dispatch-service.js +201 -0
- package/dist/src/dispatch-service.js.map +1 -0
- package/dist/src/dispatcher.d.ts +23 -0
- package/dist/src/dispatcher.d.ts.map +1 -0
- package/dist/src/dispatcher.js +66 -0
- package/dist/src/dispatcher.js.map +1 -0
- package/dist/src/gateway.d.ts +10 -0
- package/dist/src/gateway.d.ts.map +1 -0
- package/dist/src/gateway.js +66 -0
- package/dist/src/gateway.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +85 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/org-engine.d.ts +134 -0
- package/dist/src/org-engine.d.ts.map +1 -0
- package/dist/src/org-engine.js +129 -0
- package/dist/src/org-engine.js.map +1 -0
- package/dist/src/pipeline-engine.d.ts +53 -0
- package/dist/src/pipeline-engine.d.ts.map +1 -0
- package/dist/src/pipeline-engine.js +47 -0
- package/dist/src/pipeline-engine.js.map +1 -0
- package/dist/src/prompt-assembler.d.ts +13 -0
- package/dist/src/prompt-assembler.d.ts.map +1 -0
- package/dist/src/prompt-assembler.js +84 -0
- package/dist/src/prompt-assembler.js.map +1 -0
- package/dist/src/task-state.d.ts +27 -0
- package/dist/src/task-state.d.ts.map +1 -0
- package/dist/src/task-state.js +49 -0
- package/dist/src/task-state.js.map +1 -0
- package/dist/src/tools.d.ts +9 -0
- package/dist/src/tools.d.ts.map +1 -0
- package/dist/src/tools.js +107 -0
- package/dist/src/tools.js.map +1 -0
- package/dist/src/types.d.ts +99 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +4 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/validation.d.ts +11 -0
- package/dist/src/validation.d.ts.map +1 -0
- package/dist/src/validation.js +69 -0
- package/dist/src/validation.js.map +1 -0
- package/dist/src/workboard-gateway.d.ts +82 -0
- package/dist/src/workboard-gateway.d.ts.map +1 -0
- package/dist/src/workboard-gateway.js +76 -0
- package/dist/src/workboard-gateway.js.map +1 -0
- package/dist/src/worker-engine.d.ts +38 -0
- package/dist/src/worker-engine.d.ts.map +1 -0
- package/dist/src/worker-engine.js +73 -0
- package/dist/src/worker-engine.js.map +1 -0
- package/dist/task-state.d.ts +27 -0
- package/dist/task-state.d.ts.map +1 -0
- package/dist/task-state.js +62 -0
- package/dist/task-state.js.map +1 -0
- package/dist/tools.d.ts +11 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +183 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +11 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +69 -0
- package/dist/validation.js.map +1 -0
- package/dist/workboard-gateway.d.ts +82 -0
- package/dist/workboard-gateway.d.ts.map +1 -0
- package/dist/workboard-gateway.js +76 -0
- package/dist/workboard-gateway.js.map +1 -0
- package/dist/worker-engine.d.ts +38 -0
- package/dist/worker-engine.d.ts.map +1 -0
- package/dist/worker-engine.js +73 -0
- package/dist/worker-engine.js.map +1 -0
- package/openclaw.plugin.json +42 -0
- 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 @@
|
|
|
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"}
|