sessioncast-cli 2.0.2 → 2.0.3
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/agent/runner.js +23 -0
- package/dist/agent/session-handler.d.ts +1 -2
- package/dist/agent/session-handler.js +34 -79
- package/dist/agent/tmux-executor.d.ts +3 -33
- package/dist/agent/tmux-executor.js +3 -50
- package/dist/agent/tmux.d.ts +2 -6
- package/dist/agent/tmux.js +2 -9
- package/dist/agent/types.d.ts +0 -10
- package/dist/agent/websocket.d.ts +2 -21
- package/dist/agent/websocket.js +10 -46
- package/dist/commands/agent.js +3 -0
- package/dist/index.js +14 -0
- package/dist/sentry.d.ts +4 -0
- package/dist/sentry.js +87 -0
- package/package.json +2 -1
- package/dist/autopilot/index.d.ts +0 -94
- package/dist/autopilot/index.js +0 -322
- package/dist/autopilot/mission-analyzer.d.ts +0 -27
- package/dist/autopilot/mission-analyzer.js +0 -232
- package/dist/autopilot/project-detector.d.ts +0 -12
- package/dist/autopilot/project-detector.js +0 -326
- package/dist/autopilot/source-scanner.d.ts +0 -26
- package/dist/autopilot/source-scanner.js +0 -285
- package/dist/autopilot/speckit-generator.d.ts +0 -60
- package/dist/autopilot/speckit-generator.js +0 -511
- package/dist/autopilot/types.d.ts +0 -110
- package/dist/autopilot/types.js +0 -6
- package/dist/autopilot/workflow-generator.d.ts +0 -33
- package/dist/autopilot/workflow-generator.js +0 -278
- package/dist/commands/autopilot.d.ts +0 -30
- package/dist/commands/autopilot.js +0 -262
- package/dist/commands/project.d.ts +0 -33
- package/dist/commands/project.js +0 -350
- package/dist/project/executor.d.ts +0 -73
- package/dist/project/executor.js +0 -437
- package/dist/project/index.d.ts +0 -4
- package/dist/project/index.js +0 -20
- package/dist/project/manager.d.ts +0 -66
- package/dist/project/manager.js +0 -290
- package/dist/project/relay-client.d.ts +0 -37
- package/dist/project/relay-client.js +0 -204
- package/dist/project/types.d.ts +0 -48
- package/dist/project/types.js +0 -3
- package/dist/utils/fileUtils.d.ts +0 -28
- package/dist/utils/fileUtils.js +0 -159
package/dist/commands/project.js
DELETED
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.projectInit = projectInit;
|
|
40
|
-
exports.projectRun = projectRun;
|
|
41
|
-
exports.projectStatus = projectStatus;
|
|
42
|
-
exports.projectStop = projectStop;
|
|
43
|
-
exports.projectSend = projectSend;
|
|
44
|
-
exports.projectCreateWorkflow = projectCreateWorkflow;
|
|
45
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
46
|
-
const path = __importStar(require("path"));
|
|
47
|
-
const project_1 = require("../project");
|
|
48
|
-
/**
|
|
49
|
-
* Initialize a new project
|
|
50
|
-
*/
|
|
51
|
-
async function projectInit(projectPath, options) {
|
|
52
|
-
const resolvedPath = path.resolve(projectPath || '.');
|
|
53
|
-
console.log(chalk_1.default.blue('Initializing SessionCast project...'));
|
|
54
|
-
console.log(chalk_1.default.gray(`Path: ${resolvedPath}`));
|
|
55
|
-
const manager = new project_1.ProjectManager(resolvedPath);
|
|
56
|
-
const project = manager.init(options.name);
|
|
57
|
-
console.log(chalk_1.default.green('\nProject initialized successfully!'));
|
|
58
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
59
|
-
console.log(` Name: ${chalk_1.default.bold(project.name)}`);
|
|
60
|
-
console.log(` Path: ${project.path}`);
|
|
61
|
-
console.log(` Status: ${project.status}`);
|
|
62
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
63
|
-
console.log(chalk_1.default.yellow('\nFolder structure created:'));
|
|
64
|
-
console.log(' mission/ - Mission history and refined mission');
|
|
65
|
-
console.log(' flow/ - Workflow definitions');
|
|
66
|
-
console.log(' shared/ - Shared context between agents');
|
|
67
|
-
console.log(' tools/ - Meta tools (mission-refiner, pm-agent)');
|
|
68
|
-
console.log(' work/ - Work agents');
|
|
69
|
-
console.log(chalk_1.default.cyan('\nNext steps:'));
|
|
70
|
-
console.log(' 1. Define your workflow in flow/workflow.yml');
|
|
71
|
-
console.log(' 2. Or start mission refinement:');
|
|
72
|
-
console.log(chalk_1.default.gray(` cd ${resolvedPath}/tools/mission-refiner && claude`));
|
|
73
|
-
console.log(' 3. Run the workflow:');
|
|
74
|
-
console.log(chalk_1.default.gray(` sessioncast project run ${resolvedPath}`));
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Run workflow
|
|
78
|
-
*/
|
|
79
|
-
async function projectRun(projectPath, options) {
|
|
80
|
-
const resolvedPath = path.resolve(projectPath || '.');
|
|
81
|
-
console.log(chalk_1.default.blue('Running SessionCast workflow...'));
|
|
82
|
-
console.log(chalk_1.default.gray(`Path: ${resolvedPath}`));
|
|
83
|
-
const manager = new project_1.ProjectManager(resolvedPath);
|
|
84
|
-
const project = manager.load();
|
|
85
|
-
if (!project) {
|
|
86
|
-
console.error(chalk_1.default.red('Error: Not a SessionCast project. Run `sessioncast project init` first.'));
|
|
87
|
-
process.exit(1);
|
|
88
|
-
}
|
|
89
|
-
const workflow = manager.loadWorkflow();
|
|
90
|
-
if (!workflow) {
|
|
91
|
-
console.error(chalk_1.default.red('Error: No workflow.yml found. Define your workflow first.'));
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
95
|
-
console.log(` Workflow: ${chalk_1.default.bold(workflow.name)}`);
|
|
96
|
-
console.log(` Mission: ${workflow.mission}`);
|
|
97
|
-
console.log(` Agents: ${workflow.agents.map(a => a.id).join(', ')}`);
|
|
98
|
-
console.log(` Auto-launch Claude: ${options.noClaude ? 'No' : 'Yes'}`);
|
|
99
|
-
if (options.relay) {
|
|
100
|
-
console.log(` Relay: ${options.relay}`);
|
|
101
|
-
}
|
|
102
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
103
|
-
const executor = new project_1.WorkflowExecutor(manager, {
|
|
104
|
-
autoLaunchClaude: !options.noClaude,
|
|
105
|
-
relayUrl: options.relay,
|
|
106
|
-
relayToken: options.relayToken
|
|
107
|
-
});
|
|
108
|
-
executor.on('agent-started', ({ agentId, sessionName }) => {
|
|
109
|
-
console.log(chalk_1.default.cyan(`[${agentId}] Started - tmux session: ${sessionName}`));
|
|
110
|
-
});
|
|
111
|
-
executor.on('agent-completed', ({ agentId, output }) => {
|
|
112
|
-
console.log(chalk_1.default.green(`[${agentId}] Completed`));
|
|
113
|
-
if (output) {
|
|
114
|
-
console.log(chalk_1.default.gray(` Output: ${output.substring(0, 100)}...`));
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
executor.on('workflow-completed', () => {
|
|
118
|
-
console.log(chalk_1.default.green.bold('\nWorkflow completed successfully!'));
|
|
119
|
-
if (!options.watch) {
|
|
120
|
-
process.exit(0);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
executor.on('workflow-failed', () => {
|
|
124
|
-
console.log(chalk_1.default.red.bold('\nWorkflow failed!'));
|
|
125
|
-
const status = manager.loadStatus();
|
|
126
|
-
if (status) {
|
|
127
|
-
for (const [agentId, agentStatus] of Object.entries(status.agents)) {
|
|
128
|
-
if (agentStatus.status === 'failed') {
|
|
129
|
-
console.log(chalk_1.default.red(` [${agentId}] ${agentStatus.error || 'Unknown error'}`));
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (!options.watch) {
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
// Handle shutdown
|
|
138
|
-
process.on('SIGINT', () => {
|
|
139
|
-
console.log(chalk_1.default.yellow('\nStopping workflow...'));
|
|
140
|
-
executor.stop();
|
|
141
|
-
process.exit(0);
|
|
142
|
-
});
|
|
143
|
-
await executor.start();
|
|
144
|
-
if (options.watch) {
|
|
145
|
-
console.log(chalk_1.default.gray('\nWatching for changes... (Ctrl+C to stop)'));
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Show project status
|
|
150
|
-
*/
|
|
151
|
-
async function projectStatus(projectPath) {
|
|
152
|
-
const resolvedPath = path.resolve(projectPath || '.');
|
|
153
|
-
const manager = new project_1.ProjectManager(resolvedPath);
|
|
154
|
-
const project = manager.load();
|
|
155
|
-
if (!project) {
|
|
156
|
-
console.error(chalk_1.default.red('Error: Not a SessionCast project.'));
|
|
157
|
-
process.exit(1);
|
|
158
|
-
}
|
|
159
|
-
const workflow = manager.loadWorkflow();
|
|
160
|
-
const status = manager.loadStatus();
|
|
161
|
-
const executor = new project_1.WorkflowExecutor(manager);
|
|
162
|
-
const sessions = executor.listSessions();
|
|
163
|
-
console.log(chalk_1.default.blue('SessionCast Project Status'));
|
|
164
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
165
|
-
console.log(` Project: ${chalk_1.default.bold(project.name)}`);
|
|
166
|
-
console.log(` Path: ${project.path}`);
|
|
167
|
-
console.log(` Status: ${colorStatus(project.status)}`);
|
|
168
|
-
console.log(chalk_1.default.gray('─'.repeat(50)));
|
|
169
|
-
if (workflow) {
|
|
170
|
-
console.log(chalk_1.default.yellow('\nWorkflow:'));
|
|
171
|
-
console.log(` Name: ${workflow.name}`);
|
|
172
|
-
console.log(` Mission: ${workflow.mission}`);
|
|
173
|
-
console.log(` Agents: ${workflow.agents.length}`);
|
|
174
|
-
if (status) {
|
|
175
|
-
console.log(chalk_1.default.yellow('\nAgent Status:'));
|
|
176
|
-
for (const agent of workflow.agents) {
|
|
177
|
-
const agentStatus = status.agents[agent.id];
|
|
178
|
-
const statusStr = agentStatus ? colorStatus(agentStatus.status) : chalk_1.default.gray('not started');
|
|
179
|
-
const isRunning = sessions.includes(agent.id);
|
|
180
|
-
const sessionIndicator = isRunning ? chalk_1.default.green(' [tmux]') : '';
|
|
181
|
-
console.log(` ${agent.id}: ${statusStr}${sessionIndicator}`);
|
|
182
|
-
if (agentStatus?.currentTask) {
|
|
183
|
-
console.log(chalk_1.default.gray(` → ${agentStatus.currentTask}`));
|
|
184
|
-
}
|
|
185
|
-
if (agentStatus?.error) {
|
|
186
|
-
console.log(chalk_1.default.red(` ! ${agentStatus.error}`));
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
console.log(chalk_1.default.yellow('\nNo workflow defined yet.'));
|
|
193
|
-
console.log(chalk_1.default.gray('Create flow/workflow.yml to define your workflow.'));
|
|
194
|
-
}
|
|
195
|
-
if (sessions.length > 0) {
|
|
196
|
-
console.log(chalk_1.default.yellow('\nActive Sessions:'));
|
|
197
|
-
for (const session of sessions) {
|
|
198
|
-
console.log(` ${session}`);
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Stop workflow and kill sessions
|
|
204
|
-
*/
|
|
205
|
-
async function projectStop(projectPath) {
|
|
206
|
-
const resolvedPath = path.resolve(projectPath || '.');
|
|
207
|
-
console.log(chalk_1.default.blue('Stopping SessionCast workflow...'));
|
|
208
|
-
const manager = new project_1.ProjectManager(resolvedPath);
|
|
209
|
-
const executor = new project_1.WorkflowExecutor(manager);
|
|
210
|
-
executor.killAllSessions();
|
|
211
|
-
console.log(chalk_1.default.green('All sessions stopped.'));
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* List agents and send commands
|
|
215
|
-
*/
|
|
216
|
-
async function projectSend(projectPath, agentId, message) {
|
|
217
|
-
const resolvedPath = path.resolve(projectPath || '.');
|
|
218
|
-
const manager = new project_1.ProjectManager(resolvedPath);
|
|
219
|
-
const executor = new project_1.WorkflowExecutor(manager);
|
|
220
|
-
if (executor.sendToAgent(agentId, message)) {
|
|
221
|
-
console.log(chalk_1.default.green(`Sent to ${agentId}: ${message}`));
|
|
222
|
-
}
|
|
223
|
-
else {
|
|
224
|
-
console.error(chalk_1.default.red(`Failed to send to ${agentId}. Is the session running?`));
|
|
225
|
-
process.exit(1);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Create a sample workflow
|
|
230
|
-
*/
|
|
231
|
-
async function projectCreateWorkflow(projectPath, options) {
|
|
232
|
-
const resolvedPath = path.resolve(projectPath || '.');
|
|
233
|
-
const manager = new project_1.ProjectManager(resolvedPath);
|
|
234
|
-
const project = manager.load();
|
|
235
|
-
if (!project) {
|
|
236
|
-
console.error(chalk_1.default.red('Error: Not a SessionCast project.'));
|
|
237
|
-
process.exit(1);
|
|
238
|
-
}
|
|
239
|
-
const template = options.template || 'basic';
|
|
240
|
-
const workflow = getWorkflowTemplate(template, project.name);
|
|
241
|
-
manager.saveWorkflow(workflow);
|
|
242
|
-
// Create work folders
|
|
243
|
-
for (const agent of workflow.agents) {
|
|
244
|
-
manager.createWorkAgent(agent.id, agent.name, agent.tasks);
|
|
245
|
-
}
|
|
246
|
-
console.log(chalk_1.default.green(`Created workflow from template: ${template}`));
|
|
247
|
-
console.log(chalk_1.default.gray(`File: ${resolvedPath}/flow/workflow.yml`));
|
|
248
|
-
console.log(chalk_1.default.yellow('\nAgents created:'));
|
|
249
|
-
for (const agent of workflow.agents) {
|
|
250
|
-
console.log(` ${agent.id} - ${agent.name}`);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
function getWorkflowTemplate(template, projectName) {
|
|
254
|
-
switch (template) {
|
|
255
|
-
case 'android':
|
|
256
|
-
return {
|
|
257
|
-
name: projectName,
|
|
258
|
-
mission: 'Android app development',
|
|
259
|
-
created: new Date().toISOString(),
|
|
260
|
-
agents: [
|
|
261
|
-
{
|
|
262
|
-
id: 'android',
|
|
263
|
-
name: 'Android Development',
|
|
264
|
-
workDir: 'work/android',
|
|
265
|
-
tasks: ['Feature implementation', 'UI development'],
|
|
266
|
-
dependsOn: []
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
id: 'qa',
|
|
270
|
-
name: 'QA Testing',
|
|
271
|
-
workDir: 'work/qa',
|
|
272
|
-
tasks: ['Unit tests', 'Integration tests'],
|
|
273
|
-
dependsOn: ['android']
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
id: 'release',
|
|
277
|
-
name: 'Release',
|
|
278
|
-
workDir: 'work/release',
|
|
279
|
-
tasks: ['Version tagging', 'Release notes'],
|
|
280
|
-
dependsOn: ['qa']
|
|
281
|
-
}
|
|
282
|
-
]
|
|
283
|
-
};
|
|
284
|
-
case 'fullstack':
|
|
285
|
-
return {
|
|
286
|
-
name: projectName,
|
|
287
|
-
mission: 'Fullstack development',
|
|
288
|
-
created: new Date().toISOString(),
|
|
289
|
-
agents: [
|
|
290
|
-
{
|
|
291
|
-
id: 'backend',
|
|
292
|
-
name: 'Backend Development',
|
|
293
|
-
workDir: 'work/backend',
|
|
294
|
-
tasks: ['API implementation', 'Database schema'],
|
|
295
|
-
dependsOn: []
|
|
296
|
-
},
|
|
297
|
-
{
|
|
298
|
-
id: 'frontend',
|
|
299
|
-
name: 'Frontend Development',
|
|
300
|
-
workDir: 'work/frontend',
|
|
301
|
-
tasks: ['UI components', 'API integration'],
|
|
302
|
-
dependsOn: ['backend']
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
id: 'qa',
|
|
306
|
-
name: 'QA Testing',
|
|
307
|
-
workDir: 'work/qa',
|
|
308
|
-
tasks: ['E2E tests', 'Performance tests'],
|
|
309
|
-
dependsOn: ['frontend']
|
|
310
|
-
}
|
|
311
|
-
]
|
|
312
|
-
};
|
|
313
|
-
default: // basic
|
|
314
|
-
return {
|
|
315
|
-
name: projectName,
|
|
316
|
-
mission: 'Project mission (edit this)',
|
|
317
|
-
created: new Date().toISOString(),
|
|
318
|
-
agents: [
|
|
319
|
-
{
|
|
320
|
-
id: 'dev',
|
|
321
|
-
name: 'Development',
|
|
322
|
-
workDir: 'work/dev',
|
|
323
|
-
tasks: ['Implement features'],
|
|
324
|
-
dependsOn: []
|
|
325
|
-
},
|
|
326
|
-
{
|
|
327
|
-
id: 'test',
|
|
328
|
-
name: 'Testing',
|
|
329
|
-
workDir: 'work/test',
|
|
330
|
-
tasks: ['Write tests'],
|
|
331
|
-
dependsOn: ['dev']
|
|
332
|
-
}
|
|
333
|
-
]
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
function colorStatus(status) {
|
|
338
|
-
switch (status) {
|
|
339
|
-
case 'completed':
|
|
340
|
-
return chalk_1.default.green(status);
|
|
341
|
-
case 'running':
|
|
342
|
-
return chalk_1.default.cyan(status);
|
|
343
|
-
case 'failed':
|
|
344
|
-
return chalk_1.default.red(status);
|
|
345
|
-
case 'pending':
|
|
346
|
-
return chalk_1.default.yellow(status);
|
|
347
|
-
default:
|
|
348
|
-
return chalk_1.default.gray(status);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'events';
|
|
2
|
-
import { ProjectManager } from './manager';
|
|
3
|
-
export interface ExecutorOptions {
|
|
4
|
-
autoLaunchClaude?: boolean;
|
|
5
|
-
claudeCommand?: string;
|
|
6
|
-
relayUrl?: string;
|
|
7
|
-
relayToken?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare class WorkflowExecutor extends EventEmitter {
|
|
10
|
-
private manager;
|
|
11
|
-
private workflow;
|
|
12
|
-
private running;
|
|
13
|
-
private pollTimer;
|
|
14
|
-
private options;
|
|
15
|
-
private relayClient;
|
|
16
|
-
constructor(manager: ProjectManager, options?: ExecutorOptions);
|
|
17
|
-
/**
|
|
18
|
-
* Start workflow execution
|
|
19
|
-
*/
|
|
20
|
-
start(): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Connect to relay server and register project
|
|
23
|
-
*/
|
|
24
|
-
private connectToRelay;
|
|
25
|
-
/**
|
|
26
|
-
* Update relay with current agents list
|
|
27
|
-
*/
|
|
28
|
-
private updateRelayAgents;
|
|
29
|
-
/**
|
|
30
|
-
* Start PM Agent tmux session
|
|
31
|
-
*/
|
|
32
|
-
private startPMAgent;
|
|
33
|
-
/**
|
|
34
|
-
* Start a work agent
|
|
35
|
-
*/
|
|
36
|
-
private startAgent;
|
|
37
|
-
/**
|
|
38
|
-
* Build task prompt for agent
|
|
39
|
-
*/
|
|
40
|
-
private buildTaskPrompt;
|
|
41
|
-
/**
|
|
42
|
-
* Launch Claude Code CLI in a tmux session
|
|
43
|
-
*/
|
|
44
|
-
private launchClaudeInSession;
|
|
45
|
-
/**
|
|
46
|
-
* Sleep helper
|
|
47
|
-
*/
|
|
48
|
-
private sleep;
|
|
49
|
-
/**
|
|
50
|
-
* Main execution loop
|
|
51
|
-
*/
|
|
52
|
-
private runExecutionLoop;
|
|
53
|
-
/**
|
|
54
|
-
* Stop workflow execution
|
|
55
|
-
*/
|
|
56
|
-
stop(): void;
|
|
57
|
-
/**
|
|
58
|
-
* Kill all project tmux sessions
|
|
59
|
-
*/
|
|
60
|
-
killAllSessions(): void;
|
|
61
|
-
/**
|
|
62
|
-
* Send keys to an agent session
|
|
63
|
-
*/
|
|
64
|
-
sendToAgent(agentId: string, keys: string): boolean;
|
|
65
|
-
/**
|
|
66
|
-
* Capture agent terminal output
|
|
67
|
-
*/
|
|
68
|
-
captureAgent(agentId: string): string | null;
|
|
69
|
-
/**
|
|
70
|
-
* List all agent sessions for this project
|
|
71
|
-
*/
|
|
72
|
-
listSessions(): string[];
|
|
73
|
-
}
|