@yuaone/cli 0.1.2 → 0.3.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 +29 -4
- package/dist/cli.js.map +1 -1
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/oneshot.js +1 -1
- package/dist/oneshot.js.map +1 -1
- package/dist/tui/App.d.ts +33 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +244 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/agent-bridge.d.ts +56 -0
- package/dist/tui/agent-bridge.d.ts.map +1 -0
- package/dist/tui/agent-bridge.js +138 -0
- package/dist/tui/agent-bridge.js.map +1 -0
- package/dist/tui/components/BashOutput.d.ts +12 -0
- package/dist/tui/components/BashOutput.d.ts.map +1 -0
- package/dist/tui/components/BashOutput.js +19 -0
- package/dist/tui/components/BashOutput.js.map +1 -0
- package/dist/tui/components/CollapsibleSection.d.ts +14 -0
- package/dist/tui/components/CollapsibleSection.d.ts.map +1 -0
- package/dist/tui/components/CollapsibleSection.js +7 -0
- package/dist/tui/components/CollapsibleSection.js.map +1 -0
- package/dist/tui/components/DiffView.d.ts +11 -0
- package/dist/tui/components/DiffView.d.ts.map +1 -0
- package/dist/tui/components/DiffView.js +20 -0
- package/dist/tui/components/DiffView.js.map +1 -0
- package/dist/tui/components/FooterBar.d.ts +11 -0
- package/dist/tui/components/FooterBar.d.ts.map +1 -0
- package/dist/tui/components/FooterBar.js +14 -0
- package/dist/tui/components/FooterBar.js.map +1 -0
- package/dist/tui/components/InputBox.d.ts +24 -0
- package/dist/tui/components/InputBox.d.ts.map +1 -0
- package/dist/tui/components/InputBox.js +124 -0
- package/dist/tui/components/InputBox.js.map +1 -0
- package/dist/tui/components/MarkdownRenderer.d.ts +11 -0
- package/dist/tui/components/MarkdownRenderer.d.ts.map +1 -0
- package/dist/tui/components/MarkdownRenderer.js +118 -0
- package/dist/tui/components/MarkdownRenderer.js.map +1 -0
- package/dist/tui/components/MessageBubble.d.ts +16 -0
- package/dist/tui/components/MessageBubble.d.ts.map +1 -0
- package/dist/tui/components/MessageBubble.js +38 -0
- package/dist/tui/components/MessageBubble.js.map +1 -0
- package/dist/tui/components/MessageList.d.ts +15 -0
- package/dist/tui/components/MessageList.d.ts.map +1 -0
- package/dist/tui/components/MessageList.js +31 -0
- package/dist/tui/components/MessageList.js.map +1 -0
- package/dist/tui/components/SlashMenu.d.ts +14 -0
- package/dist/tui/components/SlashMenu.d.ts.map +1 -0
- package/dist/tui/components/SlashMenu.js +21 -0
- package/dist/tui/components/SlashMenu.js.map +1 -0
- package/dist/tui/components/Spinner.d.ts +9 -0
- package/dist/tui/components/Spinner.d.ts.map +1 -0
- package/dist/tui/components/Spinner.js +19 -0
- package/dist/tui/components/Spinner.js.map +1 -0
- package/dist/tui/components/StatusBar.d.ts +13 -0
- package/dist/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/tui/components/StatusBar.js +15 -0
- package/dist/tui/components/StatusBar.js.map +1 -0
- package/dist/tui/components/ThinkingDots.d.ts +9 -0
- package/dist/tui/components/ThinkingDots.d.ts.map +1 -0
- package/dist/tui/components/ThinkingDots.js +19 -0
- package/dist/tui/components/ThinkingDots.js.map +1 -0
- package/dist/tui/components/ToolCallTree.d.ts +12 -0
- package/dist/tui/components/ToolCallTree.d.ts.map +1 -0
- package/dist/tui/components/ToolCallTree.js +45 -0
- package/dist/tui/components/ToolCallTree.js.map +1 -0
- package/dist/tui/hooks/useAgentStream.d.ts +27 -0
- package/dist/tui/hooks/useAgentStream.d.ts.map +1 -0
- package/dist/tui/hooks/useAgentStream.js +212 -0
- package/dist/tui/hooks/useAgentStream.js.map +1 -0
- package/dist/tui/hooks/useInputHistory.d.ts +17 -0
- package/dist/tui/hooks/useInputHistory.d.ts.map +1 -0
- package/dist/tui/hooks/useInputHistory.js +49 -0
- package/dist/tui/hooks/useInputHistory.js.map +1 -0
- package/dist/tui/hooks/useKeyHandler.d.ts +12 -0
- package/dist/tui/hooks/useKeyHandler.d.ts.map +1 -0
- package/dist/tui/hooks/useKeyHandler.js +20 -0
- package/dist/tui/hooks/useKeyHandler.js.map +1 -0
- package/dist/tui/hooks/useScrollPosition.d.ts +27 -0
- package/dist/tui/hooks/useScrollPosition.d.ts.map +1 -0
- package/dist/tui/hooks/useScrollPosition.js +54 -0
- package/dist/tui/hooks/useScrollPosition.js.map +1 -0
- package/dist/tui/hooks/useSlashCommands.d.ts +22 -0
- package/dist/tui/hooks/useSlashCommands.d.ts.map +1 -0
- package/dist/tui/hooks/useSlashCommands.js +61 -0
- package/dist/tui/hooks/useSlashCommands.js.map +1 -0
- package/dist/tui/hooks/useTerminalSize.d.ts +11 -0
- package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/tui/hooks/useTerminalSize.js +25 -0
- package/dist/tui/hooks/useTerminalSize.js.map +1 -0
- package/dist/tui/lib/ansi.d.ts +36 -0
- package/dist/tui/lib/ansi.d.ts.map +1 -0
- package/dist/tui/lib/ansi.js +40 -0
- package/dist/tui/lib/ansi.js.map +1 -0
- package/dist/tui/lib/box-drawing.d.ts +12 -0
- package/dist/tui/lib/box-drawing.d.ts.map +1 -0
- package/dist/tui/lib/box-drawing.js +30 -0
- package/dist/tui/lib/box-drawing.js.map +1 -0
- package/dist/tui/lib/diff-formatter.d.ts +9 -0
- package/dist/tui/lib/diff-formatter.d.ts.map +1 -0
- package/dist/tui/lib/diff-formatter.js +65 -0
- package/dist/tui/lib/diff-formatter.js.map +1 -0
- package/dist/tui/lib/tokens.d.ts +56 -0
- package/dist/tui/lib/tokens.d.ts.map +1 -0
- package/dist/tui/lib/tokens.js +61 -0
- package/dist/tui/lib/tokens.js.map +1 -0
- package/dist/tui/lib/truncate.d.ts +11 -0
- package/dist/tui/lib/truncate.d.ts.map +1 -0
- package/dist/tui/lib/truncate.js +69 -0
- package/dist/tui/lib/truncate.js.map +1 -0
- package/dist/tui/lib/update-checker.d.ts +21 -0
- package/dist/tui/lib/update-checker.d.ts.map +1 -0
- package/dist/tui/lib/update-checker.js +133 -0
- package/dist/tui/lib/update-checker.js.map +1 -0
- package/dist/tui/types.d.ts +77 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +5 -0
- package/dist/tui/types.js.map +1 -0
- package/package.json +21 -11
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN TUI Design Tokens
|
|
3
|
+
* Monochrome gray + white palette. Professional, quiet, fast.
|
|
4
|
+
*/
|
|
5
|
+
export declare const TOKENS: {
|
|
6
|
+
readonly brand: {
|
|
7
|
+
readonly prefix: "◆";
|
|
8
|
+
readonly name: "yuan";
|
|
9
|
+
readonly prompt: "▸";
|
|
10
|
+
readonly userPrefix: "●";
|
|
11
|
+
};
|
|
12
|
+
readonly color: {
|
|
13
|
+
readonly primary: "white";
|
|
14
|
+
readonly secondary: "gray";
|
|
15
|
+
readonly accent: "white";
|
|
16
|
+
readonly success: "green";
|
|
17
|
+
readonly error: "red";
|
|
18
|
+
readonly warning: "yellow";
|
|
19
|
+
readonly diffAdd: "green";
|
|
20
|
+
readonly diffDel: "red";
|
|
21
|
+
readonly muted: "dim";
|
|
22
|
+
};
|
|
23
|
+
readonly spinner: {
|
|
24
|
+
readonly frames: readonly string[];
|
|
25
|
+
readonly interval: 80;
|
|
26
|
+
readonly style: "dim";
|
|
27
|
+
};
|
|
28
|
+
readonly dots: {
|
|
29
|
+
readonly frames: readonly string[];
|
|
30
|
+
readonly interval: 150;
|
|
31
|
+
readonly style: "dim";
|
|
32
|
+
};
|
|
33
|
+
readonly box: {
|
|
34
|
+
readonly topLeft: "╭";
|
|
35
|
+
readonly topRight: "╮";
|
|
36
|
+
readonly bottomLeft: "╰";
|
|
37
|
+
readonly bottomRight: "╯";
|
|
38
|
+
readonly horizontal: "─";
|
|
39
|
+
readonly vertical: "│";
|
|
40
|
+
readonly style: "dim";
|
|
41
|
+
};
|
|
42
|
+
readonly tree: {
|
|
43
|
+
readonly branch: "├─";
|
|
44
|
+
readonly last: "└─";
|
|
45
|
+
readonly pipe: "│ ";
|
|
46
|
+
readonly style: "dim";
|
|
47
|
+
};
|
|
48
|
+
readonly layout: {
|
|
49
|
+
readonly compact: 80;
|
|
50
|
+
readonly normal: 120;
|
|
51
|
+
readonly padding: 2;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export type LayoutTier = "compact" | "normal" | "wide";
|
|
55
|
+
export declare function getLayoutTier(columns: number): LayoutTier;
|
|
56
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;yBAqB+C,SAAS,MAAM,EAAE;;;;;yBAMhC,SAAS,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;CA2B1D,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEvD,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAIzD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN TUI Design Tokens
|
|
3
|
+
* Monochrome gray + white palette. Professional, quiet, fast.
|
|
4
|
+
*/
|
|
5
|
+
export const TOKENS = {
|
|
6
|
+
brand: {
|
|
7
|
+
prefix: "◆",
|
|
8
|
+
name: "yuan",
|
|
9
|
+
prompt: "▸",
|
|
10
|
+
userPrefix: "●",
|
|
11
|
+
},
|
|
12
|
+
color: {
|
|
13
|
+
primary: "white",
|
|
14
|
+
secondary: "gray",
|
|
15
|
+
accent: "white",
|
|
16
|
+
success: "green",
|
|
17
|
+
error: "red",
|
|
18
|
+
warning: "yellow",
|
|
19
|
+
diffAdd: "green",
|
|
20
|
+
diffDel: "red",
|
|
21
|
+
muted: "dim",
|
|
22
|
+
},
|
|
23
|
+
spinner: {
|
|
24
|
+
frames: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
|
|
25
|
+
interval: 80,
|
|
26
|
+
style: "dim",
|
|
27
|
+
},
|
|
28
|
+
dots: {
|
|
29
|
+
frames: ["·", "··", "···", "····", "·····"],
|
|
30
|
+
interval: 150,
|
|
31
|
+
style: "dim",
|
|
32
|
+
},
|
|
33
|
+
box: {
|
|
34
|
+
topLeft: "╭",
|
|
35
|
+
topRight: "╮",
|
|
36
|
+
bottomLeft: "╰",
|
|
37
|
+
bottomRight: "╯",
|
|
38
|
+
horizontal: "─",
|
|
39
|
+
vertical: "│",
|
|
40
|
+
style: "dim",
|
|
41
|
+
},
|
|
42
|
+
tree: {
|
|
43
|
+
branch: "├─",
|
|
44
|
+
last: "└─",
|
|
45
|
+
pipe: "│ ",
|
|
46
|
+
style: "dim",
|
|
47
|
+
},
|
|
48
|
+
layout: {
|
|
49
|
+
compact: 80,
|
|
50
|
+
normal: 120,
|
|
51
|
+
padding: 2,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
export function getLayoutTier(columns) {
|
|
55
|
+
if (columns < TOKENS.layout.compact)
|
|
56
|
+
return "compact";
|
|
57
|
+
if (columns < TOKENS.layout.normal)
|
|
58
|
+
return "normal";
|
|
59
|
+
return "wide";
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/tui/lib/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE;QACL,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,GAAG;KAChB;IAED,KAAK,EAAE;QACL,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,MAAM;QACjB,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;KACb;IAED,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAsB;QAC/E,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,KAAc;KACtB;IAED,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAsB;QAChE,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,KAAc;KACtB;IAED,GAAG,EAAE;QACH,OAAO,EAAE,GAAG;QACZ,QAAQ,EAAE,GAAG;QACb,UAAU,EAAE,GAAG;QACf,WAAW,EAAE,GAAG;QAChB,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,KAAc;KACtB;IAED,IAAI,EAAE;QACJ,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAc;KACtB;IAED,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,GAAG;QACX,OAAO,EAAE,CAAC;KACX;CACO,CAAC;AAIX,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* truncate — Unicode-aware string truncation.
|
|
3
|
+
* Handles wide characters (CJK), ANSI escape sequences, and emoji.
|
|
4
|
+
*/
|
|
5
|
+
/** Get visible width of a string (strips ANSI, counts CJK as 2) */
|
|
6
|
+
export declare function visibleWidth(str: string): number;
|
|
7
|
+
/** Truncate string to maxWidth visible chars, appending suffix if truncated */
|
|
8
|
+
export declare function truncate(str: string, maxWidth: number, suffix?: string): string;
|
|
9
|
+
/** Pad string to exact visible width */
|
|
10
|
+
export declare function padEnd(str: string, targetWidth: number, char?: string): string;
|
|
11
|
+
//# sourceMappingURL=truncate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/truncate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwBhD;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,MAAM,CA8B5E;AAED,wCAAwC;AACxC,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,SAAM,GAAG,MAAM,CAI3E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* truncate — Unicode-aware string truncation.
|
|
3
|
+
* Handles wide characters (CJK), ANSI escape sequences, and emoji.
|
|
4
|
+
*/
|
|
5
|
+
// Strip ANSI escape codes for width calculation
|
|
6
|
+
const ANSI_RE = /\x1b\[[0-9;]*m/g;
|
|
7
|
+
/** Get visible width of a string (strips ANSI, counts CJK as 2) */
|
|
8
|
+
export function visibleWidth(str) {
|
|
9
|
+
const stripped = str.replace(ANSI_RE, "");
|
|
10
|
+
let width = 0;
|
|
11
|
+
for (const char of stripped) {
|
|
12
|
+
const code = char.codePointAt(0) ?? 0;
|
|
13
|
+
// CJK Unified Ideographs, CJK Compatibility, Hangul, fullwidth
|
|
14
|
+
if ((code >= 0x1100 && code <= 0x115F) || // Hangul Jamo
|
|
15
|
+
(code >= 0x2E80 && code <= 0x303E) || // CJK Radicals
|
|
16
|
+
(code >= 0x3040 && code <= 0x33BF) || // Japanese
|
|
17
|
+
(code >= 0x3400 && code <= 0x4DBF) || // CJK Ext A
|
|
18
|
+
(code >= 0x4E00 && code <= 0x9FFF) || // CJK Unified
|
|
19
|
+
(code >= 0xAC00 && code <= 0xD7AF) || // Hangul Syllables
|
|
20
|
+
(code >= 0xF900 && code <= 0xFAFF) || // CJK Compat
|
|
21
|
+
(code >= 0xFE30 && code <= 0xFE6F) || // CJK Compat Forms
|
|
22
|
+
(code >= 0xFF01 && code <= 0xFF60) || // Fullwidth
|
|
23
|
+
(code >= 0x20000 && code <= 0x2FA1F) // CJK Ext B-F
|
|
24
|
+
) {
|
|
25
|
+
width += 2;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
width += 1;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return width;
|
|
32
|
+
}
|
|
33
|
+
/** Truncate string to maxWidth visible chars, appending suffix if truncated */
|
|
34
|
+
export function truncate(str, maxWidth, suffix = "…") {
|
|
35
|
+
if (visibleWidth(str) <= maxWidth)
|
|
36
|
+
return str;
|
|
37
|
+
const suffixWidth = visibleWidth(suffix);
|
|
38
|
+
const target = maxWidth - suffixWidth;
|
|
39
|
+
if (target <= 0)
|
|
40
|
+
return suffix.slice(0, maxWidth);
|
|
41
|
+
const stripped = str.replace(ANSI_RE, "");
|
|
42
|
+
let width = 0;
|
|
43
|
+
let i = 0;
|
|
44
|
+
for (const char of stripped) {
|
|
45
|
+
const code = char.codePointAt(0) ?? 0;
|
|
46
|
+
const charWidth = (code >= 0x1100 && code <= 0x115F) ||
|
|
47
|
+
(code >= 0x2E80 && code <= 0x9FFF) ||
|
|
48
|
+
(code >= 0xAC00 && code <= 0xD7AF) ||
|
|
49
|
+
(code >= 0xF900 && code <= 0xFAFF) ||
|
|
50
|
+
(code >= 0xFE30 && code <= 0xFE6F) ||
|
|
51
|
+
(code >= 0xFF01 && code <= 0xFF60) ||
|
|
52
|
+
(code >= 0x20000 && code <= 0x2FA1F)
|
|
53
|
+
? 2
|
|
54
|
+
: 1;
|
|
55
|
+
if (width + charWidth > target)
|
|
56
|
+
break;
|
|
57
|
+
width += charWidth;
|
|
58
|
+
i += char.length;
|
|
59
|
+
}
|
|
60
|
+
return stripped.slice(0, i) + suffix;
|
|
61
|
+
}
|
|
62
|
+
/** Pad string to exact visible width */
|
|
63
|
+
export function padEnd(str, targetWidth, char = " ") {
|
|
64
|
+
const current = visibleWidth(str);
|
|
65
|
+
if (current >= targetWidth)
|
|
66
|
+
return str;
|
|
67
|
+
return str + char.repeat(targetWidth - current);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=truncate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truncate.js","sourceRoot":"","sources":["../../../src/tui/lib/truncate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* update-checker — Check npm registry for newer @yuaone/cli versions.
|
|
3
|
+
* Non-blocking, cached for 24h, respects user auto-update preference.
|
|
4
|
+
*/
|
|
5
|
+
export interface UpdateInfo {
|
|
6
|
+
currentVersion: string;
|
|
7
|
+
latestVersion: string;
|
|
8
|
+
hasUpdate: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface YuanSettings {
|
|
11
|
+
autoUpdate: "prompt" | "auto" | "never";
|
|
12
|
+
}
|
|
13
|
+
/** Load user settings */
|
|
14
|
+
export declare function loadSettings(): YuanSettings;
|
|
15
|
+
/** Save user settings */
|
|
16
|
+
export declare function saveSettings(settings: YuanSettings): void;
|
|
17
|
+
/** Check for updates (cached, non-blocking) */
|
|
18
|
+
export declare function checkForUpdate(currentVersion: string): Promise<UpdateInfo | null>;
|
|
19
|
+
/** Run auto-update via npm/pnpm */
|
|
20
|
+
export declare function performUpdate(): Promise<boolean>;
|
|
21
|
+
//# sourceMappingURL=update-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/update-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACzC;AAMD,yBAAyB;AACzB,wBAAgB,YAAY,IAAI,YAAY,CAU3C;AAED,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAQzD;AAqCD,+CAA+C;AAC/C,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAwCvF;AAED,mCAAmC;AACnC,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAWtD"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* update-checker — Check npm registry for newer @yuaone/cli versions.
|
|
3
|
+
* Non-blocking, cached for 24h, respects user auto-update preference.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
import * as https from "node:https";
|
|
8
|
+
import * as os from "node:os";
|
|
9
|
+
const YUAN_DIR = path.join(os.homedir(), ".yuan");
|
|
10
|
+
const UPDATE_CACHE = path.join(YUAN_DIR, "update-check.json");
|
|
11
|
+
const SETTINGS_PATH = path.join(YUAN_DIR, "settings.json");
|
|
12
|
+
const PACKAGE_NAME = "@yuaone/cli";
|
|
13
|
+
const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
14
|
+
const DEFAULT_SETTINGS = {
|
|
15
|
+
autoUpdate: "prompt",
|
|
16
|
+
};
|
|
17
|
+
/** Load user settings */
|
|
18
|
+
export function loadSettings() {
|
|
19
|
+
try {
|
|
20
|
+
if (fs.existsSync(SETTINGS_PATH)) {
|
|
21
|
+
const raw = fs.readFileSync(SETTINGS_PATH, "utf-8");
|
|
22
|
+
return { ...DEFAULT_SETTINGS, ...JSON.parse(raw) };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Corrupted settings — use defaults
|
|
27
|
+
}
|
|
28
|
+
return { ...DEFAULT_SETTINGS };
|
|
29
|
+
}
|
|
30
|
+
/** Save user settings */
|
|
31
|
+
export function saveSettings(settings) {
|
|
32
|
+
if (!fs.existsSync(YUAN_DIR)) {
|
|
33
|
+
fs.mkdirSync(YUAN_DIR, { recursive: true, mode: 0o700 });
|
|
34
|
+
}
|
|
35
|
+
fs.writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2), {
|
|
36
|
+
encoding: "utf-8",
|
|
37
|
+
mode: 0o600,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** Fetch latest version from npm registry (non-blocking) */
|
|
41
|
+
function fetchLatestVersion() {
|
|
42
|
+
return new Promise((resolve) => {
|
|
43
|
+
const url = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
|
|
44
|
+
const req = https.get(url, { timeout: 5000 }, (res) => {
|
|
45
|
+
let data = "";
|
|
46
|
+
res.on("data", (chunk) => { data += chunk; });
|
|
47
|
+
res.on("end", () => {
|
|
48
|
+
try {
|
|
49
|
+
const parsed = JSON.parse(data);
|
|
50
|
+
resolve(parsed.version ?? null);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
resolve(null);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
req.on("error", () => resolve(null));
|
|
58
|
+
req.on("timeout", () => {
|
|
59
|
+
req.destroy();
|
|
60
|
+
resolve(null);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Compare semver versions. Returns true if b > a */
|
|
65
|
+
function isNewer(a, b) {
|
|
66
|
+
const pa = a.split(".").map(Number);
|
|
67
|
+
const pb = b.split(".").map(Number);
|
|
68
|
+
for (let i = 0; i < 3; i++) {
|
|
69
|
+
if ((pb[i] ?? 0) > (pa[i] ?? 0))
|
|
70
|
+
return true;
|
|
71
|
+
if ((pb[i] ?? 0) < (pa[i] ?? 0))
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
/** Check for updates (cached, non-blocking) */
|
|
77
|
+
export async function checkForUpdate(currentVersion) {
|
|
78
|
+
const settings = loadSettings();
|
|
79
|
+
if (settings.autoUpdate === "never")
|
|
80
|
+
return null;
|
|
81
|
+
// Check cache
|
|
82
|
+
try {
|
|
83
|
+
if (fs.existsSync(UPDATE_CACHE)) {
|
|
84
|
+
const cache = JSON.parse(fs.readFileSync(UPDATE_CACHE, "utf-8"));
|
|
85
|
+
const age = Date.now() - (cache.checkedAt ?? 0);
|
|
86
|
+
if (age < CHECK_INTERVAL_MS && cache.latestVersion) {
|
|
87
|
+
const hasUpdate = isNewer(currentVersion, cache.latestVersion);
|
|
88
|
+
if (!hasUpdate)
|
|
89
|
+
return null;
|
|
90
|
+
return { currentVersion, latestVersion: cache.latestVersion, hasUpdate };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Cache corrupted, re-check
|
|
96
|
+
}
|
|
97
|
+
// Fetch from npm
|
|
98
|
+
const latest = await fetchLatestVersion();
|
|
99
|
+
if (!latest)
|
|
100
|
+
return null;
|
|
101
|
+
// Save cache
|
|
102
|
+
try {
|
|
103
|
+
if (!fs.existsSync(YUAN_DIR)) {
|
|
104
|
+
fs.mkdirSync(YUAN_DIR, { recursive: true, mode: 0o700 });
|
|
105
|
+
}
|
|
106
|
+
fs.writeFileSync(UPDATE_CACHE, JSON.stringify({
|
|
107
|
+
latestVersion: latest,
|
|
108
|
+
checkedAt: Date.now(),
|
|
109
|
+
}), { encoding: "utf-8", mode: 0o600 });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Non-critical
|
|
113
|
+
}
|
|
114
|
+
const hasUpdate = isNewer(currentVersion, latest);
|
|
115
|
+
if (!hasUpdate)
|
|
116
|
+
return null;
|
|
117
|
+
return { currentVersion, latestVersion: latest, hasUpdate };
|
|
118
|
+
}
|
|
119
|
+
/** Run auto-update via npm/pnpm */
|
|
120
|
+
export async function performUpdate() {
|
|
121
|
+
const { execSync } = await import("node:child_process");
|
|
122
|
+
try {
|
|
123
|
+
execSync(`npm install -g ${PACKAGE_NAME}@latest`, {
|
|
124
|
+
stdio: "pipe",
|
|
125
|
+
timeout: 60000,
|
|
126
|
+
});
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=update-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../../src/tui/lib/update-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YUAN TUI — shared type definitions.
|
|
3
|
+
*/
|
|
4
|
+
import type { LayoutTier } from "./lib/tokens.js";
|
|
5
|
+
/** Connection status for the status bar */
|
|
6
|
+
export type ConnectionStatus = "connected" | "connecting" | "disconnected" | "error";
|
|
7
|
+
/** Terminal dimensions with computed tier */
|
|
8
|
+
export interface TerminalDimensions {
|
|
9
|
+
columns: number;
|
|
10
|
+
rows: number;
|
|
11
|
+
tier: LayoutTier;
|
|
12
|
+
}
|
|
13
|
+
/** A message in the conversation */
|
|
14
|
+
export interface TUIMessage {
|
|
15
|
+
id: string;
|
|
16
|
+
role: "user" | "assistant" | "system" | "tool";
|
|
17
|
+
content: string;
|
|
18
|
+
timestamp?: number;
|
|
19
|
+
/** Tool calls attached to this assistant message */
|
|
20
|
+
toolCalls?: TUIToolCall[];
|
|
21
|
+
/** Whether the assistant is still generating this message */
|
|
22
|
+
isStreaming?: boolean;
|
|
23
|
+
/** Tool-specific fields */
|
|
24
|
+
toolName?: string;
|
|
25
|
+
toolSuccess?: boolean;
|
|
26
|
+
toolDurationMs?: number;
|
|
27
|
+
}
|
|
28
|
+
/** A tool call within an assistant message */
|
|
29
|
+
export interface TUIToolCall {
|
|
30
|
+
id: string;
|
|
31
|
+
toolName: string;
|
|
32
|
+
argsSummary: string;
|
|
33
|
+
status: "running" | "success" | "error";
|
|
34
|
+
duration?: number;
|
|
35
|
+
result?: TUIToolResult;
|
|
36
|
+
isExpanded: boolean;
|
|
37
|
+
}
|
|
38
|
+
/** The result of a tool call */
|
|
39
|
+
export interface TUIToolResult {
|
|
40
|
+
kind: "text" | "diff" | "bash_output" | "file_content" | "error";
|
|
41
|
+
content: string;
|
|
42
|
+
diff?: ParsedDiff;
|
|
43
|
+
lineCount: number;
|
|
44
|
+
}
|
|
45
|
+
/** Parsed diff structure */
|
|
46
|
+
export interface ParsedDiff {
|
|
47
|
+
filePath: string;
|
|
48
|
+
hunks: ParsedDiffHunk[];
|
|
49
|
+
additions: number;
|
|
50
|
+
deletions: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ParsedDiffHunk {
|
|
53
|
+
startOld: number;
|
|
54
|
+
startNew: number;
|
|
55
|
+
lines: ParsedDiffLine[];
|
|
56
|
+
}
|
|
57
|
+
export interface ParsedDiffLine {
|
|
58
|
+
type: "add" | "delete" | "context";
|
|
59
|
+
content: string;
|
|
60
|
+
oldLineNo?: number;
|
|
61
|
+
newLineNo?: number;
|
|
62
|
+
}
|
|
63
|
+
/** Slash command definition */
|
|
64
|
+
export interface SlashCommand {
|
|
65
|
+
name: string;
|
|
66
|
+
description: string;
|
|
67
|
+
aliases?: string[];
|
|
68
|
+
}
|
|
69
|
+
/** Agent stream state */
|
|
70
|
+
export interface AgentStreamState {
|
|
71
|
+
status: "idle" | "thinking" | "streaming" | "tool_running" | "awaiting_approval";
|
|
72
|
+
streamBuffer: string;
|
|
73
|
+
messages: TUIMessage[];
|
|
74
|
+
tokensPerSecond: number;
|
|
75
|
+
totalTokensUsed: number;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,cAAc,GAAG,OAAO,CAAC;AAErF,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,8CAA8C;AAC9C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,mBAAmB,CAAC;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuaone/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "YUAN — Autonomous Coding Agent CLI",
|
|
5
5
|
"license": "AGPL-3.0",
|
|
6
6
|
"type": "module",
|
|
@@ -37,20 +37,30 @@
|
|
|
37
37
|
"engines": {
|
|
38
38
|
"node": ">=18"
|
|
39
39
|
},
|
|
40
|
-
"dependencies": {
|
|
41
|
-
"commander": "^13.1.0",
|
|
42
|
-
"@yuaone/core": "0.1.2",
|
|
43
|
-
"@yuaone/tools": "0.1.2"
|
|
44
|
-
},
|
|
45
|
-
"devDependencies": {
|
|
46
|
-
"@types/node": "^22.19.15",
|
|
47
|
-
"typescript": "^5.7.0"
|
|
48
|
-
},
|
|
49
40
|
"scripts": {
|
|
50
41
|
"build": "tsc && chmod +x dist/cli.js",
|
|
51
42
|
"dev": "tsc --watch",
|
|
52
43
|
"clean": "rm -rf dist",
|
|
53
44
|
"lint": "tsc --noEmit",
|
|
54
45
|
"start": "node dist/cli.js"
|
|
46
|
+
},
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@yuaone/core": "workspace:*",
|
|
49
|
+
"@yuaone/tools": "workspace:*",
|
|
50
|
+
"ansi-escapes": "7.0.0",
|
|
51
|
+
"chalk": "5.4.1",
|
|
52
|
+
"cli-cursor": "5.0.0",
|
|
53
|
+
"commander": "^13.1.0",
|
|
54
|
+
"ink": "5.1.0",
|
|
55
|
+
"ink-text-input": "6.0.0",
|
|
56
|
+
"react": "18.3.1",
|
|
57
|
+
"string-width": "7.2.0",
|
|
58
|
+
"strip-ansi": "7.1.0",
|
|
59
|
+
"wrap-ansi": "9.0.0"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@types/node": "^22.19.15",
|
|
63
|
+
"@types/react": "18.3.0",
|
|
64
|
+
"typescript": "^5.7.0"
|
|
55
65
|
}
|
|
56
|
-
}
|
|
66
|
+
}
|