@adamancyzhang/claude-orchestrator 0.3.3 → 0.4.1
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/README.md +203 -269
- package/dist/cli/commands.d.ts +0 -10
- package/dist/cli/commands.js +1 -184
- package/dist/cli/commands.js.map +1 -1
- package/dist/config.d.ts +39 -0
- package/dist/config.js +43 -2
- package/dist/config.js.map +1 -1
- package/dist/email-validator/__tests__/domain.test.d.ts +1 -0
- package/dist/email-validator/__tests__/domain.test.js +128 -0
- package/dist/email-validator/__tests__/domain.test.js.map +1 -0
- package/dist/email-validator/__tests__/local-part.test.d.ts +1 -0
- package/dist/email-validator/__tests__/local-part.test.js +110 -0
- package/dist/email-validator/__tests__/local-part.test.js.map +1 -0
- package/dist/email-validator/__tests__/parser.test.d.ts +1 -0
- package/dist/email-validator/__tests__/parser.test.js +161 -0
- package/dist/email-validator/__tests__/parser.test.js.map +1 -0
- package/dist/email-validator/__tests__/validator.test.d.ts +1 -0
- package/dist/email-validator/__tests__/validator.test.js +152 -0
- package/dist/email-validator/__tests__/validator.test.js.map +1 -0
- package/dist/email-validator/diagnostics.d.ts +3 -0
- package/dist/email-validator/diagnostics.js +34 -0
- package/dist/email-validator/diagnostics.js.map +1 -0
- package/dist/email-validator/domain.d.ts +2 -0
- package/dist/email-validator/domain.js +119 -0
- package/dist/email-validator/domain.js.map +1 -0
- package/dist/email-validator/index.d.ts +2 -0
- package/dist/email-validator/index.js +2 -0
- package/dist/email-validator/index.js.map +1 -0
- package/dist/email-validator/local-part.d.ts +2 -0
- package/dist/email-validator/local-part.js +67 -0
- package/dist/email-validator/local-part.js.map +1 -0
- package/dist/email-validator/parser.d.ts +9 -0
- package/dist/email-validator/parser.js +120 -0
- package/dist/email-validator/parser.js.map +1 -0
- package/dist/email-validator/types.d.ts +24 -0
- package/dist/email-validator/types.js +2 -0
- package/dist/email-validator/types.js.map +1 -0
- package/dist/email-validator/validator.d.ts +9 -0
- package/dist/email-validator/validator.js +51 -0
- package/dist/email-validator/validator.js.map +1 -0
- package/dist/executor/runner.d.ts +19 -2
- package/dist/executor/runner.js +29 -4
- package/dist/executor/runner.js.map +1 -1
- package/dist/executor/template.d.ts +3 -1
- package/dist/executor/template.js +19 -16
- package/dist/executor/template.js.map +1 -1
- package/dist/index.js +11 -34
- package/dist/index.js.map +1 -1
- package/dist/leader/chain-router.d.ts +10 -2
- package/dist/leader/chain-router.js +167 -10
- package/dist/leader/chain-router.js.map +1 -1
- package/dist/leader/event-bus.d.ts +1 -1
- package/dist/leader/event-bus.js +2 -1
- package/dist/leader/event-bus.js.map +1 -1
- package/dist/leader/index.d.ts +7 -0
- package/dist/leader/index.js +99 -8
- package/dist/leader/index.js.map +1 -1
- package/dist/leader/merge-validator.d.ts +25 -0
- package/dist/leader/merge-validator.js +105 -0
- package/dist/leader/merge-validator.js.map +1 -0
- package/dist/leader/state.d.ts +20 -0
- package/dist/leader/state.js +77 -2
- package/dist/leader/state.js.map +1 -1
- package/dist/leader/stream-tailer.d.ts +12 -0
- package/dist/leader/stream-tailer.js +58 -0
- package/dist/leader/stream-tailer.js.map +1 -0
- package/dist/leader/tui.d.ts +8 -0
- package/dist/leader/tui.js +245 -17
- package/dist/leader/tui.js.map +1 -1
- package/dist/leader/watcher.js +12 -0
- package/dist/leader/watcher.js.map +1 -1
- package/dist/models/schemas.d.ts +28 -6
- package/dist/models/schemas.js +8 -0
- package/dist/models/schemas.js.map +1 -1
- package/dist/modules/task-queue.js +4 -0
- package/dist/modules/task-queue.js.map +1 -1
- package/dist/orchestrator/init-checker.d.ts +33 -0
- package/dist/orchestrator/init-checker.js +297 -0
- package/dist/orchestrator/init-checker.js.map +1 -0
- package/dist/orchestrator/run.d.ts +7 -0
- package/dist/orchestrator/run.js +126 -0
- package/dist/orchestrator/run.js.map +1 -0
- package/dist/skills/claude-orchestrator/SKILL.md +75 -217
- package/dist/templates/agents/worker-accept.md +48 -0
- package/dist/templates/agents/worker-build.md +38 -0
- package/dist/templates/agents/worker-commit-message.md +12 -0
- package/dist/templates/agents/worker-decompose.md +40 -0
- package/dist/templates/agents/worker-evaluate-format-hint.md +7 -0
- package/dist/templates/agents/worker-evaluate.md +49 -0
- package/dist/templates/agents/worker-identity.md +7 -0
- package/dist/templates/agents/worker-merge-decision.md +12 -0
- package/dist/templates/agents/worker-plan.md +36 -0
- package/dist/templates/agents/worker-review.md +42 -0
- package/dist/templates/agents/worker-task-doc.md +13 -0
- package/dist/templates/agents/worker-verify.md +44 -0
- package/dist/templates/claude-memory/personal-claude-accepter.md +17 -0
- package/dist/templates/claude-memory/personal-claude-builder.md +24 -0
- package/dist/templates/claude-memory/personal-claude-planner.md +22 -0
- package/dist/templates/claude-memory/personal-claude-reviewer.md +25 -0
- package/dist/templates/claude-memory/personal-claude-verifier.md +24 -0
- package/dist/templates/claude-memory/team-claude.md +61 -0
- package/dist/templates/user-global-claude.md +65 -0
- package/dist/utils/console-capture.d.ts +2 -0
- package/dist/utils/console-capture.js +42 -0
- package/dist/utils/console-capture.js.map +1 -0
- package/dist/utils/exec.d.ts +2 -6
- package/dist/utils/exec.js +48 -29
- package/dist/utils/exec.js.map +1 -1
- package/dist/utils/json.d.ts +5 -0
- package/dist/utils/json.js +17 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/logger.d.ts +1 -0
- package/dist/utils/logger.js +3 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/worker/child-runner.d.ts +12 -0
- package/dist/worker/child-runner.js +115 -0
- package/dist/worker/child-runner.js.map +1 -0
- package/dist/worker/child.d.ts +2 -0
- package/dist/worker/child.js +8 -0
- package/dist/worker/child.js.map +1 -0
- package/dist/worker/commit-checker.d.ts +21 -0
- package/dist/worker/commit-checker.js +81 -0
- package/dist/worker/commit-checker.js.map +1 -0
- package/dist/worker/evaluator.d.ts +3 -4
- package/dist/worker/evaluator.js +15 -50
- package/dist/worker/evaluator.js.map +1 -1
- package/dist/worker/watcher.d.ts +5 -1
- package/dist/worker/watcher.js +44 -9
- package/dist/worker/watcher.js.map +1 -1
- package/dist/worker/worktree-initializer.d.ts +10 -0
- package/dist/worker/worktree-initializer.js +238 -0
- package/dist/worker/worktree-initializer.js.map +1 -0
- package/package.json +2 -2
- package/dist/templates/worker-accept.md +0 -46
- package/dist/templates/worker-build.md +0 -45
- package/dist/templates/worker-decompose.md +0 -67
- package/dist/templates/worker-evaluate.md +0 -41
- package/dist/templates/worker-plan.md +0 -43
- package/dist/templates/worker-review.md +0 -46
- package/dist/templates/worker-verify.md +0 -47
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { ZkClient } from "../zk/client.js";
|
|
4
|
+
import { InstanceRegistry } from "../modules/registry.js";
|
|
5
|
+
import { HookEngine } from "../hooks/engine.js";
|
|
6
|
+
import { TemplateEngine } from "../executor/template.js";
|
|
7
|
+
import { ClaudeRunner } from "../executor/runner.js";
|
|
8
|
+
import { SelfEvaluator } from "./evaluator.js";
|
|
9
|
+
import { WorkerWatcher } from "./watcher.js";
|
|
10
|
+
import { CommitChecker } from "./commit-checker.js";
|
|
11
|
+
import { Logger } from "../utils/logger.js";
|
|
12
|
+
import { saveInstanceId } from "../config.js";
|
|
13
|
+
export async function startWorkerChild(config) {
|
|
14
|
+
const logger = new Logger(`Worker-${config.name}`);
|
|
15
|
+
// 1. Switch to worktree directory
|
|
16
|
+
process.chdir(config.worktreePath);
|
|
17
|
+
logger.info(`Working in ${config.worktreePath}`);
|
|
18
|
+
// 2. Connect to ZK
|
|
19
|
+
const zk = new ZkClient(config.zkHosts);
|
|
20
|
+
await zk.connect();
|
|
21
|
+
// 3. Register instance (EPHEMERAL) with worktree metadata
|
|
22
|
+
const registry = new InstanceRegistry(zk);
|
|
23
|
+
const instance = await registry.register(config.name, config.role, config.instanceId);
|
|
24
|
+
// Update instance with worktree metadata
|
|
25
|
+
try {
|
|
26
|
+
await zk.updateInstance(instance.id, {
|
|
27
|
+
...instance,
|
|
28
|
+
worktree_name: config.name,
|
|
29
|
+
worktree_path: config.worktreePath,
|
|
30
|
+
worktree_branch: config.branch,
|
|
31
|
+
pid: process.pid,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Instance may have been deleted or session expired
|
|
36
|
+
}
|
|
37
|
+
saveInstanceId(instance.id);
|
|
38
|
+
// 4. Resolve leader instance ID for cache path
|
|
39
|
+
let leaderInstanceId = instance.id;
|
|
40
|
+
try {
|
|
41
|
+
const leaderData = await zk.getLeader();
|
|
42
|
+
if (leaderData?.instance_id) {
|
|
43
|
+
leaderInstanceId = leaderData.instance_id;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Leader not running yet, use own instance id
|
|
48
|
+
}
|
|
49
|
+
// 5. Initialize modules
|
|
50
|
+
const projectRoot = path.resolve(config.worktreePath, "..", "..", "..");
|
|
51
|
+
const distTemplateDir = path.join(projectRoot, "dist", "templates");
|
|
52
|
+
const srcTemplateDir = path.join(projectRoot, "templates");
|
|
53
|
+
const builtinTemplateDir = fs.existsSync(distTemplateDir) ? distTemplateDir : srcTemplateDir;
|
|
54
|
+
const builtinAgentsDir = path.join(builtinTemplateDir, "agents");
|
|
55
|
+
const agentsDir = path.join(config.worktreePath, ".claude-orchestrator", "agents");
|
|
56
|
+
const templateEngine = new TemplateEngine(agentsDir, builtinAgentsDir);
|
|
57
|
+
await templateEngine.loadAll();
|
|
58
|
+
const identity = {
|
|
59
|
+
name: config.name,
|
|
60
|
+
role: config.role,
|
|
61
|
+
worktreePath: config.worktreePath,
|
|
62
|
+
worktreeBranch: config.branch,
|
|
63
|
+
instanceId: config.instanceId,
|
|
64
|
+
};
|
|
65
|
+
const runner = new ClaudeRunner(config.cliCommand, config.cacheDir, leaderInstanceId, config.worktreePath, identity, undefined, // identityTemplate — not needed, buildIdentityPrompt() is used instead
|
|
66
|
+
undefined, // onChunk — Worker uses quiet mode, no streaming callback
|
|
67
|
+
true);
|
|
68
|
+
const evaluator = new SelfEvaluator(templateEngine, runner);
|
|
69
|
+
const commitChecker = new CommitChecker(config.worktreePath, runner);
|
|
70
|
+
const hooks = new HookEngine();
|
|
71
|
+
const watcher = new WorkerWatcher(zk, instance.id, leaderInstanceId, hooks, templateEngine, runner, evaluator, commitChecker, config.worktreePath, config.branch);
|
|
72
|
+
// 6. Start watch loop (non-blocking after initial setup)
|
|
73
|
+
watcher.start().catch((err) => {
|
|
74
|
+
logger.error("Watcher error", err);
|
|
75
|
+
});
|
|
76
|
+
// 7. Start parent alive check
|
|
77
|
+
const parentCheck = startParentAliveCheck(watcher, zk);
|
|
78
|
+
// 8. Block until SIGINT or parent death
|
|
79
|
+
await new Promise((resolve) => {
|
|
80
|
+
process.on("SIGINT", () => {
|
|
81
|
+
clearInterval(parentCheck);
|
|
82
|
+
watcher.stop();
|
|
83
|
+
resolve();
|
|
84
|
+
});
|
|
85
|
+
process.on("SIGTERM", () => {
|
|
86
|
+
clearInterval(parentCheck);
|
|
87
|
+
watcher.stop();
|
|
88
|
+
resolve();
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
// 9. Cleanup
|
|
92
|
+
try {
|
|
93
|
+
await registry.unregister(instance.id);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Already gone
|
|
97
|
+
}
|
|
98
|
+
await zk.disconnect();
|
|
99
|
+
logger.info("Unregistered. Goodbye.");
|
|
100
|
+
}
|
|
101
|
+
function startParentAliveCheck(watcher, zk) {
|
|
102
|
+
const parentPid = process.ppid;
|
|
103
|
+
const timer = setInterval(() => {
|
|
104
|
+
try {
|
|
105
|
+
process.kill(parentPid, 0);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
watcher.stop();
|
|
109
|
+
zk.disconnect();
|
|
110
|
+
process.exit(0);
|
|
111
|
+
}
|
|
112
|
+
}, 1000);
|
|
113
|
+
return timer;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=child-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-runner.js","sourceRoot":"","sources":["../../src/worker/child-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { startWorkerChild } from "./child-runner.js";
|
|
3
|
+
const config = JSON.parse(process.argv[2]);
|
|
4
|
+
startWorkerChild(config).catch((err) => {
|
|
5
|
+
console.error("Worker child fatal error:", err);
|
|
6
|
+
process.exit(1);
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=child.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child.js","sourceRoot":"","sources":["../../src/worker/child.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAoB,MAAM,mBAAmB,CAAC;AAEvE,MAAM,MAAM,GAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACrC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ClaudeRunner } from "../executor/runner.js";
|
|
2
|
+
export interface CommitResult {
|
|
3
|
+
sha: string;
|
|
4
|
+
message: string;
|
|
5
|
+
changedFiles: string[];
|
|
6
|
+
untrackedFiles: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class CommitChecker {
|
|
9
|
+
private worktreePath;
|
|
10
|
+
private runner;
|
|
11
|
+
private commitMsgTemplate?;
|
|
12
|
+
private logger;
|
|
13
|
+
constructor(worktreePath: string, runner: ClaudeRunner, commitMsgTemplate?: string | undefined);
|
|
14
|
+
check(taskContext: {
|
|
15
|
+
link: string;
|
|
16
|
+
taskTitle: string;
|
|
17
|
+
taskDescription: string;
|
|
18
|
+
}, resumeSessionId?: string): Promise<CommitResult | null>;
|
|
19
|
+
private parseStatus;
|
|
20
|
+
private generateCommitMessage;
|
|
21
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import { execSync } from "node:child_process";
|
|
3
|
+
import { Logger } from "../utils/logger.js";
|
|
4
|
+
export class CommitChecker {
|
|
5
|
+
worktreePath;
|
|
6
|
+
runner;
|
|
7
|
+
commitMsgTemplate;
|
|
8
|
+
logger = new Logger("CommitChecker");
|
|
9
|
+
constructor(worktreePath, runner, commitMsgTemplate) {
|
|
10
|
+
this.worktreePath = worktreePath;
|
|
11
|
+
this.runner = runner;
|
|
12
|
+
this.commitMsgTemplate = commitMsgTemplate;
|
|
13
|
+
}
|
|
14
|
+
async check(taskContext, resumeSessionId) {
|
|
15
|
+
try {
|
|
16
|
+
const statusOutput = execSync("git status --porcelain", {
|
|
17
|
+
cwd: this.worktreePath,
|
|
18
|
+
encoding: "utf-8",
|
|
19
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
20
|
+
});
|
|
21
|
+
if (!statusOutput.trim()) {
|
|
22
|
+
this.logger.info("No changes to commit");
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const { changed, untracked } = this.parseStatus(statusOutput);
|
|
26
|
+
const commitMsg = await this.generateCommitMessage(changed, untracked, taskContext, resumeSessionId);
|
|
27
|
+
execSync("git add -A", { cwd: this.worktreePath, stdio: "pipe" });
|
|
28
|
+
execSync(`git commit -m "${commitMsg.replace(/"/g, '\\"')}"`, {
|
|
29
|
+
cwd: this.worktreePath,
|
|
30
|
+
stdio: "pipe",
|
|
31
|
+
});
|
|
32
|
+
const sha = execSync("git rev-parse HEAD", {
|
|
33
|
+
cwd: this.worktreePath,
|
|
34
|
+
encoding: "utf-8",
|
|
35
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
36
|
+
}).trim();
|
|
37
|
+
this.logger.info(`Committed ${sha.slice(0, 7)}: ${commitMsg}`);
|
|
38
|
+
return { sha, message: commitMsg, changedFiles: changed, untrackedFiles: untracked };
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
this.logger.error("Commit check failed", err);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
parseStatus(statusOutput) {
|
|
46
|
+
const changed = [];
|
|
47
|
+
const untracked = [];
|
|
48
|
+
for (const line of statusOutput.trim().split("\n")) {
|
|
49
|
+
if (!line)
|
|
50
|
+
continue;
|
|
51
|
+
const status = line.slice(0, 2);
|
|
52
|
+
const file = line.slice(3);
|
|
53
|
+
if (status === "??") {
|
|
54
|
+
untracked.push(file);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
changed.push(`${status.trim()} ${file}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { changed, untracked };
|
|
61
|
+
}
|
|
62
|
+
async generateCommitMessage(changed, untracked, ctx, resumeSessionId) {
|
|
63
|
+
const template = this.commitMsgTemplate ?? "";
|
|
64
|
+
const prompt = template
|
|
65
|
+
.replace(/\{\{changed_files\}\}/g, changed.map(f => ` ${f}`).join("\n"))
|
|
66
|
+
.replace(/\{\{untracked_files\}\}/g, untracked.map(f => ` ${f}`).join("\n"))
|
|
67
|
+
.replace(/\{\{task_title\}\}/g, ctx.taskTitle)
|
|
68
|
+
.replace(/\{\{link\}\}/g, ctx.link);
|
|
69
|
+
const uniqueKey = `commit-${Date.now().toString(36)}`;
|
|
70
|
+
const logPath = this.runner.logPath(uniqueKey);
|
|
71
|
+
await this.runner.run(prompt, logPath, { resumeSessionId });
|
|
72
|
+
try {
|
|
73
|
+
const output = await fs.promises.readFile(logPath, "utf-8");
|
|
74
|
+
return output.trim().split("\n")[0].slice(0, 72);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return `chore: auto-commit ${ctx.link} task`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=commit-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-checker.js","sourceRoot":"","sources":["../../src/worker/commit-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,9 @@ declare const CHAIN_LINKS: string[];
|
|
|
4
4
|
export declare class SelfEvaluator {
|
|
5
5
|
private templateEngine;
|
|
6
6
|
private runner;
|
|
7
|
-
private instanceName;
|
|
8
|
-
private instanceRole;
|
|
9
7
|
private logger;
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
private formatHintTemplate;
|
|
9
|
+
constructor(templateEngine: TemplateEngine, runner: ClaudeRunner);
|
|
10
|
+
evaluate(link: string, msgVars: Record<string, string>, taskResultPath: string, uniqueKey: string, resumeSessionId?: string): Promise<string>;
|
|
12
11
|
}
|
|
13
12
|
export { CHAIN_LINKS };
|
package/dist/worker/evaluator.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import { Logger } from "../utils/logger.js";
|
|
3
3
|
import { EvalDecisionSchema } from "../models/schemas.js";
|
|
4
|
+
import { extractJson } from "../utils/json.js";
|
|
4
5
|
const CHAIN_LINKS = ["plan", "build", "verify", "review", "accept"];
|
|
5
6
|
const MAX_RETRIES = 3;
|
|
6
7
|
const NEXT_LINKS = {
|
|
@@ -10,60 +11,21 @@ const NEXT_LINKS = {
|
|
|
10
11
|
export class SelfEvaluator {
|
|
11
12
|
templateEngine;
|
|
12
13
|
runner;
|
|
13
|
-
instanceName;
|
|
14
|
-
instanceRole;
|
|
15
14
|
logger = new Logger("SelfEvaluator");
|
|
16
|
-
|
|
15
|
+
formatHintTemplate = null;
|
|
16
|
+
constructor(templateEngine, runner) {
|
|
17
17
|
this.templateEngine = templateEngine;
|
|
18
18
|
this.runner = runner;
|
|
19
|
-
this.instanceName = instanceName;
|
|
20
|
-
this.instanceRole = instanceRole;
|
|
21
19
|
}
|
|
22
|
-
async evaluate(link, msgVars, taskResultPath, uniqueKey) {
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
evalTemplate = await this.templateEngine.loadFile("worker-evaluate.md");
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
evalTemplate = [
|
|
29
|
-
`You are {{name}}, a Worker with role {{preset_role}}.`,
|
|
30
|
-
`Evaluate your own output for the {{link}} task and decide the next step.`,
|
|
31
|
-
``,
|
|
32
|
-
`## Task`,
|
|
33
|
-
`- **Title**: {{task_title}}`,
|
|
34
|
-
`- **Description**: {{task_description}}`,
|
|
35
|
-
`- **Criteria**: {{task_criteria}}`,
|
|
36
|
-
``,
|
|
37
|
-
`## Your Result`,
|
|
38
|
-
`Read the result from {{task_result_path}}.`,
|
|
39
|
-
``,
|
|
40
|
-
`## Output Format`,
|
|
41
|
-
`Write the evaluation result to {{result_path}}. Output exactly one JSON decision:`,
|
|
42
|
-
`\`\`\`json`,
|
|
43
|
-
`{"decision": "activate_next" | "feedback" | "close_chain", "reason": "...", "nextLink": "build|verify|review|accept"}`,
|
|
44
|
-
`\`\`\``,
|
|
45
|
-
`Output ONLY the JSON.`,
|
|
46
|
-
].join("\n");
|
|
47
|
-
}
|
|
20
|
+
async evaluate(link, msgVars, taskResultPath, uniqueKey, resumeSessionId) {
|
|
21
|
+
const evalTemplate = await this.templateEngine.loadFile("worker-evaluate.md");
|
|
48
22
|
const baseVars = {
|
|
49
|
-
name: this.instanceName,
|
|
50
|
-
preset_role: this.instanceRole,
|
|
51
23
|
link,
|
|
52
24
|
task_result_path: taskResultPath,
|
|
53
25
|
work_dir: "",
|
|
54
26
|
time: new Date().toISOString(),
|
|
55
27
|
...msgVars,
|
|
56
28
|
};
|
|
57
|
-
const formatHint = [
|
|
58
|
-
``,
|
|
59
|
-
`## IMPORTANT: Format Correction`,
|
|
60
|
-
`Your previous output was invalid JSON or did not match the required schema.`,
|
|
61
|
-
`You MUST output ONLY valid JSON with exactly these fields:`,
|
|
62
|
-
`\`\`\`json`,
|
|
63
|
-
`{"decision": "activate_next"|"feedback"|"close_chain", "reason": "<string>", "nextLink": "<string>", "feedback": "<string>"}`,
|
|
64
|
-
`\`\`\``,
|
|
65
|
-
`No markdown fences, no extra text, no trailing commas. Pure JSON only.`,
|
|
66
|
-
].join("\n");
|
|
67
29
|
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
|
68
30
|
const attemptKey = `${uniqueKey}-${attempt}`;
|
|
69
31
|
const evalResultPath = this.runner.evalResultPath(attemptKey);
|
|
@@ -73,19 +35,22 @@ export class SelfEvaluator {
|
|
|
73
35
|
result_path: evalResultPath,
|
|
74
36
|
});
|
|
75
37
|
if (attempt > 0) {
|
|
76
|
-
|
|
38
|
+
if (this.formatHintTemplate === null) {
|
|
39
|
+
this.formatHintTemplate = await this.templateEngine.loadFile("worker-evaluate-format-hint.md");
|
|
40
|
+
}
|
|
41
|
+
prompt += "\n\n" + this.formatHintTemplate;
|
|
77
42
|
}
|
|
78
43
|
this.logger.info(`Self-evaluation attempt ${attempt + 1}/${MAX_RETRIES}...`);
|
|
79
|
-
await this.runner.run(prompt, evalLogPath
|
|
44
|
+
await this.runner.run(prompt, evalLogPath, {
|
|
45
|
+
systemPrompt: this.runner.buildIdentityPrompt(),
|
|
46
|
+
resumeSessionId,
|
|
47
|
+
forkSession: true,
|
|
48
|
+
});
|
|
80
49
|
try {
|
|
81
50
|
const content = await fs.promises.readFile(evalResultPath, "utf-8");
|
|
82
51
|
if (!content.trim())
|
|
83
52
|
continue;
|
|
84
|
-
const
|
|
85
|
-
.replace(/```json\s*/g, "")
|
|
86
|
-
.replace(/```\s*/g, "")
|
|
87
|
-
.trim();
|
|
88
|
-
const parsed = JSON.parse(cleaned);
|
|
53
|
+
const parsed = JSON.parse(extractJson(content));
|
|
89
54
|
const validated = EvalDecisionSchema.parse(parsed);
|
|
90
55
|
return JSON.stringify(validated);
|
|
91
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/worker/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/worker/evaluator.ts"],"names":[],"mappings":"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"}
|
package/dist/worker/watcher.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { HookEngine } from "../hooks/engine.js";
|
|
|
3
3
|
import { TemplateEngine } from "../executor/template.js";
|
|
4
4
|
import { ClaudeRunner } from "../executor/runner.js";
|
|
5
5
|
import { SelfEvaluator } from "./evaluator.js";
|
|
6
|
+
import { CommitChecker } from "./commit-checker.js";
|
|
6
7
|
export declare class WorkerWatcher {
|
|
7
8
|
private zk;
|
|
8
9
|
private instanceId;
|
|
@@ -11,12 +12,15 @@ export declare class WorkerWatcher {
|
|
|
11
12
|
private templateEngine;
|
|
12
13
|
private runner;
|
|
13
14
|
private evaluator;
|
|
15
|
+
private commitChecker;
|
|
16
|
+
private worktreePath;
|
|
17
|
+
private worktreeBranch;
|
|
14
18
|
private inFlight;
|
|
15
19
|
private instanceName;
|
|
16
20
|
private instanceRole;
|
|
17
21
|
private logger;
|
|
18
22
|
stopped: boolean;
|
|
19
|
-
constructor(zk: ZkClient, instanceId: string, leaderInstanceId: string, hooks: HookEngine, templateEngine: TemplateEngine, runner: ClaudeRunner, evaluator: SelfEvaluator);
|
|
23
|
+
constructor(zk: ZkClient, instanceId: string, leaderInstanceId: string, hooks: HookEngine, templateEngine: TemplateEngine, runner: ClaudeRunner, evaluator: SelfEvaluator, commitChecker?: CommitChecker | null, worktreePath?: string, worktreeBranch?: string);
|
|
20
24
|
start(): Promise<void>;
|
|
21
25
|
private watchLoop;
|
|
22
26
|
private processMessage;
|
package/dist/worker/watcher.js
CHANGED
|
@@ -11,12 +11,15 @@ export class WorkerWatcher {
|
|
|
11
11
|
templateEngine;
|
|
12
12
|
runner;
|
|
13
13
|
evaluator;
|
|
14
|
+
commitChecker;
|
|
15
|
+
worktreePath;
|
|
16
|
+
worktreeBranch;
|
|
14
17
|
inFlight = new Set();
|
|
15
18
|
instanceName = "";
|
|
16
19
|
instanceRole = "";
|
|
17
20
|
logger = new Logger("WorkerWatcher");
|
|
18
21
|
stopped = false;
|
|
19
|
-
constructor(zk, instanceId, leaderInstanceId, hooks, templateEngine, runner, evaluator) {
|
|
22
|
+
constructor(zk, instanceId, leaderInstanceId, hooks, templateEngine, runner, evaluator, commitChecker = null, worktreePath = "", worktreeBranch = "") {
|
|
20
23
|
this.zk = zk;
|
|
21
24
|
this.instanceId = instanceId;
|
|
22
25
|
this.leaderInstanceId = leaderInstanceId;
|
|
@@ -24,6 +27,9 @@ export class WorkerWatcher {
|
|
|
24
27
|
this.templateEngine = templateEngine;
|
|
25
28
|
this.runner = runner;
|
|
26
29
|
this.evaluator = evaluator;
|
|
30
|
+
this.commitChecker = commitChecker;
|
|
31
|
+
this.worktreePath = worktreePath;
|
|
32
|
+
this.worktreeBranch = worktreeBranch;
|
|
27
33
|
}
|
|
28
34
|
async start() {
|
|
29
35
|
const instData = await this.zk.getInstance(this.instanceId);
|
|
@@ -64,20 +70,19 @@ export class WorkerWatcher {
|
|
|
64
70
|
this.inFlight.add(msgId);
|
|
65
71
|
const fromLabel = msg.from_name || msg.from_instance?.slice(0, 8) || "unknown";
|
|
66
72
|
const link = msg.link ?? "_generic";
|
|
67
|
-
const
|
|
73
|
+
const taskId = msg.task_id;
|
|
74
|
+
const uniqueKey = taskId || `task-${msgId}-${Date.now().toString(36)}`;
|
|
68
75
|
const logPath = this.runner.logPath(uniqueKey);
|
|
69
76
|
const resultPath = this.runner.resultPath(uniqueKey);
|
|
70
77
|
const template = this.templateEngine.get(link);
|
|
71
78
|
const prompt = template
|
|
72
79
|
? this.templateEngine.render(template, {
|
|
73
|
-
name: this.instanceName,
|
|
74
|
-
preset_role: this.instanceRole,
|
|
75
80
|
task_title: msg.task_title ?? "",
|
|
76
81
|
task_description: msg.task_description ?? msg.content,
|
|
77
82
|
task_criteria: msg.task_criteria ?? "",
|
|
78
83
|
task_doc_path: msg.task_doc_path ?? "",
|
|
79
84
|
result_path: resultPath,
|
|
80
|
-
work_dir:
|
|
85
|
+
work_dir: this.worktreePath,
|
|
81
86
|
time: new Date().toISOString(),
|
|
82
87
|
content: msg.content,
|
|
83
88
|
})
|
|
@@ -100,10 +105,21 @@ export class WorkerWatcher {
|
|
|
100
105
|
link: link !== "_generic" ? link : null,
|
|
101
106
|
};
|
|
102
107
|
this.hooks.fire("worker_message_start", hookCtx);
|
|
103
|
-
const result = await this.runner.run(prompt, logPath
|
|
108
|
+
const result = await this.runner.run(prompt, logPath, {
|
|
109
|
+
systemPrompt: this.runner.buildIdentityPrompt(),
|
|
110
|
+
});
|
|
104
111
|
this.hooks.fire("worker_message_end", { ...hookCtx, logPath, exitCode: result.code });
|
|
112
|
+
// Auto-commit changes for chain-link tasks
|
|
113
|
+
let commitResult = null;
|
|
114
|
+
if (link !== "_generic" && this.commitChecker) {
|
|
115
|
+
commitResult = await this.commitChecker.check({
|
|
116
|
+
link,
|
|
117
|
+
taskTitle: msg.task_title ?? link,
|
|
118
|
+
taskDescription: msg.task_description ?? msg.content,
|
|
119
|
+
}, result.sessionId);
|
|
120
|
+
}
|
|
105
121
|
if (link !== "_generic") {
|
|
106
|
-
await this.sendCompletionReport(link, msg, resultPath, uniqueKey);
|
|
122
|
+
await this.sendCompletionReport(link, msg, resultPath, uniqueKey, commitResult, result.sessionId);
|
|
107
123
|
}
|
|
108
124
|
try {
|
|
109
125
|
msg.read = true;
|
|
@@ -115,7 +131,7 @@ export class WorkerWatcher {
|
|
|
115
131
|
this.inFlight.delete(msgId);
|
|
116
132
|
this.logger.info(`Done. Log: ${logPath}`);
|
|
117
133
|
}
|
|
118
|
-
async sendCompletionReport(link, msg, resultPath, uniqueKey) {
|
|
134
|
+
async sendCompletionReport(link, msg, resultPath, uniqueKey, commitResult = null, mainSessionId) {
|
|
119
135
|
try {
|
|
120
136
|
let reportContent;
|
|
121
137
|
let reportLink = link;
|
|
@@ -136,11 +152,29 @@ export class WorkerWatcher {
|
|
|
136
152
|
task_doc_path: msg.task_doc_path ?? "",
|
|
137
153
|
content: msg.content,
|
|
138
154
|
};
|
|
139
|
-
reportContent = await this.evaluator.evaluate(link, msgVars, resultPath, uniqueKey);
|
|
155
|
+
reportContent = await this.evaluator.evaluate(link, msgVars, resultPath, uniqueKey, mainSessionId);
|
|
140
156
|
}
|
|
141
157
|
else {
|
|
142
158
|
reportContent = `Link: ${link}\nStatus: completed\nResult Path: ${resultPath}\nTask completed.`;
|
|
143
159
|
}
|
|
160
|
+
// Inject commit info into report content if available
|
|
161
|
+
if (commitResult) {
|
|
162
|
+
try {
|
|
163
|
+
const reportJson = JSON.parse(reportContent);
|
|
164
|
+
reportJson.commit = {
|
|
165
|
+
sha: commitResult.sha,
|
|
166
|
+
message: commitResult.message,
|
|
167
|
+
branch: this.worktreeBranch,
|
|
168
|
+
changed_files: commitResult.changedFiles,
|
|
169
|
+
untracked_files: commitResult.untrackedFiles,
|
|
170
|
+
};
|
|
171
|
+
reportContent = JSON.stringify(reportJson);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Content is not JSON, append commit info
|
|
175
|
+
reportContent += `\nCommit: ${commitResult.sha.slice(0, 7)} - ${commitResult.message}`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
144
178
|
await this.zk.createMessage(this.leaderInstanceId, {
|
|
145
179
|
type: "direct",
|
|
146
180
|
from_instance: this.instanceId,
|
|
@@ -152,6 +186,7 @@ export class WorkerWatcher {
|
|
|
152
186
|
read: false,
|
|
153
187
|
result_path: resultPath,
|
|
154
188
|
link: reportLink,
|
|
189
|
+
chain_id: msg.chain_id ?? null,
|
|
155
190
|
});
|
|
156
191
|
this.logger.info("Completion report sent.");
|
|
157
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/worker/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAiB,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/worker/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface WorktreeConfig {
|
|
2
|
+
name: string;
|
|
3
|
+
role: string;
|
|
4
|
+
worktreePath: string;
|
|
5
|
+
relativePath: string;
|
|
6
|
+
branch: string;
|
|
7
|
+
instanceId: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function getWorktreeBranch(name: string): string;
|
|
10
|
+
export declare function initializeWorktrees(projectRoot: string, workerCount: number): Promise<WorktreeConfig[]>;
|