@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.
Files changed (140) hide show
  1. package/README.md +203 -269
  2. package/dist/cli/commands.d.ts +0 -10
  3. package/dist/cli/commands.js +1 -184
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/config.d.ts +39 -0
  6. package/dist/config.js +43 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/email-validator/__tests__/domain.test.d.ts +1 -0
  9. package/dist/email-validator/__tests__/domain.test.js +128 -0
  10. package/dist/email-validator/__tests__/domain.test.js.map +1 -0
  11. package/dist/email-validator/__tests__/local-part.test.d.ts +1 -0
  12. package/dist/email-validator/__tests__/local-part.test.js +110 -0
  13. package/dist/email-validator/__tests__/local-part.test.js.map +1 -0
  14. package/dist/email-validator/__tests__/parser.test.d.ts +1 -0
  15. package/dist/email-validator/__tests__/parser.test.js +161 -0
  16. package/dist/email-validator/__tests__/parser.test.js.map +1 -0
  17. package/dist/email-validator/__tests__/validator.test.d.ts +1 -0
  18. package/dist/email-validator/__tests__/validator.test.js +152 -0
  19. package/dist/email-validator/__tests__/validator.test.js.map +1 -0
  20. package/dist/email-validator/diagnostics.d.ts +3 -0
  21. package/dist/email-validator/diagnostics.js +34 -0
  22. package/dist/email-validator/diagnostics.js.map +1 -0
  23. package/dist/email-validator/domain.d.ts +2 -0
  24. package/dist/email-validator/domain.js +119 -0
  25. package/dist/email-validator/domain.js.map +1 -0
  26. package/dist/email-validator/index.d.ts +2 -0
  27. package/dist/email-validator/index.js +2 -0
  28. package/dist/email-validator/index.js.map +1 -0
  29. package/dist/email-validator/local-part.d.ts +2 -0
  30. package/dist/email-validator/local-part.js +67 -0
  31. package/dist/email-validator/local-part.js.map +1 -0
  32. package/dist/email-validator/parser.d.ts +9 -0
  33. package/dist/email-validator/parser.js +120 -0
  34. package/dist/email-validator/parser.js.map +1 -0
  35. package/dist/email-validator/types.d.ts +24 -0
  36. package/dist/email-validator/types.js +2 -0
  37. package/dist/email-validator/types.js.map +1 -0
  38. package/dist/email-validator/validator.d.ts +9 -0
  39. package/dist/email-validator/validator.js +51 -0
  40. package/dist/email-validator/validator.js.map +1 -0
  41. package/dist/executor/runner.d.ts +19 -2
  42. package/dist/executor/runner.js +29 -4
  43. package/dist/executor/runner.js.map +1 -1
  44. package/dist/executor/template.d.ts +3 -1
  45. package/dist/executor/template.js +19 -16
  46. package/dist/executor/template.js.map +1 -1
  47. package/dist/index.js +11 -34
  48. package/dist/index.js.map +1 -1
  49. package/dist/leader/chain-router.d.ts +10 -2
  50. package/dist/leader/chain-router.js +167 -10
  51. package/dist/leader/chain-router.js.map +1 -1
  52. package/dist/leader/event-bus.d.ts +1 -1
  53. package/dist/leader/event-bus.js +2 -1
  54. package/dist/leader/event-bus.js.map +1 -1
  55. package/dist/leader/index.d.ts +7 -0
  56. package/dist/leader/index.js +99 -8
  57. package/dist/leader/index.js.map +1 -1
  58. package/dist/leader/merge-validator.d.ts +25 -0
  59. package/dist/leader/merge-validator.js +105 -0
  60. package/dist/leader/merge-validator.js.map +1 -0
  61. package/dist/leader/state.d.ts +20 -0
  62. package/dist/leader/state.js +77 -2
  63. package/dist/leader/state.js.map +1 -1
  64. package/dist/leader/stream-tailer.d.ts +12 -0
  65. package/dist/leader/stream-tailer.js +58 -0
  66. package/dist/leader/stream-tailer.js.map +1 -0
  67. package/dist/leader/tui.d.ts +8 -0
  68. package/dist/leader/tui.js +245 -17
  69. package/dist/leader/tui.js.map +1 -1
  70. package/dist/leader/watcher.js +12 -0
  71. package/dist/leader/watcher.js.map +1 -1
  72. package/dist/models/schemas.d.ts +28 -6
  73. package/dist/models/schemas.js +8 -0
  74. package/dist/models/schemas.js.map +1 -1
  75. package/dist/modules/task-queue.js +4 -0
  76. package/dist/modules/task-queue.js.map +1 -1
  77. package/dist/orchestrator/init-checker.d.ts +33 -0
  78. package/dist/orchestrator/init-checker.js +297 -0
  79. package/dist/orchestrator/init-checker.js.map +1 -0
  80. package/dist/orchestrator/run.d.ts +7 -0
  81. package/dist/orchestrator/run.js +126 -0
  82. package/dist/orchestrator/run.js.map +1 -0
  83. package/dist/skills/claude-orchestrator/SKILL.md +75 -217
  84. package/dist/templates/agents/worker-accept.md +48 -0
  85. package/dist/templates/agents/worker-build.md +38 -0
  86. package/dist/templates/agents/worker-commit-message.md +12 -0
  87. package/dist/templates/agents/worker-decompose.md +40 -0
  88. package/dist/templates/agents/worker-evaluate-format-hint.md +7 -0
  89. package/dist/templates/agents/worker-evaluate.md +49 -0
  90. package/dist/templates/agents/worker-identity.md +7 -0
  91. package/dist/templates/agents/worker-merge-decision.md +12 -0
  92. package/dist/templates/agents/worker-plan.md +36 -0
  93. package/dist/templates/agents/worker-review.md +42 -0
  94. package/dist/templates/agents/worker-task-doc.md +13 -0
  95. package/dist/templates/agents/worker-verify.md +44 -0
  96. package/dist/templates/claude-memory/personal-claude-accepter.md +17 -0
  97. package/dist/templates/claude-memory/personal-claude-builder.md +24 -0
  98. package/dist/templates/claude-memory/personal-claude-planner.md +22 -0
  99. package/dist/templates/claude-memory/personal-claude-reviewer.md +25 -0
  100. package/dist/templates/claude-memory/personal-claude-verifier.md +24 -0
  101. package/dist/templates/claude-memory/team-claude.md +61 -0
  102. package/dist/templates/user-global-claude.md +65 -0
  103. package/dist/utils/console-capture.d.ts +2 -0
  104. package/dist/utils/console-capture.js +42 -0
  105. package/dist/utils/console-capture.js.map +1 -0
  106. package/dist/utils/exec.d.ts +2 -6
  107. package/dist/utils/exec.js +48 -29
  108. package/dist/utils/exec.js.map +1 -1
  109. package/dist/utils/json.d.ts +5 -0
  110. package/dist/utils/json.js +17 -0
  111. package/dist/utils/json.js.map +1 -0
  112. package/dist/utils/logger.d.ts +1 -0
  113. package/dist/utils/logger.js +3 -0
  114. package/dist/utils/logger.js.map +1 -1
  115. package/dist/worker/child-runner.d.ts +12 -0
  116. package/dist/worker/child-runner.js +115 -0
  117. package/dist/worker/child-runner.js.map +1 -0
  118. package/dist/worker/child.d.ts +2 -0
  119. package/dist/worker/child.js +8 -0
  120. package/dist/worker/child.js.map +1 -0
  121. package/dist/worker/commit-checker.d.ts +21 -0
  122. package/dist/worker/commit-checker.js +81 -0
  123. package/dist/worker/commit-checker.js.map +1 -0
  124. package/dist/worker/evaluator.d.ts +3 -4
  125. package/dist/worker/evaluator.js +15 -50
  126. package/dist/worker/evaluator.js.map +1 -1
  127. package/dist/worker/watcher.d.ts +5 -1
  128. package/dist/worker/watcher.js +44 -9
  129. package/dist/worker/watcher.js.map +1 -1
  130. package/dist/worker/worktree-initializer.d.ts +10 -0
  131. package/dist/worker/worktree-initializer.js +238 -0
  132. package/dist/worker/worktree-initializer.js.map +1 -0
  133. package/package.json +2 -2
  134. package/dist/templates/worker-accept.md +0 -46
  135. package/dist/templates/worker-build.md +0 -45
  136. package/dist/templates/worker-decompose.md +0 -67
  137. package/dist/templates/worker-evaluate.md +0 -41
  138. package/dist/templates/worker-plan.md +0 -43
  139. package/dist/templates/worker-review.md +0 -46
  140. 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,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -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
- constructor(templateEngine: TemplateEngine, runner: ClaudeRunner, instanceName: string, instanceRole: string);
11
- evaluate(link: string, msgVars: Record<string, string>, taskResultPath: string, uniqueKey: string): Promise<string>;
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 };
@@ -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
- constructor(templateEngine, runner, instanceName, instanceRole) {
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
- let evalTemplate;
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
- prompt += formatHint;
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 cleaned = content.trim()
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":"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"}
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/worker/evaluator.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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 uniqueKey = `task-${msgId}-${Date.now().toString(36)}`;
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":"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"}
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[]>;