@coralai/sps-cli 0.26.8 → 0.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -10
- package/dist/commands/agentCommand.d.ts +2 -0
- package/dist/commands/agentCommand.d.ts.map +1 -0
- package/dist/commands/agentCommand.js +351 -0
- package/dist/commands/agentCommand.js.map +1 -0
- package/dist/commands/agentRenderer.d.ts +14 -0
- package/dist/commands/agentRenderer.d.ts.map +1 -0
- package/dist/commands/agentRenderer.js +173 -0
- package/dist/commands/agentRenderer.js.map +1 -0
- package/dist/core/paths.d.ts +9 -0
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +8 -0
- package/dist/core/paths.js.map +1 -1
- package/dist/core/sessionContext.d.ts +21 -0
- package/dist/core/sessionContext.d.ts.map +1 -0
- package/dist/core/sessionContext.js +33 -0
- package/dist/core/sessionContext.js.map +1 -0
- package/dist/main.js +100 -2
- package/dist/main.js.map +1 -1
- package/dist/models/acp.d.ts +1 -1
- package/dist/models/acp.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.js +5 -1
- package/dist/providers/ACPWorkerRuntime.js.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.d.ts +8 -0
- package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.js +59 -3
- package/dist/providers/adapters/AcpSdkAdapter.js.map +1 -1
- package/dist/providers/registry.d.ts +15 -0
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +4 -0
- package/dist/providers/registry.js.map +1 -1
- package/package.json +1 -2
package/README.md
CHANGED
|
@@ -4,22 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
> **中文文档**: See `README-CN.md` in the source repository for Chinese documentation.
|
|
6
6
|
|
|
7
|
-
**v0.
|
|
7
|
+
**v0.27.0**
|
|
8
8
|
|
|
9
|
-
SPS (Smart Pipeline System) is
|
|
9
|
+
SPS (Smart Pipeline System) is an AI Agent harness and automated development pipeline. Two modes:
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
- **Harness mode** (`sps agent`): Zero-config, direct agent interaction with multi-turn chat
|
|
12
|
+
- **Pipeline mode** (`sps pipeline`): Fully automated card-driven development workflow
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Harness mode — talk to any agent instantly
|
|
16
|
+
sps agent "Explain this repo"
|
|
17
|
+
sps agent --chat # multi-turn REPL
|
|
18
|
+
sps agent --tool codex "Fix tests" # choose agent
|
|
19
|
+
|
|
20
|
+
# Pipeline mode — automated development workflow
|
|
21
|
+
sps pipeline start my-project # or: sps tick my-project
|
|
13
22
|
```
|
|
14
23
|
|
|
15
|
-
**v0.
|
|
24
|
+
**v0.27.0 highlights**:
|
|
16
25
|
|
|
17
|
-
- **
|
|
18
|
-
- **
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
26
|
+
- **Harness mode**: `sps agent` for zero-config agent interaction. One-shot and multi-turn chat with context retention. Supports Claude, Codex, and Gemini.
|
|
27
|
+
- **Two-mode architecture**: Harness (`sps agent`) and Pipeline (`sps pipeline`) share the ACP SDK transport but are fully independent — different state files, different lifecycles.
|
|
28
|
+
- **Pipeline command group**: `sps pipeline start/stop/status/reset/workers/board/logs`. Old commands (`sps tick`, `sps stop`, etc.) preserved as aliases.
|
|
29
|
+
- **ACP SDK Transport** (v0.26.0): Structured JSON-RPC over stdio. Claude via official `claude-agent-sdk`, Codex via Rust native binary, Gemini via native `--acp` mode.
|
|
21
30
|
|
|
22
|
-
**Architecture**:
|
|
31
|
+
**Architecture**: ACP SDK adapter communicates with agents via structured protocol (no terminal scraping). Pipeline mode uses WorkerManager + CompletionJudge for card flow automation. Harness mode talks directly to ACPWorkerRuntime, bypassing card logic entirely.
|
|
23
32
|
|
|
24
33
|
## Table of Contents
|
|
25
34
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentCommand.d.ts","sourceRoot":"","sources":["../../src/commands/agentCommand.ts"],"names":[],"mappings":"AAgIA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvE"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sps agent — Harness mode: direct agent interaction without project config.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* sps agent "<prompt>" # one-shot
|
|
6
|
+
* sps agent --chat # multi-turn REPL
|
|
7
|
+
* sps agent --chat --name backend # named session
|
|
8
|
+
* sps agent --tool codex "<prompt>" # specify agent
|
|
9
|
+
* sps agent status # show sessions
|
|
10
|
+
* sps agent close [--name NAME] # close session
|
|
11
|
+
*/
|
|
12
|
+
import * as readline from 'node:readline/promises';
|
|
13
|
+
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
14
|
+
import { resolve } from 'node:path';
|
|
15
|
+
import { createSessionContext } from '../core/sessionContext.js';
|
|
16
|
+
import { readState, writeState } from '../core/state.js';
|
|
17
|
+
import { createSessionRuntime } from '../providers/registry.js';
|
|
18
|
+
import { waitAndStream } from './agentRenderer.js';
|
|
19
|
+
import { loadAgentRegistry } from '../providers/adapters/AcpSdkAdapter.js';
|
|
20
|
+
const DIM = '\x1b[90m';
|
|
21
|
+
const RESET = '\x1b[0m';
|
|
22
|
+
const GREEN = '\x1b[32m';
|
|
23
|
+
const RED = '\x1b[31m';
|
|
24
|
+
function parseAgentArgs(argv) {
|
|
25
|
+
const flags = {};
|
|
26
|
+
const positionals = [];
|
|
27
|
+
const contextFiles = [];
|
|
28
|
+
for (let i = 0; i < argv.length; i++) {
|
|
29
|
+
const arg = argv[i];
|
|
30
|
+
if (arg === '--chat') {
|
|
31
|
+
flags.chat = 'true';
|
|
32
|
+
}
|
|
33
|
+
else if (arg === '--json') {
|
|
34
|
+
flags.json = 'true';
|
|
35
|
+
}
|
|
36
|
+
else if (arg === '--verbose' || arg === '-v') {
|
|
37
|
+
flags.verbose = 'true';
|
|
38
|
+
}
|
|
39
|
+
else if (arg === '--tool' && i + 1 < argv.length) {
|
|
40
|
+
flags.tool = argv[++i];
|
|
41
|
+
}
|
|
42
|
+
else if (arg === '--name' && i + 1 < argv.length) {
|
|
43
|
+
flags.name = argv[++i];
|
|
44
|
+
}
|
|
45
|
+
else if (arg === '-s' && i + 1 < argv.length) {
|
|
46
|
+
flags.name = argv[++i];
|
|
47
|
+
}
|
|
48
|
+
else if (arg === '--cwd' && i + 1 < argv.length) {
|
|
49
|
+
flags.cwd = argv[++i];
|
|
50
|
+
}
|
|
51
|
+
else if (arg === '--context' && i + 1 < argv.length) {
|
|
52
|
+
contextFiles.push(argv[++i]);
|
|
53
|
+
}
|
|
54
|
+
else if (arg === '--system' && i + 1 < argv.length) {
|
|
55
|
+
flags.system = argv[++i];
|
|
56
|
+
}
|
|
57
|
+
else if (arg === '--profile' && i + 1 < argv.length) {
|
|
58
|
+
flags.profile = argv[++i];
|
|
59
|
+
}
|
|
60
|
+
else if (!arg.startsWith('-')) {
|
|
61
|
+
positionals.push(arg);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Detect subcommand
|
|
65
|
+
const first = positionals[0];
|
|
66
|
+
const common = {
|
|
67
|
+
name: flags.name || 'default',
|
|
68
|
+
tool: (flags.tool || 'claude'),
|
|
69
|
+
cwd: flags.cwd || process.cwd(),
|
|
70
|
+
verbose: flags.verbose === 'true',
|
|
71
|
+
context: contextFiles,
|
|
72
|
+
system: flags.system || '',
|
|
73
|
+
};
|
|
74
|
+
if (first === 'status') {
|
|
75
|
+
return { subcommand: 'status', prompt: '', json: flags.json === 'true', ...common };
|
|
76
|
+
}
|
|
77
|
+
if (first === 'close') {
|
|
78
|
+
return { subcommand: 'close', prompt: '', json: false, ...common };
|
|
79
|
+
}
|
|
80
|
+
if (first === 'list') {
|
|
81
|
+
return { subcommand: 'list', prompt: '', json: flags.json === 'true', ...common };
|
|
82
|
+
}
|
|
83
|
+
if (first === 'add') {
|
|
84
|
+
// sps agent add <name> <command> [args...]
|
|
85
|
+
return { subcommand: 'add', prompt: positionals.slice(1).join(' '), json: false, ...common };
|
|
86
|
+
}
|
|
87
|
+
const prompt = positionals.join(' ');
|
|
88
|
+
const isChat = flags.chat === 'true' || !prompt;
|
|
89
|
+
return {
|
|
90
|
+
subcommand: isChat ? 'chat' : 'run',
|
|
91
|
+
prompt,
|
|
92
|
+
json: flags.json === 'true',
|
|
93
|
+
...common,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/** Build final prompt with optional system instruction and file context. */
|
|
97
|
+
function buildPrompt(userPrompt, contextFiles, system) {
|
|
98
|
+
const parts = [];
|
|
99
|
+
if (system) {
|
|
100
|
+
parts.push(`[System instruction] ${system}\n`);
|
|
101
|
+
}
|
|
102
|
+
if (contextFiles.length > 0) {
|
|
103
|
+
for (const file of contextFiles) {
|
|
104
|
+
try {
|
|
105
|
+
const filePath = resolve(file);
|
|
106
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
107
|
+
parts.push(`[File: ${file}]\n\`\`\`\n${content}\n\`\`\`\n`);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
parts.push(`[File: ${file}] (could not read)\n`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
parts.push(userPrompt);
|
|
115
|
+
return parts.join('\n');
|
|
116
|
+
}
|
|
117
|
+
export async function executeAgentCommand(argv) {
|
|
118
|
+
const args = parseAgentArgs(argv);
|
|
119
|
+
if (args.subcommand === 'status') {
|
|
120
|
+
await agentStatus(args);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (args.subcommand === 'close') {
|
|
124
|
+
await agentClose(args);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (args.subcommand === 'list') {
|
|
128
|
+
agentList(args);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (args.subcommand === 'add') {
|
|
132
|
+
agentAdd(args);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (args.subcommand === 'run') {
|
|
136
|
+
await agentOneShot(args);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// chat
|
|
140
|
+
await agentChat(args);
|
|
141
|
+
}
|
|
142
|
+
// ── One-shot mode ───────────────────────────────────────────────
|
|
143
|
+
async function agentOneShot(args) {
|
|
144
|
+
const ctx = createSessionContext({ cwd: args.cwd, tool: args.tool });
|
|
145
|
+
const runtime = createSessionRuntime(ctx);
|
|
146
|
+
const slot = `session-oneshot-${Date.now()}`;
|
|
147
|
+
try {
|
|
148
|
+
await runtime.ensureSession(slot, args.tool, args.cwd);
|
|
149
|
+
const prompt = buildPrompt(args.prompt, args.context, args.system);
|
|
150
|
+
await runtime.startRun(slot, prompt, args.tool, args.cwd);
|
|
151
|
+
const result = await waitAndStream(runtime, slot, {
|
|
152
|
+
stateFile: ctx.paths.stateFile,
|
|
153
|
+
verbose: args.verbose,
|
|
154
|
+
logsDir: ctx.paths.logsDir,
|
|
155
|
+
});
|
|
156
|
+
process.stdout.write('\n');
|
|
157
|
+
if (result.status !== 'completed') {
|
|
158
|
+
process.stderr.write(`${RED}Agent ${result.status}${RESET}\n`);
|
|
159
|
+
process.exitCode = 1;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
// Get PID before cleaning state
|
|
164
|
+
let sessionPid = null;
|
|
165
|
+
try {
|
|
166
|
+
const state = readState(ctx.paths.stateFile, 0);
|
|
167
|
+
sessionPid = state.sessions?.[slot]?.pid ?? null;
|
|
168
|
+
if (state.sessions?.[slot]) {
|
|
169
|
+
delete state.sessions[slot];
|
|
170
|
+
writeState(ctx.paths.stateFile, state, 'agent-oneshot-cleanup');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch { /* best effort */ }
|
|
174
|
+
// Kill process tree by PID, then exit
|
|
175
|
+
if (sessionPid) {
|
|
176
|
+
try {
|
|
177
|
+
const { execFileSync } = await import('node:child_process');
|
|
178
|
+
// Kill all descendants first
|
|
179
|
+
try {
|
|
180
|
+
const children = execFileSync('pgrep', ['-P', String(sessionPid)], { encoding: 'utf-8', timeout: 2000 })
|
|
181
|
+
.trim().split('\n').filter(Boolean).map(Number);
|
|
182
|
+
for (const p of children) {
|
|
183
|
+
try {
|
|
184
|
+
process.kill(p, 'SIGKILL');
|
|
185
|
+
}
|
|
186
|
+
catch { /* noop */ }
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch { /* no children */ }
|
|
190
|
+
try {
|
|
191
|
+
process.kill(sessionPid, 'SIGKILL');
|
|
192
|
+
}
|
|
193
|
+
catch { /* already dead */ }
|
|
194
|
+
}
|
|
195
|
+
catch { /* noop */ }
|
|
196
|
+
}
|
|
197
|
+
process.exit(process.exitCode ?? 0);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ── Chat REPL mode ──────────────────────────────────────────────
|
|
201
|
+
async function agentChat(args) {
|
|
202
|
+
const ctx = createSessionContext({ cwd: args.cwd, tool: args.tool });
|
|
203
|
+
const runtime = createSessionRuntime(ctx);
|
|
204
|
+
const slot = `session-${args.name}`;
|
|
205
|
+
await runtime.ensureSession(slot, args.tool, args.cwd);
|
|
206
|
+
process.stderr.write(`${DIM}Session "${args.name}" started (${args.tool}) — type your messages, Ctrl+C to exit${RESET}\n\n`);
|
|
207
|
+
const stateFile = ctx.paths.stateFile;
|
|
208
|
+
// If initial prompt provided, run it first
|
|
209
|
+
if (args.prompt) {
|
|
210
|
+
await runTurn(runtime, slot, args, stateFile, ctx.paths.logsDir);
|
|
211
|
+
}
|
|
212
|
+
// REPL loop
|
|
213
|
+
const rl = readline.createInterface({
|
|
214
|
+
input: process.stdin,
|
|
215
|
+
output: process.stderr,
|
|
216
|
+
prompt: `${GREEN}>${RESET} `,
|
|
217
|
+
});
|
|
218
|
+
const cleanup = async () => {
|
|
219
|
+
rl.close();
|
|
220
|
+
process.stderr.write(`\n${DIM}Closing session...${RESET}\n`);
|
|
221
|
+
try {
|
|
222
|
+
await runtime.stopSession(slot);
|
|
223
|
+
}
|
|
224
|
+
catch { /* cleanup */ }
|
|
225
|
+
process.exit(0);
|
|
226
|
+
};
|
|
227
|
+
process.on('SIGINT', () => { cleanup(); });
|
|
228
|
+
rl.prompt();
|
|
229
|
+
for await (const line of rl) {
|
|
230
|
+
const input = line.trim();
|
|
231
|
+
if (!input) {
|
|
232
|
+
rl.prompt();
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
if (input === '/exit' || input === '/quit') {
|
|
236
|
+
await cleanup();
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
await runTurn(runtime, slot, { ...args, prompt: input }, stateFile, ctx.paths.logsDir);
|
|
240
|
+
rl.prompt();
|
|
241
|
+
}
|
|
242
|
+
await cleanup();
|
|
243
|
+
}
|
|
244
|
+
async function runTurn(runtime, slot, args, stateFile, logsDir) {
|
|
245
|
+
try {
|
|
246
|
+
const prompt = buildPrompt(args.prompt, args.context, args.system);
|
|
247
|
+
await runtime.startRun(slot, prompt, args.tool, args.cwd);
|
|
248
|
+
const result = await waitAndStream(runtime, slot, {
|
|
249
|
+
stateFile, verbose: args.verbose, logsDir,
|
|
250
|
+
});
|
|
251
|
+
process.stdout.write('\n\n');
|
|
252
|
+
if (result.status !== 'completed') {
|
|
253
|
+
process.stderr.write(`${DIM}(${result.status})${RESET}\n`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
258
|
+
process.stderr.write(`${RED}Error: ${msg}${RESET}\n`);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// ── Status ──────────────────────────────────────────────────────
|
|
262
|
+
async function agentStatus(args) {
|
|
263
|
+
const ctx = createSessionContext({ cwd: args.cwd, tool: args.tool });
|
|
264
|
+
const runtime = createSessionRuntime(ctx);
|
|
265
|
+
try {
|
|
266
|
+
const state = await runtime.inspect();
|
|
267
|
+
const sessions = Object.entries(state.sessions);
|
|
268
|
+
if (args.json) {
|
|
269
|
+
console.log(JSON.stringify(state.sessions, null, 2));
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
if (sessions.length === 0) {
|
|
273
|
+
console.log(`${DIM}No active sessions${RESET}`);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
for (const [name, session] of sessions) {
|
|
277
|
+
const run = session.currentRun;
|
|
278
|
+
const runInfo = run ? `${run.status} "${run.promptPreview}"` : 'idle';
|
|
279
|
+
console.log(` ${name} ${session.tool} ${session.sessionState} — ${runInfo}`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
console.log(`${DIM}No active sessions${RESET}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// ── Close ───────────────────────────────────────────────────────
|
|
287
|
+
async function agentClose(args) {
|
|
288
|
+
const ctx = createSessionContext({ cwd: args.cwd, tool: args.tool });
|
|
289
|
+
const runtime = createSessionRuntime(ctx);
|
|
290
|
+
const slot = `session-${args.name}`;
|
|
291
|
+
try {
|
|
292
|
+
await runtime.stopSession(slot);
|
|
293
|
+
}
|
|
294
|
+
catch { /* session may not exist in runtime */ }
|
|
295
|
+
// Remove from state.json
|
|
296
|
+
try {
|
|
297
|
+
const state = readState(ctx.paths.stateFile, 0);
|
|
298
|
+
if (state.sessions?.[slot]) {
|
|
299
|
+
delete state.sessions[slot];
|
|
300
|
+
writeState(ctx.paths.stateFile, state, 'agent-close');
|
|
301
|
+
}
|
|
302
|
+
console.log(`${GREEN}Session "${args.name}" closed${RESET}`);
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
306
|
+
console.error(`${RED}${msg}${RESET}`);
|
|
307
|
+
process.exitCode = 1;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
// ── List ─────────────────────────────────────────────────────────
|
|
311
|
+
function agentList(args) {
|
|
312
|
+
const registry = loadAgentRegistry();
|
|
313
|
+
if (args.json) {
|
|
314
|
+
console.log(JSON.stringify(registry, null, 2));
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
console.log(`\n Available agents:\n`);
|
|
318
|
+
for (const [name, entry] of Object.entries(registry)) {
|
|
319
|
+
const cmd = `${entry.command} ${entry.args.join(' ')}`.trim();
|
|
320
|
+
const isBuiltin = ['claude', 'codex', 'gemini'].includes(name);
|
|
321
|
+
const tag = isBuiltin ? DIM + '(builtin)' + RESET : GREEN + '(custom)' + RESET;
|
|
322
|
+
console.log(` ${name.padEnd(12)} ${cmd} ${tag}`);
|
|
323
|
+
}
|
|
324
|
+
console.log('');
|
|
325
|
+
}
|
|
326
|
+
// ── Add ──────────────────────────────────────────────────────────
|
|
327
|
+
function agentAdd(args) {
|
|
328
|
+
// prompt contains: "<name> <command> [args...]"
|
|
329
|
+
const parts = args.prompt.split(/\s+/);
|
|
330
|
+
const name = parts[0];
|
|
331
|
+
const command = parts[1];
|
|
332
|
+
const cmdArgs = parts.slice(2);
|
|
333
|
+
if (!name || !command) {
|
|
334
|
+
console.error('Usage: sps agent add <name> <command> [args...]');
|
|
335
|
+
console.error('Example: sps agent add cursor "cursor-agent" acp');
|
|
336
|
+
process.exitCode = 1;
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const home = process.env.HOME || '/home/coral';
|
|
340
|
+
const agentsFile = resolve(home, '.coral', 'agents.json');
|
|
341
|
+
let existing = {};
|
|
342
|
+
try {
|
|
343
|
+
existing = JSON.parse(readFileSync(agentsFile, 'utf-8'));
|
|
344
|
+
}
|
|
345
|
+
catch { /* new file */ }
|
|
346
|
+
existing[name] = { command, args: cmdArgs };
|
|
347
|
+
mkdirSync(resolve(home, '.coral'), { recursive: true });
|
|
348
|
+
writeFileSync(agentsFile, JSON.stringify(existing, null, 2) + '\n');
|
|
349
|
+
console.log(`${GREEN}Agent "${name}" registered: ${command} ${cmdArgs.join(' ')}${RESET}`);
|
|
350
|
+
}
|
|
351
|
+
//# sourceMappingURL=agentCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentCommand.js","sourceRoot":"","sources":["../../src/commands/agentCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentRuntime } from '../interfaces/AgentRuntime.js';
|
|
2
|
+
export interface StreamResult {
|
|
3
|
+
status: 'completed' | 'failed' | 'cancelled' | 'lost';
|
|
4
|
+
output: string;
|
|
5
|
+
}
|
|
6
|
+
export interface WaitAndStreamOpts {
|
|
7
|
+
pollMs?: number;
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
stateFile?: string;
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
logsDir?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function waitAndStream(runtime: AgentRuntime, slot: string, opts?: WaitAndStreamOpts): Promise<StreamResult>;
|
|
14
|
+
//# sourceMappingURL=agentRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentRenderer.d.ts","sourceRoot":"","sources":["../../src/commands/agentRenderer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC;CAChB;AAQD,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,CAqHvB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent output renderer — polls AgentRuntime.inspect() and streams
|
|
3
|
+
* incremental output to stdout. Shared by sps agent (one-shot + chat).
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, readdirSync, statSync } from 'node:fs';
|
|
6
|
+
import { resolve } from 'node:path';
|
|
7
|
+
import { readState, writeState } from '../core/state.js';
|
|
8
|
+
const SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
9
|
+
const DIM = '\x1b[90m';
|
|
10
|
+
const CYAN = '\x1b[36m';
|
|
11
|
+
const YELLOW = '\x1b[33m';
|
|
12
|
+
const RESET = '\x1b[0m';
|
|
13
|
+
export async function waitAndStream(runtime, slot, opts) {
|
|
14
|
+
const pollMs = opts?.pollMs ?? 2_000;
|
|
15
|
+
let lastTextLen = 0;
|
|
16
|
+
let lastLogLen = 0;
|
|
17
|
+
let fullOutput = '';
|
|
18
|
+
let spinnerIdx = 0;
|
|
19
|
+
let hasOutput = false;
|
|
20
|
+
const verbose = opts?.verbose ?? false;
|
|
21
|
+
// Find latest ACP log file for verbose mode
|
|
22
|
+
let logFile = null;
|
|
23
|
+
if (verbose && opts?.logsDir) {
|
|
24
|
+
logFile = findLatestAcpLog(opts.logsDir);
|
|
25
|
+
}
|
|
26
|
+
// Print newline before spinner (separate from user input line)
|
|
27
|
+
process.stderr.write('\n');
|
|
28
|
+
// Start spinner
|
|
29
|
+
const spinnerInterval = setInterval(() => {
|
|
30
|
+
if (!hasOutput) {
|
|
31
|
+
const frame = SPINNER[spinnerIdx % SPINNER.length];
|
|
32
|
+
process.stderr.write(`\r${DIM}${frame} thinking...${RESET}`);
|
|
33
|
+
spinnerIdx++;
|
|
34
|
+
}
|
|
35
|
+
}, 80);
|
|
36
|
+
const clearSpinner = () => {
|
|
37
|
+
clearInterval(spinnerInterval);
|
|
38
|
+
if (!hasOutput) {
|
|
39
|
+
process.stderr.write('\r\x1b[K');
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
try {
|
|
43
|
+
while (true) {
|
|
44
|
+
if (opts?.signal?.aborted) {
|
|
45
|
+
clearSpinner();
|
|
46
|
+
return { status: 'cancelled', output: fullOutput };
|
|
47
|
+
}
|
|
48
|
+
const state = await runtime.inspect(slot);
|
|
49
|
+
const session = state.sessions[slot];
|
|
50
|
+
if (!session) {
|
|
51
|
+
clearSpinner();
|
|
52
|
+
return { status: 'lost', output: fullOutput };
|
|
53
|
+
}
|
|
54
|
+
// Verbose mode: stream tool calls from ACP log file
|
|
55
|
+
if (verbose && opts?.logsDir) {
|
|
56
|
+
if (!logFile)
|
|
57
|
+
logFile = findLatestAcpLog(opts.logsDir);
|
|
58
|
+
if (logFile) {
|
|
59
|
+
const newLines = readLogIncrement(logFile, lastLogLen);
|
|
60
|
+
if (newLines.content.length > 0) {
|
|
61
|
+
if (!hasOutput) {
|
|
62
|
+
clearSpinner();
|
|
63
|
+
process.stderr.write(`${CYAN}▶ Agent${RESET}\n`);
|
|
64
|
+
hasOutput = true;
|
|
65
|
+
}
|
|
66
|
+
for (const line of newLines.lines) {
|
|
67
|
+
if (line.includes('[tool:') || line.includes('[tool_update]')) {
|
|
68
|
+
process.stderr.write(`${YELLOW} ${line}${RESET}\n`);
|
|
69
|
+
}
|
|
70
|
+
else if (line.includes('[assistant]')) {
|
|
71
|
+
const text = line.replace(/^\S+ \[assistant\] /, '');
|
|
72
|
+
process.stdout.write(text);
|
|
73
|
+
fullOutput += text;
|
|
74
|
+
}
|
|
75
|
+
else if (line.includes('[usage]')) {
|
|
76
|
+
process.stderr.write(`${DIM} ${line}${RESET}\n`);
|
|
77
|
+
}
|
|
78
|
+
else if (!line.match(/^\S+ \[/)) {
|
|
79
|
+
// Continuation text (multi-line assistant output without tag)
|
|
80
|
+
process.stdout.write(line);
|
|
81
|
+
fullOutput += line;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
lastLogLen = newLines.offset;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Normal mode: stream text from lastPaneText
|
|
90
|
+
const paneText = session.lastPaneText || '';
|
|
91
|
+
if (paneText.length > lastTextLen) {
|
|
92
|
+
if (!hasOutput) {
|
|
93
|
+
clearSpinner();
|
|
94
|
+
process.stderr.write(`${CYAN}▶ Agent${RESET}\n`);
|
|
95
|
+
hasOutput = true;
|
|
96
|
+
}
|
|
97
|
+
const newText = paneText.slice(lastTextLen);
|
|
98
|
+
process.stdout.write(newText);
|
|
99
|
+
fullOutput += newText;
|
|
100
|
+
lastTextLen = paneText.length;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Check run status
|
|
104
|
+
const runStatus = session.currentRun?.status;
|
|
105
|
+
if (runStatus === 'completed') {
|
|
106
|
+
clearSpinner();
|
|
107
|
+
if (opts?.stateFile)
|
|
108
|
+
clearRunInState(opts.stateFile, slot);
|
|
109
|
+
return { status: 'completed', output: fullOutput };
|
|
110
|
+
}
|
|
111
|
+
if (runStatus === 'failed' || runStatus === 'cancelled' || runStatus === 'lost') {
|
|
112
|
+
clearSpinner();
|
|
113
|
+
if (opts?.stateFile)
|
|
114
|
+
clearRunInState(opts.stateFile, slot);
|
|
115
|
+
return { status: runStatus, output: fullOutput };
|
|
116
|
+
}
|
|
117
|
+
// Session offline with no active run
|
|
118
|
+
if (session.sessionState === 'offline' && !session.currentRun) {
|
|
119
|
+
clearSpinner();
|
|
120
|
+
return { status: 'lost', output: fullOutput };
|
|
121
|
+
}
|
|
122
|
+
await new Promise((r) => setTimeout(r, pollMs));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
clearInterval(spinnerInterval);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** Find the most recent *-acp-*.log file in a directory. */
|
|
130
|
+
function findLatestAcpLog(logsDir) {
|
|
131
|
+
try {
|
|
132
|
+
const files = readdirSync(logsDir)
|
|
133
|
+
.filter(f => f.includes('-acp-') && f.endsWith('.log'))
|
|
134
|
+
.map(f => resolve(logsDir, f))
|
|
135
|
+
.sort((a, b) => statSync(b).mtimeMs - statSync(a).mtimeMs);
|
|
136
|
+
return files[0] ?? null;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Read new lines from a log file starting at byte offset. */
|
|
143
|
+
function readLogIncrement(file, fromOffset) {
|
|
144
|
+
try {
|
|
145
|
+
const content = readFileSync(file, 'utf-8');
|
|
146
|
+
if (content.length <= fromOffset)
|
|
147
|
+
return { lines: [], content: '', offset: fromOffset };
|
|
148
|
+
const newContent = content.slice(fromOffset);
|
|
149
|
+
return {
|
|
150
|
+
lines: newContent.split('\n').filter(l => l.length > 0),
|
|
151
|
+
content: newContent,
|
|
152
|
+
offset: content.length,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return { lines: [], content: '', offset: fromOffset };
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/** Clear currentRun from session state so the slot can accept the next prompt. */
|
|
160
|
+
function clearRunInState(stateFile, slot) {
|
|
161
|
+
try {
|
|
162
|
+
const state = readState(stateFile, 0);
|
|
163
|
+
if (state.sessions?.[slot]?.currentRun) {
|
|
164
|
+
state.sessions[slot].currentRun = null;
|
|
165
|
+
state.sessions[slot].status = 'idle';
|
|
166
|
+
writeState(stateFile, state, 'agent-clear-run');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Best effort
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=agentRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentRenderer.js","sourceRoot":"","sources":["../../src/commands/agentRenderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAOzD,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnE,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,KAAK,GAAG,SAAS,CAAC;AAUxB,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAqB,EACrB,IAAY,EACZ,IAAwB;IAExB,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC;IACrC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC;IAEvC,4CAA4C;IAC5C,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;QAC7B,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,+DAA+D;IAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,gBAAgB;IAChB,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,eAAe,KAAK,EAAE,CAAC,CAAC;YAC7D,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,aAAa,CAAC,eAAe,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC1B,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACrD,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAChD,CAAC;YAED,oDAAoD;YACpD,IAAI,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO;oBAAE,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;oBACvD,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChC,IAAI,CAAC,SAAS,EAAE,CAAC;4BACf,YAAY,EAAE,CAAC;4BACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC;4BACjD,SAAS,GAAG,IAAI,CAAC;wBACnB,CAAC;wBACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;4BAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gCAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;4BACvD,CAAC;iCAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gCACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;gCACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC3B,UAAU,IAAI,IAAI,CAAC;4BACrB,CAAC;iCAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gCACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;4BACpD,CAAC;iCAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gCAClC,8DAA8D;gCAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAC3B,UAAU,IAAI,IAAI,CAAC;4BACrB,CAAC;wBACH,CAAC;wBACD,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAC/B,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,6CAA6C;gBAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;gBAC5C,IAAI,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;oBAClC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,YAAY,EAAE,CAAC;wBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC;wBACjD,SAAS,GAAG,IAAI,CAAC;oBACnB,CAAC;oBACD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC9B,UAAU,IAAI,OAAO,CAAC;oBACtB,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,mBAAmB;YACnB,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC;YAC7C,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;gBAC9B,YAAY,EAAE,CAAC;gBACf,IAAI,IAAI,EAAE,SAAS;oBAAE,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAChF,YAAY,EAAE,CAAC;gBACf,IAAI,IAAI,EAAE,SAAS;oBAAE,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;gBAC3D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YACnD,CAAC;YAED,qCAAqC;YACrC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC9D,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAChD,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,aAAa,CAAC,eAAe,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,SAAS,gBAAgB,CAAC,OAAe;IACvC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACtD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;aAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,SAAS,gBAAgB,CAAC,IAAY,EAAE,UAAkB;IACxD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;YAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACxF,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACvD,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACxD,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,SAAS,eAAe,CAAC,SAAiB,EAAE,IAAY;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;YACvC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;YACvC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;YACrC,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
|
package/dist/core/paths.d.ts
CHANGED
|
@@ -31,5 +31,14 @@ export interface PathOverrides {
|
|
|
31
31
|
export declare function resolveProjectPaths(projectName: string, overrides?: PathOverrides): ProjectPaths;
|
|
32
32
|
export declare function resolveWorktreePath(projectName: string, seq: string | number, worktreeDir?: string): string;
|
|
33
33
|
export declare function resolveWorkerCardFile(projectName: string, slot: number): string;
|
|
34
|
+
export interface SessionPaths {
|
|
35
|
+
/** ~/.coral/sessions/ */
|
|
36
|
+
stateDir: string;
|
|
37
|
+
/** ~/.coral/sessions/logs/ */
|
|
38
|
+
logsDir: string;
|
|
39
|
+
/** ~/.coral/sessions/state.json */
|
|
40
|
+
stateFile: string;
|
|
41
|
+
}
|
|
42
|
+
export declare function resolveSessionPaths(): SessionPaths;
|
|
34
43
|
export declare function checkPathExists(path: string): boolean;
|
|
35
44
|
//# sourceMappingURL=paths.d.ts.map
|