@adamancyzhang/claude-orchestrator 0.1.0 → 0.2.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.
Files changed (43) hide show
  1. package/README.md +401 -0
  2. package/bin/claude-orchestrator +2 -17
  3. package/dist/cli/commands.d.ts +20 -0
  4. package/dist/cli/commands.js +192 -0
  5. package/dist/cli/commands.js.map +1 -0
  6. package/dist/config.d.ts +17 -0
  7. package/dist/config.js +45 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +344 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/models/schemas.d.ts +308 -0
  13. package/dist/models/schemas.js +167 -0
  14. package/dist/models/schemas.js.map +1 -0
  15. package/dist/modules/context-store.d.ts +10 -0
  16. package/dist/modules/context-store.js +25 -0
  17. package/dist/modules/context-store.js.map +1 -0
  18. package/dist/modules/message-router.d.ts +12 -0
  19. package/dist/modules/message-router.js +94 -0
  20. package/dist/modules/message-router.js.map +1 -0
  21. package/dist/modules/registry.d.ts +11 -0
  22. package/dist/modules/registry.js +53 -0
  23. package/dist/modules/registry.js.map +1 -0
  24. package/dist/modules/task-queue.d.ts +10 -0
  25. package/dist/modules/task-queue.js +103 -0
  26. package/dist/modules/task-queue.js.map +1 -0
  27. package/dist/server.d.ts +2 -0
  28. package/dist/server.js +425 -0
  29. package/dist/server.js.map +1 -0
  30. package/dist/utils/output.d.ts +1 -0
  31. package/dist/utils/output.js +10 -0
  32. package/dist/utils/output.js.map +1 -0
  33. package/dist/zk/client.d.ts +54 -0
  34. package/dist/zk/client.js +417 -0
  35. package/dist/zk/client.js.map +1 -0
  36. package/dist/zk/paths.d.ts +16 -0
  37. package/dist/zk/paths.js +40 -0
  38. package/dist/zk/paths.js.map +1 -0
  39. package/dist/zk/watcher.d.ts +11 -0
  40. package/dist/zk/watcher.js +16 -0
  41. package/dist/zk/watcher.js.map +1 -0
  42. package/package.json +23 -6
  43. package/scripts/install.js +0 -123
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,KAAK,GAAG,KAAK;IACjD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,54 @@
1
+ export declare function isNoNode(err: unknown): boolean;
2
+ export declare function isNodeExists(err: unknown): boolean;
3
+ export declare class ZkClient {
4
+ private hosts;
5
+ private client;
6
+ private _connected;
7
+ private _running;
8
+ private _reconnecting;
9
+ private stateListener;
10
+ constructor(hosts: string);
11
+ connect(): Promise<void>;
12
+ private _connect;
13
+ private _reconnectLoop;
14
+ disconnect(): Promise<void>;
15
+ get connected(): boolean;
16
+ private _ensurePaths;
17
+ mkdirp(p: string): Promise<void>;
18
+ create(p: string, data: Buffer, mode: number): Promise<string>;
19
+ getData(p: string): Promise<Buffer | null>;
20
+ getDataWithWatch(p: string, watcher: (data: Buffer | null) => void): Promise<Buffer | null>;
21
+ setData(p: string, data: Buffer): Promise<void>;
22
+ getChildren(p: string): Promise<string[]>;
23
+ getChildrenWithWatch(p: string, watcher: (children: string[]) => void): Promise<string[]>;
24
+ remove(p: string): Promise<void>;
25
+ exists(p: string): Promise<boolean>;
26
+ registerInstance(instanceId: string, data: Record<string, unknown>): Promise<void>;
27
+ getInstance(instanceId: string): Promise<Record<string, unknown> | null>;
28
+ updateInstance(instanceId: string, data: Record<string, unknown>): Promise<void>;
29
+ listInstances(): Promise<Record<string, unknown>[]>;
30
+ deleteInstance(instanceId: string): Promise<void>;
31
+ createPendingTask(data: Record<string, unknown>): Promise<string>;
32
+ getPendingTask(taskId: string): Promise<Record<string, unknown> | null>;
33
+ listPendingTasks(): Promise<[string, Record<string, unknown>][]>;
34
+ deletePendingTask(taskId: string): Promise<void>;
35
+ claimTask(instanceId: string, taskId: string, data?: Buffer): Promise<boolean>;
36
+ getClaimedTask(instanceId: string, taskId: string): Promise<Record<string, unknown>>;
37
+ listClaimedTasks(): Promise<[string, string, Record<string, unknown>][]>;
38
+ deleteClaimedTask(instanceId: string, taskId: string): Promise<void>;
39
+ saveCompletedTask(taskId: string, data: Record<string, unknown>): Promise<void>;
40
+ getCompletedTask(taskId: string): Promise<Record<string, unknown> | null>;
41
+ listCompletedTasks(): Promise<Record<string, unknown>[]>;
42
+ createMessage(instanceId: string, data: Record<string, unknown>): Promise<string>;
43
+ getMessage(instanceId: string, msgId: string): Promise<Record<string, unknown> | null>;
44
+ updateMessage(instanceId: string, msgId: string, data: Record<string, unknown>): Promise<void>;
45
+ listMessages(instanceId: string): Promise<[string, Record<string, unknown>][]>;
46
+ deleteMessage(instanceId: string, msgId: string): Promise<void>;
47
+ setContext(key: string, data: Record<string, unknown>): Promise<void>;
48
+ getContext(key: string): Promise<Record<string, unknown> | null>;
49
+ deleteContext(key: string): Promise<void>;
50
+ listContextKeys(): Promise<string[]>;
51
+ watchMessageDir(instanceId: string, onChange: (children: string[]) => void): Promise<string[]>;
52
+ watchContextKey(key: string, onChange: (data: Record<string, unknown> | null) => void): Promise<Record<string, unknown> | null>;
53
+ watchPendingTasks(onChange: (children: string[]) => void): Promise<string[]>;
54
+ }
@@ -0,0 +1,417 @@
1
+ import zookeeper from "node-zookeeper-client";
2
+ import * as paths from "./paths.js";
3
+ const { CreateMode, Exception, State } = zookeeper;
4
+ // Error codes from node-zookeeper-client Exception
5
+ const NO_NODE = Exception.NO_NODE; // -101
6
+ const NODE_EXISTS = Exception.NODE_EXISTS; // -110
7
+ function isErrorCode(err, code) {
8
+ return (typeof err === "object" &&
9
+ err !== null &&
10
+ "getCode" in err &&
11
+ typeof err.getCode === "function" &&
12
+ err.getCode() === code);
13
+ }
14
+ export function isNoNode(err) {
15
+ return isErrorCode(err, NO_NODE);
16
+ }
17
+ export function isNodeExists(err) {
18
+ return isErrorCode(err, NODE_EXISTS);
19
+ }
20
+ export class ZkClient {
21
+ hosts;
22
+ client = null;
23
+ _connected = false;
24
+ _running = false;
25
+ _reconnecting = false;
26
+ stateListener = null;
27
+ constructor(hosts) {
28
+ this.hosts = hosts;
29
+ }
30
+ // ── Connection lifecycle ──
31
+ async connect() {
32
+ this._running = true;
33
+ await this._connect();
34
+ }
35
+ _connect() {
36
+ return new Promise((resolve, reject) => {
37
+ if (this.client) {
38
+ this.client.removeListener("state", this.stateListener);
39
+ this.client.close();
40
+ this.client = null;
41
+ }
42
+ this.client = zookeeper.createClient(this.hosts, {
43
+ sessionTimeout: 30000,
44
+ spinDelay: 1000,
45
+ retries: 3,
46
+ });
47
+ this.stateListener = (...args) => {
48
+ const state = args[0];
49
+ if (state === State.SYNC_CONNECTED) {
50
+ this._connected = true;
51
+ }
52
+ else if (state === State.EXPIRED) {
53
+ this._connected = false;
54
+ if (this._running && !this._reconnecting) {
55
+ this._reconnectLoop();
56
+ }
57
+ }
58
+ else if (state === State.DISCONNECTED) {
59
+ this._connected = false;
60
+ }
61
+ };
62
+ this.client.once("connected", async () => {
63
+ try {
64
+ await this._ensurePaths();
65
+ this._connected = true;
66
+ resolve();
67
+ }
68
+ catch (err) {
69
+ reject(err);
70
+ }
71
+ });
72
+ this.client.on("state", this.stateListener);
73
+ this.client.connect();
74
+ });
75
+ }
76
+ async _reconnectLoop() {
77
+ this._reconnecting = true;
78
+ try {
79
+ for (let attempt = 0; attempt < 10; attempt++) {
80
+ if (!this._running)
81
+ return;
82
+ const delay = Math.min(2 ** attempt, 30) * 1000;
83
+ await sleep(delay);
84
+ if (!this._running)
85
+ return;
86
+ try {
87
+ await this._connect();
88
+ return;
89
+ }
90
+ catch {
91
+ // continue retrying
92
+ }
93
+ }
94
+ throw new Error("ZK reconnection FAILED after 10 attempts — server requires restart");
95
+ }
96
+ finally {
97
+ this._reconnecting = false;
98
+ }
99
+ }
100
+ async disconnect() {
101
+ this._running = false;
102
+ this._connected = false;
103
+ if (this.client) {
104
+ this.client.removeListener("state", this.stateListener);
105
+ this.client.close();
106
+ this.client = null;
107
+ }
108
+ }
109
+ get connected() {
110
+ return (this._connected &&
111
+ this.client !== null &&
112
+ this.client.getState() === State.SYNC_CONNECTED);
113
+ }
114
+ async _ensurePaths() {
115
+ await Promise.all(paths.ALL_ENSURE_PATHS.map((p) => this.mkdirp(p)));
116
+ }
117
+ // ── Low-level ZK operations (promisified) ──
118
+ async mkdirp(p) {
119
+ return new Promise((resolve, reject) => {
120
+ this.client.mkdirp(p, (err) => {
121
+ if (err && !isNoNode(err) && !isNodeExists(err)) {
122
+ reject(err);
123
+ }
124
+ else {
125
+ resolve();
126
+ }
127
+ });
128
+ });
129
+ }
130
+ async create(p, data, mode) {
131
+ return new Promise((resolve, reject) => {
132
+ this.client.create(p, data, mode, (err, createdPath) => {
133
+ if (err)
134
+ reject(err);
135
+ else
136
+ resolve(createdPath);
137
+ });
138
+ });
139
+ }
140
+ async getData(p) {
141
+ return new Promise((resolve, reject) => {
142
+ this.client.getData(p, (err, data) => {
143
+ if (err) {
144
+ if (isNoNode(err))
145
+ resolve(null);
146
+ else
147
+ reject(err);
148
+ }
149
+ else {
150
+ resolve(data);
151
+ }
152
+ });
153
+ });
154
+ }
155
+ async getDataWithWatch(p, watcher) {
156
+ return new Promise((resolve, reject) => {
157
+ this.client.getData(p, () => {
158
+ // Re-read data after watch fires
159
+ this.getData(p).then((d) => watcher(d)).catch(() => watcher(null));
160
+ }, (err, data) => {
161
+ if (err) {
162
+ if (isNoNode(err))
163
+ resolve(null);
164
+ else
165
+ reject(err);
166
+ }
167
+ else {
168
+ resolve(data);
169
+ }
170
+ });
171
+ });
172
+ }
173
+ async setData(p, data) {
174
+ return new Promise((resolve, reject) => {
175
+ this.client.setData(p, data, (err) => {
176
+ if (err)
177
+ reject(err);
178
+ else
179
+ resolve();
180
+ });
181
+ });
182
+ }
183
+ async getChildren(p) {
184
+ return new Promise((resolve, reject) => {
185
+ this.client.getChildren(p, (err, children) => {
186
+ if (err) {
187
+ if (isNoNode(err))
188
+ resolve([]);
189
+ else
190
+ reject(err);
191
+ }
192
+ else {
193
+ resolve(children);
194
+ }
195
+ });
196
+ });
197
+ }
198
+ async getChildrenWithWatch(p, watcher) {
199
+ return new Promise((resolve, reject) => {
200
+ this.client.getChildren(p, () => {
201
+ // Re-read children after watch fires
202
+ this.getChildren(p).then((c) => watcher(c)).catch(() => watcher([]));
203
+ }, (err, children) => {
204
+ if (err) {
205
+ if (isNoNode(err))
206
+ resolve([]);
207
+ else
208
+ reject(err);
209
+ }
210
+ else {
211
+ resolve(children);
212
+ }
213
+ });
214
+ });
215
+ }
216
+ async remove(p) {
217
+ return new Promise((resolve, reject) => {
218
+ this.client.remove(p, (err) => {
219
+ if (err) {
220
+ if (isNoNode(err))
221
+ resolve();
222
+ else
223
+ reject(err);
224
+ }
225
+ else {
226
+ resolve();
227
+ }
228
+ });
229
+ });
230
+ }
231
+ async exists(p) {
232
+ return new Promise((resolve, reject) => {
233
+ this.client.exists(p, (err, stat) => {
234
+ if (err) {
235
+ if (isNoNode(err))
236
+ resolve(false);
237
+ else
238
+ reject(err);
239
+ }
240
+ else {
241
+ resolve(stat !== null);
242
+ }
243
+ });
244
+ });
245
+ }
246
+ // ── Instance operations ──
247
+ async registerInstance(instanceId, data) {
248
+ const p = paths.instancePath(instanceId);
249
+ await this.create(p, encodeJson(data), CreateMode.EPHEMERAL);
250
+ }
251
+ async getInstance(instanceId) {
252
+ const raw = await this.getData(paths.instancePath(instanceId));
253
+ return raw ? decodeJson(raw) : null;
254
+ }
255
+ async updateInstance(instanceId, data) {
256
+ await this.setData(paths.instancePath(instanceId), encodeJson(data));
257
+ }
258
+ async listInstances() {
259
+ const children = await this.getChildren(paths.INSTANCES);
260
+ const results = [];
261
+ for (const cid of children) {
262
+ const data = await this.getInstance(cid);
263
+ if (data)
264
+ results.push(data);
265
+ }
266
+ return results;
267
+ }
268
+ async deleteInstance(instanceId) {
269
+ await this.remove(paths.instancePath(instanceId));
270
+ }
271
+ // ── Task operations ──
272
+ async createPendingTask(data) {
273
+ const createdPath = await this.create(`${paths.TASKS_PENDING}/task-`, encodeJson(data), CreateMode.PERSISTENT_SEQUENTIAL);
274
+ return createdPath.split("/").pop();
275
+ }
276
+ async getPendingTask(taskId) {
277
+ const raw = await this.getData(paths.pendingTaskPath(taskId));
278
+ return raw ? decodeJson(raw) : null;
279
+ }
280
+ async listPendingTasks() {
281
+ const children = await this.getChildren(paths.TASKS_PENDING);
282
+ children.sort();
283
+ const results = [];
284
+ for (const cid of children) {
285
+ const data = await this.getPendingTask(cid);
286
+ if (data)
287
+ results.push([cid, data]);
288
+ }
289
+ return results;
290
+ }
291
+ async deletePendingTask(taskId) {
292
+ await this.remove(paths.pendingTaskPath(taskId));
293
+ }
294
+ async claimTask(instanceId, taskId, data = Buffer.alloc(0)) {
295
+ try {
296
+ await this.create(paths.claimedTaskPath(instanceId, taskId), data, CreateMode.EPHEMERAL);
297
+ return true;
298
+ }
299
+ catch (err) {
300
+ if (isNodeExists(err))
301
+ return false;
302
+ throw err;
303
+ }
304
+ }
305
+ async getClaimedTask(instanceId, taskId) {
306
+ const raw = await this.getData(paths.claimedTaskPath(instanceId, taskId));
307
+ return raw ? decodeJson(raw) : {};
308
+ }
309
+ async listClaimedTasks() {
310
+ const children = await this.getChildren(paths.TASKS_CLAIMED);
311
+ children.sort();
312
+ const results = [];
313
+ for (const name of children) {
314
+ const idx = name.indexOf("-");
315
+ if (idx === -1)
316
+ continue;
317
+ const instanceId = name.substring(0, idx);
318
+ const taskId = name.substring(idx + 1);
319
+ const data = await this.getClaimedTask(instanceId, taskId);
320
+ results.push([instanceId, taskId, data]);
321
+ }
322
+ return results;
323
+ }
324
+ async deleteClaimedTask(instanceId, taskId) {
325
+ await this.remove(paths.claimedTaskPath(instanceId, taskId));
326
+ }
327
+ async saveCompletedTask(taskId, data) {
328
+ await this.create(paths.completedTaskPath(taskId), encodeJson(data), CreateMode.PERSISTENT);
329
+ }
330
+ async getCompletedTask(taskId) {
331
+ const raw = await this.getData(paths.completedTaskPath(taskId));
332
+ return raw ? decodeJson(raw) : null;
333
+ }
334
+ async listCompletedTasks() {
335
+ const children = await this.getChildren(paths.TASKS_COMPLETED);
336
+ children.sort();
337
+ const results = [];
338
+ for (const cid of children) {
339
+ const data = await this.getCompletedTask(cid);
340
+ if (data)
341
+ results.push(data);
342
+ }
343
+ return results;
344
+ }
345
+ // ── Message operations ──
346
+ async createMessage(instanceId, data) {
347
+ await this.mkdirp(paths.messageDirPath(instanceId));
348
+ const createdPath = await this.create(`${paths.messageDirPath(instanceId)}/msg-`, encodeJson(data), CreateMode.PERSISTENT_SEQUENTIAL);
349
+ return createdPath.split("/").pop();
350
+ }
351
+ async getMessage(instanceId, msgId) {
352
+ const raw = await this.getData(paths.messagePath(instanceId, msgId));
353
+ return raw ? decodeJson(raw) : null;
354
+ }
355
+ async updateMessage(instanceId, msgId, data) {
356
+ await this.setData(paths.messagePath(instanceId, msgId), encodeJson(data));
357
+ }
358
+ async listMessages(instanceId) {
359
+ const children = await this.getChildren(paths.messageDirPath(instanceId));
360
+ children.sort();
361
+ const results = [];
362
+ for (const cid of children) {
363
+ const data = await this.getMessage(instanceId, cid);
364
+ if (data)
365
+ results.push([cid, data]);
366
+ }
367
+ return results;
368
+ }
369
+ async deleteMessage(instanceId, msgId) {
370
+ await this.remove(paths.messagePath(instanceId, msgId));
371
+ }
372
+ // ── Context operations ──
373
+ async setContext(key, data) {
374
+ const p = paths.contextPath(key);
375
+ const exists = await this.exists(p);
376
+ if (exists) {
377
+ await this.setData(p, encodeJson(data));
378
+ }
379
+ else {
380
+ await this.create(p, encodeJson(data), CreateMode.PERSISTENT);
381
+ }
382
+ }
383
+ async getContext(key) {
384
+ const raw = await this.getData(paths.contextPath(key));
385
+ return raw ? decodeJson(raw) : null;
386
+ }
387
+ async deleteContext(key) {
388
+ await this.remove(paths.contextPath(key));
389
+ }
390
+ async listContextKeys() {
391
+ return this.getChildren(paths.CONTEXT);
392
+ }
393
+ // ── Watch operations (delegates to external watcher setup) ──
394
+ watchMessageDir(instanceId, onChange) {
395
+ return this.getChildrenWithWatch(paths.messageDirPath(instanceId), onChange);
396
+ }
397
+ async watchContextKey(key, onChange) {
398
+ const raw = await this.getDataWithWatch(paths.contextPath(key), (buf) => {
399
+ onChange(buf ? decodeJson(buf) : null);
400
+ });
401
+ return raw ? decodeJson(raw) : null;
402
+ }
403
+ watchPendingTasks(onChange) {
404
+ return this.getChildrenWithWatch(paths.TASKS_PENDING, onChange);
405
+ }
406
+ }
407
+ // ── Helpers ──
408
+ function encodeJson(data) {
409
+ return Buffer.from(JSON.stringify(data), "utf-8");
410
+ }
411
+ function decodeJson(raw) {
412
+ return JSON.parse(raw.toString("utf-8"));
413
+ }
414
+ function sleep(ms) {
415
+ return new Promise((resolve) => setTimeout(resolve, ms));
416
+ }
417
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/zk/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare const ROOT = "/claude-orchestrator";
2
+ export declare const INSTANCES = "/claude-orchestrator/instances";
3
+ export declare const TASKS = "/claude-orchestrator/tasks";
4
+ export declare const TASKS_PENDING = "/claude-orchestrator/tasks/pending";
5
+ export declare const TASKS_CLAIMED = "/claude-orchestrator/tasks/claimed";
6
+ export declare const TASKS_COMPLETED = "/claude-orchestrator/tasks/completed";
7
+ export declare const MESSAGES = "/claude-orchestrator/messages";
8
+ export declare const CONTEXT = "/claude-orchestrator/context";
9
+ export declare function instancePath(instanceId: string): string;
10
+ export declare function pendingTaskPath(taskId: string): string;
11
+ export declare function claimedTaskPath(instanceId: string, taskId: string): string;
12
+ export declare function completedTaskPath(taskId: string): string;
13
+ export declare function messageDirPath(instanceId: string): string;
14
+ export declare function messagePath(instanceId: string, msgId: string): string;
15
+ export declare function contextPath(key: string): string;
16
+ export declare const ALL_ENSURE_PATHS: string[];
@@ -0,0 +1,40 @@
1
+ export const ROOT = "/claude-orchestrator";
2
+ export const INSTANCES = `${ROOT}/instances`;
3
+ export const TASKS = `${ROOT}/tasks`;
4
+ export const TASKS_PENDING = `${TASKS}/pending`;
5
+ export const TASKS_CLAIMED = `${TASKS}/claimed`;
6
+ export const TASKS_COMPLETED = `${TASKS}/completed`;
7
+ export const MESSAGES = `${ROOT}/messages`;
8
+ export const CONTEXT = `${ROOT}/context`;
9
+ export function instancePath(instanceId) {
10
+ return `${INSTANCES}/${instanceId}`;
11
+ }
12
+ export function pendingTaskPath(taskId) {
13
+ return `${TASKS_PENDING}/${taskId}`;
14
+ }
15
+ export function claimedTaskPath(instanceId, taskId) {
16
+ return `${TASKS_CLAIMED}/${instanceId}-${taskId}`;
17
+ }
18
+ export function completedTaskPath(taskId) {
19
+ return `${TASKS_COMPLETED}/${taskId}`;
20
+ }
21
+ export function messageDirPath(instanceId) {
22
+ return `${MESSAGES}/${instanceId}`;
23
+ }
24
+ export function messagePath(instanceId, msgId) {
25
+ return `${MESSAGES}/${instanceId}/${msgId}`;
26
+ }
27
+ export function contextPath(key) {
28
+ return `${CONTEXT}/${key}`;
29
+ }
30
+ export const ALL_ENSURE_PATHS = [
31
+ ROOT,
32
+ INSTANCES,
33
+ TASKS,
34
+ TASKS_PENDING,
35
+ TASKS_CLAIMED,
36
+ TASKS_COMPLETED,
37
+ MESSAGES,
38
+ CONTEXT,
39
+ ];
40
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/zk/paths.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,sBAAsB,CAAC;AAE3C,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,IAAI,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,IAAI,QAAQ,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,KAAK,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,KAAK,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,KAAK,YAAY,CAAC;AACpD,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,IAAI,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,IAAI,UAAU,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,OAAO,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,GAAG,aAAa,IAAI,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,MAAc;IAChE,OAAO,GAAG,aAAa,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,GAAG,eAAe,IAAI,MAAM,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,OAAO,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,KAAa;IAC3D,OAAO,GAAG,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,OAAO,IAAI,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,IAAI;IACJ,SAAS;IACT,KAAK;IACL,aAAa;IACb,aAAa;IACb,eAAe;IACf,QAAQ;IACR,OAAO;CACR,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ZkClient } from "./client.js";
2
+ type ChildrenCallback = (children: string[]) => void;
3
+ type DataCallback = (data: Record<string, unknown> | null) => void;
4
+ export declare class ZkWatcher {
5
+ private zk;
6
+ constructor(zk: ZkClient);
7
+ watchMessageDir(instanceId: string, onChange: ChildrenCallback): Promise<string[]>;
8
+ watchPendingTasks(onChange: ChildrenCallback): Promise<string[]>;
9
+ watchContextKey(key: string, onChange: DataCallback): Promise<Record<string, unknown> | null>;
10
+ }
11
+ export {};
@@ -0,0 +1,16 @@
1
+ export class ZkWatcher {
2
+ zk;
3
+ constructor(zk) {
4
+ this.zk = zk;
5
+ }
6
+ async watchMessageDir(instanceId, onChange) {
7
+ return this.zk.watchMessageDir(instanceId, onChange);
8
+ }
9
+ async watchPendingTasks(onChange) {
10
+ return this.zk.watchPendingTasks(onChange);
11
+ }
12
+ async watchContextKey(key, onChange) {
13
+ return this.zk.watchContextKey(key, onChange);
14
+ }
15
+ }
16
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/zk/watcher.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,SAAS;IACA;IAApB,YAAoB,EAAY;QAAZ,OAAE,GAAF,EAAE,CAAU;IAAG,CAAC;IAEpC,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,QAA0B;QAE1B,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,QAA0B;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,GAAW,EACX,QAAsB;QAEtB,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;CACF"}
package/package.json CHANGED
@@ -1,18 +1,35 @@
1
1
  {
2
2
  "name": "@adamancyzhang/claude-orchestrator",
3
- "version": "0.1.0",
3
+ "version": "0.2.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",
7
+ "type": "module",
7
8
  "bin": {
8
9
  "claude-orchestrator": "bin/claude-orchestrator"
9
10
  },
10
11
  "scripts": {
11
- "postinstall": "node scripts/install.js"
12
+ "build": "tsc",
13
+ "start": "node dist/index.js --server",
14
+ "prepublishOnly": "npm run build",
15
+ "test": "vitest run",
16
+ "test:watch": "vitest"
12
17
  },
13
18
  "files": [
14
- "bin/claude-orchestrator",
15
- "scripts/install.js",
16
- "package.json"
17
- ]
19
+ "dist/",
20
+ "bin/claude-orchestrator"
21
+ ],
22
+ "dependencies": {
23
+ "@modelcontextprotocol/sdk": "^1.0.0",
24
+ "commander": "^12.0.0",
25
+ "express": "^4.21.0",
26
+ "node-zookeeper-client": "^1.1.3",
27
+ "zod": "^3.23.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/express": "^4.17.21",
31
+ "@types/node": "^22.0.0",
32
+ "typescript": "^5.6.0",
33
+ "vitest": "^2.0.0"
34
+ }
18
35
  }