sisyphi 0.1.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/dist/cli.js ADDED
@@ -0,0 +1,532 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ socketPath
4
+ } from "./chunk-5WP7O7D3.js";
5
+
6
+ // src/cli/index.ts
7
+ import { Command } from "commander";
8
+
9
+ // src/cli/commands/start.ts
10
+ import { execSync } from "child_process";
11
+
12
+ // src/cli/client.ts
13
+ import { connect } from "net";
14
+ async function sendRequest(request) {
15
+ const sock = socketPath();
16
+ return new Promise((resolve, reject) => {
17
+ const socket = connect(sock);
18
+ let data = "";
19
+ const timeout = setTimeout(() => {
20
+ socket.destroy();
21
+ reject(new Error("Request timed out after 10s"));
22
+ }, 1e4);
23
+ socket.on("connect", () => {
24
+ socket.write(JSON.stringify(request) + "\n");
25
+ });
26
+ socket.on("data", (chunk) => {
27
+ data += chunk.toString();
28
+ const newlineIdx = data.indexOf("\n");
29
+ if (newlineIdx !== -1) {
30
+ clearTimeout(timeout);
31
+ const line = data.slice(0, newlineIdx);
32
+ socket.destroy();
33
+ try {
34
+ resolve(JSON.parse(line));
35
+ } catch {
36
+ reject(new Error(`Invalid JSON response from daemon: ${line}`));
37
+ }
38
+ }
39
+ });
40
+ socket.on("error", (err) => {
41
+ clearTimeout(timeout);
42
+ if (err.code === "ENOENT" || err.code === "ECONNREFUSED") {
43
+ reject(new Error(
44
+ `Sisyphus daemon is not running.
45
+ Start it with: launchctl load ~/Library/LaunchAgents/com.sisyphus.daemon.plist
46
+ Or check logs at: ~/.sisyphus/daemon.log`
47
+ ));
48
+ } else {
49
+ reject(err);
50
+ }
51
+ });
52
+ });
53
+ }
54
+
55
+ // src/cli/commands/start.ts
56
+ function getTmuxSession() {
57
+ try {
58
+ return execSync('tmux display-message -p "#{session_name}"', { encoding: "utf8" }).trim();
59
+ } catch {
60
+ throw new Error("Not running inside tmux");
61
+ }
62
+ }
63
+ function getTmuxWindow() {
64
+ try {
65
+ return execSync('tmux display-message -p "#{window_id}"', { encoding: "utf8" }).trim();
66
+ } catch {
67
+ throw new Error("Not running inside tmux");
68
+ }
69
+ }
70
+ function registerStart(program2) {
71
+ program2.command("start").description("Start a new sisyphus session").argument("<task>", "Task description for the orchestrator").action(async (task) => {
72
+ const tmuxSession = getTmuxSession();
73
+ const tmuxWindow = getTmuxWindow();
74
+ const request = { type: "start", task, cwd: process.cwd(), tmuxSession, tmuxWindow };
75
+ const response = await sendRequest(request);
76
+ if (response.ok) {
77
+ const sessionId = response.data?.sessionId;
78
+ console.log(`Session started: ${sessionId}`);
79
+ if (response.data?.tmuxWindow) {
80
+ console.log(`Orchestrator spawned in tmux window: ${response.data.tmuxWindow}`);
81
+ }
82
+ } else {
83
+ console.error(`Error: ${response.error}`);
84
+ process.exit(1);
85
+ }
86
+ });
87
+ }
88
+
89
+ // src/cli/commands/spawn.ts
90
+ function registerSpawn(program2) {
91
+ program2.command("spawn").description("Spawn a new agent (orchestrator only)").option("--agent-type <type>", "Agent role label (default: worker)", "worker").requiredOption("--name <name>", "Agent name").requiredOption("--instruction <instruction>", "Task instruction for the agent").action(async (opts) => {
92
+ const sessionId = process.env.SISYPHUS_SESSION_ID;
93
+ if (!sessionId) {
94
+ console.error("Error: SISYPHUS_SESSION_ID environment variable not set");
95
+ process.exit(1);
96
+ }
97
+ const request = {
98
+ type: "spawn",
99
+ sessionId,
100
+ agentType: opts.agentType,
101
+ name: opts.name,
102
+ instruction: opts.instruction
103
+ };
104
+ const response = await sendRequest(request);
105
+ if (response.ok) {
106
+ const agentId = response.data?.agentId;
107
+ console.log(`Agent spawned: ${agentId}`);
108
+ console.log("Run `sisyphus yield` when done spawning agents.");
109
+ } else {
110
+ console.error(`Error: ${response.error}`);
111
+ if (response.error?.includes("Unknown session")) console.error("Hint: run `sisyphus list` to see active sessions.");
112
+ process.exit(1);
113
+ }
114
+ });
115
+ }
116
+
117
+ // src/cli/stdin.ts
118
+ function readStdin() {
119
+ if (process.stdin.isTTY) return Promise.resolve(null);
120
+ return new Promise((resolve, reject) => {
121
+ const chunks = [];
122
+ process.stdin.on("data", (chunk) => chunks.push(chunk));
123
+ process.stdin.on("end", () => {
124
+ const text = Buffer.concat(chunks).toString("utf-8").trim();
125
+ resolve(text || null);
126
+ });
127
+ process.stdin.on("error", reject);
128
+ });
129
+ }
130
+
131
+ // src/cli/commands/submit.ts
132
+ function registerSubmit(program2) {
133
+ program2.command("submit").description("Submit work report and exit (agent only)").option("--report <report>", "Work report (or pipe via stdin)").action(async (opts) => {
134
+ const sessionId = process.env.SISYPHUS_SESSION_ID;
135
+ const agentId = process.env.SISYPHUS_AGENT_ID;
136
+ if (!sessionId || !agentId) {
137
+ console.error("Error: SISYPHUS_SESSION_ID and SISYPHUS_AGENT_ID environment variables must be set");
138
+ process.exit(1);
139
+ }
140
+ const report = opts.report ?? await readStdin();
141
+ if (!report) {
142
+ console.error("Error: provide --report or pipe content via stdin");
143
+ process.exit(1);
144
+ }
145
+ const request = { type: "submit", sessionId, agentId, report };
146
+ const response = await sendRequest(request);
147
+ if (response.ok) {
148
+ console.log("Report submitted successfully");
149
+ console.log("Your pane will close. The orchestrator resumes when all agents finish.");
150
+ } else {
151
+ console.error(`Error: ${response.error}`);
152
+ process.exit(1);
153
+ }
154
+ });
155
+ }
156
+
157
+ // src/cli/commands/yield.ts
158
+ function registerYield(program2) {
159
+ program2.command("yield").description("Yield control back to daemon (orchestrator only)").action(async () => {
160
+ const sessionId = process.env.SISYPHUS_SESSION_ID;
161
+ if (!sessionId) {
162
+ console.error("Error: SISYPHUS_SESSION_ID environment variable not set");
163
+ process.exit(1);
164
+ }
165
+ const request = { type: "yield", sessionId, agentId: "orchestrator" };
166
+ const response = await sendRequest(request);
167
+ if (response.ok) {
168
+ console.log("Yielded. Waiting for agents to complete.");
169
+ } else {
170
+ console.error(`Error: ${response.error}`);
171
+ process.exit(1);
172
+ }
173
+ });
174
+ }
175
+
176
+ // src/cli/commands/complete.ts
177
+ function registerComplete(program2) {
178
+ program2.command("complete").description("Mark session as completed (orchestrator only)").requiredOption("--report <report>", "Final completion report").action(async (opts) => {
179
+ const sessionId = process.env.SISYPHUS_SESSION_ID;
180
+ if (!sessionId) {
181
+ console.error("Error: SISYPHUS_SESSION_ID environment variable not set");
182
+ process.exit(1);
183
+ }
184
+ const request = { type: "complete", sessionId, report: opts.report };
185
+ const response = await sendRequest(request);
186
+ if (response.ok) {
187
+ console.log("Session completed.");
188
+ console.log("All panes will close.");
189
+ } else {
190
+ console.error(`Error: ${response.error}`);
191
+ process.exit(1);
192
+ }
193
+ });
194
+ }
195
+
196
+ // src/cli/commands/status.ts
197
+ var STATUS_COLORS = {
198
+ active: "\x1B[32m",
199
+ // green
200
+ paused: "\x1B[33m",
201
+ // yellow
202
+ completed: "\x1B[36m",
203
+ // cyan
204
+ running: "\x1B[32m",
205
+ // green
206
+ killed: "\x1B[31m",
207
+ // red
208
+ crashed: "\x1B[31m",
209
+ // red
210
+ lost: "\x1B[90m",
211
+ // gray
212
+ draft: "\x1B[2m",
213
+ // dim
214
+ pending: "\x1B[90m",
215
+ // gray
216
+ in_progress: "\x1B[33m",
217
+ // yellow
218
+ done: "\x1B[32m"
219
+ // green
220
+ };
221
+ var RESET = "\x1B[0m";
222
+ var BOLD = "\x1B[1m";
223
+ var DIM = "\x1B[2m";
224
+ function colorize(text, status) {
225
+ const color = STATUS_COLORS[status] ?? "";
226
+ return `${color}${text}${RESET}`;
227
+ }
228
+ function formatDuration(startIso, endIso) {
229
+ const start = new Date(startIso).getTime();
230
+ const end = endIso ? new Date(endIso).getTime() : Date.now();
231
+ const totalSeconds = Math.floor((end - start) / 1e3);
232
+ if (totalSeconds < 0) return "0s";
233
+ const hours = Math.floor(totalSeconds / 3600);
234
+ const minutes = Math.floor(totalSeconds % 3600 / 60);
235
+ const seconds = totalSeconds % 60;
236
+ const parts = [];
237
+ if (hours > 0) parts.push(`${hours}h`);
238
+ if (minutes > 0) parts.push(`${minutes}m`);
239
+ parts.push(`${seconds}s`);
240
+ return parts.join(" ");
241
+ }
242
+ function formatAgent(agent) {
243
+ const status = colorize(agent.status, agent.status);
244
+ const name = `${BOLD}${agent.name}${RESET}`;
245
+ const type = `${DIM}(${agent.agentType})${RESET}`;
246
+ const duration = formatDuration(agent.spawnedAt, agent.completedAt);
247
+ let line = ` ${agent.id} ${name} ${type} \u2014 ${status} ${DIM}(${duration})${RESET}`;
248
+ if (agent.reports.length > 0) {
249
+ for (const r of agent.reports) {
250
+ const label = r.type === "final" ? "Final" : "Update";
251
+ line += `
252
+ ${label}: ${r.summary}`;
253
+ }
254
+ }
255
+ if (agent.killedReason) {
256
+ line += `
257
+ Reason: ${agent.killedReason}`;
258
+ }
259
+ return line;
260
+ }
261
+ function formatTask(task) {
262
+ const status = colorize(task.status, task.status);
263
+ return ` ${task.id}: ${task.description} [${status}]`;
264
+ }
265
+ function formatCycle(cycle) {
266
+ const duration = cycle.completedAt ? ` ${DIM}(${formatDuration(cycle.timestamp, cycle.completedAt)})${RESET}` : ` ${DIM}(running)${RESET}`;
267
+ const agents = cycle.agentsSpawned.length > 0 ? ` \u2014 agents: ${cycle.agentsSpawned.join(", ")}` : "";
268
+ return ` Cycle ${cycle.cycle}${duration}${agents}`;
269
+ }
270
+ function printSession(session) {
271
+ const status = colorize(session.status, session.status);
272
+ const sessionDuration = formatDuration(session.createdAt, session.completedAt);
273
+ console.log(`
274
+ ${BOLD}Session: ${session.id}${RESET}`);
275
+ console.log(` Status: ${status}`);
276
+ console.log(` Task: ${session.task}`);
277
+ console.log(` CWD: ${session.cwd}`);
278
+ console.log(` Created: ${session.createdAt}`);
279
+ console.log(` Duration: ${sessionDuration}${session.completedAt ? "" : " (ongoing)"}`);
280
+ console.log(` Orchestrator cycles: ${session.orchestratorCycles.length}`);
281
+ if (session.orchestratorCycles.length > 0) {
282
+ console.log(`
283
+ ${BOLD}Cycles:${RESET}`);
284
+ for (const cycle of session.orchestratorCycles) {
285
+ console.log(formatCycle(cycle));
286
+ }
287
+ }
288
+ if (session.tasks.length > 0) {
289
+ console.log(`
290
+ ${BOLD}Tasks:${RESET}`);
291
+ for (const task of session.tasks) {
292
+ console.log(formatTask(task));
293
+ }
294
+ }
295
+ if (session.agents.length > 0) {
296
+ console.log(`
297
+ ${BOLD}Agents:${RESET}`);
298
+ for (const agent of session.agents) {
299
+ console.log(formatAgent(agent));
300
+ }
301
+ }
302
+ }
303
+ function registerStatus(program2) {
304
+ program2.command("status").description("Show session status").argument("[session-id]", "Session ID (defaults to SISYPHUS_SESSION_ID env)").action(async (sessionIdArg) => {
305
+ const sessionId = sessionIdArg ?? process.env.SISYPHUS_SESSION_ID;
306
+ const request = { type: "status", sessionId };
307
+ const response = await sendRequest(request);
308
+ if (response.ok) {
309
+ const session = response.data?.session;
310
+ if (session) {
311
+ printSession(session);
312
+ } else {
313
+ console.log("No session found");
314
+ }
315
+ } else {
316
+ console.error(`Error: ${response.error}`);
317
+ process.exit(1);
318
+ }
319
+ });
320
+ }
321
+
322
+ // src/cli/commands/tasks.ts
323
+ function getSessionId() {
324
+ const sessionId = process.env.SISYPHUS_SESSION_ID;
325
+ if (!sessionId) {
326
+ console.error("Error: SISYPHUS_SESSION_ID environment variable not set");
327
+ process.exit(1);
328
+ }
329
+ return sessionId;
330
+ }
331
+ var STATUS_COLORS2 = {
332
+ draft: "\x1B[2m",
333
+ // dim
334
+ pending: "\x1B[90m",
335
+ // gray
336
+ in_progress: "\x1B[33m",
337
+ // yellow
338
+ done: "\x1B[32m"
339
+ // green
340
+ };
341
+ var RESET2 = "\x1B[0m";
342
+ function registerTasks(program2) {
343
+ const tasks = program2.command("tasks").description("Manage session tasks");
344
+ tasks.command("add").description("Add a new task").argument("[description]", "Task description (or pipe via stdin)").option("--status <status>", "Initial status (draft|pending)", "pending").action(async (descriptionArg, opts) => {
345
+ const description = descriptionArg ?? await readStdin();
346
+ if (!description) {
347
+ console.error("Error: provide a description argument or pipe via stdin");
348
+ process.exit(1);
349
+ }
350
+ const sessionId = getSessionId();
351
+ const request = { type: "tasks_add", sessionId, description, status: opts.status !== "pending" ? opts.status : void 0 };
352
+ const response = await sendRequest(request);
353
+ if (response.ok) {
354
+ const taskId = response.data?.taskId;
355
+ console.log(`Task added: ${taskId} [${opts.status}]`);
356
+ } else {
357
+ console.error(`Error: ${response.error}`);
358
+ if (response.error?.includes("Unknown session")) console.error("Hint: run `sisyphus list` to see active sessions.");
359
+ process.exit(1);
360
+ }
361
+ });
362
+ tasks.command("update").description("Update a task").argument("<task-id>", "Task ID (e.g. t1)").option("--status <status>", "New status (draft|pending|in_progress|done)").option("--description <description>", "New description").action(async (taskId, opts) => {
363
+ if (!opts.status && !opts.description) {
364
+ console.error("Error: provide --status and/or --description");
365
+ process.exit(1);
366
+ }
367
+ const sessionId = getSessionId();
368
+ const request = { type: "tasks_update", sessionId, taskId, status: opts.status, description: opts.description };
369
+ const response = await sendRequest(request);
370
+ if (response.ok) {
371
+ const parts = [];
372
+ if (opts.status) parts.push(`status \u2192 ${opts.status}`);
373
+ if (opts.description) parts.push(`description updated`);
374
+ console.log(`Task ${taskId}: ${parts.join(", ")}`);
375
+ } else {
376
+ console.error(`Error: ${response.error}`);
377
+ if (response.error?.includes("not found")) console.error("Hint: run `sisyphus tasks list` to see current tasks.");
378
+ if (response.error?.includes("Unknown session")) console.error("Hint: run `sisyphus list` to see active sessions.");
379
+ process.exit(1);
380
+ }
381
+ });
382
+ tasks.command("list").description("List all tasks").action(async () => {
383
+ const sessionId = getSessionId();
384
+ const request = { type: "tasks_list", sessionId };
385
+ const response = await sendRequest(request);
386
+ if (response.ok) {
387
+ const taskList = response.data?.tasks ?? [];
388
+ if (taskList.length === 0) {
389
+ console.log("No tasks");
390
+ return;
391
+ }
392
+ for (const task of taskList) {
393
+ const color = STATUS_COLORS2[task.status] ?? "";
394
+ console.log(` ${task.id}: ${task.description} [${color}${task.status}${RESET2}]`);
395
+ }
396
+ } else {
397
+ console.error(`Error: ${response.error}`);
398
+ if (response.error?.includes("Unknown session")) console.error("Hint: run `sisyphus list` to see active sessions.");
399
+ process.exit(1);
400
+ }
401
+ });
402
+ }
403
+
404
+ // src/cli/commands/list.ts
405
+ var STATUS_COLORS3 = {
406
+ active: "\x1B[32m",
407
+ paused: "\x1B[33m",
408
+ completed: "\x1B[36m"
409
+ };
410
+ var RESET3 = "\x1B[0m";
411
+ var BOLD2 = "\x1B[1m";
412
+ var DIM2 = "\x1B[2m";
413
+ function registerList(program2) {
414
+ program2.command("list").description("List all sessions").action(async () => {
415
+ const request = { type: "list" };
416
+ const response = await sendRequest(request);
417
+ if (response.ok) {
418
+ const sessions = response.data?.sessions ?? [];
419
+ if (sessions.length === 0) {
420
+ console.log("No sessions");
421
+ return;
422
+ }
423
+ for (const s of sessions) {
424
+ const color = STATUS_COLORS3[s.status] ?? "";
425
+ const status = `${color}${s.status}${RESET3}`;
426
+ const agents = `${DIM2}${s.agentCount} agent(s)${RESET3}`;
427
+ console.log(` ${BOLD2}${s.id}${RESET3} ${status} ${agents} ${s.task}`);
428
+ }
429
+ } else {
430
+ console.error(`Error: ${response.error}`);
431
+ process.exit(1);
432
+ }
433
+ });
434
+ }
435
+
436
+ // src/cli/commands/report.ts
437
+ function registerReport(program2) {
438
+ program2.command("report").description("Send a progress report without exiting (agent only)").option("--message <message>", "Progress report content").action(async (opts) => {
439
+ const sessionId = process.env.SISYPHUS_SESSION_ID;
440
+ const agentId = process.env.SISYPHUS_AGENT_ID;
441
+ if (!sessionId || !agentId) {
442
+ console.error("Error: SISYPHUS_SESSION_ID and SISYPHUS_AGENT_ID environment variables must be set");
443
+ process.exit(1);
444
+ }
445
+ const content = opts.message ?? await readStdin();
446
+ if (!content) {
447
+ console.error("Error: provide --message or pipe content via stdin");
448
+ process.exit(1);
449
+ }
450
+ const request = { type: "report", sessionId, agentId, content };
451
+ const response = await sendRequest(request);
452
+ if (response.ok) {
453
+ console.log("Progress report recorded");
454
+ } else {
455
+ console.error(`Error: ${response.error}`);
456
+ process.exit(1);
457
+ }
458
+ });
459
+ }
460
+
461
+ // src/cli/commands/resume.ts
462
+ import { execSync as execSync2 } from "child_process";
463
+ function getTmuxSession2() {
464
+ try {
465
+ return execSync2('tmux display-message -p "#{session_name}"', { encoding: "utf8" }).trim();
466
+ } catch {
467
+ throw new Error("Not running inside tmux");
468
+ }
469
+ }
470
+ function getTmuxWindow2() {
471
+ try {
472
+ return execSync2('tmux display-message -p "#{window_id}"', { encoding: "utf8" }).trim();
473
+ } catch {
474
+ throw new Error("Not running inside tmux");
475
+ }
476
+ }
477
+ function registerResume(program2) {
478
+ program2.command("resume").description("Resume a paused session").argument("<session-id>", "Session ID to resume").argument("[message]", "Additional instructions for the orchestrator").action(async (sessionId, message) => {
479
+ const tmuxSession = getTmuxSession2();
480
+ const tmuxWindow = getTmuxWindow2();
481
+ const cwd = process.cwd();
482
+ const request = { type: "resume", sessionId, cwd, tmuxSession, tmuxWindow, message };
483
+ const response = await sendRequest(request);
484
+ if (response.ok) {
485
+ console.log(`Session ${sessionId} resumed`);
486
+ if (response.data?.tmuxWindow) {
487
+ console.log(`Orchestrator respawned in tmux window: ${response.data.tmuxWindow}`);
488
+ }
489
+ } else {
490
+ console.error(`Error: ${response.error}`);
491
+ process.exit(1);
492
+ }
493
+ });
494
+ }
495
+
496
+ // src/cli/commands/kill.ts
497
+ function registerKill(program2) {
498
+ program2.command("kill <sessionId>").description("Kill a running session and all its agents").action(async (sessionId) => {
499
+ const request = { type: "kill", sessionId };
500
+ const response = await sendRequest(request);
501
+ if (response.ok) {
502
+ console.log(`Session ${sessionId} killed.`);
503
+ if (response.data) {
504
+ const { killedAgents } = response.data;
505
+ console.log(`Cleaned up: ${killedAgents} agent(s) killed, tmux window removed.`);
506
+ }
507
+ } else {
508
+ console.error(`Error: ${response.error}`);
509
+ process.exit(1);
510
+ }
511
+ });
512
+ }
513
+
514
+ // src/cli/index.ts
515
+ var program = new Command();
516
+ program.name("sisyphus").description("tmux-integrated orchestration daemon for Claude Code").version("0.1.0");
517
+ registerStart(program);
518
+ registerSpawn(program);
519
+ registerSubmit(program);
520
+ registerReport(program);
521
+ registerYield(program);
522
+ registerComplete(program);
523
+ registerStatus(program);
524
+ registerTasks(program);
525
+ registerList(program);
526
+ registerResume(program);
527
+ registerKill(program);
528
+ program.parseAsync(process.argv).catch((err) => {
529
+ console.error(err.message);
530
+ process.exit(1);
531
+ });
532
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/cli/commands/start.ts","../src/cli/client.ts","../src/cli/commands/spawn.ts","../src/cli/stdin.ts","../src/cli/commands/submit.ts","../src/cli/commands/yield.ts","../src/cli/commands/complete.ts","../src/cli/commands/status.ts","../src/cli/commands/tasks.ts","../src/cli/commands/list.ts","../src/cli/commands/report.ts","../src/cli/commands/resume.ts","../src/cli/commands/kill.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { registerStart } from './commands/start.js';\nimport { registerSpawn } from './commands/spawn.js';\nimport { registerSubmit } from './commands/submit.js';\nimport { registerYield } from './commands/yield.js';\nimport { registerComplete } from './commands/complete.js';\nimport { registerStatus } from './commands/status.js';\nimport { registerTasks } from './commands/tasks.js';\nimport { registerList } from './commands/list.js';\nimport { registerReport } from './commands/report.js';\nimport { registerResume } from './commands/resume.js';\nimport { registerKill } from './commands/kill.js';\n\nconst program = new Command();\n\nprogram\n .name('sisyphus')\n .description('tmux-integrated orchestration daemon for Claude Code')\n .version('0.1.0');\n\nregisterStart(program);\nregisterSpawn(program);\nregisterSubmit(program);\nregisterReport(program);\nregisterYield(program);\nregisterComplete(program);\nregisterStatus(program);\nregisterTasks(program);\nregisterList(program);\nregisterResume(program);\nregisterKill(program);\n\nprogram.parseAsync(process.argv).catch((err: Error) => {\n console.error(err.message);\n process.exit(1);\n});\n","import type { Command } from 'commander';\nimport { execSync } from 'node:child_process';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\nfunction getTmuxSession(): string {\n try {\n return execSync('tmux display-message -p \"#{session_name}\"', { encoding: 'utf8' }).trim();\n } catch {\n throw new Error('Not running inside tmux');\n }\n}\n\nfunction getTmuxWindow(): string {\n try {\n return execSync('tmux display-message -p \"#{window_id}\"', { encoding: 'utf8' }).trim();\n } catch {\n throw new Error('Not running inside tmux');\n }\n}\n\nexport function registerStart(program: Command): void {\n program\n .command('start')\n .description('Start a new sisyphus session')\n .argument('<task>', 'Task description for the orchestrator')\n .action(async (task: string) => {\n const tmuxSession = getTmuxSession();\n const tmuxWindow = getTmuxWindow();\n const request: Request = { type: 'start', task, cwd: process.cwd(), tmuxSession, tmuxWindow };\n const response = await sendRequest(request);\n if (response.ok) {\n const sessionId = response.data?.sessionId as string;\n console.log(`Session started: ${sessionId}`);\n if (response.data?.tmuxWindow) {\n console.log(`Orchestrator spawned in tmux window: ${response.data.tmuxWindow}`);\n }\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import { connect } from 'node:net';\nimport { socketPath } from '../shared/paths.js';\nimport type { Request, Response } from '../shared/protocol.js';\n\nexport async function sendRequest(request: Request): Promise<Response> {\n const sock = socketPath();\n\n return new Promise<Response>((resolve, reject) => {\n const socket = connect(sock);\n let data = '';\n\n const timeout = setTimeout(() => {\n socket.destroy();\n reject(new Error('Request timed out after 10s'));\n }, 10_000);\n\n socket.on('connect', () => {\n socket.write(JSON.stringify(request) + '\\n');\n });\n\n socket.on('data', (chunk) => {\n data += chunk.toString();\n const newlineIdx = data.indexOf('\\n');\n if (newlineIdx !== -1) {\n clearTimeout(timeout);\n const line = data.slice(0, newlineIdx);\n socket.destroy();\n try {\n resolve(JSON.parse(line) as Response);\n } catch {\n reject(new Error(`Invalid JSON response from daemon: ${line}`));\n }\n }\n });\n\n socket.on('error', (err) => {\n clearTimeout(timeout);\n if ((err as NodeJS.ErrnoException).code === 'ENOENT' || (err as NodeJS.ErrnoException).code === 'ECONNREFUSED') {\n reject(new Error(\n `Sisyphus daemon is not running.\\n` +\n ` Start it with: launchctl load ~/Library/LaunchAgents/com.sisyphus.daemon.plist\\n` +\n ` Or check logs at: ~/.sisyphus/daemon.log`\n ));\n } else {\n reject(err);\n }\n });\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\nexport function registerSpawn(program: Command): void {\n program\n .command('spawn')\n .description('Spawn a new agent (orchestrator only)')\n .option('--agent-type <type>', 'Agent role label (default: worker)', 'worker')\n .requiredOption('--name <name>', 'Agent name')\n .requiredOption('--instruction <instruction>', 'Task instruction for the agent')\n .action(async (opts: { agentType: string; name: string; instruction: string }) => {\n const sessionId = process.env.SISYPHUS_SESSION_ID;\n if (!sessionId) {\n console.error('Error: SISYPHUS_SESSION_ID environment variable not set');\n process.exit(1);\n }\n\n const request: Request = {\n type: 'spawn',\n sessionId,\n agentType: opts.agentType,\n name: opts.name,\n instruction: opts.instruction,\n };\n const response = await sendRequest(request);\n if (response.ok) {\n const agentId = response.data?.agentId as string;\n console.log(`Agent spawned: ${agentId}`);\n console.log(\"Run `sisyphus yield` when done spawning agents.\");\n } else {\n console.error(`Error: ${response.error}`);\n if (response.error?.includes(\"Unknown session\")) console.error(\"Hint: run `sisyphus list` to see active sessions.\");\n process.exit(1);\n }\n });\n}\n","export function readStdin(): Promise<string | null> {\n if (process.stdin.isTTY) return Promise.resolve(null);\n\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n process.stdin.on('data', (chunk: Buffer) => chunks.push(chunk));\n process.stdin.on('end', () => {\n const text = Buffer.concat(chunks).toString('utf-8').trim();\n resolve(text || null);\n });\n process.stdin.on('error', reject);\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\nimport { readStdin } from '../stdin.js';\n\nexport function registerSubmit(program: Command): void {\n program\n .command('submit')\n .description('Submit work report and exit (agent only)')\n .option('--report <report>', 'Work report (or pipe via stdin)')\n .action(async (opts: { report?: string }) => {\n const sessionId = process.env.SISYPHUS_SESSION_ID;\n const agentId = process.env.SISYPHUS_AGENT_ID;\n if (!sessionId || !agentId) {\n console.error('Error: SISYPHUS_SESSION_ID and SISYPHUS_AGENT_ID environment variables must be set');\n process.exit(1);\n }\n\n const report = opts.report ?? await readStdin();\n if (!report) {\n console.error('Error: provide --report or pipe content via stdin');\n process.exit(1);\n }\n\n const request: Request = { type: 'submit', sessionId, agentId, report };\n const response = await sendRequest(request);\n if (response.ok) {\n console.log('Report submitted successfully');\n console.log('Your pane will close. The orchestrator resumes when all agents finish.');\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\nexport function registerYield(program: Command): void {\n program\n .command('yield')\n .description('Yield control back to daemon (orchestrator only)')\n .action(async () => {\n const sessionId = process.env.SISYPHUS_SESSION_ID;\n if (!sessionId) {\n console.error('Error: SISYPHUS_SESSION_ID environment variable not set');\n process.exit(1);\n }\n\n const request: Request = { type: 'yield', sessionId, agentId: 'orchestrator' };\n const response = await sendRequest(request);\n if (response.ok) {\n console.log('Yielded. Waiting for agents to complete.');\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\nexport function registerComplete(program: Command): void {\n program\n .command('complete')\n .description('Mark session as completed (orchestrator only)')\n .requiredOption('--report <report>', 'Final completion report')\n .action(async (opts: { report: string }) => {\n const sessionId = process.env.SISYPHUS_SESSION_ID;\n if (!sessionId) {\n console.error('Error: SISYPHUS_SESSION_ID environment variable not set');\n process.exit(1);\n }\n\n const request: Request = { type: 'complete', sessionId, report: opts.report };\n const response = await sendRequest(request);\n if (response.ok) {\n console.log('Session completed.');\n console.log('All panes will close.');\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\nimport type { Session, Agent, Task, OrchestratorCycle } from '../../shared/types.js';\n\nconst STATUS_COLORS: Record<string, string> = {\n active: '\\x1b[32m', // green\n paused: '\\x1b[33m', // yellow\n completed: '\\x1b[36m', // cyan\n running: '\\x1b[32m', // green\n killed: '\\x1b[31m', // red\n crashed: '\\x1b[31m', // red\n lost: '\\x1b[90m', // gray\n draft: '\\x1b[2m', // dim\n pending: '\\x1b[90m', // gray\n in_progress: '\\x1b[33m', // yellow\n done: '\\x1b[32m', // green\n};\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\n\nfunction colorize(text: string, status: string): string {\n const color = STATUS_COLORS[status] ?? '';\n return `${color}${text}${RESET}`;\n}\n\nfunction formatDuration(startIso: string, endIso?: string | null): string {\n const start = new Date(startIso).getTime();\n const end = endIso ? new Date(endIso).getTime() : Date.now();\n const totalSeconds = Math.floor((end - start) / 1000);\n if (totalSeconds < 0) return '0s';\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n const parts: string[] = [];\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n parts.push(`${seconds}s`);\n return parts.join(' ');\n}\n\nfunction formatAgent(agent: Agent): string {\n const status = colorize(agent.status, agent.status);\n const name = `${BOLD}${agent.name}${RESET}`;\n const type = `${DIM}(${agent.agentType})${RESET}`;\n const duration = formatDuration(agent.spawnedAt, agent.completedAt);\n let line = ` ${agent.id} ${name} ${type} — ${status} ${DIM}(${duration})${RESET}`;\n if (agent.reports.length > 0) {\n for (const r of agent.reports) {\n const label = r.type === 'final' ? 'Final' : 'Update';\n line += `\\n ${label}: ${r.summary}`;\n }\n }\n if (agent.killedReason) {\n line += `\\n Reason: ${agent.killedReason}`;\n }\n return line;\n}\n\nfunction formatTask(task: Task): string {\n const status = colorize(task.status, task.status);\n return ` ${task.id}: ${task.description} [${status}]`;\n}\n\nfunction formatCycle(cycle: OrchestratorCycle): string {\n const duration = cycle.completedAt\n ? ` ${DIM}(${formatDuration(cycle.timestamp, cycle.completedAt)})${RESET}`\n : ` ${DIM}(running)${RESET}`;\n const agents = cycle.agentsSpawned.length > 0\n ? ` — agents: ${cycle.agentsSpawned.join(', ')}`\n : '';\n return ` Cycle ${cycle.cycle}${duration}${agents}`;\n}\n\nfunction printSession(session: Session): void {\n const status = colorize(session.status, session.status);\n const sessionDuration = formatDuration(session.createdAt, session.completedAt);\n console.log(`\\n${BOLD}Session: ${session.id}${RESET}`);\n console.log(` Status: ${status}`);\n console.log(` Task: ${session.task}`);\n console.log(` CWD: ${session.cwd}`);\n console.log(` Created: ${session.createdAt}`);\n console.log(` Duration: ${sessionDuration}${session.completedAt ? '' : ' (ongoing)'}`);\n console.log(` Orchestrator cycles: ${session.orchestratorCycles.length}`);\n\n if (session.orchestratorCycles.length > 0) {\n console.log(`\\n ${BOLD}Cycles:${RESET}`);\n for (const cycle of session.orchestratorCycles) {\n console.log(formatCycle(cycle));\n }\n }\n\n if (session.tasks.length > 0) {\n console.log(`\\n ${BOLD}Tasks:${RESET}`);\n for (const task of session.tasks) {\n console.log(formatTask(task));\n }\n }\n\n if (session.agents.length > 0) {\n console.log(`\\n ${BOLD}Agents:${RESET}`);\n for (const agent of session.agents) {\n console.log(formatAgent(agent));\n }\n }\n}\n\nexport function registerStatus(program: Command): void {\n program\n .command('status')\n .description('Show session status')\n .argument('[session-id]', 'Session ID (defaults to SISYPHUS_SESSION_ID env)')\n .action(async (sessionIdArg?: string) => {\n const sessionId = sessionIdArg ?? process.env.SISYPHUS_SESSION_ID;\n\n const request: Request = { type: 'status', sessionId };\n const response = await sendRequest(request);\n if (response.ok) {\n const session = response.data?.session as Session | undefined;\n if (session) {\n printSession(session);\n } else {\n console.log('No session found');\n }\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\nimport type { Task } from '../../shared/types.js';\nimport { readStdin } from '../stdin.js';\n\nfunction getSessionId(): string {\n const sessionId = process.env.SISYPHUS_SESSION_ID;\n if (!sessionId) {\n console.error('Error: SISYPHUS_SESSION_ID environment variable not set');\n process.exit(1);\n }\n return sessionId;\n}\n\nconst STATUS_COLORS: Record<string, string> = {\n draft: '\\x1b[2m', // dim\n pending: '\\x1b[90m', // gray\n in_progress: '\\x1b[33m', // yellow\n done: '\\x1b[32m', // green\n};\nconst RESET = '\\x1b[0m';\n\nexport function registerTasks(program: Command): void {\n const tasks = program\n .command('tasks')\n .description('Manage session tasks');\n\n tasks\n .command('add')\n .description('Add a new task')\n .argument('[description]', 'Task description (or pipe via stdin)')\n .option('--status <status>', 'Initial status (draft|pending)', 'pending')\n .action(async (descriptionArg: string | undefined, opts: { status: string }) => {\n const description = descriptionArg ?? await readStdin();\n if (!description) {\n console.error('Error: provide a description argument or pipe via stdin');\n process.exit(1);\n }\n const sessionId = getSessionId();\n const request: Request = { type: 'tasks_add', sessionId, description, status: opts.status !== 'pending' ? opts.status : undefined };\n const response = await sendRequest(request);\n if (response.ok) {\n const taskId = response.data?.taskId as string;\n console.log(`Task added: ${taskId} [${opts.status}]`);\n } else {\n console.error(`Error: ${response.error}`);\n if (response.error?.includes(\"Unknown session\")) console.error(\"Hint: run `sisyphus list` to see active sessions.\");\n process.exit(1);\n }\n });\n\n tasks\n .command('update')\n .description('Update a task')\n .argument('<task-id>', 'Task ID (e.g. t1)')\n .option('--status <status>', 'New status (draft|pending|in_progress|done)')\n .option('--description <description>', 'New description')\n .action(async (taskId: string, opts: { status?: string; description?: string }) => {\n if (!opts.status && !opts.description) {\n console.error('Error: provide --status and/or --description');\n process.exit(1);\n }\n const sessionId = getSessionId();\n const request: Request = { type: 'tasks_update', sessionId, taskId, status: opts.status, description: opts.description };\n const response = await sendRequest(request);\n if (response.ok) {\n const parts: string[] = [];\n if (opts.status) parts.push(`status → ${opts.status}`);\n if (opts.description) parts.push(`description updated`);\n console.log(`Task ${taskId}: ${parts.join(', ')}`);\n } else {\n console.error(`Error: ${response.error}`);\n if (response.error?.includes(\"not found\")) console.error(\"Hint: run `sisyphus tasks list` to see current tasks.\");\n if (response.error?.includes(\"Unknown session\")) console.error(\"Hint: run `sisyphus list` to see active sessions.\");\n process.exit(1);\n }\n });\n\n tasks\n .command('list')\n .description('List all tasks')\n .action(async () => {\n const sessionId = getSessionId();\n const request: Request = { type: 'tasks_list', sessionId };\n const response = await sendRequest(request);\n if (response.ok) {\n const taskList = (response.data?.tasks ?? []) as Task[];\n if (taskList.length === 0) {\n console.log('No tasks');\n return;\n }\n for (const task of taskList) {\n const color = STATUS_COLORS[task.status] ?? '';\n console.log(` ${task.id}: ${task.description} [${color}${task.status}${RESET}]`);\n }\n } else {\n console.error(`Error: ${response.error}`);\n if (response.error?.includes(\"Unknown session\")) console.error(\"Hint: run `sisyphus list` to see active sessions.\");\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\ninterface SessionSummary {\n id: string;\n task: string;\n status: string;\n agentCount: number;\n createdAt: string;\n}\n\nconst STATUS_COLORS: Record<string, string> = {\n active: '\\x1b[32m',\n paused: '\\x1b[33m',\n completed: '\\x1b[36m',\n};\nconst RESET = '\\x1b[0m';\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\n\nexport function registerList(program: Command): void {\n program\n .command('list')\n .description('List all sessions')\n .action(async () => {\n const request: Request = { type: 'list' };\n const response = await sendRequest(request);\n if (response.ok) {\n const sessions = (response.data?.sessions ?? []) as SessionSummary[];\n if (sessions.length === 0) {\n console.log('No sessions');\n return;\n }\n for (const s of sessions) {\n const color = STATUS_COLORS[s.status] ?? '';\n const status = `${color}${s.status}${RESET}`;\n const agents = `${DIM}${s.agentCount} agent(s)${RESET}`;\n console.log(` ${BOLD}${s.id}${RESET} ${status} ${agents} ${s.task}`);\n }\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\nimport { readStdin } from '../stdin.js';\n\nexport function registerReport(program: Command): void {\n program\n .command('report')\n .description('Send a progress report without exiting (agent only)')\n .option('--message <message>', 'Progress report content')\n .action(async (opts: { message?: string }) => {\n const sessionId = process.env.SISYPHUS_SESSION_ID;\n const agentId = process.env.SISYPHUS_AGENT_ID;\n if (!sessionId || !agentId) {\n console.error('Error: SISYPHUS_SESSION_ID and SISYPHUS_AGENT_ID environment variables must be set');\n process.exit(1);\n }\n\n const content = opts.message ?? await readStdin();\n if (!content) {\n console.error('Error: provide --message or pipe content via stdin');\n process.exit(1);\n }\n\n const request: Request = { type: 'report', sessionId, agentId, content };\n const response = await sendRequest(request);\n if (response.ok) {\n console.log('Progress report recorded');\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { execSync } from 'node:child_process';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\nfunction getTmuxSession(): string {\n try {\n return execSync('tmux display-message -p \"#{session_name}\"', { encoding: 'utf8' }).trim();\n } catch {\n throw new Error('Not running inside tmux');\n }\n}\n\nfunction getTmuxWindow(): string {\n try {\n return execSync('tmux display-message -p \"#{window_id}\"', { encoding: 'utf8' }).trim();\n } catch {\n throw new Error('Not running inside tmux');\n }\n}\n\nexport function registerResume(program: Command): void {\n program\n .command('resume')\n .description('Resume a paused session')\n .argument('<session-id>', 'Session ID to resume')\n .argument('[message]', 'Additional instructions for the orchestrator')\n .action(async (sessionId: string, message?: string) => {\n const tmuxSession = getTmuxSession();\n const tmuxWindow = getTmuxWindow();\n const cwd = process.cwd();\n const request: Request = { type: 'resume', sessionId, cwd, tmuxSession, tmuxWindow, message };\n const response = await sendRequest(request);\n if (response.ok) {\n console.log(`Session ${sessionId} resumed`);\n if (response.data?.tmuxWindow) {\n console.log(`Orchestrator respawned in tmux window: ${response.data.tmuxWindow}`);\n }\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { sendRequest } from '../client.js';\nimport type { Request } from '../../shared/protocol.js';\n\nexport function registerKill(program: Command): void {\n program\n .command('kill <sessionId>')\n .description('Kill a running session and all its agents')\n .action(async (sessionId: string) => {\n const request: Request = { type: 'kill', sessionId };\n const response = await sendRequest(request);\n if (response.ok) {\n console.log(`Session ${sessionId} killed.`);\n if (response.data) {\n const { killedAgents } = response.data as { killedAgents: number };\n console.log(`Cleaned up: ${killedAgents} agent(s) killed, tmux window removed.`);\n }\n } else {\n console.error(`Error: ${response.error}`);\n process.exit(1);\n }\n });\n}\n"],"mappings":"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","names":["program","program","program","program","program","program","STATUS_COLORS","RESET","program","STATUS_COLORS","RESET","BOLD","DIM","program","program","execSync","getTmuxSession","execSync","getTmuxWindow","program","program"]}