@adamancyzhang/claude-orchestrator 0.3.2 → 0.4.0
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 +198 -280
- 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 +22 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/executor/template.js +21 -3
- package/dist/executor/template.js.map +1 -1
- package/dist/index.js +9 -34
- package/dist/index.js.map +1 -1
- package/dist/leader/chain-router.d.ts +5 -1
- package/dist/leader/chain-router.js +90 -2
- package/dist/leader/chain-router.js.map +1 -1
- package/dist/leader/event-bus.d.ts +1 -1
- package/dist/leader/event-bus.js +1 -1
- package/dist/leader/event-bus.js.map +1 -1
- package/dist/leader/index.d.ts +7 -0
- package/dist/leader/index.js +5 -2
- package/dist/leader/index.js.map +1 -1
- package/dist/leader/merge-validator.d.ts +24 -0
- package/dist/leader/merge-validator.js +112 -0
- package/dist/leader/merge-validator.js.map +1 -0
- package/dist/leader/state.d.ts +17 -0
- package/dist/leader/state.js +48 -2
- package/dist/leader/state.js.map +1 -1
- package/dist/leader/tui.d.ts +2 -0
- package/dist/leader/tui.js +140 -16
- 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 +15 -0
- package/dist/models/schemas.js +6 -1
- package/dist/models/schemas.js.map +1 -1
- package/dist/orchestrator/run.d.ts +6 -0
- package/dist/orchestrator/run.js +181 -0
- package/dist/orchestrator/run.js.map +1 -0
- package/dist/skills/CLAUDE.md +1 -1
- 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-decompose.md +40 -0
- package/dist/templates/agents/worker-evaluate.md +49 -0
- package/dist/templates/agents/worker-plan.md +36 -0
- package/dist/templates/agents/worker-review.md +42 -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/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 +99 -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 +20 -0
- package/dist/worker/commit-checker.js +87 -0
- package/dist/worker/commit-checker.js.map +1 -0
- package/dist/worker/watcher.d.ts +5 -1
- package/dist/worker/watcher.js +41 -4
- package/dist/worker/watcher.js.map +1 -1
- package/dist/worker/worktree-initializer.d.ts +10 -0
- package/dist/worker/worktree-initializer.js +235 -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
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);
|
|
@@ -77,9 +83,12 @@ export class WorkerWatcher {
|
|
|
77
83
|
task_criteria: msg.task_criteria ?? "",
|
|
78
84
|
task_doc_path: msg.task_doc_path ?? "",
|
|
79
85
|
result_path: resultPath,
|
|
80
|
-
work_dir:
|
|
86
|
+
work_dir: this.worktreePath,
|
|
81
87
|
time: new Date().toISOString(),
|
|
82
88
|
content: msg.content,
|
|
89
|
+
worktree_path: this.worktreePath,
|
|
90
|
+
worktree_branch: this.worktreeBranch,
|
|
91
|
+
instance_id: this.instanceId,
|
|
83
92
|
})
|
|
84
93
|
: msg.content;
|
|
85
94
|
this.logger.info(`Message from ${fromLabel} (${msg.type}): ${msg.content.slice(0, 200)}`);
|
|
@@ -102,8 +111,17 @@ export class WorkerWatcher {
|
|
|
102
111
|
this.hooks.fire("worker_message_start", hookCtx);
|
|
103
112
|
const result = await this.runner.run(prompt, logPath);
|
|
104
113
|
this.hooks.fire("worker_message_end", { ...hookCtx, logPath, exitCode: result.code });
|
|
114
|
+
// Auto-commit changes for chain-link tasks
|
|
115
|
+
let commitResult = null;
|
|
116
|
+
if (link !== "_generic" && this.commitChecker) {
|
|
117
|
+
commitResult = await this.commitChecker.check({
|
|
118
|
+
link,
|
|
119
|
+
taskTitle: msg.task_title ?? link,
|
|
120
|
+
taskDescription: msg.task_description ?? msg.content,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
105
123
|
if (link !== "_generic") {
|
|
106
|
-
await this.sendCompletionReport(link, msg, resultPath, uniqueKey);
|
|
124
|
+
await this.sendCompletionReport(link, msg, resultPath, uniqueKey, commitResult);
|
|
107
125
|
}
|
|
108
126
|
try {
|
|
109
127
|
msg.read = true;
|
|
@@ -115,7 +133,7 @@ export class WorkerWatcher {
|
|
|
115
133
|
this.inFlight.delete(msgId);
|
|
116
134
|
this.logger.info(`Done. Log: ${logPath}`);
|
|
117
135
|
}
|
|
118
|
-
async sendCompletionReport(link, msg, resultPath, uniqueKey) {
|
|
136
|
+
async sendCompletionReport(link, msg, resultPath, uniqueKey, commitResult = null) {
|
|
119
137
|
try {
|
|
120
138
|
let reportContent;
|
|
121
139
|
let reportLink = link;
|
|
@@ -141,6 +159,24 @@ export class WorkerWatcher {
|
|
|
141
159
|
else {
|
|
142
160
|
reportContent = `Link: ${link}\nStatus: completed\nResult Path: ${resultPath}\nTask completed.`;
|
|
143
161
|
}
|
|
162
|
+
// Inject commit info into report content if available
|
|
163
|
+
if (commitResult) {
|
|
164
|
+
try {
|
|
165
|
+
const reportJson = JSON.parse(reportContent);
|
|
166
|
+
reportJson.commit = {
|
|
167
|
+
sha: commitResult.sha,
|
|
168
|
+
message: commitResult.message,
|
|
169
|
+
branch: this.worktreeBranch,
|
|
170
|
+
changed_files: commitResult.changedFiles,
|
|
171
|
+
untracked_files: commitResult.untrackedFiles,
|
|
172
|
+
};
|
|
173
|
+
reportContent = JSON.stringify(reportJson);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Content is not JSON, append commit info
|
|
177
|
+
reportContent += `\nCommit: ${commitResult.sha.slice(0, 7)} - ${commitResult.message}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
144
180
|
await this.zk.createMessage(this.leaderInstanceId, {
|
|
145
181
|
type: "direct",
|
|
146
182
|
from_instance: this.instanceId,
|
|
@@ -152,6 +188,7 @@ export class WorkerWatcher {
|
|
|
152
188
|
read: false,
|
|
153
189
|
result_path: resultPath,
|
|
154
190
|
link: reportLink,
|
|
191
|
+
chain_id: msg.chain_id ?? null,
|
|
155
192
|
});
|
|
156
193
|
this.logger.info("Completion report sent.");
|
|
157
194
|
}
|
|
@@ -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[]>;
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { execSync } from "node:child_process";
|
|
4
|
+
import { loadProjectWorktreeConfig, saveProjectWorktreeConfig } from "../config.js";
|
|
5
|
+
import { Logger } from "../utils/logger.js";
|
|
6
|
+
const BUILTIN_NAMES = [
|
|
7
|
+
"Tom", "Jerry", "Lucy", "Thomas", "Jack", "Lisa",
|
|
8
|
+
"Alice", "Bob", "Charlie", "Diana", "Edward", "Fiona",
|
|
9
|
+
"George", "Helen", "Ivan", "Julia", "Kevin", "Linda",
|
|
10
|
+
"Mike", "Nancy",
|
|
11
|
+
];
|
|
12
|
+
const ROLE_PRIORITY = ["planner", "builder", "verifier", "reviewer", "accepter"];
|
|
13
|
+
const logger = new Logger("WorktreeInit");
|
|
14
|
+
function assignRoles(count) {
|
|
15
|
+
if (count <= ROLE_PRIORITY.length) {
|
|
16
|
+
return ROLE_PRIORITY.slice(0, count);
|
|
17
|
+
}
|
|
18
|
+
const roles = [...ROLE_PRIORITY];
|
|
19
|
+
let remaining = count - ROLE_PRIORITY.length;
|
|
20
|
+
while (remaining > 0) {
|
|
21
|
+
roles.push("builder");
|
|
22
|
+
remaining--;
|
|
23
|
+
}
|
|
24
|
+
return roles;
|
|
25
|
+
}
|
|
26
|
+
export function getWorktreeBranch(name) {
|
|
27
|
+
return `claude-orchestrator/${name}-workspace`;
|
|
28
|
+
}
|
|
29
|
+
function execGit(args, cwd) {
|
|
30
|
+
try {
|
|
31
|
+
return execSync(`git ${args}`, { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function scanExistingNames(projectRoot) {
|
|
38
|
+
const used = new Set();
|
|
39
|
+
const wtDir = path.join(projectRoot, ".claude-orchestrator", "worktree");
|
|
40
|
+
// 1. Scan existing worktree directories
|
|
41
|
+
if (fs.existsSync(wtDir)) {
|
|
42
|
+
for (const entry of await fs.promises.readdir(wtDir)) {
|
|
43
|
+
used.add(entry);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// 2. Scan existing worktree branches
|
|
47
|
+
const branches = execGit("branch -a", projectRoot);
|
|
48
|
+
const wtBranchPattern = /claude-orchestrator\/(.+)-workspace/;
|
|
49
|
+
for (const line of branches.split("\n")) {
|
|
50
|
+
const m = line.trim().match(wtBranchPattern);
|
|
51
|
+
if (m)
|
|
52
|
+
used.add(m[1]);
|
|
53
|
+
}
|
|
54
|
+
// 3. Scan config.json worktree records
|
|
55
|
+
const worktreeConfig = loadProjectWorktreeConfig();
|
|
56
|
+
for (const name of Object.keys(worktreeConfig)) {
|
|
57
|
+
used.add(name);
|
|
58
|
+
}
|
|
59
|
+
return used;
|
|
60
|
+
}
|
|
61
|
+
function generateFallbackNames(count, used) {
|
|
62
|
+
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
63
|
+
const result = [];
|
|
64
|
+
for (const letter of alphabet) {
|
|
65
|
+
if (result.length >= count)
|
|
66
|
+
break;
|
|
67
|
+
for (const suffix of ["", "ay", "ee", "ie"]) {
|
|
68
|
+
if (result.length >= count)
|
|
69
|
+
break;
|
|
70
|
+
const candidate = `${letter}${suffix}`;
|
|
71
|
+
if (!used.includes(candidate)) {
|
|
72
|
+
result.push(candidate);
|
|
73
|
+
used.push(candidate);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
function generateWorkerNames(count, usedNames) {
|
|
80
|
+
const roles = assignRoles(count);
|
|
81
|
+
const available = BUILTIN_NAMES.filter(n => !usedNames.has(n));
|
|
82
|
+
if (available.length >= count) {
|
|
83
|
+
return roles.map((role, i) => ({ name: available[i], role }));
|
|
84
|
+
}
|
|
85
|
+
const result = [];
|
|
86
|
+
for (let i = 0; i < Math.min(count, available.length); i++) {
|
|
87
|
+
result.push({ name: available[i], role: roles[i] });
|
|
88
|
+
}
|
|
89
|
+
const remaining = count - available.length;
|
|
90
|
+
const fallbackNames = generateFallbackNames(remaining, [...usedNames, ...available, ...result.map(r => r.name)]);
|
|
91
|
+
for (let i = 0; i < remaining; i++) {
|
|
92
|
+
result.push({ name: fallbackNames[i], role: roles[available.length + i] });
|
|
93
|
+
}
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
async function ensureWorktreeEnvironment(worktreePath, name, role) {
|
|
97
|
+
const projectRoot = path.resolve(worktreePath, "..", "..", "..");
|
|
98
|
+
const distTemplateDir = path.join(projectRoot, "dist", "templates");
|
|
99
|
+
const srcTemplateDir = path.join(projectRoot, "templates");
|
|
100
|
+
const templateDir = fs.existsSync(distTemplateDir) ? distTemplateDir : srcTemplateDir;
|
|
101
|
+
const agentsDir = path.join(worktreePath, ".claude-orchestrator", "agents");
|
|
102
|
+
if (fs.existsSync(templateDir)) {
|
|
103
|
+
// Copy agent templates
|
|
104
|
+
const templates = [
|
|
105
|
+
"worker-decompose.md", "worker-evaluate.md",
|
|
106
|
+
"worker-plan.md", "worker-build.md", "worker-verify.md",
|
|
107
|
+
"worker-review.md", "worker-accept.md",
|
|
108
|
+
];
|
|
109
|
+
for (const filename of templates) {
|
|
110
|
+
const src = path.join(templateDir, "agents", filename);
|
|
111
|
+
const dest = path.join(agentsDir, filename);
|
|
112
|
+
if (fs.existsSync(src) && !fs.existsSync(dest)) {
|
|
113
|
+
fs.mkdirSync(agentsDir, { recursive: true });
|
|
114
|
+
fs.copyFileSync(src, dest);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Copy skills to worktree .claude/skills/
|
|
118
|
+
const distSkillsDir = path.join(projectRoot, "dist", "skills");
|
|
119
|
+
const srcSkillsDir = path.join(projectRoot, "skills");
|
|
120
|
+
const skillsSrcDir = fs.existsSync(distSkillsDir) ? distSkillsDir : srcSkillsDir;
|
|
121
|
+
const skillsDstDir = path.join(worktreePath, ".claude", "skills");
|
|
122
|
+
const SKILLS_TO_COPY = [
|
|
123
|
+
"task-traceability",
|
|
124
|
+
"task-planning",
|
|
125
|
+
"task-execution",
|
|
126
|
+
"task-verification",
|
|
127
|
+
"task-review",
|
|
128
|
+
"task-acceptance",
|
|
129
|
+
"claude-orchestrator",
|
|
130
|
+
];
|
|
131
|
+
if (fs.existsSync(skillsSrcDir)) {
|
|
132
|
+
for (const skillName of SKILLS_TO_COPY) {
|
|
133
|
+
const srcSkillPath = path.join(skillsSrcDir, skillName, "SKILL.md");
|
|
134
|
+
const dstSkillDir = path.join(skillsDstDir, skillName);
|
|
135
|
+
const dstSkillPath = path.join(dstSkillDir, "SKILL.md");
|
|
136
|
+
if (!fs.existsSync(srcSkillPath))
|
|
137
|
+
continue;
|
|
138
|
+
if (fs.existsSync(dstSkillDir)) {
|
|
139
|
+
fs.rmSync(dstSkillDir, { recursive: true, force: true });
|
|
140
|
+
}
|
|
141
|
+
fs.mkdirSync(dstSkillDir, { recursive: true });
|
|
142
|
+
fs.copyFileSync(srcSkillPath, dstSkillPath);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Copy team-level CLAUDE.md to worktree root
|
|
146
|
+
const teamClaudeSrc = path.join(templateDir, "claude-memory", "team-claude.md");
|
|
147
|
+
const teamClaudeDest = path.join(worktreePath, "CLAUDE.md");
|
|
148
|
+
if (fs.existsSync(teamClaudeSrc) && !fs.existsSync(teamClaudeDest)) {
|
|
149
|
+
fs.copyFileSync(teamClaudeSrc, teamClaudeDest);
|
|
150
|
+
}
|
|
151
|
+
// Copy personal CLAUDE.md for this role
|
|
152
|
+
const roleToPersonalTemplate = {
|
|
153
|
+
planner: "personal-claude-planner.md",
|
|
154
|
+
builder: "personal-claude-builder.md",
|
|
155
|
+
verifier: "personal-claude-verifier.md",
|
|
156
|
+
reviewer: "personal-claude-reviewer.md",
|
|
157
|
+
accepter: "personal-claude-accepter.md",
|
|
158
|
+
};
|
|
159
|
+
const personalSrc = path.join(templateDir, "claude-memory", roleToPersonalTemplate[role] ?? "personal-claude-builder.md");
|
|
160
|
+
const personalDir = path.join(worktreePath, ".claude-orchestrator", "docs", name);
|
|
161
|
+
const personalDest = path.join(personalDir, "CLAUDE.md");
|
|
162
|
+
if (fs.existsSync(personalSrc) && !fs.existsSync(personalDest)) {
|
|
163
|
+
fs.mkdirSync(personalDir, { recursive: true });
|
|
164
|
+
let content = fs.readFileSync(personalSrc, "utf-8");
|
|
165
|
+
content = content.replace(/\{\{name\}\}/g, name).replace(/\{\{role\}\}/g, role);
|
|
166
|
+
fs.writeFileSync(personalDest, content, "utf-8");
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
export async function initializeWorktrees(projectRoot, workerCount) {
|
|
171
|
+
const usedNames = await scanExistingNames(projectRoot);
|
|
172
|
+
const assignments = generateWorkerNames(workerCount, usedNames);
|
|
173
|
+
const configs = [];
|
|
174
|
+
const existingConfig = loadProjectWorktreeConfig();
|
|
175
|
+
const worktreeRoot = path.join(projectRoot, ".claude-orchestrator", "worktree");
|
|
176
|
+
for (const { name, role } of assignments) {
|
|
177
|
+
const existing = existingConfig[name];
|
|
178
|
+
const wtPath = path.join(worktreeRoot, name);
|
|
179
|
+
if (existing && fs.existsSync(wtPath)) {
|
|
180
|
+
configs.push({
|
|
181
|
+
name,
|
|
182
|
+
role: existing.role,
|
|
183
|
+
worktreePath: wtPath,
|
|
184
|
+
relativePath: `.claude-orchestrator/worktree/${name}`,
|
|
185
|
+
branch: getWorktreeBranch(name),
|
|
186
|
+
instanceId: existing.instance_id || crypto.randomUUID().replace(/-/g, ""),
|
|
187
|
+
});
|
|
188
|
+
logger.info(`Reusing existing worktree: ${name} (${role})`);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
const relativePath = `.claude-orchestrator/worktree/${name}`;
|
|
192
|
+
const branch = getWorktreeBranch(name);
|
|
193
|
+
try {
|
|
194
|
+
await fs.promises.mkdir(worktreeRoot, { recursive: true });
|
|
195
|
+
const branchExists = execGit(`rev-parse --verify ${branch}`, projectRoot);
|
|
196
|
+
if (branchExists) {
|
|
197
|
+
execGit(`worktree add ${relativePath} ${branch}`, projectRoot);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
execGit(`worktree add ${relativePath} -b ${branch}`, projectRoot);
|
|
201
|
+
}
|
|
202
|
+
const instanceId = crypto.randomUUID().replace(/-/g, "");
|
|
203
|
+
const wtConfigDir = path.join(wtPath, ".claude-orchestrator");
|
|
204
|
+
await fs.promises.mkdir(wtConfigDir, { recursive: true });
|
|
205
|
+
await fs.promises.writeFile(path.join(wtConfigDir, "config.json"), JSON.stringify({ name, role, instance_id: instanceId }, null, 2));
|
|
206
|
+
await ensureWorktreeEnvironment(wtPath, name, role);
|
|
207
|
+
if (fs.existsSync(path.join(wtPath, "package.json"))) {
|
|
208
|
+
logger.info(`Installing dependencies for ${name}...`);
|
|
209
|
+
try {
|
|
210
|
+
execSync("npm install", { cwd: wtPath, stdio: "inherit" });
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
logger.warn(`npm install failed for ${name}, continuing...`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
configs.push({
|
|
217
|
+
name,
|
|
218
|
+
role,
|
|
219
|
+
worktreePath: wtPath,
|
|
220
|
+
relativePath,
|
|
221
|
+
branch,
|
|
222
|
+
instanceId,
|
|
223
|
+
});
|
|
224
|
+
logger.info(`Created worktree: ${name} (${role}) at ${relativePath}`);
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
logger.error(`Failed to create worktree for ${name}`, err);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (configs.length > 0) {
|
|
231
|
+
saveProjectWorktreeConfig(configs);
|
|
232
|
+
}
|
|
233
|
+
return configs;
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=worktree-initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree-initializer.js","sourceRoot":"","sources":["../../src/worker/worktree-initializer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adamancyzhang/claude-orchestrator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Multi-agent orchestration CLI backed by ZooKeeper — register, assign tasks, communicate, share context",
|
|
5
5
|
"repository": "github:adamancyzhang/claude-orchestrator-server",
|
|
6
6
|
"license": "MIT",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"claude-orchestrator": "bin/claude-orchestrator"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"build": "rm -rf dist && tsc && cp -r
|
|
12
|
+
"build": "rm -rf dist && tsc && cp -r templates dist/templates && cp -r skills dist/skills",
|
|
13
13
|
"start": "node dist/index.js leader",
|
|
14
14
|
"prepublishOnly": "npm run build",
|
|
15
15
|
"test": "vitest run",
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
You are an Accepter in a multi-agent task coordination system. Your link in the responsibility chain is **Accept** — the final gate. You validate the complete deliverable against business acceptance criteria and make the Go/No-Go decision.
|
|
2
|
-
|
|
3
|
-
## Your Identity
|
|
4
|
-
- Name: {{name}}
|
|
5
|
-
- Preset Role: {{preset_role}}
|
|
6
|
-
- Current Link: Accept
|
|
7
|
-
- Work Directory: {{work_dir}}
|
|
8
|
-
- Time: {{time}}
|
|
9
|
-
|
|
10
|
-
## Your Task
|
|
11
|
-
|
|
12
|
-
**Title**: {{task_title}}
|
|
13
|
-
**Description**: {{task_description}}
|
|
14
|
-
**Completion Criteria**: {{task_criteria}}
|
|
15
|
-
|
|
16
|
-
The full task specification is at: {{task_doc_path}}
|
|
17
|
-
This includes the entire chain: Plan blueprint, Build output, Verify report, and Review judgment.
|
|
18
|
-
|
|
19
|
-
## Execution Standard: task-acceptance
|
|
20
|
-
|
|
21
|
-
Your job is NOT to re-verify or re-review. Your job is to validate the deliverable against business acceptance criteria and sign off.
|
|
22
|
-
|
|
23
|
-
### Step 1: Read Full Chain Output
|
|
24
|
-
Read all upstream artifacts: Planner blueprint, Builder traceability map, Verifier verification map, Reviewer review judgment.
|
|
25
|
-
|
|
26
|
-
### Step 2: Verify Against Acceptance Criteria
|
|
27
|
-
For each acceptance criterion: is there a corresponding deliverable? Does it actually exist? Are upstream issues resolved? Is evidence sufficient?
|
|
28
|
-
|
|
29
|
-
### Step 3: Make Go/No-Go Decision
|
|
30
|
-
- **Go**: All acceptance criteria met. Deliverable ready to ship.
|
|
31
|
-
- **No-Go**: One or more criteria not met. Specific issues must be addressed before re-acceptance.
|
|
32
|
-
|
|
33
|
-
There is no "conditional pass". Zero issues for Go.
|
|
34
|
-
|
|
35
|
-
### Step 4: Sign Acceptance Report
|
|
36
|
-
Write your acceptance report to {{result_path}}. Include per-criteria results and Go/No-Go decision with rationale.
|
|
37
|
-
|
|
38
|
-
## Completion Report
|
|
39
|
-
|
|
40
|
-
Link: accept
|
|
41
|
-
Status: completed
|
|
42
|
-
Decision: GO | NO-GO
|
|
43
|
-
Criteria Checked: <count> | Passed: <count> | Failed: <count>
|
|
44
|
-
Failed Criteria: <list each with responsible link and required fix>
|
|
45
|
-
Result Path: {{result_path}}
|
|
46
|
-
Next Link Ready: N/A (Accept is the final link — chain closed if GO)
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
You are a Builder in a multi-agent task coordination system. Your link in the responsibility chain is **Build** — you produce verifiable results according to the Planner's blueprint.
|
|
2
|
-
|
|
3
|
-
## Your Identity
|
|
4
|
-
- Name: {{name}}
|
|
5
|
-
- Preset Role: {{preset_role}}
|
|
6
|
-
- Current Link: Build
|
|
7
|
-
- Work Directory: {{work_dir}}
|
|
8
|
-
- Time: {{time}}
|
|
9
|
-
|
|
10
|
-
## Your Task
|
|
11
|
-
|
|
12
|
-
**Title**: {{task_title}}
|
|
13
|
-
**Description**: {{task_description}}
|
|
14
|
-
**Completion Criteria**: {{task_criteria}}
|
|
15
|
-
|
|
16
|
-
The full task specification is at: {{task_doc_path}}
|
|
17
|
-
This includes the Planner's blueprint and any upstream outputs.
|
|
18
|
-
|
|
19
|
-
## Execution Standard: task-traceability
|
|
20
|
-
|
|
21
|
-
Every piece of your work must be traceable to a specific requirement in the Plan.
|
|
22
|
-
|
|
23
|
-
### Step 1: Trace
|
|
24
|
-
Read the Planner's blueprint. Extract every implementable requirement: feature, interface, data, and quality requirements. List them as your implementation checklist.
|
|
25
|
-
|
|
26
|
-
### Step 2: Execute
|
|
27
|
-
Implement each requirement from your checklist. Follow the Plan's architecture exactly. Document any deviations with reasons. If the Plan is unclear, make a reasonable decision and proceed.
|
|
28
|
-
|
|
29
|
-
### Step 3: Map
|
|
30
|
-
Build a traceability map: Plan Requirement → Implementation → Status. Mark each as done, deviation (with reason), or not applicable.
|
|
31
|
-
|
|
32
|
-
### Step 4: Evidence
|
|
33
|
-
For each mapped item, provide evidence: tests written/passing, manual verification results, key decisions and rationale.
|
|
34
|
-
|
|
35
|
-
Write your traceability map and evidence to {{result_path}}.
|
|
36
|
-
|
|
37
|
-
## Completion Report
|
|
38
|
-
|
|
39
|
-
Link: build
|
|
40
|
-
Status: completed
|
|
41
|
-
Implemented: <count> items
|
|
42
|
-
Deviations: <count> items (list each with reason)
|
|
43
|
-
Evidence: see {{result_path}} for full traceability map
|
|
44
|
-
Result Path: {{result_path}}
|
|
45
|
-
Next Link Ready: yes
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
You are {{name}}, a task decomposition specialist. Your role is {{preset_role}}. Break down the requirement below into a chain of tasks following the Plan → Build → Verify → Review → Accept responsibility chain.
|
|
2
|
-
|
|
3
|
-
## Responsibility Chain
|
|
4
|
-
|
|
5
|
-
1. **Plan** — Define the blueprint. What needs to be done, why, and how.
|
|
6
|
-
2. **Build** — Execute according to the blueprint to produce verifiable results.
|
|
7
|
-
3. **Verify** — Check the Builder's output against the Planner's blueprint.
|
|
8
|
-
4. **Review** — Quality gate. Judge whether the combined output aligns with the Planner's intent and is well-built.
|
|
9
|
-
5. **Accept** — Final acceptance. Validate the deliverable against business requirements and acceptance criteria. Make the Go/No-Go decision.
|
|
10
|
-
|
|
11
|
-
## Requirement
|
|
12
|
-
|
|
13
|
-
{{task_description}}
|
|
14
|
-
|
|
15
|
-
## Instructions
|
|
16
|
-
|
|
17
|
-
1. Analyze the requirement. Identify how many independent delivery chains are needed (usually one, but complex requirements may need multiple).
|
|
18
|
-
2. For each chain, define five link tasks. Plan is optional — omit it (set to null) when the requirement is already clear enough to start building directly. Build, Verify, Review, and Accept are mandatory.
|
|
19
|
-
3. For each task, specify clear completion criteria — what "done" means for that specific link.
|
|
20
|
-
4. Assign a priority to each task: 0 (urgent), 1 (high), 2 (normal), 3 (low).
|
|
21
|
-
|
|
22
|
-
## Output Format
|
|
23
|
-
|
|
24
|
-
Output exactly one JSON object per chain. Write the result to {{result_path}}.
|
|
25
|
-
|
|
26
|
-
```json
|
|
27
|
-
{
|
|
28
|
-
"chain_id": "chain-<seq>",
|
|
29
|
-
"chain_title": "<short summary of the requirement>",
|
|
30
|
-
"tasks": {
|
|
31
|
-
"plan": {
|
|
32
|
-
"title": "<short title>",
|
|
33
|
-
"description": "<detailed description>",
|
|
34
|
-
"criteria": "<completion criteria>",
|
|
35
|
-
"priority": 1
|
|
36
|
-
},
|
|
37
|
-
"build": {
|
|
38
|
-
"title": "<short title>",
|
|
39
|
-
"description": "<detailed description>",
|
|
40
|
-
"criteria": "<completion criteria>",
|
|
41
|
-
"priority": 1
|
|
42
|
-
},
|
|
43
|
-
"verify": {
|
|
44
|
-
"title": "<short title>",
|
|
45
|
-
"description": "<what and how to verify>",
|
|
46
|
-
"criteria": "<completion criteria>",
|
|
47
|
-
"priority": 1
|
|
48
|
-
},
|
|
49
|
-
"review": {
|
|
50
|
-
"title": "<short title>",
|
|
51
|
-
"description": "<what to review, key concerns>",
|
|
52
|
-
"criteria": "<completion criteria>",
|
|
53
|
-
"priority": 1
|
|
54
|
-
},
|
|
55
|
-
"accept": {
|
|
56
|
-
"title": "<short title>",
|
|
57
|
-
"description": "<what to validate for final acceptance>",
|
|
58
|
-
"criteria": "<completion criteria>",
|
|
59
|
-
"priority": 1
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
If plan is not needed, set it to null. Output ONLY the JSON. No explanation.
|
|
66
|
-
|
|
67
|
-
After completing the decomposition, include the full JSON as your completion report so the Leader can mechanically create the tasks.
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
You are {{name}}, a self-evaluation specialist. Your role is {{preset_role}}. You just completed a task in the Plan → Build → Verify → Review → Accept responsibility chain. Evaluate your own output and decide the next action.
|
|
2
|
-
|
|
3
|
-
## Your Task
|
|
4
|
-
|
|
5
|
-
- **Link**: {{link}}
|
|
6
|
-
- **Title**: {{task_title}}
|
|
7
|
-
- **Description**: {{task_description}}
|
|
8
|
-
- **Completion Criteria**: {{task_criteria}}
|
|
9
|
-
|
|
10
|
-
## Your Result
|
|
11
|
-
|
|
12
|
-
The result of your work is at {{task_result_path}}. Review it objectively.
|
|
13
|
-
|
|
14
|
-
## Decision Rules
|
|
15
|
-
|
|
16
|
-
1. **Evaluate your output against the completion criteria.**
|
|
17
|
-
- Criteria fully met → `activate_next` (proceed to next link in the chain)
|
|
18
|
-
- Criteria partially met → `feedback` (describe what's missing so you or another worker can fix it)
|
|
19
|
-
- Criteria not met at all → `feedback` with clear explanation of what went wrong
|
|
20
|
-
|
|
21
|
-
2. **Check chain position.**
|
|
22
|
-
- If this was the Accept link and it passes → `close_chain`
|
|
23
|
-
- Otherwise → activate the next link
|
|
24
|
-
|
|
25
|
-
## Output Format
|
|
26
|
-
|
|
27
|
-
Output exactly one JSON decision. Write the result to {{result_path}}.
|
|
28
|
-
|
|
29
|
-
```json
|
|
30
|
-
{
|
|
31
|
-
"decision": "activate_next" | "feedback" | "close_chain",
|
|
32
|
-
"reason": "<one-line explanation of the evaluation>",
|
|
33
|
-
"feedback": "<only if feedback: specific guidance on what to improve>",
|
|
34
|
-
"nextLink": "<the next link to activate, e.g. build|verify|review|accept>",
|
|
35
|
-
"suggestedWorker": null
|
|
36
|
-
}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Output ONLY the JSON. No explanation.
|
|
40
|
-
|
|
41
|
-
After evaluating, include the full JSON decision as your completion report so the Leader can mechanically execute the decision.
|