@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.
Files changed (119) hide show
  1. package/dist/cli.js +29 -4
  2. package/dist/cli.js.map +1 -1
  3. package/dist/interactive.js +1 -1
  4. package/dist/interactive.js.map +1 -1
  5. package/dist/oneshot.js +1 -1
  6. package/dist/oneshot.js.map +1 -1
  7. package/dist/tui/App.d.ts +33 -0
  8. package/dist/tui/App.d.ts.map +1 -0
  9. package/dist/tui/App.js +244 -0
  10. package/dist/tui/App.js.map +1 -0
  11. package/dist/tui/agent-bridge.d.ts +56 -0
  12. package/dist/tui/agent-bridge.d.ts.map +1 -0
  13. package/dist/tui/agent-bridge.js +138 -0
  14. package/dist/tui/agent-bridge.js.map +1 -0
  15. package/dist/tui/components/BashOutput.d.ts +12 -0
  16. package/dist/tui/components/BashOutput.d.ts.map +1 -0
  17. package/dist/tui/components/BashOutput.js +19 -0
  18. package/dist/tui/components/BashOutput.js.map +1 -0
  19. package/dist/tui/components/CollapsibleSection.d.ts +14 -0
  20. package/dist/tui/components/CollapsibleSection.d.ts.map +1 -0
  21. package/dist/tui/components/CollapsibleSection.js +7 -0
  22. package/dist/tui/components/CollapsibleSection.js.map +1 -0
  23. package/dist/tui/components/DiffView.d.ts +11 -0
  24. package/dist/tui/components/DiffView.d.ts.map +1 -0
  25. package/dist/tui/components/DiffView.js +20 -0
  26. package/dist/tui/components/DiffView.js.map +1 -0
  27. package/dist/tui/components/FooterBar.d.ts +11 -0
  28. package/dist/tui/components/FooterBar.d.ts.map +1 -0
  29. package/dist/tui/components/FooterBar.js +14 -0
  30. package/dist/tui/components/FooterBar.js.map +1 -0
  31. package/dist/tui/components/InputBox.d.ts +24 -0
  32. package/dist/tui/components/InputBox.d.ts.map +1 -0
  33. package/dist/tui/components/InputBox.js +124 -0
  34. package/dist/tui/components/InputBox.js.map +1 -0
  35. package/dist/tui/components/MarkdownRenderer.d.ts +11 -0
  36. package/dist/tui/components/MarkdownRenderer.d.ts.map +1 -0
  37. package/dist/tui/components/MarkdownRenderer.js +118 -0
  38. package/dist/tui/components/MarkdownRenderer.js.map +1 -0
  39. package/dist/tui/components/MessageBubble.d.ts +16 -0
  40. package/dist/tui/components/MessageBubble.d.ts.map +1 -0
  41. package/dist/tui/components/MessageBubble.js +38 -0
  42. package/dist/tui/components/MessageBubble.js.map +1 -0
  43. package/dist/tui/components/MessageList.d.ts +15 -0
  44. package/dist/tui/components/MessageList.d.ts.map +1 -0
  45. package/dist/tui/components/MessageList.js +31 -0
  46. package/dist/tui/components/MessageList.js.map +1 -0
  47. package/dist/tui/components/SlashMenu.d.ts +14 -0
  48. package/dist/tui/components/SlashMenu.d.ts.map +1 -0
  49. package/dist/tui/components/SlashMenu.js +21 -0
  50. package/dist/tui/components/SlashMenu.js.map +1 -0
  51. package/dist/tui/components/Spinner.d.ts +9 -0
  52. package/dist/tui/components/Spinner.d.ts.map +1 -0
  53. package/dist/tui/components/Spinner.js +19 -0
  54. package/dist/tui/components/Spinner.js.map +1 -0
  55. package/dist/tui/components/StatusBar.d.ts +13 -0
  56. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  57. package/dist/tui/components/StatusBar.js +15 -0
  58. package/dist/tui/components/StatusBar.js.map +1 -0
  59. package/dist/tui/components/ThinkingDots.d.ts +9 -0
  60. package/dist/tui/components/ThinkingDots.d.ts.map +1 -0
  61. package/dist/tui/components/ThinkingDots.js +19 -0
  62. package/dist/tui/components/ThinkingDots.js.map +1 -0
  63. package/dist/tui/components/ToolCallTree.d.ts +12 -0
  64. package/dist/tui/components/ToolCallTree.d.ts.map +1 -0
  65. package/dist/tui/components/ToolCallTree.js +45 -0
  66. package/dist/tui/components/ToolCallTree.js.map +1 -0
  67. package/dist/tui/hooks/useAgentStream.d.ts +27 -0
  68. package/dist/tui/hooks/useAgentStream.d.ts.map +1 -0
  69. package/dist/tui/hooks/useAgentStream.js +212 -0
  70. package/dist/tui/hooks/useAgentStream.js.map +1 -0
  71. package/dist/tui/hooks/useInputHistory.d.ts +17 -0
  72. package/dist/tui/hooks/useInputHistory.d.ts.map +1 -0
  73. package/dist/tui/hooks/useInputHistory.js +49 -0
  74. package/dist/tui/hooks/useInputHistory.js.map +1 -0
  75. package/dist/tui/hooks/useKeyHandler.d.ts +12 -0
  76. package/dist/tui/hooks/useKeyHandler.d.ts.map +1 -0
  77. package/dist/tui/hooks/useKeyHandler.js +20 -0
  78. package/dist/tui/hooks/useKeyHandler.js.map +1 -0
  79. package/dist/tui/hooks/useScrollPosition.d.ts +27 -0
  80. package/dist/tui/hooks/useScrollPosition.d.ts.map +1 -0
  81. package/dist/tui/hooks/useScrollPosition.js +54 -0
  82. package/dist/tui/hooks/useScrollPosition.js.map +1 -0
  83. package/dist/tui/hooks/useSlashCommands.d.ts +22 -0
  84. package/dist/tui/hooks/useSlashCommands.d.ts.map +1 -0
  85. package/dist/tui/hooks/useSlashCommands.js +61 -0
  86. package/dist/tui/hooks/useSlashCommands.js.map +1 -0
  87. package/dist/tui/hooks/useTerminalSize.d.ts +11 -0
  88. package/dist/tui/hooks/useTerminalSize.d.ts.map +1 -0
  89. package/dist/tui/hooks/useTerminalSize.js +25 -0
  90. package/dist/tui/hooks/useTerminalSize.js.map +1 -0
  91. package/dist/tui/lib/ansi.d.ts +36 -0
  92. package/dist/tui/lib/ansi.d.ts.map +1 -0
  93. package/dist/tui/lib/ansi.js +40 -0
  94. package/dist/tui/lib/ansi.js.map +1 -0
  95. package/dist/tui/lib/box-drawing.d.ts +12 -0
  96. package/dist/tui/lib/box-drawing.d.ts.map +1 -0
  97. package/dist/tui/lib/box-drawing.js +30 -0
  98. package/dist/tui/lib/box-drawing.js.map +1 -0
  99. package/dist/tui/lib/diff-formatter.d.ts +9 -0
  100. package/dist/tui/lib/diff-formatter.d.ts.map +1 -0
  101. package/dist/tui/lib/diff-formatter.js +65 -0
  102. package/dist/tui/lib/diff-formatter.js.map +1 -0
  103. package/dist/tui/lib/tokens.d.ts +56 -0
  104. package/dist/tui/lib/tokens.d.ts.map +1 -0
  105. package/dist/tui/lib/tokens.js +61 -0
  106. package/dist/tui/lib/tokens.js.map +1 -0
  107. package/dist/tui/lib/truncate.d.ts +11 -0
  108. package/dist/tui/lib/truncate.d.ts.map +1 -0
  109. package/dist/tui/lib/truncate.js +69 -0
  110. package/dist/tui/lib/truncate.js.map +1 -0
  111. package/dist/tui/lib/update-checker.d.ts +21 -0
  112. package/dist/tui/lib/update-checker.d.ts.map +1 -0
  113. package/dist/tui/lib/update-checker.js +133 -0
  114. package/dist/tui/lib/update-checker.js.map +1 -0
  115. package/dist/tui/types.d.ts +77 -0
  116. package/dist/tui/types.d.ts.map +1 -0
  117. package/dist/tui/types.js +5 -0
  118. package/dist/tui/types.js.map +1 -0
  119. package/package.json +21 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentStream.js","sourceRoot":"","sources":["../../../src/tui/hooks/useAgentStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Hook: input history navigation with arrow keys.
3
+ */
4
+ export interface InputHistoryHook {
5
+ /** Current input value (may be from history) */
6
+ current: string;
7
+ /** Add an entry to history */
8
+ push: (entry: string) => void;
9
+ /** Navigate up (older) — returns new value or null if at top */
10
+ up: (currentInput: string) => string | null;
11
+ /** Navigate down (newer) — returns new value or null if at bottom */
12
+ down: () => string | null;
13
+ /** Reset navigation position to bottom */
14
+ reset: () => void;
15
+ }
16
+ export declare function useInputHistory(): InputHistoryHook;
17
+ //# sourceMappingURL=useInputHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputHistory.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useInputHistory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,gEAAgE;IAChE,EAAE,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC5C,qEAAqE;IACrE,IAAI,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC1B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,eAAe,IAAI,gBAAgB,CA8ClD"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Hook: input history navigation with arrow keys.
3
+ */
4
+ import { useState, useCallback } from "react";
5
+ const MAX_HISTORY = 100;
6
+ export function useInputHistory() {
7
+ const [history, setHistory] = useState([]);
8
+ const [index, setIndex] = useState(-1);
9
+ const [savedInput, setSavedInput] = useState("");
10
+ const push = useCallback((entry) => {
11
+ if (!entry.trim())
12
+ return;
13
+ setHistory((prev) => {
14
+ const next = [...prev, entry];
15
+ if (next.length > MAX_HISTORY)
16
+ next.shift();
17
+ return next;
18
+ });
19
+ setIndex(-1);
20
+ setSavedInput("");
21
+ }, []);
22
+ const up = useCallback((currentInput) => {
23
+ if (history.length === 0)
24
+ return null;
25
+ const newIndex = index === -1 ? history.length - 1 : Math.max(0, index - 1);
26
+ if (index === -1)
27
+ setSavedInput(currentInput);
28
+ setIndex(newIndex);
29
+ return history[newIndex] ?? null;
30
+ }, [history, index]);
31
+ const down = useCallback(() => {
32
+ if (index === -1)
33
+ return null;
34
+ const newIndex = index + 1;
35
+ if (newIndex >= history.length) {
36
+ setIndex(-1);
37
+ return savedInput;
38
+ }
39
+ setIndex(newIndex);
40
+ return history[newIndex] ?? null;
41
+ }, [history, index, savedInput]);
42
+ const reset = useCallback(() => {
43
+ setIndex(-1);
44
+ setSavedInput("");
45
+ }, []);
46
+ const current = index >= 0 && index < history.length ? history[index] : "";
47
+ return { current, push, up, down, reset };
48
+ }
49
+ //# sourceMappingURL=useInputHistory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputHistory.js","sourceRoot":"","sources":["../../../src/tui/hooks/useInputHistory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,WAAW,GAAG,GAAG,CAAC;AAexB,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO;QAC1B,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,EAAE,GAAG,WAAW,CACpB,CAAC,YAAoB,EAAE,EAAE;QACvB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,aAAa,CAAC,YAAY,CAAC,CAAC;QAC9C,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC,EACD,CAAC,OAAO,EAAE,KAAK,CAAC,CACjB,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3B,IAAI,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC/B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IACnC,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * useKeyHandler — global key dispatch for Ctrl+O expand, Ctrl+C exit.
3
+ * Note: Esc interrupt is handled by InputBox to avoid double-firing.
4
+ */
5
+ export interface KeyHandlerOptions {
6
+ onInterrupt?: () => void;
7
+ onToggleExpand?: () => void;
8
+ onExit?: () => void;
9
+ isRunning?: boolean;
10
+ }
11
+ export declare function useKeyHandler({ onToggleExpand, onExit, }: KeyHandlerOptions): void;
12
+ //# sourceMappingURL=useKeyHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyHandler.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAC5B,cAAc,EACd,MAAM,GACP,EAAE,iBAAiB,GAAG,IAAI,CAkB1B"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * useKeyHandler — global key dispatch for Ctrl+O expand, Ctrl+C exit.
3
+ * Note: Esc interrupt is handled by InputBox to avoid double-firing.
4
+ */
5
+ import { useCallback } from "react";
6
+ import { useInput } from "ink";
7
+ export function useKeyHandler({ onToggleExpand, onExit, }) {
8
+ useInput(useCallback((input, key) => {
9
+ // Ctrl+O → toggle expand/collapse
10
+ if (key.ctrl && input === "o" && onToggleExpand) {
11
+ onToggleExpand();
12
+ return;
13
+ }
14
+ // Ctrl+C → clean exit
15
+ if (key.ctrl && input === "c" && onExit) {
16
+ onExit();
17
+ }
18
+ }, [onToggleExpand, onExit]));
19
+ }
20
+ //# sourceMappingURL=useKeyHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyHandler.js","sourceRoot":"","sources":["../../../src/tui/hooks/useKeyHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAS/B,MAAM,UAAU,aAAa,CAAC,EAC5B,cAAc,EACd,MAAM,GACY;IAClB,QAAQ,CACN,WAAW,CACT,CAAC,KAAa,EAAE,GAAuB,EAAE,EAAE;QACzC,kCAAkC;QAClC,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;YAChD,cAAc,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;YACxC,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC,EACD,CAAC,cAAc,EAAE,MAAM,CAAC,CACzB,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * useScrollPosition — virtual scroll state for MessageList.
3
+ * Tracks scroll offset, auto-scroll behavior, and scroll indicators.
4
+ */
5
+ export interface ScrollState {
6
+ /** Index of the first visible message */
7
+ offset: number;
8
+ /** Total number of messages */
9
+ total: number;
10
+ /** Number of messages visible in viewport */
11
+ viewportSize: number;
12
+ /** Whether auto-scroll is engaged (scroll to bottom on new messages) */
13
+ autoScroll: boolean;
14
+ /** Number of messages above viewport */
15
+ aboveCount: number;
16
+ /** Number of messages below viewport */
17
+ belowCount: number;
18
+ }
19
+ export interface ScrollActions {
20
+ scrollUp: (amount?: number) => void;
21
+ scrollDown: (amount?: number) => void;
22
+ scrollToBottom: () => void;
23
+ pageUp: () => void;
24
+ pageDown: () => void;
25
+ }
26
+ export declare function useScrollPosition(totalMessages: number, viewportSize: number): [ScrollState, ScrollActions];
27
+ //# sourceMappingURL=useScrollPosition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollPosition.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useScrollPosition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,UAAU,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,CAAC,WAAW,EAAE,aAAa,CAAC,CA4D9B"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * useScrollPosition — virtual scroll state for MessageList.
3
+ * Tracks scroll offset, auto-scroll behavior, and scroll indicators.
4
+ */
5
+ import { useState, useCallback, useEffect } from "react";
6
+ export function useScrollPosition(totalMessages, viewportSize) {
7
+ const [offset, setOffset] = useState(0);
8
+ const [autoScroll, setAutoScroll] = useState(true);
9
+ // Auto-scroll when new messages arrive and autoScroll is engaged
10
+ useEffect(() => {
11
+ if (autoScroll && totalMessages > viewportSize) {
12
+ setOffset(Math.max(0, totalMessages - viewportSize));
13
+ }
14
+ }, [totalMessages, viewportSize, autoScroll]);
15
+ const scrollUp = useCallback((amount = 1) => {
16
+ setOffset((prev) => {
17
+ const next = Math.max(0, prev - amount);
18
+ if (next < prev)
19
+ setAutoScroll(false);
20
+ return next;
21
+ });
22
+ }, []);
23
+ const scrollDown = useCallback((amount = 1) => {
24
+ setOffset((prev) => {
25
+ const maxOffset = Math.max(0, totalMessages - viewportSize);
26
+ const next = Math.min(maxOffset, prev + amount);
27
+ if (next >= maxOffset)
28
+ setAutoScroll(true);
29
+ return next;
30
+ });
31
+ }, [totalMessages, viewportSize]);
32
+ const scrollToBottom = useCallback(() => {
33
+ setOffset(Math.max(0, totalMessages - viewportSize));
34
+ setAutoScroll(true);
35
+ }, [totalMessages, viewportSize]);
36
+ const pageUp = useCallback(() => {
37
+ scrollUp(Math.max(1, viewportSize - 2));
38
+ }, [scrollUp, viewportSize]);
39
+ const pageDown = useCallback(() => {
40
+ scrollDown(Math.max(1, viewportSize - 2));
41
+ }, [scrollDown, viewportSize]);
42
+ const aboveCount = offset;
43
+ const belowCount = Math.max(0, totalMessages - viewportSize - offset);
44
+ const state = {
45
+ offset,
46
+ total: totalMessages,
47
+ viewportSize,
48
+ autoScroll,
49
+ aboveCount,
50
+ belowCount,
51
+ };
52
+ return [state, { scrollUp, scrollDown, scrollToBottom, pageUp, pageDown }];
53
+ }
54
+ //# sourceMappingURL=useScrollPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScrollPosition.js","sourceRoot":"","sources":["../../../src/tui/hooks/useScrollPosition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * useSlashCommands — slash command registry and fuzzy matching.
3
+ */
4
+ import type { SlashCommand } from "../types.js";
5
+ /** Check if a string is a known command name (exact or alias match) */
6
+ export declare function isKnownCommand(input: string): boolean;
7
+ export interface SlashCommandState {
8
+ commands: SlashCommand[];
9
+ filtered: SlashCommand[];
10
+ selectedIndex: number;
11
+ isOpen: boolean;
12
+ }
13
+ export interface SlashCommandActions {
14
+ filter: (query: string) => void;
15
+ selectNext: () => void;
16
+ selectPrev: () => void;
17
+ getSelected: () => SlashCommand | null;
18
+ open: () => void;
19
+ close: () => void;
20
+ }
21
+ export declare function useSlashCommands(extraCommands?: SlashCommand[]): [SlashCommandState, SlashCommandActions];
22
+ //# sourceMappingURL=useSlashCommands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSlashCommands.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useSlashCommands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAehD,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOrD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,YAAY,GAAG,IAAI,CAAC;IACvC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAC9B,aAAa,GAAE,YAAY,EAAO,GACjC,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAkD1C"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * useSlashCommands — slash command registry and fuzzy matching.
3
+ */
4
+ import { useState, useMemo, useCallback } from "react";
5
+ const DEFAULT_COMMANDS = [
6
+ { name: "/help", description: "Show available commands", aliases: ["/h"] },
7
+ { name: "/status", description: "Model, tokens, session info" },
8
+ { name: "/clear", description: "Clear conversation history" },
9
+ { name: "/model", description: "Change model" },
10
+ { name: "/config", description: "Show/edit configuration" },
11
+ { name: "/session", description: "Session management" },
12
+ { name: "/diff", description: "Show recent diffs" },
13
+ { name: "/undo", description: "Undo last change" },
14
+ { name: "/settings", description: "Auto-update, preferences" },
15
+ { name: "/exit", description: "Exit YUAN", aliases: ["/quit", "/q"] },
16
+ ];
17
+ /** Check if a string is a known command name (exact or alias match) */
18
+ export function isKnownCommand(input) {
19
+ const q = input.trim().toLowerCase().split(" ")[0];
20
+ return DEFAULT_COMMANDS.some((cmd) => cmd.name === q ||
21
+ cmd.aliases?.includes(q));
22
+ }
23
+ export function useSlashCommands(extraCommands = []) {
24
+ const commands = useMemo(() => [...DEFAULT_COMMANDS, ...extraCommands], [extraCommands]);
25
+ const [query, setQuery] = useState("");
26
+ const [selectedIndex, setSelectedIndex] = useState(0);
27
+ const [isOpen, setIsOpen] = useState(false);
28
+ const filtered = useMemo(() => {
29
+ if (!query || query === "/")
30
+ return commands;
31
+ const q = query.toLowerCase();
32
+ return commands.filter((cmd) => cmd.name.toLowerCase().includes(q) ||
33
+ cmd.description.toLowerCase().includes(q) ||
34
+ cmd.aliases?.some((a) => a.toLowerCase().includes(q)));
35
+ }, [commands, query]);
36
+ const filter = useCallback((q) => {
37
+ setQuery(q);
38
+ setSelectedIndex(0);
39
+ setIsOpen(q.startsWith("/"));
40
+ }, []);
41
+ const selectNext = useCallback(() => {
42
+ setSelectedIndex((prev) => Math.min(prev + 1, filtered.length - 1));
43
+ }, [filtered.length]);
44
+ const selectPrev = useCallback(() => {
45
+ setSelectedIndex((prev) => Math.max(prev - 1, 0));
46
+ }, []);
47
+ const getSelected = useCallback(() => {
48
+ return filtered[selectedIndex] ?? null;
49
+ }, [filtered, selectedIndex]);
50
+ const open = useCallback(() => setIsOpen(true), []);
51
+ const close = useCallback(() => {
52
+ setIsOpen(false);
53
+ setQuery("");
54
+ setSelectedIndex(0);
55
+ }, []);
56
+ return [
57
+ { commands, filtered, selectedIndex, isOpen },
58
+ { filter, selectNext, selectPrev, getSelected, open, close },
59
+ ];
60
+ }
61
+ //# sourceMappingURL=useSlashCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSlashCommands.js","sourceRoot":"","sources":["../../../src/tui/hooks/useSlashCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Hook: track terminal size and layout tier, update on resize.
3
+ */
4
+ import { type LayoutTier } from "../lib/tokens.js";
5
+ export interface TerminalSize {
6
+ columns: number;
7
+ rows: number;
8
+ tier: LayoutTier;
9
+ }
10
+ export declare function useTerminalSize(): TerminalSize;
11
+ //# sourceMappingURL=useTerminalSize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,wBAAgB,eAAe,IAAI,YAAY,CAqB9C"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Hook: track terminal size and layout tier, update on resize.
3
+ */
4
+ import { useState, useEffect } from "react";
5
+ import { getLayoutTier } from "../lib/tokens.js";
6
+ export function useTerminalSize() {
7
+ const [size, setSize] = useState(() => ({
8
+ columns: process.stdout.columns || 80,
9
+ rows: process.stdout.rows || 24,
10
+ tier: getLayoutTier(process.stdout.columns || 80),
11
+ }));
12
+ useEffect(() => {
13
+ const onResize = () => {
14
+ const columns = process.stdout.columns || 80;
15
+ const rows = process.stdout.rows || 24;
16
+ setSize({ columns, rows, tier: getLayoutTier(columns) });
17
+ };
18
+ process.stdout.on("resize", onResize);
19
+ return () => {
20
+ process.stdout.off("resize", onResize);
21
+ };
22
+ }, []);
23
+ return size;
24
+ }
25
+ //# sourceMappingURL=useTerminalSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAmB,MAAM,kBAAkB,CAAC;AAQlE,MAAM,UAAU,eAAe;IAC7B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAe,GAAG,EAAE,CAAC,CAAC;QACpD,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;QACrC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;QAC/B,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;KAClD,CAAC,CAAC,CAAC;IAEJ,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACvC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Raw ANSI escape helpers for screen buffer and cursor control.
3
+ */
4
+ export declare const ANSI: {
5
+ /** Enter alternate screen buffer */
6
+ readonly altScreenEnter: "\u001B[?1049h";
7
+ /** Exit alternate screen buffer */
8
+ readonly altScreenExit: "\u001B[?1049l";
9
+ /** Hide cursor */
10
+ readonly cursorHide: "\u001B[?25l";
11
+ /** Show cursor */
12
+ readonly cursorShow: "\u001B[?25h";
13
+ /** Enable mouse button tracking (preserves text selection) */
14
+ readonly mouseEnable: "\u001B[?1000h\u001B[?1006h";
15
+ /** Disable mouse tracking */
16
+ readonly mouseDisable: "\u001B[?1000l\u001B[?1006l";
17
+ /** Clear entire screen */
18
+ readonly clearScreen: "\u001B[2J\u001B[H";
19
+ /** Move cursor to position */
20
+ readonly moveTo: (row: number, col: number) => string;
21
+ /** Clear line from cursor */
22
+ readonly clearLine: "\u001B[K";
23
+ /** Scroll up N lines */
24
+ readonly scrollUp: (n: number) => string;
25
+ /** Scroll down N lines */
26
+ readonly scrollDown: (n: number) => string;
27
+ /** Set scroll region */
28
+ readonly setScrollRegion: (top: number, bottom: number) => string;
29
+ /** Reset scroll region */
30
+ readonly resetScrollRegion: "\u001B[r";
31
+ };
32
+ /** Enter TUI mode: alt screen + hide cursor + mouse */
33
+ export declare function enterTUI(): void;
34
+ /** Exit TUI mode: restore everything */
35
+ export declare function exitTUI(): void;
36
+ //# sourceMappingURL=ansi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/ansi.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,IAAI;IACf,oCAAoC;;IAEpC,mCAAmC;;IAGnC,kBAAkB;;IAElB,kBAAkB;;IAGlB,8DAA8D;;IAE9D,6BAA6B;;IAG7B,0BAA0B;;IAG1B,8BAA8B;2BAChB,MAAM,OAAO,MAAM;IAEjC,6BAA6B;;IAG7B,wBAAwB;2BACV,MAAM;IAEpB,0BAA0B;6BACV,MAAM;IAEtB,wBAAwB;oCACD,MAAM,UAAU,MAAM;IAE7C,0BAA0B;;CAElB,CAAC;AAEX,uDAAuD;AACvD,wBAAgB,QAAQ,IAAI,IAAI,CAI/B;AAED,wCAAwC;AACxC,wBAAgB,OAAO,IAAI,IAAI,CAI9B"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Raw ANSI escape helpers for screen buffer and cursor control.
3
+ */
4
+ export const ANSI = {
5
+ /** Enter alternate screen buffer */
6
+ altScreenEnter: "\x1b[?1049h",
7
+ /** Exit alternate screen buffer */
8
+ altScreenExit: "\x1b[?1049l",
9
+ /** Hide cursor */
10
+ cursorHide: "\x1b[?25l",
11
+ /** Show cursor */
12
+ cursorShow: "\x1b[?25h",
13
+ /** Enable mouse button tracking (preserves text selection) */
14
+ mouseEnable: "\x1b[?1000h\x1b[?1006h",
15
+ /** Disable mouse tracking */
16
+ mouseDisable: "\x1b[?1000l\x1b[?1006l",
17
+ /** Clear entire screen */
18
+ clearScreen: "\x1b[2J\x1b[H",
19
+ /** Move cursor to position */
20
+ moveTo: (row, col) => `\x1b[${row};${col}H`,
21
+ /** Clear line from cursor */
22
+ clearLine: "\x1b[K",
23
+ /** Scroll up N lines */
24
+ scrollUp: (n) => `\x1b[${n}S`,
25
+ /** Scroll down N lines */
26
+ scrollDown: (n) => `\x1b[${n}T`,
27
+ /** Set scroll region */
28
+ setScrollRegion: (top, bottom) => `\x1b[${top};${bottom}r`,
29
+ /** Reset scroll region */
30
+ resetScrollRegion: "\x1b[r",
31
+ };
32
+ /** Enter TUI mode: alt screen + hide cursor + mouse */
33
+ export function enterTUI() {
34
+ process.stdout.write(ANSI.altScreenEnter + ANSI.cursorHide + ANSI.mouseEnable);
35
+ }
36
+ /** Exit TUI mode: restore everything */
37
+ export function exitTUI() {
38
+ process.stdout.write(ANSI.mouseDisable + ANSI.cursorShow + ANSI.altScreenExit);
39
+ }
40
+ //# sourceMappingURL=ansi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi.js","sourceRoot":"","sources":["../../../src/tui/lib/ansi.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,oCAAoC;IACpC,cAAc,EAAE,aAAa;IAC7B,mCAAmC;IACnC,aAAa,EAAE,aAAa;IAE5B,kBAAkB;IAClB,UAAU,EAAE,WAAW;IACvB,kBAAkB;IAClB,UAAU,EAAE,WAAW;IAEvB,8DAA8D;IAC9D,WAAW,EAAE,wBAAwB;IACrC,6BAA6B;IAC7B,YAAY,EAAE,wBAAwB;IAEtC,0BAA0B;IAC1B,WAAW,EAAE,eAAe;IAE5B,8BAA8B;IAC9B,MAAM,EAAE,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG;IAE3D,6BAA6B;IAC7B,SAAS,EAAE,QAAQ;IAEnB,wBAAwB;IACxB,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG;IAErC,0BAA0B;IAC1B,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG;IAEvC,wBAAwB;IACxB,eAAe,EAAE,CAAC,GAAW,EAAE,MAAc,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,MAAM,GAAG;IAE1E,0BAA0B;IAC1B,iBAAiB,EAAE,QAAQ;CACnB,CAAC;AAEX,uDAAuD;AACvD,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CACzD,CAAC;AACJ,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CACzD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Box drawing utilities for rounded-corner panels.
3
+ */
4
+ /** Draw a horizontal line of given width */
5
+ export declare function hLine(width: number): string;
6
+ /** Draw top border with optional title */
7
+ export declare function topBorder(width: number, title?: string): string;
8
+ /** Draw bottom border */
9
+ export declare function bottomBorder(width: number): string;
10
+ /** Wrap a single line of content in box side borders, padded to width */
11
+ export declare function boxLine(content: string, width: number, contentWidth: number): string;
12
+ //# sourceMappingURL=box-drawing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box-drawing.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/box-drawing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,4CAA4C;AAC5C,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,0CAA0C;AAC1C,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ/D;AAED,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGpF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Box drawing utilities for rounded-corner panels.
3
+ */
4
+ import { TOKENS } from "./tokens.js";
5
+ const B = TOKENS.box;
6
+ /** Draw a horizontal line of given width */
7
+ export function hLine(width) {
8
+ return B.horizontal.repeat(Math.max(0, width));
9
+ }
10
+ /** Draw top border with optional title */
11
+ export function topBorder(width, title) {
12
+ if (title) {
13
+ const titleStr = ` ${title} `;
14
+ const remaining = width - 2 - titleStr.length;
15
+ if (remaining < 0)
16
+ return B.topLeft + hLine(width - 2) + B.topRight;
17
+ return B.topLeft + B.horizontal + titleStr + hLine(remaining - 1) + B.topRight;
18
+ }
19
+ return B.topLeft + hLine(width - 2) + B.topRight;
20
+ }
21
+ /** Draw bottom border */
22
+ export function bottomBorder(width) {
23
+ return B.bottomLeft + hLine(width - 2) + B.bottomRight;
24
+ }
25
+ /** Wrap a single line of content in box side borders, padded to width */
26
+ export function boxLine(content, width, contentWidth) {
27
+ const padding = Math.max(0, width - 2 - contentWidth);
28
+ return B.vertical + content + " ".repeat(padding) + B.vertical;
29
+ }
30
+ //# sourceMappingURL=box-drawing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box-drawing.js","sourceRoot":"","sources":["../../../src/tui/lib/box-drawing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAErB,4CAA4C;AAC5C,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,KAAc;IACrD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,CAAC;QAC9B,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9C,IAAI,SAAS,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACpE,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,GAAG,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACjF,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACnD,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;AACzD,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,KAAa,EAAE,YAAoB;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,QAAQ,GAAG,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACjE,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * diff-formatter — parse unified diff string into structured ParsedDiff.
3
+ */
4
+ import type { ParsedDiff } from "../types.js";
5
+ /**
6
+ * Parse a unified diff string into a ParsedDiff structure.
7
+ */
8
+ export declare function parseDiff(diffText: string, filePath?: string): ParsedDiff;
9
+ //# sourceMappingURL=diff-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-formatter.d.ts","sourceRoot":"","sources":["../../../src/tui/lib/diff-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,aAAa,CAAC;AAE9E;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,UAAU,CA2DrE"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * diff-formatter — parse unified diff string into structured ParsedDiff.
3
+ */
4
+ /**
5
+ * Parse a unified diff string into a ParsedDiff structure.
6
+ */
7
+ export function parseDiff(diffText, filePath = "") {
8
+ const lines = diffText.split("\n");
9
+ const hunks = [];
10
+ let additions = 0;
11
+ let deletions = 0;
12
+ let currentHunk = null;
13
+ let oldLine = 0;
14
+ let newLine = 0;
15
+ for (const line of lines) {
16
+ // Detect file path from diff header
17
+ if (line.startsWith("--- a/") || line.startsWith("+++ b/")) {
18
+ if (!filePath && line.startsWith("+++ b/")) {
19
+ filePath = line.slice(6);
20
+ }
21
+ continue;
22
+ }
23
+ // Hunk header
24
+ const hunkMatch = line.match(/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/);
25
+ if (hunkMatch) {
26
+ currentHunk = {
27
+ startOld: parseInt(hunkMatch[1], 10),
28
+ startNew: parseInt(hunkMatch[2], 10),
29
+ lines: [],
30
+ };
31
+ oldLine = currentHunk.startOld;
32
+ newLine = currentHunk.startNew;
33
+ hunks.push(currentHunk);
34
+ continue;
35
+ }
36
+ if (!currentHunk)
37
+ continue;
38
+ if (line.startsWith("+")) {
39
+ currentHunk.lines.push({
40
+ type: "add",
41
+ content: line.slice(1),
42
+ newLineNo: newLine++,
43
+ });
44
+ additions++;
45
+ }
46
+ else if (line.startsWith("-")) {
47
+ currentHunk.lines.push({
48
+ type: "delete",
49
+ content: line.slice(1),
50
+ oldLineNo: oldLine++,
51
+ });
52
+ deletions++;
53
+ }
54
+ else if (line.startsWith(" ")) {
55
+ currentHunk.lines.push({
56
+ type: "context",
57
+ content: line.slice(1),
58
+ oldLineNo: oldLine++,
59
+ newLineNo: newLine++,
60
+ });
61
+ }
62
+ }
63
+ return { filePath, hunks, additions, deletions };
64
+ }
65
+ //# sourceMappingURL=diff-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-formatter.js","sourceRoot":"","sources":["../../../src/tui/lib/diff-formatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,QAAQ,GAAG,EAAE;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAA0B,IAAI,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,oCAAoC;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YACD,SAAS;QACX,CAAC;QAED,cAAc;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACxE,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,GAAG;gBACZ,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpC,KAAK,EAAE,EAAE;aACV,CAAC;YACF,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC;YAC/B,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,WAAW;YAAE,SAAS;QAE3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,OAAO,EAAE;aACrB,CAAC,CAAC;YACH,SAAS,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,OAAO,EAAE;aACrB,CAAC,CAAC;YACH,SAAS,EAAE,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,OAAO,EAAE;gBACpB,SAAS,EAAE,OAAO,EAAE;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC"}