teamshare-bridge 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +42 -13
  2. package/dist/bridge/daemon.js +56 -17
  3. package/dist/bridge/daemon.js.map +1 -1
  4. package/dist/bridge/spawn.d.ts +12 -0
  5. package/dist/bridge/spawn.js +11 -5
  6. package/dist/bridge/spawn.js.map +1 -1
  7. package/dist/cli/args.d.ts +8 -0
  8. package/dist/cli/args.js +38 -0
  9. package/dist/cli/args.js.map +1 -0
  10. package/dist/cli/commands/build.d.ts +1 -0
  11. package/dist/cli/commands/build.js +385 -0
  12. package/dist/cli/commands/build.js.map +1 -0
  13. package/dist/cli/commands/chat.d.ts +1 -0
  14. package/dist/cli/commands/chat.js +113 -0
  15. package/dist/cli/commands/chat.js.map +1 -0
  16. package/dist/cli/commands/connect.d.ts +1 -0
  17. package/dist/cli/commands/connect.js +23 -0
  18. package/dist/cli/commands/connect.js.map +1 -0
  19. package/dist/cli/commands/doc.d.ts +1 -0
  20. package/dist/cli/commands/doc.js +109 -0
  21. package/dist/cli/commands/doc.js.map +1 -0
  22. package/dist/cli/commands/harness.d.ts +10 -0
  23. package/dist/cli/commands/harness.js +93 -0
  24. package/dist/cli/commands/harness.js.map +1 -0
  25. package/dist/cli/commands/key.d.ts +2 -0
  26. package/dist/cli/commands/key.js +126 -0
  27. package/dist/cli/commands/key.js.map +1 -0
  28. package/dist/cli/commands/link.d.ts +2 -0
  29. package/dist/cli/commands/link.js +93 -0
  30. package/dist/cli/commands/link.js.map +1 -0
  31. package/dist/cli/commands/run.d.ts +1 -0
  32. package/dist/cli/commands/run.js +219 -0
  33. package/dist/cli/commands/run.js.map +1 -0
  34. package/dist/cli/commands/shared.d.ts +6 -0
  35. package/dist/cli/commands/shared.js +51 -0
  36. package/dist/cli/commands/shared.js.map +1 -0
  37. package/dist/cli/commands/skills.d.ts +1 -0
  38. package/dist/cli/commands/skills.js +29 -0
  39. package/dist/cli/commands/skills.js.map +1 -0
  40. package/dist/cli/commands/usage.d.ts +1 -0
  41. package/dist/cli/commands/usage.js +78 -0
  42. package/dist/cli/commands/usage.js.map +1 -0
  43. package/dist/cli/index.js +49 -1500
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/cli/utils.d.ts +38 -0
  46. package/dist/cli/utils.js +139 -0
  47. package/dist/cli/utils.js.map +1 -0
  48. package/dist/lib/api.d.ts +15 -2
  49. package/dist/lib/api.js +8 -4
  50. package/dist/lib/api.js.map +1 -1
  51. package/dist/lib/brief.js +19 -3
  52. package/dist/lib/brief.js.map +1 -1
  53. package/dist/lib/config.d.ts +3 -1
  54. package/dist/lib/config.js +4 -2
  55. package/dist/lib/config.js.map +1 -1
  56. package/dist/lib/harness.d.ts +1 -1
  57. package/dist/lib/harness.js +3 -2
  58. package/dist/lib/harness.js.map +1 -1
  59. package/dist/lib/llm.js +8 -7
  60. package/dist/lib/llm.js.map +1 -1
  61. package/dist/lib/models.d.ts +6 -0
  62. package/dist/lib/models.js +25 -0
  63. package/dist/lib/models.js.map +1 -1
  64. package/dist/lib/orchestrator/client.d.ts +38 -4
  65. package/dist/lib/orchestrator/client.js +390 -22
  66. package/dist/lib/orchestrator/client.js.map +1 -1
  67. package/dist/lib/orchestrator/index.d.ts +1 -1
  68. package/dist/lib/orchestrator/index.js +5 -1
  69. package/dist/lib/orchestrator/index.js.map +1 -1
  70. package/dist/lib/orchestrator/worktree.d.ts +52 -0
  71. package/dist/lib/orchestrator/worktree.js +250 -6
  72. package/dist/lib/orchestrator/worktree.js.map +1 -1
  73. package/dist/lib/skills.d.ts +2 -2
  74. package/dist/lib/skills.js +2 -1
  75. package/dist/lib/skills.js.map +1 -1
  76. package/package.json +1 -1
  77. package/skills/teamshare-auth-rbac/SKILL.md +1 -1
  78. package/skills/teamshare-orchestrator-ask/SKILL.md +63 -0
@@ -3,17 +3,57 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OrchestratorClient = void 0;
4
4
  /**
5
5
  * OrchestratorClient: WS connection to the backend /orchestrator namespace.
6
- * Receives commands (git, verify, worktree) and returns results.
6
+ *
7
+ * The backend sends commands (verify, worktree, git, planner) that this
8
+ * bridge EXECUTES locally and reports back. The client is both:
9
+ * - a command RECEIVER (backend -> bridge): runs git/worktree/verify/planner
10
+ * and emits the matching `orchestrator:*` result event with the same cmdId;
11
+ * - a command SENDER (bridge -> backend) kept for callers that push
12
+ * results of their own (none currently - the daemon only receives).
7
13
  *
8
14
  * Mirrors the daemon.ts reconnect pattern for resilience.
9
15
  */
10
16
  const socket_io_client_1 = require("socket.io-client");
17
+ const node_path_1 = require("node:path");
11
18
  const config_1 = require("../config");
19
+ const api_1 = require("../api");
20
+ const llm_1 = require("../llm");
21
+ const models_1 = require("../models");
22
+ const worktree_1 = require("./worktree");
23
+ const runner_1 = require("./runner");
12
24
  const log = {
13
- info: (msg) => console.log(`[orchestrator-client] ${msg}`),
14
- warn: (msg) => console.warn(`[orchestrator-client] ${msg}`),
15
- error: (msg) => console.error(`[orchestrator-client] ${msg}`),
25
+ info: (m) => console.log(`[orchestrator-client] ${m}`),
26
+ warn: (m) => console.warn(`[orchestrator-client] ${m}`),
27
+ error: (m) => console.error(`[orchestrator-client] ${m}`),
16
28
  };
29
+ const RESULT_EVENTS = [
30
+ 'orchestrator:verify-result',
31
+ 'orchestrator:worktree-created',
32
+ 'orchestrator:worktree-removed',
33
+ 'orchestrator:git-status-result',
34
+ 'orchestrator:git-commit-result',
35
+ 'orchestrator:git-merge-result',
36
+ 'orchestrator:git-push-result',
37
+ 'orchestrator:git-revert-head-result',
38
+ 'orchestrator:git-reset-head-result',
39
+ 'orchestrator:repo-context-result',
40
+ 'orchestrator:review-result',
41
+ ];
42
+ /** Backend -> bridge command events this client must service. */
43
+ const COMMAND_EVENTS = [
44
+ 'orchestrator:verify',
45
+ 'orchestrator:create-worktree',
46
+ 'orchestrator:remove-worktree',
47
+ 'orchestrator:git-status',
48
+ 'orchestrator:git-commit',
49
+ 'orchestrator:git-merge',
50
+ 'orchestrator:git-push',
51
+ 'orchestrator:git-revert-head',
52
+ 'orchestrator:git-reset-head',
53
+ 'orchestrator:planner-request',
54
+ 'orchestrator:review-request',
55
+ 'orchestrator:question',
56
+ ];
17
57
  class OrchestratorClient {
18
58
  socket = null;
19
59
  pending = new Map();
@@ -24,11 +64,11 @@ class OrchestratorClient {
24
64
  this.apiUrl = apiUrl;
25
65
  }
26
66
  /**
27
- * Connect to the /orchestrator WS namespace.
67
+ * Connect to the /orchestrator WS namespace and start serving commands.
28
68
  */
29
69
  connect() {
30
70
  const config = (0, config_1.loadConfig)();
31
- const wsUrl = process.env.TEAMSHARE_WS_URL ?? 'ws://localhost:4000';
71
+ const wsUrl = process.env.TEAMSHARE_WS_URL ?? api_1.DEFAULT_WS_URL;
32
72
  this.socket = (0, socket_io_client_1.io)(`${wsUrl}/orchestrator`, {
33
73
  auth: { apiKey: this.apiKey },
34
74
  transports: ['websocket'],
@@ -45,26 +85,16 @@ class OrchestratorClient {
45
85
  this.socket.on('connect_error', (err) => {
46
86
  log.error(`Connection error: ${err.message}`);
47
87
  });
48
- // Register handlers for all result events
49
- const resultEvents = [
50
- 'orchestrator:verify-result',
51
- 'orchestrator:worktree-created',
52
- 'orchestrator:worktree-removed',
53
- 'orchestrator:git-status-result',
54
- 'orchestrator:git-commit-result',
55
- 'orchestrator:git-merge-result',
56
- 'orchestrator:repo-context-result',
57
- ];
58
- for (const event of resultEvents) {
88
+ // Register handlers for all result events (sender side).
89
+ for (const event of RESULT_EVENTS) {
59
90
  this.socket.on(event, (data) => {
60
91
  this.resolvePending(data.cmdId, data);
61
92
  });
62
93
  }
63
- // Progress events (not correlated to commands)
94
+ // Progress / capacity events (not correlated to commands).
64
95
  this.socket.on('orchestrator:progress', (data) => {
65
96
  log.info(`Progress: ${data.taskId} - ${data.message}`);
66
97
  });
67
- // Agent capacity events
68
98
  this.socket.on('orchestrator:agent-ready', (data) => {
69
99
  log.info(`Agent ready: ${data.agentId}`);
70
100
  });
@@ -74,6 +104,107 @@ class OrchestratorClient {
74
104
  this.socket.on('orchestrator:agent-idle', (data) => {
75
105
  log.info(`Agent idle: ${data.agentId}`);
76
106
  });
107
+ // Command receiver: execute locally and report back.
108
+ this.socket.on('orchestrator:verify', (data) => {
109
+ void this.handleVerify(data).catch((err) => {
110
+ this.emitResult('orchestrator:verify-result', data.cmdId, {
111
+ exitCode: 1,
112
+ stdout: '',
113
+ stderr: (0, config_1.msg)(err),
114
+ durationMs: 0,
115
+ });
116
+ });
117
+ });
118
+ this.socket.on('orchestrator:create-worktree', (data) => {
119
+ void this.handleCreateWorktree(data).catch((err) => {
120
+ this.emitResult('orchestrator:worktree-created', data.cmdId, {
121
+ error: (0, config_1.msg)(err),
122
+ });
123
+ });
124
+ });
125
+ this.socket.on('orchestrator:remove-worktree', (data) => {
126
+ void this.handleRemoveWorktree(data).catch((err) => {
127
+ this.emitResult('orchestrator:worktree-removed', data.cmdId, {
128
+ error: (0, config_1.msg)(err),
129
+ });
130
+ });
131
+ });
132
+ this.socket.on('orchestrator:git-status', (data) => {
133
+ void this.handleGitStatus(data).catch((err) => {
134
+ this.emitResult('orchestrator:git-status-result', data.cmdId, {
135
+ error: (0, config_1.msg)(err),
136
+ });
137
+ });
138
+ });
139
+ this.socket.on('orchestrator:git-commit', (data) => {
140
+ void this.handleGitCommit(data).catch((err) => {
141
+ this.emitResult('orchestrator:git-commit-result', data.cmdId, {
142
+ error: (0, config_1.msg)(err),
143
+ });
144
+ });
145
+ });
146
+ this.socket.on('orchestrator:git-merge', (data) => {
147
+ void this.handleGitMerge(data).catch((err) => {
148
+ this.emitResult('orchestrator:git-merge-result', data.cmdId, {
149
+ success: false,
150
+ error: (0, config_1.msg)(err),
151
+ });
152
+ });
153
+ });
154
+ this.socket.on('orchestrator:git-push', (data) => {
155
+ void this.handleGitPush(data).catch((err) => {
156
+ this.emitResult('orchestrator:git-push-result', data.cmdId, {
157
+ success: false,
158
+ error: (0, config_1.msg)(err),
159
+ });
160
+ });
161
+ });
162
+ this.socket.on('orchestrator:git-revert-head', (data) => {
163
+ void this.handleGitRevertHead(data).catch((err) => {
164
+ this.emitResult('orchestrator:git-revert-head-result', data.cmdId, {
165
+ commitHash: '',
166
+ error: (0, config_1.msg)(err),
167
+ });
168
+ });
169
+ });
170
+ this.socket.on('orchestrator:git-reset-head', (data) => {
171
+ void this.handleGitResetHead(data).catch((err) => {
172
+ this.emitResult('orchestrator:git-reset-head-result', data.cmdId, {
173
+ success: false,
174
+ error: (0, config_1.msg)(err),
175
+ });
176
+ });
177
+ });
178
+ this.socket.on('orchestrator:planner-request', (data) => {
179
+ void this.handlePlannerRequest(data).catch((err) => {
180
+ log.warn(`planner-request failed: ${(0, config_1.msg)(err)}`);
181
+ this.emitResult('orchestrator:planner-result', data.cmdId, {
182
+ tasks: [
183
+ {
184
+ title: String(data.description ?? '').slice(0, 200),
185
+ description: String(data.description ?? ''),
186
+ dependencies: [],
187
+ },
188
+ ],
189
+ });
190
+ });
191
+ });
192
+ this.socket.on('orchestrator:review-request', (data) => {
193
+ void this.handleReview(data).catch((err) => {
194
+ this.emitResult('orchestrator:review-result', data.cmdId, {
195
+ approved: false,
196
+ error: (0, config_1.msg)(err),
197
+ });
198
+ });
199
+ });
200
+ this.socket.on('orchestrator:question', (data) => {
201
+ void this.handleQuestion(data).catch((err) => {
202
+ this.emitResult('orchestrator:question-answered', data.cmdId, {
203
+ acknowledged: false,
204
+ error: (0, config_1.msg)(err),
205
+ });
206
+ });
207
+ });
77
208
  }
78
209
  /**
79
210
  * Disconnect from the WS.
@@ -90,6 +221,237 @@ class OrchestratorClient {
90
221
  }
91
222
  this.pending.clear();
92
223
  }
224
+ // ------------------------------------------------------------------
225
+ // Command handlers (backend -> bridge)
226
+ // ------------------------------------------------------------------
227
+ async handleVerify(data) {
228
+ const result = await (0, runner_1.runVerificationCommand)(String(data.step ?? 'build'), String(data.cwd ?? ''), typeof data.timeout === 'number' ? data.timeout : undefined);
229
+ this.emitResult('orchestrator:verify-result', data.cmdId, {
230
+ exitCode: result.exitCode,
231
+ stdout: result.stdout,
232
+ stderr: result.stderr,
233
+ durationMs: result.durationMs,
234
+ });
235
+ }
236
+ async handleCreateWorktree(data) {
237
+ const repoPath = (data.repoPath ? String(data.repoPath) : null) ??
238
+ (data.projectId ? (0, config_1.projectCwd)(String(data.projectId)) : null);
239
+ if (!repoPath) {
240
+ throw new Error('No repository path - link the project folder with: teamshare-agent link --project <id> --path <folder>');
241
+ }
242
+ // Auto-init repo if the linked folder isn't a git repo yet.
243
+ (0, worktree_1.ensureRepoExists)(repoPath);
244
+ // Auto-create a local bare repo as origin when no remote is configured,
245
+ // so git push succeeds without requiring a GitHub / Gitea account.
246
+ if (data.projectId) {
247
+ (0, worktree_1.ensureLocalBareRepo)(repoPath, String(data.projectId));
248
+ }
249
+ const info = (0, worktree_1.createWorktree)(repoPath, String(data.branchName ?? `ai/task-${data.agentId ?? 'x'}`), String(data.baseBranch ?? 'main'), String(data.repoId ?? data.branchName ?? 'x'));
250
+ this.emitResult('orchestrator:worktree-created', data.cmdId, {
251
+ path: info.path,
252
+ commitHash: info.commitHash,
253
+ });
254
+ }
255
+ async handleRemoveWorktree(data) {
256
+ const worktreePath = String(data.worktreePath ?? '');
257
+ const repoPath = (data.repoPath ? String(data.repoPath) : null) ??
258
+ (0, node_path_1.join)(worktreePath, '..', '..');
259
+ (0, worktree_1.removeWorktree)(repoPath, worktreePath);
260
+ this.emitResult('orchestrator:worktree-removed', data.cmdId, { ok: true });
261
+ }
262
+ async handleGitStatus(data) {
263
+ const status = (0, worktree_1.gitStatus)(String(data.worktreePath ?? ''));
264
+ this.emitResult('orchestrator:git-status-result', data.cmdId, {
265
+ stdout: JSON.stringify(status),
266
+ stderr: '',
267
+ exitCode: 0,
268
+ });
269
+ }
270
+ async handleGitCommit(data) {
271
+ const hash = (0, worktree_1.gitCommit)(String(data.worktreePath ?? ''), String(data.message ?? 'ai commit'));
272
+ this.emitResult('orchestrator:git-commit-result', data.cmdId, {
273
+ commitHash: hash,
274
+ });
275
+ }
276
+ async handleGitMerge(data) {
277
+ const repoPath = (data.repoPath ? String(data.repoPath) : null) ??
278
+ (data.projectId ? (0, config_1.projectCwd)(String(data.projectId)) : null);
279
+ if (!repoPath) {
280
+ throw new Error('No repository path - link the project folder with: teamshare-agent link --project <id> --path <folder>');
281
+ }
282
+ const result = (0, worktree_1.gitMerge)(repoPath, String(data.sourceBranch ?? ''), String(data.targetBranch ?? 'main'));
283
+ this.emitResult('orchestrator:git-merge-result', data.cmdId, result);
284
+ }
285
+ async handleGitPush(data) {
286
+ const repoPath = (data.repoPath ? String(data.repoPath) : null) ??
287
+ (data.projectId ? (0, config_1.projectCwd)(String(data.projectId)) : null);
288
+ if (!repoPath) {
289
+ throw new Error('No repository path - link the project folder with: teamshare-agent link --project <id> --path <folder>');
290
+ }
291
+ const result = (0, worktree_1.gitPush)(repoPath, String(data.branch ?? ''), String(data.remote ?? 'origin'), data.setUpstream !== false);
292
+ this.emitResult('orchestrator:git-push-result', data.cmdId, result);
293
+ }
294
+ async handleGitRevertHead(data) {
295
+ const worktreePath = String(data.worktreePath ?? '');
296
+ const result = (0, worktree_1.gitRevertHead)(worktreePath);
297
+ this.emitResult('orchestrator:git-revert-head-result', data.cmdId, result);
298
+ }
299
+ async handleGitResetHead(data) {
300
+ const worktreePath = String(data.worktreePath ?? '');
301
+ const commitHash = String(data.commitHash ?? '');
302
+ const result = (0, worktree_1.gitResetHead)(worktreePath, commitHash);
303
+ this.emitResult('orchestrator:git-reset-head-result', data.cmdId, result);
304
+ }
305
+ async handlePlannerRequest(data) {
306
+ const description = String(data.description ?? '');
307
+ const tasks = await this.plan(description);
308
+ this.emitResult('orchestrator:planner-result', data.cmdId, { tasks });
309
+ }
310
+ /**
311
+ * Verification-agent review (backend -> bridge): LLM-reviews the worktree
312
+ * diff and returns an approve/reject verdict. The model + per-provider API
313
+ * key are resolved from the payload (or the bridge's env). A rejected
314
+ * review makes the backend treat verification as failed (retry/escalation).
315
+ */
316
+ async handleReview(data) {
317
+ const worktreePath = String(data.worktreePath ?? '');
318
+ const modelSpec = String(data.model ?? process.env.LLM_MODEL ?? 'deepseek-chat');
319
+ const apiKey = (0, models_1.resolveApiKeyForProvider)(modelSpec);
320
+ const started = Date.now();
321
+ if (!apiKey) {
322
+ throw new Error('No API key for review - set the provider key (e.g. OPENROUTER_API_KEY) or LLM_API_KEY');
323
+ }
324
+ const diff = (0, worktree_1.gitDiff)(worktreePath);
325
+ if (!diff.trim()) {
326
+ // No changes to review - treat as approved (nothing to reject).
327
+ this.emitResult('orchestrator:review-result', data.cmdId, {
328
+ approved: true,
329
+ feedback: 'No changes in worktree',
330
+ durationMs: Date.now() - started,
331
+ });
332
+ return;
333
+ }
334
+ const resolved = (0, models_1.resolveModel)(modelSpec, process.env.LLM_BASE_URL);
335
+ const prompt = 'You are a senior code reviewer for a software build orchestrator. ' +
336
+ 'Review the git diff below. Approve ONLY if the change is correct, ' +
337
+ 'complete, follows the project conventions, and introduces no obvious ' +
338
+ 'bugs, security issues, or broken tests/builds. Return ONLY a JSON ' +
339
+ 'object, no prose: {"approved": true|false, "feedback": "1-3 sentence ' +
340
+ 'reason, or requested changes"}\n\nDIFF:\n' + diff.slice(0, 60_000);
341
+ try {
342
+ const raw = await (0, llm_1.complete)(prompt, {
343
+ baseUrl: resolved.baseUrl,
344
+ apiKey,
345
+ model: resolved.model,
346
+ temperature: 0.1,
347
+ maxTokens: 800,
348
+ });
349
+ const cleaned = raw.replace(/```json/gi, '').replace(/```/g, '').trim();
350
+ const start = cleaned.indexOf('{');
351
+ const end = cleaned.lastIndexOf('}');
352
+ const parsed = start >= 0 && end > start
353
+ ? JSON.parse(cleaned.slice(start, end + 1))
354
+ : null;
355
+ const approved = parsed && parsed.approved === true;
356
+ this.emitResult('orchestrator:review-result', data.cmdId, {
357
+ approved: Boolean(approved),
358
+ feedback: parsed?.feedback ? String(parsed.feedback) : undefined,
359
+ durationMs: Date.now() - started,
360
+ });
361
+ }
362
+ catch (err) {
363
+ throw new Error(`Review LLM failed: ${(0, config_1.msg)(err)}`);
364
+ }
365
+ }
366
+ /**
367
+ * Backend notifies bridge that an orchestrator task has a pending human
368
+ * question. Acknowledge immediately — the bridge relays this to any active
369
+ * agent session so it can pause and wait for the answer.
370
+ */
371
+ async handleQuestion(data) {
372
+ const taskId = String(data.taskId ?? '');
373
+ const body = String(data.body ?? '');
374
+ log.info(`Question pending for task ${taskId}: ${body.slice(0, 120)}`);
375
+ this.emitResult('orchestrator:question-answered', data.cmdId, {
376
+ acknowledged: true,
377
+ });
378
+ }
379
+ /**
380
+ * Signal to the backend that a human answered a question on a
381
+ * question_pending orchestrator task. Called by the daemon when it
382
+ * receives a `question.answered` wake for an orchestrator task.
383
+ */
384
+ signalQuestionAnswered(orchestratorTaskId, answerCommentId) {
385
+ if (!this.socket?.connected) {
386
+ log.warn(`Cannot signal question-answered: not connected`);
387
+ return;
388
+ }
389
+ this.socket.emit('orchestrator:question-answered', {
390
+ cmdId: `auto_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
391
+ orchestratorTaskId,
392
+ answerCommentId,
393
+ });
394
+ }
395
+ /**
396
+ * LLM task decomposition for the planner. Falls back to a single node when
397
+ * no LLM key is configured or the model doesn't return parseable JSON.
398
+ */
399
+ async plan(description) {
400
+ const single = () => [
401
+ {
402
+ title: description.slice(0, 200),
403
+ description,
404
+ dependencies: [],
405
+ },
406
+ ];
407
+ if (!description.trim())
408
+ return single();
409
+ const apiKey = process.env.LLM_API_KEY ?? process.env.CHAT_LLM_API_KEY;
410
+ if (!apiKey)
411
+ return single();
412
+ const baseUrl = process.env.LLM_BASE_URL ?? 'https://api.deepseek.com/v1';
413
+ const model = process.env.LLM_MODEL ?? 'deepseek-chat';
414
+ const prompt = 'You are a software build planner. Break the task below into 2-5 concrete, ' +
415
+ 'independently verifiable subtasks, in dependency order. ' +
416
+ 'Return ONLY a JSON array, no prose: ' +
417
+ '[{"title":"...","description":"...","dependencies":[indices into the array]}] ' +
418
+ '(dependencies are 0-based indices of steps that must finish first; empty array = none).\n\n' +
419
+ `TASK: ${description}`;
420
+ try {
421
+ const raw = await (0, llm_1.complete)(prompt, {
422
+ baseUrl,
423
+ apiKey,
424
+ model,
425
+ temperature: 0.2,
426
+ maxTokens: 2000,
427
+ });
428
+ const cleaned = raw
429
+ .replace(/```json/gi, '')
430
+ .replace(/```/g, '')
431
+ .trim();
432
+ const start = cleaned.indexOf('[');
433
+ const end = cleaned.lastIndexOf(']');
434
+ if (start < 0 || end <= start)
435
+ return single();
436
+ const parsed = JSON.parse(cleaned.slice(start, end + 1));
437
+ if (!Array.isArray(parsed) || parsed.length === 0)
438
+ return single();
439
+ return parsed.map((node, i) => ({
440
+ title: String(node.title ?? `Step ${i + 1}`).slice(0, 200),
441
+ description: String(node.description ?? ''),
442
+ dependencies: Array.isArray(node.dependencies)
443
+ ? node.dependencies.map(Number).filter((d) => Number.isInteger(d) && d >= 0 && d < parsed.length && d !== i)
444
+ : [],
445
+ }));
446
+ }
447
+ catch (err) {
448
+ log.warn(`planner LLM failed, using single node: ${(0, config_1.msg)(err)}`);
449
+ return single();
450
+ }
451
+ }
452
+ // ------------------------------------------------------------------
453
+ // Sender side
454
+ // ------------------------------------------------------------------
93
455
  /**
94
456
  * Send a command and wait for the result.
95
457
  */
@@ -111,9 +473,7 @@ class OrchestratorClient {
111
473
  this.socket.emit(event, { cmdId, ...payload });
112
474
  });
113
475
  }
114
- /**
115
- * Resolve a pending command by its id.
116
- */
476
+ /** Resolve a pending command by its id. */
117
477
  resolvePending(cmdId, data) {
118
478
  const pending = this.pending.get(cmdId);
119
479
  if (!pending) {
@@ -124,6 +484,14 @@ class OrchestratorClient {
124
484
  this.pending.delete(cmdId);
125
485
  pending.resolve(data);
126
486
  }
487
+ /** Emit a command result back to the backend. */
488
+ emitResult(event, cmdId, payload) {
489
+ if (!this.socket?.connected) {
490
+ log.warn(`Cannot emit ${event}: not connected`);
491
+ return;
492
+ }
493
+ this.socket.emit(event, { cmdId, ...payload });
494
+ }
127
495
  /**
128
496
  * Check if connected.
129
497
  */
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export { OrchestratorClient } from './client';
2
- export { createWorktree, removeWorktree, gitStatus, gitCommit, gitMerge, gitDiff, getWorktreeRoot, } from './worktree';
2
+ export { createWorktree, removeWorktree, gitStatus, gitCommit, gitMerge, gitDiff, gitPush, gitRemoteUrl, isGitRepo, gitInit, getWorktreeRoot, } from './worktree';
3
3
  export type { WorktreeInfo, GitStatus } from './worktree';
4
4
  export { runCommand, runVerificationCommand } from './runner';
5
5
  export type { CommandResult } from './runner';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.runVerificationCommand = exports.runCommand = exports.getWorktreeRoot = exports.gitDiff = exports.gitMerge = exports.gitCommit = exports.gitStatus = exports.removeWorktree = exports.createWorktree = exports.OrchestratorClient = void 0;
3
+ exports.runVerificationCommand = exports.runCommand = exports.getWorktreeRoot = exports.gitInit = exports.isGitRepo = exports.gitRemoteUrl = exports.gitPush = exports.gitDiff = exports.gitMerge = exports.gitCommit = exports.gitStatus = exports.removeWorktree = exports.createWorktree = exports.OrchestratorClient = void 0;
4
4
  var client_1 = require("./client");
5
5
  Object.defineProperty(exports, "OrchestratorClient", { enumerable: true, get: function () { return client_1.OrchestratorClient; } });
6
6
  var worktree_1 = require("./worktree");
@@ -10,6 +10,10 @@ Object.defineProperty(exports, "gitStatus", { enumerable: true, get: function ()
10
10
  Object.defineProperty(exports, "gitCommit", { enumerable: true, get: function () { return worktree_1.gitCommit; } });
11
11
  Object.defineProperty(exports, "gitMerge", { enumerable: true, get: function () { return worktree_1.gitMerge; } });
12
12
  Object.defineProperty(exports, "gitDiff", { enumerable: true, get: function () { return worktree_1.gitDiff; } });
13
+ Object.defineProperty(exports, "gitPush", { enumerable: true, get: function () { return worktree_1.gitPush; } });
14
+ Object.defineProperty(exports, "gitRemoteUrl", { enumerable: true, get: function () { return worktree_1.gitRemoteUrl; } });
15
+ Object.defineProperty(exports, "isGitRepo", { enumerable: true, get: function () { return worktree_1.isGitRepo; } });
16
+ Object.defineProperty(exports, "gitInit", { enumerable: true, get: function () { return worktree_1.gitInit; } });
13
17
  Object.defineProperty(exports, "getWorktreeRoot", { enumerable: true, get: function () { return worktree_1.getWorktreeRoot; } });
14
18
  var runner_1 = require("./runner");
15
19
  Object.defineProperty(exports, "runCommand", { enumerable: true, get: function () { return runner_1.runCommand; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAC3B,uCAQoB;AAPlB,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,qGAAA,SAAS,OAAA;AACT,qGAAA,SAAS,OAAA;AACT,oGAAA,QAAQ,OAAA;AACR,mGAAA,OAAO,OAAA;AACP,2GAAA,eAAe,OAAA;AAGjB,mCAA8D;AAArD,oGAAA,UAAU,OAAA;AAAE,gHAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/orchestrator/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAC3B,uCAYoB;AAXlB,0GAAA,cAAc,OAAA;AACd,0GAAA,cAAc,OAAA;AACd,qGAAA,SAAS,OAAA;AACT,qGAAA,SAAS,OAAA;AACT,oGAAA,QAAQ,OAAA;AACR,mGAAA,OAAO,OAAA;AACP,mGAAA,OAAO,OAAA;AACP,wGAAA,YAAY,OAAA;AACZ,qGAAA,SAAS,OAAA;AACT,mGAAA,OAAO,OAAA;AACP,2GAAA,eAAe,OAAA;AAGjB,mCAA8D;AAArD,oGAAA,UAAU,OAAA;AAAE,gHAAA,sBAAsB,OAAA"}
@@ -41,3 +41,55 @@ export declare function gitMerge(repoPath: string, sourceBranch: string, targetB
41
41
  * Get the diff for a worktree.
42
42
  */
43
43
  export declare function gitDiff(worktreePath: string): string;
44
+ /**
45
+ * Push a branch to a remote.
46
+ * Uses the given remote name (defaults to 'origin'). Returns success or the error.
47
+ */
48
+ export declare function gitPush(repoPath: string, branch: string, remote?: string, setUpstream?: boolean): {
49
+ success: boolean;
50
+ remoteRef?: string;
51
+ error?: string;
52
+ };
53
+ /**
54
+ * Revert the last commit in a worktree (git revert HEAD --no-edit).
55
+ * Returns the new commit hash after the revert.
56
+ */
57
+ export declare function gitRevertHead(worktreePath: string): {
58
+ commitHash: string;
59
+ };
60
+ /**
61
+ * Hard reset a worktree to a specific commit (git reset --hard <hash>).
62
+ * Discards ALL uncommitted changes and moves HEAD to the target commit.
63
+ */
64
+ export declare function gitResetHead(worktreePath: string, commitHash: string): {
65
+ success: boolean;
66
+ };
67
+ /**
68
+ * Get the remote URL for a git repo. Returns null if not a git repo or no remote.
69
+ */
70
+ export declare function gitRemoteUrl(repoPath: string, remote?: string): string | null;
71
+ /**
72
+ * Check whether a directory is a git repository.
73
+ */
74
+ export declare function isGitRepo(dir: string): boolean;
75
+ /**
76
+ * Initialize a git repository in a directory (git init + optional remote).
77
+ * Returns the origin URL if a remote was added, else null.
78
+ */
79
+ export declare function gitInit(dir: string, remoteName?: string, originUrl?: string): {
80
+ success: boolean;
81
+ originUrl?: string;
82
+ error?: string;
83
+ };
84
+ /**
85
+ * Ensure a directory is a git repository. If not, initialise it.
86
+ * This allows the orchestrator to work on projects that have no git repo yet.
87
+ */
88
+ export declare function ensureRepoExists(repoPath: string): void;
89
+ /**
90
+ * Ensure a local bare repo exists and is configured as the origin remote for
91
+ * `repoPath`. When no remote is configured (the user hasn't linked a GitHub /
92
+ * Gitea repo), this allows `git push` to succeed against a local bare repo
93
+ * at `~/.teamshare/bare-repos/<projectId>.git/`.
94
+ */
95
+ export declare function ensureLocalBareRepo(repoPath: string, projectId: string): string;