@yuaone/cli 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/LICENSE +663 -0
- package/dist/auth.d.ts +71 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +240 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +212 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud-client.d.ts +179 -0
- package/dist/cloud-client.d.ts.map +1 -0
- package/dist/cloud-client.js +369 -0
- package/dist/cloud-client.js.map +1 -0
- package/dist/config.d.ts +59 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +214 -0
- package/dist/config.js.map +1 -0
- package/dist/design-renderer.d.ts +16 -0
- package/dist/design-renderer.d.ts.map +1 -0
- package/dist/design-renderer.js +78 -0
- package/dist/design-renderer.js.map +1 -0
- package/dist/design.d.ts +18 -0
- package/dist/design.d.ts.map +1 -0
- package/dist/design.js +190 -0
- package/dist/design.js.map +1 -0
- package/dist/diff-renderer.d.ts +56 -0
- package/dist/diff-renderer.d.ts.map +1 -0
- package/dist/diff-renderer.js +133 -0
- package/dist/diff-renderer.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/interactive.d.ts +73 -0
- package/dist/interactive.d.ts.map +1 -0
- package/dist/interactive.js +638 -0
- package/dist/interactive.js.map +1 -0
- package/dist/oneshot.d.ts +17 -0
- package/dist/oneshot.d.ts.map +1 -0
- package/dist/oneshot.js +281 -0
- package/dist/oneshot.js.map +1 -0
- package/dist/progress-renderer.d.ts +116 -0
- package/dist/progress-renderer.d.ts.map +1 -0
- package/dist/progress-renderer.js +249 -0
- package/dist/progress-renderer.js.map +1 -0
- package/dist/renderer.d.ts +67 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +182 -0
- package/dist/renderer.js.map +1 -0
- package/dist/session.d.ts +71 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +246 -0
- package/dist/session.js.map +1 -0
- package/dist/y-spinner.d.ts +34 -0
- package/dist/y-spinner.d.ts.map +1 -0
- package/dist/y-spinner.js +93 -0
- package/dist/y-spinner.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module progress-renderer
|
|
3
|
+
* @description Real-time agent execution progress display for CLI.
|
|
4
|
+
*
|
|
5
|
+
* Shows:
|
|
6
|
+
* - Agent status (planning/coding/reviewing/testing)
|
|
7
|
+
* - Current tool execution (file, command, etc.)
|
|
8
|
+
* - Token usage bar
|
|
9
|
+
* - Iteration progress
|
|
10
|
+
* - Thinking stream (reasoning deltas)
|
|
11
|
+
*/
|
|
12
|
+
import { colors } from "./renderer.js";
|
|
13
|
+
// ─── ANSI Helpers ───
|
|
14
|
+
function c(color, text) {
|
|
15
|
+
return `${color}${text}${colors.reset}`;
|
|
16
|
+
}
|
|
17
|
+
function termWidth() {
|
|
18
|
+
return process.stdout.columns || 80;
|
|
19
|
+
}
|
|
20
|
+
/** Truncate a string to fit within `max` columns, appending ellipsis if needed. */
|
|
21
|
+
function truncate(text, max) {
|
|
22
|
+
if (text.length <= max)
|
|
23
|
+
return text;
|
|
24
|
+
return text.slice(0, max - 1) + "\u2026";
|
|
25
|
+
}
|
|
26
|
+
/** Format a token count for display (e.g. 12400 -> "12.4k"). */
|
|
27
|
+
function formatTokens(n) {
|
|
28
|
+
if (n >= 1_000_000)
|
|
29
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
30
|
+
if (n >= 1_000)
|
|
31
|
+
return `${(n / 1_000).toFixed(1)}k`;
|
|
32
|
+
return String(n);
|
|
33
|
+
}
|
|
34
|
+
// ─── Phase labels & colors ───
|
|
35
|
+
const PHASE_LABELS = {
|
|
36
|
+
planning: { tag: "[PLAN]", color: colors.blue },
|
|
37
|
+
coding: { tag: "[CODE]", color: colors.green },
|
|
38
|
+
reviewing: { tag: "[REVIEW]", color: colors.yellow },
|
|
39
|
+
testing: { tag: "[TEST]", color: colors.cyan },
|
|
40
|
+
waiting: { tag: "[WAIT]", color: colors.gray },
|
|
41
|
+
};
|
|
42
|
+
// ─── Progress Bar ───
|
|
43
|
+
/**
|
|
44
|
+
* Render a Unicode progress bar.
|
|
45
|
+
*
|
|
46
|
+
* @param current - Current value.
|
|
47
|
+
* @param max - Maximum value.
|
|
48
|
+
* @param width - Character width of the bar (filled + empty).
|
|
49
|
+
* @returns Colored bar string, e.g. `████████░░░░░░░░`.
|
|
50
|
+
*/
|
|
51
|
+
export function renderBar(current, max, width = 20) {
|
|
52
|
+
const ratio = max > 0 ? Math.min(current / max, 1) : 0;
|
|
53
|
+
const filled = Math.round(ratio * width);
|
|
54
|
+
const empty = width - filled;
|
|
55
|
+
const pct = ratio * 100;
|
|
56
|
+
let barColor;
|
|
57
|
+
if (pct >= 80)
|
|
58
|
+
barColor = colors.red;
|
|
59
|
+
else if (pct >= 60)
|
|
60
|
+
barColor = colors.yellow;
|
|
61
|
+
else
|
|
62
|
+
barColor = colors.green;
|
|
63
|
+
return c(barColor, "\u2588".repeat(filled)) + c(colors.gray, "\u2591".repeat(empty));
|
|
64
|
+
}
|
|
65
|
+
// ─── ProgressRenderer ───
|
|
66
|
+
/**
|
|
67
|
+
* Real-time CLI renderer for agent execution progress.
|
|
68
|
+
*
|
|
69
|
+
* Usage:
|
|
70
|
+
* ```ts
|
|
71
|
+
* const pr = new ProgressRenderer({ maxIterations: 25, maxTokens: 200_000, showThinking: true });
|
|
72
|
+
* pr.onStatus({ phase: "planning", detail: "analyzing codebase" });
|
|
73
|
+
* pr.onToolCall({ tool: "file_read", input: "src/index.ts" });
|
|
74
|
+
* pr.onToolResult({ tool: "file_read", success: true, summary: "42 lines" });
|
|
75
|
+
* pr.onIterationEnd(3, 25, 12400, 200000);
|
|
76
|
+
* pr.onDone({ filesChanged: ["a.ts"], iterations: 3, tokensUsed: 12400, durationMs: 8200, summary: "Done" });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export class ProgressRenderer {
|
|
80
|
+
config;
|
|
81
|
+
thinkingBuffer = "";
|
|
82
|
+
thinkingTimer = null;
|
|
83
|
+
currentPhase = null;
|
|
84
|
+
constructor(config) {
|
|
85
|
+
this.config = config;
|
|
86
|
+
}
|
|
87
|
+
// ─── Status ───
|
|
88
|
+
/** Display an agent phase transition. */
|
|
89
|
+
onStatus(event) {
|
|
90
|
+
const { tag, color } = PHASE_LABELS[event.phase];
|
|
91
|
+
const detail = event.detail ? c(colors.dim, ` ${event.detail}`) : "";
|
|
92
|
+
console.log(`${c(color + colors.bold, tag)}${detail}`);
|
|
93
|
+
this.currentPhase = event.phase;
|
|
94
|
+
}
|
|
95
|
+
// ─── Tool Call / Result ───
|
|
96
|
+
/** Display a tool invocation line. */
|
|
97
|
+
onToolCall(event) {
|
|
98
|
+
const maxInput = termWidth() - event.tool.length - 10;
|
|
99
|
+
const input = truncate(event.input, Math.max(maxInput, 20));
|
|
100
|
+
console.log(c(colors.dim, " \u251C\u2500 ") +
|
|
101
|
+
c(colors.yellow, event.tool) +
|
|
102
|
+
c(colors.dim, ": ") +
|
|
103
|
+
c(colors.white, input));
|
|
104
|
+
}
|
|
105
|
+
/** Display a tool result line (success or error). */
|
|
106
|
+
onToolResult(event) {
|
|
107
|
+
const maxSummary = termWidth() - 10;
|
|
108
|
+
if (event.success) {
|
|
109
|
+
console.log(c(colors.dim, " \u2514\u2500 ") +
|
|
110
|
+
c(colors.green, "\u2713 ") +
|
|
111
|
+
c(colors.dim, truncate(event.summary, maxSummary)));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log(c(colors.dim, " \u2514\u2500 ") +
|
|
115
|
+
c(colors.red, "\u2717 ") +
|
|
116
|
+
c(colors.red, truncate(event.summary, maxSummary)));
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// ─── Thinking Stream ───
|
|
120
|
+
/**
|
|
121
|
+
* Stream a reasoning delta.
|
|
122
|
+
* Output is debounced (200 ms) and rendered in dim gray,
|
|
123
|
+
* word-wrapped to the terminal width.
|
|
124
|
+
*/
|
|
125
|
+
onThinking(delta) {
|
|
126
|
+
if (!this.config.showThinking)
|
|
127
|
+
return;
|
|
128
|
+
this.thinkingBuffer += delta;
|
|
129
|
+
if (this.thinkingTimer)
|
|
130
|
+
clearTimeout(this.thinkingTimer);
|
|
131
|
+
this.thinkingTimer = setTimeout(() => {
|
|
132
|
+
this.flushThinking();
|
|
133
|
+
}, 200);
|
|
134
|
+
}
|
|
135
|
+
/** Flush any buffered thinking text to stdout. */
|
|
136
|
+
flushThinking() {
|
|
137
|
+
if (!this.thinkingBuffer)
|
|
138
|
+
return;
|
|
139
|
+
const width = termWidth() - 4; // indent
|
|
140
|
+
const text = this.thinkingBuffer;
|
|
141
|
+
this.thinkingBuffer = "";
|
|
142
|
+
this.thinkingTimer = null;
|
|
143
|
+
const lines = this.wrapText(text, width);
|
|
144
|
+
for (const line of lines) {
|
|
145
|
+
console.log(c(colors.gray + colors.dim, ` ${line}`));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/** Word-wrap text to a given width. */
|
|
149
|
+
wrapText(text, width) {
|
|
150
|
+
const result = [];
|
|
151
|
+
const raw = text.replace(/\n/g, " ");
|
|
152
|
+
let remaining = raw;
|
|
153
|
+
while (remaining.length > 0) {
|
|
154
|
+
if (remaining.length <= width) {
|
|
155
|
+
result.push(remaining);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
let breakIdx = remaining.lastIndexOf(" ", width);
|
|
159
|
+
if (breakIdx <= 0)
|
|
160
|
+
breakIdx = width;
|
|
161
|
+
result.push(remaining.slice(0, breakIdx));
|
|
162
|
+
remaining = remaining.slice(breakIdx).trimStart();
|
|
163
|
+
}
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
// ─── Iteration Progress ───
|
|
167
|
+
/**
|
|
168
|
+
* Render an iteration progress line with bar and token usage.
|
|
169
|
+
*
|
|
170
|
+
* Example output:
|
|
171
|
+
* ```
|
|
172
|
+
* [3/25] ████████░░░░░░░░ 32% | tokens: 12.4k/200k
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
onIterationEnd(iteration, maxIteration, tokensUsed, maxTokens) {
|
|
176
|
+
// Flush any pending thinking text before the progress line.
|
|
177
|
+
this.flushThinking();
|
|
178
|
+
const pct = maxIteration > 0 ? Math.round((iteration / maxIteration) * 100) : 0;
|
|
179
|
+
const iterLabel = c(colors.bold, `[${iteration}/${maxIteration}]`);
|
|
180
|
+
const bar = renderBar(iteration, maxIteration, 16);
|
|
181
|
+
const pctStr = `${String(pct).padStart(3)}%`;
|
|
182
|
+
const tokenStr = `${formatTokens(tokensUsed)}/${formatTokens(maxTokens)}`;
|
|
183
|
+
console.log(`${iterLabel} ${bar} ${pctStr} ${c(colors.dim, "|")} ${c(colors.dim, "tokens:")} ${tokenStr}`);
|
|
184
|
+
}
|
|
185
|
+
// ─── Approval ───
|
|
186
|
+
/** Display an approval-needed prompt box. */
|
|
187
|
+
onApprovalNeeded(approval) {
|
|
188
|
+
this.flushThinking();
|
|
189
|
+
const riskColor = approval.risk === "high"
|
|
190
|
+
? colors.bgRed
|
|
191
|
+
: approval.risk === "medium"
|
|
192
|
+
? colors.bgYellow
|
|
193
|
+
: colors.green;
|
|
194
|
+
const riskLabel = c(riskColor + colors.bold, ` ${approval.risk.toUpperCase()} `);
|
|
195
|
+
const border = c(colors.yellow, "\u250C" + "\u2500".repeat(termWidth() - 4) + "\u2510");
|
|
196
|
+
const bottom = c(colors.yellow, "\u2514" + "\u2500".repeat(termWidth() - 4) + "\u2518");
|
|
197
|
+
console.log();
|
|
198
|
+
console.log(border);
|
|
199
|
+
console.log(c(colors.yellow, "\u2502") +
|
|
200
|
+
c(colors.bold + colors.yellow, " APPROVAL NEEDED ") +
|
|
201
|
+
riskLabel +
|
|
202
|
+
" ".repeat(Math.max(0, termWidth() - 22 - approval.risk.length - 4)) +
|
|
203
|
+
c(colors.yellow, "\u2502"));
|
|
204
|
+
console.log(c(colors.yellow, "\u2502") +
|
|
205
|
+
` Tool: ${c(colors.cyan, approval.tool)}` +
|
|
206
|
+
" ".repeat(Math.max(0, termWidth() - 10 - approval.tool.length - 2)) +
|
|
207
|
+
c(colors.yellow, "\u2502"));
|
|
208
|
+
console.log(c(colors.yellow, "\u2502") +
|
|
209
|
+
` ${truncate(approval.description, termWidth() - 4)}` +
|
|
210
|
+
" ".repeat(Math.max(0, termWidth() - 3 - Math.min(approval.description.length, termWidth() - 4) - 1)) +
|
|
211
|
+
c(colors.yellow, "\u2502"));
|
|
212
|
+
console.log(bottom);
|
|
213
|
+
console.log();
|
|
214
|
+
}
|
|
215
|
+
// ─── Done ───
|
|
216
|
+
/** Display a completion summary. */
|
|
217
|
+
onDone(result) {
|
|
218
|
+
this.flushThinking();
|
|
219
|
+
console.log();
|
|
220
|
+
console.log(c(colors.green + colors.bold, " COMPLETED"));
|
|
221
|
+
console.log(c(colors.dim, " " + "\u2500".repeat(50)));
|
|
222
|
+
const durationSec = (result.durationMs / 1000).toFixed(1);
|
|
223
|
+
console.log(` ${c(colors.dim, "Files changed:")} ${c(colors.white, String(result.filesChanged.length))}`);
|
|
224
|
+
for (const f of result.filesChanged) {
|
|
225
|
+
console.log(` ${c(colors.dim, "\u2022")} ${f}`);
|
|
226
|
+
}
|
|
227
|
+
console.log(` ${c(colors.dim, "Iterations:")} ${c(colors.white, `${result.iterations}/${this.config.maxIterations}`)}`);
|
|
228
|
+
console.log(` ${c(colors.dim, "Tokens:")} ${c(colors.white, `${formatTokens(result.tokensUsed)}/${formatTokens(this.config.maxTokens)}`)}`);
|
|
229
|
+
console.log(` ${c(colors.dim, "Duration:")} ${c(colors.white, `${durationSec}s`)}`);
|
|
230
|
+
if (result.summary) {
|
|
231
|
+
console.log();
|
|
232
|
+
console.log(` ${c(colors.dim, result.summary)}`);
|
|
233
|
+
}
|
|
234
|
+
console.log();
|
|
235
|
+
}
|
|
236
|
+
// ─── Error ───
|
|
237
|
+
/** Display an error message in red. */
|
|
238
|
+
onError(error) {
|
|
239
|
+
this.flushThinking();
|
|
240
|
+
console.log(c(colors.red + colors.bold, ` ERROR: `) + c(colors.red, error));
|
|
241
|
+
}
|
|
242
|
+
// ─── Clear ───
|
|
243
|
+
/** Clear the current progress display area. */
|
|
244
|
+
clear() {
|
|
245
|
+
this.flushThinking();
|
|
246
|
+
process.stdout.write("\x1b[2J\x1b[H"); // clear screen + move cursor home
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=progress-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-renderer.js","sourceRoot":"","sources":["../src/progress-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN CLI — Terminal Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles styled terminal output: colors, spinners, markdown,
|
|
5
|
+
* agent thinking display, and tool call rendering.
|
|
6
|
+
*/
|
|
7
|
+
export declare const colors: {
|
|
8
|
+
readonly reset: "\u001B[0m";
|
|
9
|
+
readonly bold: "\u001B[1m";
|
|
10
|
+
readonly dim: "\u001B[2m";
|
|
11
|
+
readonly italic: "\u001B[3m";
|
|
12
|
+
readonly underline: "\u001B[4m";
|
|
13
|
+
readonly red: "\u001B[31m";
|
|
14
|
+
readonly green: "\u001B[32m";
|
|
15
|
+
readonly yellow: "\u001B[33m";
|
|
16
|
+
readonly blue: "\u001B[34m";
|
|
17
|
+
readonly magenta: "\u001B[35m";
|
|
18
|
+
readonly cyan: "\u001B[36m";
|
|
19
|
+
readonly white: "\u001B[37m";
|
|
20
|
+
readonly gray: "\u001B[90m";
|
|
21
|
+
readonly bgRed: "\u001B[41m";
|
|
22
|
+
readonly bgGreen: "\u001B[42m";
|
|
23
|
+
readonly bgYellow: "\u001B[43m";
|
|
24
|
+
readonly bgBlue: "\u001B[44m";
|
|
25
|
+
};
|
|
26
|
+
export declare class Spinner {
|
|
27
|
+
private interval;
|
|
28
|
+
private frameIndex;
|
|
29
|
+
private message;
|
|
30
|
+
constructor(message: string);
|
|
31
|
+
start(): void;
|
|
32
|
+
update(message: string): void;
|
|
33
|
+
stop(finalMessage?: string): void;
|
|
34
|
+
}
|
|
35
|
+
export declare class TerminalRenderer {
|
|
36
|
+
/** Print the YUAN banner */
|
|
37
|
+
banner(): void;
|
|
38
|
+
/** Print an info line */
|
|
39
|
+
info(message: string): void;
|
|
40
|
+
/** Print a success line */
|
|
41
|
+
success(message: string): void;
|
|
42
|
+
/** Print a warning line */
|
|
43
|
+
warn(message: string): void;
|
|
44
|
+
/** Print an error line */
|
|
45
|
+
error(message: string): void;
|
|
46
|
+
/** Display agent thinking indicator */
|
|
47
|
+
thinking(): Spinner;
|
|
48
|
+
/** Display a tool call */
|
|
49
|
+
toolCall(toolName: string, args?: string): void;
|
|
50
|
+
/** Display a tool result (truncated) */
|
|
51
|
+
toolResult(result: string, maxLines?: number): void;
|
|
52
|
+
/** Render basic markdown to terminal (code blocks, bold, headers) */
|
|
53
|
+
markdown(text: string): void;
|
|
54
|
+
/** Print a horizontal separator */
|
|
55
|
+
separator(): void;
|
|
56
|
+
/** Print agent response text */
|
|
57
|
+
agentResponse(text: string): void;
|
|
58
|
+
/** Print the prompt indicator for interactive mode */
|
|
59
|
+
prompt(): void;
|
|
60
|
+
/** Stream a token (no newline, real-time output) */
|
|
61
|
+
streamToken(token: string): void;
|
|
62
|
+
/** End a streaming sequence (newline + reset) */
|
|
63
|
+
endStream(): void;
|
|
64
|
+
/** Create a spinner with custom message */
|
|
65
|
+
spinner(message: string): Spinner;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;CAoBT,CAAC;AAUX,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,MAAM;IAI3B,KAAK,IAAI,IAAI;IAYb,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7B,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;CAWlC;AAID,qBAAa,gBAAgB;IAC3B,4BAA4B;IAC5B,MAAM,IAAI,IAAI;IAOd,yBAAyB;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,2BAA2B;IAC3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,2BAA2B;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,0BAA0B;IAC1B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,uCAAuC;IACvC,QAAQ,IAAI,OAAO;IAMnB,0BAA0B;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAM/C,wCAAwC;IACxC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,IAAI;IAa9C,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwD5B,mCAAmC;IACnC,SAAS,IAAI,IAAI;IAIjB,gCAAgC;IAChC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMjC,sDAAsD;IACtD,MAAM,IAAI,IAAI;IAId,oDAAoD;IACpD,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,iDAAiD;IACjD,SAAS,IAAI,IAAI;IAIjB,2CAA2C;IAC3C,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;CAGlC"}
|
package/dist/renderer.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN CLI — Terminal Renderer
|
|
3
|
+
*
|
|
4
|
+
* Handles styled terminal output: colors, spinners, markdown,
|
|
5
|
+
* agent thinking display, and tool call rendering.
|
|
6
|
+
*/
|
|
7
|
+
// ─── ANSI color helpers (no external deps) ───
|
|
8
|
+
const ESC = "\x1b[";
|
|
9
|
+
export const colors = {
|
|
10
|
+
reset: `${ESC}0m`,
|
|
11
|
+
bold: `${ESC}1m`,
|
|
12
|
+
dim: `${ESC}2m`,
|
|
13
|
+
italic: `${ESC}3m`,
|
|
14
|
+
underline: `${ESC}4m`,
|
|
15
|
+
red: `${ESC}31m`,
|
|
16
|
+
green: `${ESC}32m`,
|
|
17
|
+
yellow: `${ESC}33m`,
|
|
18
|
+
blue: `${ESC}34m`,
|
|
19
|
+
magenta: `${ESC}35m`,
|
|
20
|
+
cyan: `${ESC}36m`,
|
|
21
|
+
white: `${ESC}37m`,
|
|
22
|
+
gray: `${ESC}90m`,
|
|
23
|
+
bgRed: `${ESC}41m`,
|
|
24
|
+
bgGreen: `${ESC}42m`,
|
|
25
|
+
bgYellow: `${ESC}43m`,
|
|
26
|
+
bgBlue: `${ESC}44m`,
|
|
27
|
+
};
|
|
28
|
+
function c(color, text) {
|
|
29
|
+
return `${color}${text}${colors.reset}`;
|
|
30
|
+
}
|
|
31
|
+
// ─── Spinner ───
|
|
32
|
+
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
33
|
+
export class Spinner {
|
|
34
|
+
interval = null;
|
|
35
|
+
frameIndex = 0;
|
|
36
|
+
message;
|
|
37
|
+
constructor(message) {
|
|
38
|
+
this.message = message;
|
|
39
|
+
}
|
|
40
|
+
start() {
|
|
41
|
+
this.frameIndex = 0;
|
|
42
|
+
process.stdout.write("\x1b[?25l"); // hide cursor
|
|
43
|
+
this.interval = setInterval(() => {
|
|
44
|
+
const frame = SPINNER_FRAMES[this.frameIndex % SPINNER_FRAMES.length];
|
|
45
|
+
process.stdout.write(`\r${c(colors.cyan, frame)} ${c(colors.dim, this.message)}`);
|
|
46
|
+
this.frameIndex++;
|
|
47
|
+
}, 80);
|
|
48
|
+
}
|
|
49
|
+
update(message) {
|
|
50
|
+
this.message = message;
|
|
51
|
+
}
|
|
52
|
+
stop(finalMessage) {
|
|
53
|
+
if (this.interval) {
|
|
54
|
+
clearInterval(this.interval);
|
|
55
|
+
this.interval = null;
|
|
56
|
+
}
|
|
57
|
+
process.stdout.write("\r\x1b[K"); // clear line
|
|
58
|
+
process.stdout.write("\x1b[?25h"); // show cursor
|
|
59
|
+
if (finalMessage) {
|
|
60
|
+
console.log(`${c(colors.green, "✓")} ${finalMessage}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ─── Terminal Renderer ───
|
|
65
|
+
export class TerminalRenderer {
|
|
66
|
+
/** Print the YUAN banner */
|
|
67
|
+
banner() {
|
|
68
|
+
console.log(c(colors.bold + colors.cyan, "\n YUAN") +
|
|
69
|
+
c(colors.dim, " — Autonomous Coding Agent\n"));
|
|
70
|
+
}
|
|
71
|
+
/** Print an info line */
|
|
72
|
+
info(message) {
|
|
73
|
+
console.log(`${c(colors.blue, "ℹ")} ${message}`);
|
|
74
|
+
}
|
|
75
|
+
/** Print a success line */
|
|
76
|
+
success(message) {
|
|
77
|
+
console.log(`${c(colors.green, "✓")} ${message}`);
|
|
78
|
+
}
|
|
79
|
+
/** Print a warning line */
|
|
80
|
+
warn(message) {
|
|
81
|
+
console.log(`${c(colors.yellow, "⚠")} ${message}`);
|
|
82
|
+
}
|
|
83
|
+
/** Print an error line */
|
|
84
|
+
error(message) {
|
|
85
|
+
console.log(`${c(colors.red, "✗")} ${message}`);
|
|
86
|
+
}
|
|
87
|
+
/** Display agent thinking indicator */
|
|
88
|
+
thinking() {
|
|
89
|
+
const spinner = new Spinner("thinking...");
|
|
90
|
+
spinner.start();
|
|
91
|
+
return spinner;
|
|
92
|
+
}
|
|
93
|
+
/** Display a tool call */
|
|
94
|
+
toolCall(toolName, args) {
|
|
95
|
+
const toolStr = c(colors.yellow, toolName);
|
|
96
|
+
const argsStr = args ? c(colors.dim, ` ${args}`) : "";
|
|
97
|
+
console.log(` ${c(colors.dim, "🔧")} ${toolStr}${argsStr}`);
|
|
98
|
+
}
|
|
99
|
+
/** Display a tool result (truncated) */
|
|
100
|
+
toolResult(result, maxLines = 5) {
|
|
101
|
+
const lines = result.split("\n");
|
|
102
|
+
const display = lines.slice(0, maxLines);
|
|
103
|
+
for (const line of display) {
|
|
104
|
+
console.log(` ${c(colors.dim, "│")} ${c(colors.dim, line)}`);
|
|
105
|
+
}
|
|
106
|
+
if (lines.length > maxLines) {
|
|
107
|
+
console.log(` ${c(colors.dim, "│")} ${c(colors.dim, `... (${lines.length - maxLines} more lines)`)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/** Render basic markdown to terminal (code blocks, bold, headers) */
|
|
111
|
+
markdown(text) {
|
|
112
|
+
const lines = text.split("\n");
|
|
113
|
+
let inCodeBlock = false;
|
|
114
|
+
let codeLanguage = "";
|
|
115
|
+
for (const line of lines) {
|
|
116
|
+
// Code block start/end
|
|
117
|
+
if (line.startsWith("```")) {
|
|
118
|
+
if (!inCodeBlock) {
|
|
119
|
+
inCodeBlock = true;
|
|
120
|
+
codeLanguage = line.slice(3).trim();
|
|
121
|
+
const langLabel = codeLanguage ? ` ${codeLanguage}` : "";
|
|
122
|
+
console.log(c(colors.dim, ` ┌──${langLabel}${"─".repeat(Math.max(0, 40 - langLabel.length))}`));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
inCodeBlock = false;
|
|
126
|
+
codeLanguage = "";
|
|
127
|
+
console.log(c(colors.dim, ` └${"─".repeat(44)}`));
|
|
128
|
+
}
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (inCodeBlock) {
|
|
132
|
+
console.log(` ${c(colors.dim, "│")} ${c(colors.green, line)}`);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
// Headers
|
|
136
|
+
if (line.startsWith("### ")) {
|
|
137
|
+
console.log(c(colors.bold + colors.white, ` ${line.slice(4)}`));
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
if (line.startsWith("## ")) {
|
|
141
|
+
console.log(c(colors.bold + colors.cyan, ` ${line.slice(3)}`));
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (line.startsWith("# ")) {
|
|
145
|
+
console.log(c(colors.bold + colors.cyan, ` ${line.slice(2)}`));
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
// Bold (**text**)
|
|
149
|
+
let formatted = line.replace(/\*\*(.+?)\*\*/g, (_, content) => c(colors.bold, content));
|
|
150
|
+
// Inline code (`text`)
|
|
151
|
+
formatted = formatted.replace(/`(.+?)`/g, (_, content) => c(colors.yellow, content));
|
|
152
|
+
console.log(` ${formatted}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Print a horizontal separator */
|
|
156
|
+
separator() {
|
|
157
|
+
console.log(c(colors.dim, " " + "─".repeat(50)));
|
|
158
|
+
}
|
|
159
|
+
/** Print agent response text */
|
|
160
|
+
agentResponse(text) {
|
|
161
|
+
console.log();
|
|
162
|
+
this.markdown(text);
|
|
163
|
+
console.log();
|
|
164
|
+
}
|
|
165
|
+
/** Print the prompt indicator for interactive mode */
|
|
166
|
+
prompt() {
|
|
167
|
+
process.stdout.write(c(colors.cyan + colors.bold, "\n❯ "));
|
|
168
|
+
}
|
|
169
|
+
/** Stream a token (no newline, real-time output) */
|
|
170
|
+
streamToken(token) {
|
|
171
|
+
process.stdout.write(token);
|
|
172
|
+
}
|
|
173
|
+
/** End a streaming sequence (newline + reset) */
|
|
174
|
+
endStream() {
|
|
175
|
+
process.stdout.write("\n");
|
|
176
|
+
}
|
|
177
|
+
/** Create a spinner with custom message */
|
|
178
|
+
spinner(message) {
|
|
179
|
+
return new Spinner(message);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN CLI — Session Manager
|
|
3
|
+
*
|
|
4
|
+
* Handles saving/loading agent sessions for `yuan resume`.
|
|
5
|
+
* Connects to @yuaone/core SessionPersistence for disk-level persistence
|
|
6
|
+
* with checkpointing and crash recovery support.
|
|
7
|
+
*/
|
|
8
|
+
import { type SessionSnapshot, type SessionStatus } from "@yuaone/core";
|
|
9
|
+
/** A single message in the conversation (CLI-level) */
|
|
10
|
+
export interface SessionMessage {
|
|
11
|
+
role: "user" | "assistant" | "system";
|
|
12
|
+
content: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
}
|
|
15
|
+
/** Stored session data (CLI-level, maps to core's PersistentSessionData) */
|
|
16
|
+
export interface SessionData {
|
|
17
|
+
id: string;
|
|
18
|
+
createdAt: number;
|
|
19
|
+
updatedAt: number;
|
|
20
|
+
workDir: string;
|
|
21
|
+
messages: SessionMessage[];
|
|
22
|
+
provider: string;
|
|
23
|
+
model: string;
|
|
24
|
+
status: SessionStatus;
|
|
25
|
+
iteration: number;
|
|
26
|
+
tokenUsage: {
|
|
27
|
+
input: number;
|
|
28
|
+
output: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* SessionManager — save/load/resume agent sessions.
|
|
33
|
+
*
|
|
34
|
+
* Wraps @yuaone/core SessionPersistence with CLI-friendly interface.
|
|
35
|
+
* Sessions are stored in ~/.yuan/sessions/<sessionId>/ with:
|
|
36
|
+
* - state.json: metadata
|
|
37
|
+
* - messages.json: conversation history
|
|
38
|
+
* - checkpoint.json: iteration/token state
|
|
39
|
+
*/
|
|
40
|
+
export declare class SessionManager {
|
|
41
|
+
private readonly persistence;
|
|
42
|
+
constructor(baseDir?: string);
|
|
43
|
+
/** Create a new session */
|
|
44
|
+
create(workDir: string, provider: string, model: string): SessionData;
|
|
45
|
+
/** Save a session to disk (via core SessionPersistence) */
|
|
46
|
+
save(session: SessionData): void;
|
|
47
|
+
/** Load a session by ID */
|
|
48
|
+
load(sessionId: string): SessionData | null;
|
|
49
|
+
/** Load the last session */
|
|
50
|
+
loadLast(): SessionData | null;
|
|
51
|
+
/** Get the last session ID */
|
|
52
|
+
getLastSessionId(): string | null;
|
|
53
|
+
/** Add a message to a session */
|
|
54
|
+
addMessage(session: SessionData, role: "user" | "assistant" | "system", content: string): void;
|
|
55
|
+
/** Save a checkpoint (called after each iteration) */
|
|
56
|
+
saveCheckpoint(session: SessionData, changedFiles?: string[], lastToolCall?: string): Promise<void>;
|
|
57
|
+
/** Update session status */
|
|
58
|
+
updateStatus(session: SessionData, status: SessionStatus): Promise<void>;
|
|
59
|
+
/** List recent sessions (async) */
|
|
60
|
+
listSessions(limit?: number): Promise<SessionSnapshot[]>;
|
|
61
|
+
/** List recent sessions (sync for CLI display) */
|
|
62
|
+
listRecent(limit?: number): SessionData[];
|
|
63
|
+
/** Detect crashed sessions */
|
|
64
|
+
detectCrashed(): Promise<SessionSnapshot[]>;
|
|
65
|
+
/** Clean up old sessions */
|
|
66
|
+
cleanup(maxAgeDays?: number): Promise<number>;
|
|
67
|
+
private toSnapshot;
|
|
68
|
+
/** Sync load from disk (for CLI compatibility) */
|
|
69
|
+
private loadSync;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAEL,KAAK,eAAe,EAGpB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAMtB,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;gBAErC,OAAO,CAAC,EAAE,MAAM;IAI5B,2BAA2B;IAC3B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW;IAyBrE,2DAA2D;IAC3D,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAmChC,2BAA2B;IAC3B,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAI3C,4BAA4B;IAC5B,QAAQ,IAAI,WAAW,GAAG,IAAI;IAM9B,8BAA8B;IAC9B,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAWjC,iCAAiC;IACjC,UAAU,CACR,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,EACrC,OAAO,EAAE,MAAM,GACd,IAAI;IASP,sDAAsD;IAChD,cAAc,CAClB,OAAO,EAAE,WAAW,EACpB,YAAY,GAAE,MAAM,EAAO,EAC3B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC;IAWhB,4BAA4B;IACtB,YAAY,CAChB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC;IAKhB,mCAAmC;IAC7B,YAAY,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAI1D,kDAAkD;IAClD,UAAU,CAAC,KAAK,SAAK,GAAG,WAAW,EAAE;IAqDrC,8BAA8B;IACxB,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjD,4BAA4B;IACtB,OAAO,CAAC,UAAU,SAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAM/C,OAAO,CAAC,UAAU;IAelB,kDAAkD;IAClD,OAAO,CAAC,QAAQ;CA2CjB"}
|