@serjm/deepseek-code 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/CONTRIBUTING.md +73 -0
  2. package/README.md +194 -0
  3. package/README.ru.md +194 -0
  4. package/dist/api/index.d.ts +77 -0
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +263 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/cli/headless.d.ts +22 -0
  9. package/dist/cli/headless.d.ts.map +1 -0
  10. package/dist/cli/headless.js +122 -0
  11. package/dist/cli/headless.js.map +1 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +90 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/cli/interactive.d.ts +18 -0
  17. package/dist/cli/interactive.d.ts.map +1 -0
  18. package/dist/cli/interactive.js +75 -0
  19. package/dist/cli/interactive.js.map +1 -0
  20. package/dist/commands/index.d.ts +30 -0
  21. package/dist/commands/index.d.ts.map +1 -0
  22. package/dist/commands/index.js +964 -0
  23. package/dist/commands/index.js.map +1 -0
  24. package/dist/config/defaults.d.ts +37 -0
  25. package/dist/config/defaults.d.ts.map +1 -0
  26. package/dist/config/defaults.js +39 -0
  27. package/dist/config/defaults.js.map +1 -0
  28. package/dist/config/loader.d.ts +4 -0
  29. package/dist/config/loader.d.ts.map +1 -0
  30. package/dist/config/loader.js +76 -0
  31. package/dist/config/loader.js.map +1 -0
  32. package/dist/core/agent-loop.d.ts +111 -0
  33. package/dist/core/agent-loop.d.ts.map +1 -0
  34. package/dist/core/agent-loop.js +485 -0
  35. package/dist/core/agent-loop.js.map +1 -0
  36. package/dist/core/checkpoint.d.ts +10 -0
  37. package/dist/core/checkpoint.d.ts.map +1 -0
  38. package/dist/core/checkpoint.js +83 -0
  39. package/dist/core/checkpoint.js.map +1 -0
  40. package/dist/core/extensions.d.ts +55 -0
  41. package/dist/core/extensions.d.ts.map +1 -0
  42. package/dist/core/extensions.js +113 -0
  43. package/dist/core/extensions.js.map +1 -0
  44. package/dist/core/git.d.ts +68 -0
  45. package/dist/core/git.d.ts.map +1 -0
  46. package/dist/core/git.js +148 -0
  47. package/dist/core/git.js.map +1 -0
  48. package/dist/core/hooks.d.ts +37 -0
  49. package/dist/core/hooks.d.ts.map +1 -0
  50. package/dist/core/hooks.js +77 -0
  51. package/dist/core/hooks.js.map +1 -0
  52. package/dist/core/i18n.d.ts +90 -0
  53. package/dist/core/i18n.d.ts.map +1 -0
  54. package/dist/core/i18n.js +253 -0
  55. package/dist/core/i18n.js.map +1 -0
  56. package/dist/core/lsp.d.ts +74 -0
  57. package/dist/core/lsp.d.ts.map +1 -0
  58. package/dist/core/lsp.js +239 -0
  59. package/dist/core/lsp.js.map +1 -0
  60. package/dist/core/mcp.d.ts +49 -0
  61. package/dist/core/mcp.d.ts.map +1 -0
  62. package/dist/core/mcp.js +195 -0
  63. package/dist/core/mcp.js.map +1 -0
  64. package/dist/core/memory.d.ts +38 -0
  65. package/dist/core/memory.d.ts.map +1 -0
  66. package/dist/core/memory.js +231 -0
  67. package/dist/core/memory.js.map +1 -0
  68. package/dist/core/metrics.d.ts +36 -0
  69. package/dist/core/metrics.d.ts.map +1 -0
  70. package/dist/core/metrics.js +111 -0
  71. package/dist/core/metrics.js.map +1 -0
  72. package/dist/core/review.d.ts +27 -0
  73. package/dist/core/review.d.ts.map +1 -0
  74. package/dist/core/review.js +201 -0
  75. package/dist/core/review.js.map +1 -0
  76. package/dist/core/sandbox.d.ts +52 -0
  77. package/dist/core/sandbox.d.ts.map +1 -0
  78. package/dist/core/sandbox.js +140 -0
  79. package/dist/core/sandbox.js.map +1 -0
  80. package/dist/core/scheduler.d.ts +56 -0
  81. package/dist/core/scheduler.d.ts.map +1 -0
  82. package/dist/core/scheduler.js +167 -0
  83. package/dist/core/scheduler.js.map +1 -0
  84. package/dist/core/session.d.ts +49 -0
  85. package/dist/core/session.d.ts.map +1 -0
  86. package/dist/core/session.js +127 -0
  87. package/dist/core/session.js.map +1 -0
  88. package/dist/core/skills.d.ts +36 -0
  89. package/dist/core/skills.d.ts.map +1 -0
  90. package/dist/core/skills.js +90 -0
  91. package/dist/core/skills.js.map +1 -0
  92. package/dist/core/subagent.d.ts +45 -0
  93. package/dist/core/subagent.d.ts.map +1 -0
  94. package/dist/core/subagent.js +130 -0
  95. package/dist/core/subagent.js.map +1 -0
  96. package/dist/core/themes.d.ts +35 -0
  97. package/dist/core/themes.d.ts.map +1 -0
  98. package/dist/core/themes.js +188 -0
  99. package/dist/core/themes.js.map +1 -0
  100. package/dist/tools/bash.d.ts +3 -0
  101. package/dist/tools/bash.d.ts.map +1 -0
  102. package/dist/tools/bash.js +92 -0
  103. package/dist/tools/bash.js.map +1 -0
  104. package/dist/tools/chrome-manager.d.ts +35 -0
  105. package/dist/tools/chrome-manager.d.ts.map +1 -0
  106. package/dist/tools/chrome-manager.js +163 -0
  107. package/dist/tools/chrome-manager.js.map +1 -0
  108. package/dist/tools/chrome.d.ts +78 -0
  109. package/dist/tools/chrome.d.ts.map +1 -0
  110. package/dist/tools/chrome.js +1058 -0
  111. package/dist/tools/chrome.js.map +1 -0
  112. package/dist/tools/edit.d.ts +3 -0
  113. package/dist/tools/edit.d.ts.map +1 -0
  114. package/dist/tools/edit.js +81 -0
  115. package/dist/tools/edit.js.map +1 -0
  116. package/dist/tools/glob.d.ts +3 -0
  117. package/dist/tools/glob.d.ts.map +1 -0
  118. package/dist/tools/glob.js +41 -0
  119. package/dist/tools/glob.js.map +1 -0
  120. package/dist/tools/grep.d.ts +3 -0
  121. package/dist/tools/grep.d.ts.map +1 -0
  122. package/dist/tools/grep.js +74 -0
  123. package/dist/tools/grep.js.map +1 -0
  124. package/dist/tools/path-safety.d.ts +3 -0
  125. package/dist/tools/path-safety.d.ts.map +1 -0
  126. package/dist/tools/path-safety.js +19 -0
  127. package/dist/tools/path-safety.js.map +1 -0
  128. package/dist/tools/read.d.ts +3 -0
  129. package/dist/tools/read.d.ts.map +1 -0
  130. package/dist/tools/read.js +58 -0
  131. package/dist/tools/read.js.map +1 -0
  132. package/dist/tools/registry.d.ts +4 -0
  133. package/dist/tools/registry.d.ts.map +1 -0
  134. package/dist/tools/registry.js +43 -0
  135. package/dist/tools/registry.js.map +1 -0
  136. package/dist/tools/types.d.ts +47 -0
  137. package/dist/tools/types.d.ts.map +1 -0
  138. package/dist/tools/types.js +90 -0
  139. package/dist/tools/types.js.map +1 -0
  140. package/dist/tools/write.d.ts +3 -0
  141. package/dist/tools/write.d.ts.map +1 -0
  142. package/dist/tools/write.js +51 -0
  143. package/dist/tools/write.js.map +1 -0
  144. package/dist/ui/activity-cards.d.ts +50 -0
  145. package/dist/ui/activity-cards.d.ts.map +1 -0
  146. package/dist/ui/activity-cards.js +185 -0
  147. package/dist/ui/activity-cards.js.map +1 -0
  148. package/dist/ui/app.d.ts +9 -0
  149. package/dist/ui/app.d.ts.map +1 -0
  150. package/dist/ui/app.js +852 -0
  151. package/dist/ui/app.js.map +1 -0
  152. package/dist/ui/chat-view.d.ts +10 -0
  153. package/dist/ui/chat-view.d.ts.map +1 -0
  154. package/dist/ui/chat-view.js +94 -0
  155. package/dist/ui/chat-view.js.map +1 -0
  156. package/dist/ui/error-boundary.d.ts +13 -0
  157. package/dist/ui/error-boundary.d.ts.map +1 -0
  158. package/dist/ui/error-boundary.js +16 -0
  159. package/dist/ui/error-boundary.js.map +1 -0
  160. package/dist/ui/fade-in.d.ts +8 -0
  161. package/dist/ui/fade-in.d.ts.map +1 -0
  162. package/dist/ui/fade-in.js +14 -0
  163. package/dist/ui/fade-in.js.map +1 -0
  164. package/dist/ui/input-bar.d.ts +16 -0
  165. package/dist/ui/input-bar.d.ts.map +1 -0
  166. package/dist/ui/input-bar.js +269 -0
  167. package/dist/ui/input-bar.js.map +1 -0
  168. package/dist/ui/markdown-view.d.ts +9 -0
  169. package/dist/ui/markdown-view.d.ts.map +1 -0
  170. package/dist/ui/markdown-view.js +240 -0
  171. package/dist/ui/markdown-view.js.map +1 -0
  172. package/dist/ui/matrix-rain.d.ts +2 -0
  173. package/dist/ui/matrix-rain.d.ts.map +1 -0
  174. package/dist/ui/matrix-rain.js +134 -0
  175. package/dist/ui/matrix-rain.js.map +1 -0
  176. package/dist/ui/reasoning-view.d.ts +12 -0
  177. package/dist/ui/reasoning-view.d.ts.map +1 -0
  178. package/dist/ui/reasoning-view.js +34 -0
  179. package/dist/ui/reasoning-view.js.map +1 -0
  180. package/dist/ui/results-panel.d.ts +11 -0
  181. package/dist/ui/results-panel.d.ts.map +1 -0
  182. package/dist/ui/results-panel.js +17 -0
  183. package/dist/ui/results-panel.js.map +1 -0
  184. package/dist/ui/setup-wizard.d.ts +30 -0
  185. package/dist/ui/setup-wizard.d.ts.map +1 -0
  186. package/dist/ui/setup-wizard.js +166 -0
  187. package/dist/ui/setup-wizard.js.map +1 -0
  188. package/dist/ui/status-bar.d.ts +14 -0
  189. package/dist/ui/status-bar.d.ts.map +1 -0
  190. package/dist/ui/status-bar.js +63 -0
  191. package/dist/ui/status-bar.js.map +1 -0
  192. package/dist/ui/tool-activity-card.d.ts +9 -0
  193. package/dist/ui/tool-activity-card.d.ts.map +1 -0
  194. package/dist/ui/tool-activity-card.js +172 -0
  195. package/dist/ui/tool-activity-card.js.map +1 -0
  196. package/dist/ui/tool-call-view.d.ts +9 -0
  197. package/dist/ui/tool-call-view.d.ts.map +1 -0
  198. package/dist/ui/tool-call-view.js +149 -0
  199. package/dist/ui/tool-call-view.js.map +1 -0
  200. package/dist/utils/clipboard.d.ts +6 -0
  201. package/dist/utils/clipboard.d.ts.map +1 -0
  202. package/dist/utils/clipboard.js +56 -0
  203. package/dist/utils/clipboard.js.map +1 -0
  204. package/dist/utils/ignore.d.ts +6 -0
  205. package/dist/utils/ignore.d.ts.map +1 -0
  206. package/dist/utils/ignore.js +40 -0
  207. package/dist/utils/ignore.js.map +1 -0
  208. package/dist/utils/logger.d.ts +4 -0
  209. package/dist/utils/logger.d.ts.map +1 -0
  210. package/dist/utils/logger.js +13 -0
  211. package/dist/utils/logger.js.map +1 -0
  212. package/dist/utils/string-width.d.ts +6 -0
  213. package/dist/utils/string-width.d.ts.map +1 -0
  214. package/dist/utils/string-width.js +37 -0
  215. package/dist/utils/string-width.js.map +1 -0
  216. package/package.json +68 -0
@@ -0,0 +1,240 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { themeManager } from '../core/themes.js';
5
+ import { visualWidth } from '../utils/string-width.js';
6
+ // ─── Inline formatter ────────────────────────────────────────────────────────
7
+ function renderInline(text, colors) {
8
+ if (!text)
9
+ return null;
10
+ if (!/[`*_[]/.test(text))
11
+ return text;
12
+ // Split by inline code spans first (highest priority)
13
+ const codeParts = text.split(/(`[^`\n]+`)/g);
14
+ const result = [];
15
+ codeParts.forEach((part, ci) => {
16
+ if (part.length > 2 && part.startsWith('`') && part.endsWith('`')) {
17
+ result.push(_jsxs(Text, { color: colors.info, children: [" ", part.slice(1, -1), " "] }, `c${ci}`));
18
+ return;
19
+ }
20
+ // Now handle **bold** inside non-code segments
21
+ const boldParts = part.split(/(\*\*[^*\n]+\*\*)/g);
22
+ boldParts.forEach((bp, bi) => {
23
+ if (bp.length > 4 && bp.startsWith('**') && bp.endsWith('**')) {
24
+ result.push(_jsx(Text, { bold: true, children: bp.slice(2, -2) }, `b${ci}-${bi}`));
25
+ return;
26
+ }
27
+ // Handle *italic*
28
+ const italicParts = bp.split(/(\*[^*\n]+\*)/g);
29
+ italicParts.forEach((ip, ii) => {
30
+ if (ip.length > 2 && ip.startsWith('*') && ip.endsWith('*')) {
31
+ result.push(_jsx(Text, { dimColor: true, children: ip.slice(1, -1) }, `i${ci}-${bi}-${ii}`));
32
+ }
33
+ else if (ip) {
34
+ result.push(ip);
35
+ }
36
+ });
37
+ });
38
+ });
39
+ return result;
40
+ }
41
+ // ─── Table rendering ─────────────────────────────────────────────────────────
42
+ export function parseTableCells(line) {
43
+ const trimmed = line.trim();
44
+ const body = trimmed.startsWith('|') ? trimmed.slice(1) : trimmed;
45
+ const withoutTrailing = body.endsWith('|') ? body.slice(0, -1) : body;
46
+ return withoutTrailing.split('|').map(c => c.trim());
47
+ }
48
+ export function isTableSeparator(line) {
49
+ return /^\|?[\s\-:|]+\|?$/.test(line.trim());
50
+ }
51
+ export function padVisual(text, width) {
52
+ return text + ' '.repeat(Math.max(0, width - visualWidth(text)));
53
+ }
54
+ export function tableColumnWidths(lines) {
55
+ const widths = [];
56
+ for (const line of lines) {
57
+ if (isTableSeparator(line))
58
+ continue;
59
+ parseTableCells(line).forEach((cell, i) => {
60
+ widths[i] = Math.max(widths[i] ?? 0, visualWidth(cell));
61
+ });
62
+ }
63
+ return widths;
64
+ }
65
+ export function shouldRenderTableAsList(lines) {
66
+ const termWidth = process.stdout.columns || 80;
67
+ const maxTableWidth = Math.max(24, termWidth - 6);
68
+ const widths = tableColumnWidths(lines);
69
+ const tableWidth = widths.reduce((sum, width) => sum + width + 3, 1);
70
+ const maxCellWidth = Math.max(18, Math.floor(maxTableWidth * 0.35));
71
+ return widths.length === 0 || tableWidth > maxTableWidth || widths.some(width => width > maxCellWidth);
72
+ }
73
+ function renderTableAsList(lines, headerIdx, colors) {
74
+ const headers = parseTableCells(lines[headerIdx]);
75
+ const dataLines = lines.filter((_, i) => i !== headerIdx && i !== headerIdx + 1 && !isTableSeparator(lines[i]));
76
+ const rows = [];
77
+ for (const line of dataLines) {
78
+ const cells = parseTableCells(line);
79
+ const pairs = cells.map((cell, ci) => {
80
+ const label = headers[ci] || `col${ci + 1}`;
81
+ return `${label}: ${cell}`;
82
+ });
83
+ rows.push(_jsxs(Box, { marginLeft: 1, children: [_jsx(Text, { color: colors.primary, children: "\u2022 " }), _jsx(Text, { wrap: 'wrap', children: pairs.join(' · ') })] }, rows.length));
84
+ }
85
+ return _jsx(Box, { flexDirection: 'column', children: rows });
86
+ }
87
+ function renderTableRow(line, isHeader, colors, widths) {
88
+ const cells = parseTableCells(line);
89
+ return (_jsxs(Box, { flexDirection: 'row', children: [_jsx(Text, { children: '| ' }), cells.map((cell, i) => {
90
+ const trimmed = cell.trim();
91
+ const padded = `${padVisual(trimmed, widths[i] ?? visualWidth(trimmed))} `;
92
+ return (_jsxs(React.Fragment, { children: [_jsx(Text, { bold: isHeader, color: isHeader ? colors.primary : undefined, children: padded }), _jsx(Text, { children: "|" })] }, i));
93
+ })] }));
94
+ }
95
+ // ─── Text segment renderer ───────────────────────────────────────────────────
96
+ function TextSegment({ content, colors }) {
97
+ const lines = content.split('\n');
98
+ const rendered = [];
99
+ let i = 0;
100
+ while (i < lines.length) {
101
+ const line = lines[i];
102
+ // Heading 1
103
+ if (line.startsWith('# ')) {
104
+ rendered.push(_jsx(Box, { marginTop: i > 0 ? 1 : 0, marginBottom: 0, children: _jsx(Text, { bold: true, color: colors.primary, underline: true, children: line.slice(2) }) }, rendered.length));
105
+ i++;
106
+ continue;
107
+ }
108
+ // Heading 2
109
+ if (line.startsWith('## ')) {
110
+ rendered.push(_jsx(Box, { marginTop: i > 0 ? 1 : 0, children: _jsx(Text, { bold: true, color: colors.primary, children: line.slice(3) }) }, rendered.length));
111
+ i++;
112
+ continue;
113
+ }
114
+ // Heading 3
115
+ if (line.startsWith('### ')) {
116
+ rendered.push(_jsx(Box, { children: _jsx(Text, { bold: true, color: colors.secondary, children: line.slice(4) }) }, rendered.length));
117
+ i++;
118
+ continue;
119
+ }
120
+ // Horizontal rule
121
+ if (/^[-*=]{3,}\s*$/.test(line.trim())) {
122
+ rendered.push(_jsx(Text, { color: colors.border, children: '─'.repeat(Math.min(process.stdout.columns - 4 || 60, 60)) }, rendered.length));
123
+ i++;
124
+ continue;
125
+ }
126
+ // Table: collect all consecutive table lines
127
+ if (line.trim().startsWith('|') && line.trim().endsWith('|')) {
128
+ const tableLines = [];
129
+ while (i < lines.length && lines[i].trim().startsWith('|') && lines[i].trim().endsWith('|')) {
130
+ tableLines.push(lines[i]);
131
+ i++;
132
+ }
133
+ // Find header row (first non-separator row before a separator row)
134
+ const headerIdx = tableLines.findIndex((l, idx) => idx + 1 < tableLines.length && isTableSeparator(tableLines[idx + 1]));
135
+ if (headerIdx >= 0) {
136
+ // Check if table fits — renderTableRow returns null if too wide
137
+ if (shouldRenderTableAsList(tableLines)) {
138
+ // Fallback: render as list
139
+ rendered.push(_jsx(Box, { flexDirection: 'column', marginLeft: 1, children: renderTableAsList(tableLines, headerIdx, colors) }, rendered.length));
140
+ }
141
+ else {
142
+ const widths = tableColumnWidths(tableLines);
143
+ const borderWidth = Math.min(process.stdout.columns - 6 || 60, widths.reduce((sum, width) => sum + width + 3, 1));
144
+ // Render full table
145
+ rendered.push(_jsx(Box, { flexDirection: 'column', marginLeft: 1, children: tableLines.map((tl, ti) => {
146
+ if (isTableSeparator(tl)) {
147
+ return _jsx(Text, { color: colors.border, children: '─'.repeat(borderWidth) }, ti);
148
+ }
149
+ const isHeader = ti === headerIdx;
150
+ return _jsx(React.Fragment, { children: renderTableRow(tl, isHeader, colors, widths) }, ti);
151
+ }) }, rendered.length));
152
+ }
153
+ }
154
+ else {
155
+ // No header found — render as list
156
+ rendered.push(_jsx(Box, { flexDirection: 'column', marginLeft: 1, children: renderTableAsList(tableLines, 0, colors) }, rendered.length));
157
+ }
158
+ continue;
159
+ }
160
+ // Unordered list - item * item
161
+ const ulMatch = line.match(/^(\s*)[- *] (.+)/);
162
+ if (ulMatch) {
163
+ const indent = Math.floor(ulMatch[1].length / 2);
164
+ rendered.push(_jsxs(Box, { marginLeft: indent * 2, children: [_jsx(Text, { color: colors.primary, children: "\u2022 " }), _jsx(Text, { wrap: 'wrap', children: renderInline(ulMatch[2], colors) })] }, rendered.length));
165
+ i++;
166
+ continue;
167
+ }
168
+ // Ordered list 1. item
169
+ const olMatch = line.match(/^(\s*)(\d+)\. (.+)/);
170
+ if (olMatch) {
171
+ const indent = Math.floor(olMatch[1].length / 2);
172
+ rendered.push(_jsxs(Box, { marginLeft: indent * 2, children: [_jsxs(Text, { color: colors.primary, children: [olMatch[2], ". "] }), _jsx(Text, { wrap: 'wrap', children: renderInline(olMatch[3], colors) })] }, rendered.length));
173
+ i++;
174
+ continue;
175
+ }
176
+ // Blockquote > text
177
+ if (line.startsWith('> ')) {
178
+ rendered.push(_jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: "\u258C " }), _jsx(Text, { dimColor: true, wrap: 'wrap', children: renderInline(line.slice(2), colors) })] }, rendered.length));
179
+ i++;
180
+ continue;
181
+ }
182
+ // Empty line
183
+ if (!line.trim()) {
184
+ rendered.push(_jsx(Box, { height: 1 }, rendered.length));
185
+ i++;
186
+ continue;
187
+ }
188
+ // Regular text with inline formatting
189
+ rendered.push(_jsx(Text, { wrap: 'wrap', children: renderInline(line, colors) }, rendered.length));
190
+ i++;
191
+ }
192
+ return _jsx(Box, { flexDirection: 'column', children: rendered });
193
+ }
194
+ // ─── Code block renderer ─────────────────────────────────────────────────────
195
+ function CodeBlock({ content, lang, colors }) {
196
+ const termWidth = process.stdout.columns || 80;
197
+ const maxContentWidth = termWidth - 6;
198
+ const lines = content.split('\n');
199
+ const maxLineWidth = Math.max(...lines.map(l => visualWidth(l)), 0);
200
+ const useBorder = maxLineWidth <= maxContentWidth - 4 && termWidth >= 50;
201
+ if (!useBorder) {
202
+ // Fallback: simple indented block without borders
203
+ return (_jsxs(Box, { flexDirection: 'column', marginTop: 0, marginBottom: 1, marginLeft: 1, children: [lang && _jsx(Text, { color: colors.info, bold: true, children: lang }), lines.map((line, i) => (_jsx(Text, { color: colors.info, children: line }, i)))] }));
204
+ }
205
+ const langLabel = lang || 'code';
206
+ const width = Math.min(maxLineWidth + 2, maxContentWidth);
207
+ return (_jsxs(Box, { flexDirection: 'column', marginTop: 0, marginBottom: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: "\u250C\u2500 " }), _jsx(Text, { color: colors.info, bold: true, children: langLabel }), _jsx(Text, { color: colors.border, children: ' ' + '─'.repeat(Math.max(0, width - langLabel.length - 3)) + '┐' })] }), lines.map((line, i) => (_jsxs(Box, { children: [_jsx(Text, { color: colors.border, children: "\u2502 " }), _jsx(Text, { color: colors.info, children: line })] }, i))), _jsxs(Text, { color: colors.border, children: ["\u2514", '─'.repeat(width + 1), "\u2518"] })] }));
208
+ }
209
+ function parseSegments(text) {
210
+ const parts = text.split(/(```(\w*)\n?)([\s\S]*?)```/g);
211
+ const segments = [];
212
+ // split with 3 capture groups gives chunks of 4 per match:
213
+ // [before, fence+lang, lang, code, before, fence+lang, lang, code, ...]
214
+ for (let i = 0; i < parts.length; i++) {
215
+ if (i % 4 === 0) {
216
+ if (parts[i])
217
+ segments.push({ type: 'text', content: parts[i] });
218
+ }
219
+ else if (i % 4 === 1) {
220
+ // full fence match (```lang\n) — skip
221
+ }
222
+ else if (i % 4 === 2) {
223
+ const lang = parts[i] ?? '';
224
+ const code = (parts[i + 1] ?? '').trimEnd();
225
+ segments.push({ type: 'code', content: code, lang });
226
+ i++; // skip code part
227
+ }
228
+ }
229
+ return segments;
230
+ }
231
+ export function MarkdownView({ text }) {
232
+ const colors = themeManager.getColors();
233
+ const segments = parseSegments(text);
234
+ if (segments.length === 0)
235
+ return null;
236
+ return (_jsx(Box, { flexDirection: 'column', children: segments.map((seg, i) => seg.type === 'code'
237
+ ? _jsx(CodeBlock, { content: seg.content, lang: seg.lang, colors: colors }, i)
238
+ : _jsx(TextSegment, { content: seg.content, colors: colors }, i)) }));
239
+ }
240
+ //# sourceMappingURL=markdown-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-view.js","sourceRoot":"","sources":["../../src/ui/markdown-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function MatrixRain(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=matrix-rain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-rain.d.ts","sourceRoot":"","sources":["../../src/ui/matrix-rain.tsx"],"names":[],"mappings":"AAqFA,wBAAgB,UAAU,4CA6FzB"}
@@ -0,0 +1,134 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useMemo } from 'react';
3
+ import { Box, Text, useStdout } from 'ink';
4
+ import { themeManager } from '../core/themes.js';
5
+ // ── Symbol pool ──────────────────────────────────────────────────────────────
6
+ const POOL = 'ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワンABCDEF0123456789#%&@$><{}[]|';
7
+ function randomChar() {
8
+ return POOL[Math.floor(Math.random() * POOL.length)];
9
+ }
10
+ // ── Layout constants ─────────────────────────────────────────────────────────
11
+ const MIN_COLUMNS = 36;
12
+ const MAX_COLUMNS = 52;
13
+ const MAX_HEIGHT = 24;
14
+ // ── Color palettes ───────────────────────────────────────────────────────────
15
+ const MATRIX_COLORS = [
16
+ '#f0fff0', // head — almost white glow
17
+ '#ccffcc', // 1 — pale green
18
+ '#aaff88', // 2 — bright lime
19
+ '#55ff55', // 3 — full green
20
+ '#00ff41', // 4 — classic matrix green
21
+ '#00cc33', // 5
22
+ '#009922', // 6
23
+ '#006611', // 7
24
+ '#004400', // 8
25
+ '#002200', // 9
26
+ '#000800', // 10 — near black
27
+ ];
28
+ const GREY_COLORS = [
29
+ '#ffffff',
30
+ '#eeeeee',
31
+ '#cccccc',
32
+ '#aaaaaa',
33
+ '#888888',
34
+ '#666666',
35
+ '#444444',
36
+ '#333333',
37
+ '#222222',
38
+ '#111111',
39
+ '#080808',
40
+ ];
41
+ function buildColors() {
42
+ return themeManager.theme.name === 'matrix' ? MATRIX_COLORS : GREY_COLORS;
43
+ }
44
+ function colorForIndex(distanceFromHead, colors) {
45
+ if (distanceFromHead < 0)
46
+ return colors[colors.length - 1];
47
+ const idx = Math.min(distanceFromHead, colors.length - 1);
48
+ return colors[idx];
49
+ }
50
+ // ── Column init ──────────────────────────────────────────────────────────────
51
+ function createColumn(termHeight) {
52
+ const length = 4 + Math.floor(Math.random() * 11);
53
+ const offset = Math.floor(Math.random() * Math.max(1, termHeight - length - 2));
54
+ const chars = Array.from({ length }, () => randomChar());
55
+ return {
56
+ chars,
57
+ head: 0,
58
+ length,
59
+ interval: 80 + Math.floor(Math.random() * 170),
60
+ offset,
61
+ active: Math.random() > 0.15,
62
+ };
63
+ }
64
+ function initColumns(n, termHeight) {
65
+ return Array.from({ length: n }, () => createColumn(termHeight));
66
+ }
67
+ // ── Component ───────────────────────────────────────────────────────────────
68
+ export function MatrixRain() {
69
+ const { stdout } = useStdout();
70
+ const termWidth = stdout?.columns ?? 80;
71
+ const termHeight = Math.min(stdout?.rows ?? 24, MAX_HEIGHT);
72
+ const numColumns = Math.min(MAX_COLUMNS, Math.max(MIN_COLUMNS, Math.floor(termWidth * 0.55)));
73
+ const initialColumns = useMemo(() => initColumns(numColumns, termHeight), [numColumns, termHeight]);
74
+ const [columns, setColumns] = useState(initialColumns);
75
+ // Reset columns when terminal dimensions change
76
+ useEffect(() => {
77
+ setColumns(initColumns(numColumns, termHeight));
78
+ }, [numColumns, termHeight]);
79
+ useEffect(() => {
80
+ const intervals = [];
81
+ const colCount = columns.length;
82
+ for (let idx = 0; idx < colCount; idx++) {
83
+ const col = columns[idx];
84
+ if (!col.active)
85
+ continue;
86
+ const id = setInterval(() => {
87
+ setColumns(prev => {
88
+ const next = [...prev];
89
+ const c = { ...next[idx] };
90
+ const newHead = (c.head + 1) % (c.length + termHeight);
91
+ const newChars = [...c.chars];
92
+ if (newHead < c.length) {
93
+ newChars[newHead] = randomChar();
94
+ }
95
+ if (Math.random() < 0.3) {
96
+ const trailIdx = Math.floor(Math.random() * (c.length - 1));
97
+ newChars[trailIdx] = randomChar();
98
+ }
99
+ next[idx] = { ...c, head: newHead, chars: newChars };
100
+ return next;
101
+ });
102
+ }, col.interval);
103
+ intervals.push(id);
104
+ }
105
+ return () => {
106
+ intervals.forEach(clearInterval);
107
+ };
108
+ }, [columns.length, termHeight]);
109
+ // ── Render ──────────────────────────────────────────────────────────────
110
+ const palette = buildColors();
111
+ const rows = Array.from({ length: termHeight }, () => Array.from({ length: numColumns }, () => ({ ch: ' ', color: palette[palette.length - 1] })));
112
+ for (let ci = 0; ci < columns.length; ci++) {
113
+ const col = columns[ci];
114
+ if (!col.active)
115
+ continue;
116
+ for (let ri = 0; ri < col.length; ri++) {
117
+ const screenRow = col.offset + ri;
118
+ if (screenRow < 0 || screenRow >= termHeight)
119
+ continue;
120
+ let dist;
121
+ if (col.head < col.length) {
122
+ dist = col.head - ri;
123
+ }
124
+ else {
125
+ const gapPos = col.head - col.length;
126
+ dist = gapPos < col.length ? gapPos - ri : col.length - ri;
127
+ }
128
+ const ch = col.chars[ri] || ' ';
129
+ rows[screenRow][ci] = { ch, color: colorForIndex(dist, palette) };
130
+ }
131
+ }
132
+ return (_jsx(Box, { flexDirection: 'column', alignItems: 'center', marginBottom: 0, children: rows.map((row, ri) => (_jsx(Box, { height: 1, children: row.map((cell, ci) => (_jsx(Text, { color: cell.color, children: cell.ch }, ci))) }, ri))) }));
133
+ }
134
+ //# sourceMappingURL=matrix-rain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix-rain.js","sourceRoot":"","sources":["../../src/ui/matrix-rain.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface ReasoningViewProps {
3
+ reasoning: string;
4
+ isActive: boolean;
5
+ }
6
+ /**
7
+ * ReasoningView — отображает рассуждения AI в реальном времени.
8
+ * Показывает спиннер и текст reasoning, который стримится из DeepSeek API.
9
+ */
10
+ export declare const ReasoningView: React.NamedExoticComponent<ReasoningViewProps>;
11
+ export {};
12
+ //# sourceMappingURL=reasoning-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-view.d.ts","sourceRoot":"","sources":["../../src/ui/reasoning-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAIlD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID;;;GAGG;AACH,eAAO,MAAM,aAAa,gDAyCxB,CAAA"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useEffect, useState } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { themeManager } from '../core/themes.js';
5
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
6
+ /**
7
+ * ReasoningView — отображает рассуждения AI в реальном времени.
8
+ * Показывает спиннер и текст reasoning, который стримится из DeepSeek API.
9
+ */
10
+ export const ReasoningView = React.memo(function ReasoningView({ reasoning, isActive }) {
11
+ const [spinnerFrame, setSpinnerFrame] = useState(0);
12
+ const colors = themeManager.getColors();
13
+ // Animate spinner while active
14
+ useEffect(() => {
15
+ if (!isActive)
16
+ return;
17
+ const interval = setInterval(() => {
18
+ setSpinnerFrame(prev => (prev + 1) % SPINNER_FRAMES.length);
19
+ }, 80);
20
+ return () => clearInterval(interval);
21
+ }, [isActive]);
22
+ if (!reasoning && !isActive)
23
+ return null;
24
+ const MAX_LINES = 7;
25
+ const rawText = reasoning || 'Thinking...';
26
+ const lines = rawText.split('\n');
27
+ const truncated = lines.length > MAX_LINES;
28
+ const displayLines = truncated ? lines.slice(-MAX_LINES) : lines;
29
+ const displayText = displayLines.join('\n');
30
+ return (_jsxs(Box, { flexDirection: 'column', marginLeft: 2, marginBottom: 1, children: [_jsx(Box, { children: _jsxs(Text, { children: [isActive
31
+ ? _jsx(Text, { color: colors.warning, children: SPINNER_FRAMES[spinnerFrame] })
32
+ : _jsx(Text, { color: colors.success, children: "\u2713" }), ' ', _jsx(Text, { bold: true, color: colors.warning, children: "Reasoning" }), truncated && _jsxs(Text, { dimColor: true, children: [" (showing last ", MAX_LINES, " lines)"] })] }) }), _jsx(Box, { marginLeft: 3, children: _jsx(Text, { color: colors.textMuted, wrap: 'wrap', children: displayText }) })] }));
33
+ });
34
+ //# sourceMappingURL=reasoning-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reasoning-view.js","sourceRoot":"","sources":["../../src/ui/reasoning-view.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAOhD,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAEzE;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa,CAAE,EAAE,SAAS,EAAE,QAAQ,EAAsB;IACzG,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA;IAEvC,+BAA+B;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7D,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAExC,MAAM,SAAS,GAAG,CAAC,CAAA;IACnB,MAAM,OAAO,GAAG,SAAS,IAAI,aAAa,CAAA;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;IAC1C,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAChE,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE3C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aACxD,KAAC,GAAG,cACF,MAAC,IAAI,eACF,QAAQ;4BACP,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,YAAG,cAAc,CAAC,YAAY,CAAC,GAAQ;4BACpE,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,uBAAU,EACxC,GAAG,EACJ,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAE,MAAM,CAAC,OAAO,0BAAkB,EACjD,SAAS,IAAI,MAAC,IAAI,IAAC,QAAQ,sCAAiB,SAAS,eAAe,IAChE,GACH,EACN,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAC,MAAM,YACvC,WAAW,GACP,GACH,IACF,CACP,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { ToolCallEvent } from '../core/agent-loop.js';
2
+ interface ResultsPanelProps {
3
+ toolCalls: ToolCallEvent[];
4
+ reasoning: string;
5
+ reasoningActive: boolean;
6
+ pendingApproval: boolean;
7
+ scrollOffset?: number;
8
+ }
9
+ export declare function ResultsPanel({ toolCalls, reasoning, reasoningActive, pendingApproval, scrollOffset }: ResultsPanelProps): import("react/jsx-runtime").JSX.Element | null;
10
+ export {};
11
+ //# sourceMappingURL=results-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results-panel.d.ts","sourceRoot":"","sources":["../../src/ui/results-panel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAM1D,UAAU,iBAAiB;IACzB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAE,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,YAAgB,EAAE,EAAE,iBAAiB,kDA+C5H"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { ToolCallView } from './tool-call-view.js';
4
+ import { ReasoningView } from './reasoning-view.js';
5
+ import { themeManager } from '../core/themes.js';
6
+ /** Max visible tool call groups (grouped by name) */
7
+ const VISIBLE_TOOL_GROUPS = 5;
8
+ export function ResultsPanel({ toolCalls, reasoning, reasoningActive, pendingApproval, scrollOffset = 0 }) {
9
+ const colors = themeManager.getColors();
10
+ const hasContent = toolCalls.length > 0 || reasoning || reasoningActive || pendingApproval;
11
+ if (!hasContent)
12
+ return null;
13
+ // Count unique tool call types for summary
14
+ const uniqueTools = new Set(toolCalls.map(tc => tc.name)).size;
15
+ return (_jsxs(Box, { flexDirection: 'column', children: [_jsx(Box, { children: _jsx(Text, { color: colors.border, children: '─'.repeat(Math.min(process.stdout.columns || 60, 60)) }) }), _jsxs(Box, { flexDirection: 'column', paddingX: 1, height: 8, overflow: 'hidden', children: [reasoningActive && (_jsx(Box, { marginBottom: 0, children: _jsx(Text, { color: colors.warning, bold: true, children: "\uD83E\uDD14 Thinking..." }) })), reasoning && (_jsx(Box, { marginBottom: 0, height: 3, overflow: 'hidden', children: _jsx(ReasoningView, { reasoning: reasoning, isActive: reasoningActive }) })), toolCalls.length > 0 && (_jsxs(_Fragment, { children: [_jsx(ToolCallView, { toolCalls: toolCalls, maxItems: VISIBLE_TOOL_GROUPS }), _jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [toolCalls.length, " tool call", toolCalls.length !== 1 ? 's' : '', uniqueTools > 1 ? ` (${uniqueTools} types)` : '', scrollOffset > 0 && ' — PageDown'] }) })] }))] })] }));
16
+ }
17
+ //# sourceMappingURL=results-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"results-panel.js","sourceRoot":"","sources":["../../src/ui/results-panel.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,qDAAqD;AACrD,MAAM,mBAAmB,GAAG,CAAC,CAAA;AAU7B,MAAM,UAAU,YAAY,CAAE,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,GAAG,CAAC,EAAqB;IAC3H,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAA;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,eAAe,IAAI,eAAe,CAAA;IAE1F,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAA;IAE5B,2CAA2C;IAC3C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAE9D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAEzB,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,YACvB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,GAClD,GACH,EAGN,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAC,QAAQ,aAClE,eAAe,IAAI,CAClB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,+CAAsB,GACnD,CACP,EAEA,SAAS,IAAI,CACZ,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAC,QAAQ,YAChD,KAAC,aAAa,IAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,GAAI,GAC9D,CACP,EAEA,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CACvB,8BACE,KAAC,YAAY,IAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,mBAAmB,GAAI,EACrE,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,MAAC,IAAI,IAAC,QAAQ,mBACX,SAAS,CAAC,MAAM,gBAAY,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAC7D,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,SAAS,CAAC,CAAC,CAAC,EAAE,EAChD,YAAY,GAAG,CAAC,IAAI,aAAa,IAC7B,GACH,IACL,CACJ,IACG,IACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { DeepSeekConfig, ApprovalMode } from '../config/defaults.js';
2
+ import { type Locale } from '../core/i18n.js';
3
+ import type { ChatMessage } from '../api/index.js';
4
+ export declare function Logo(): import("react/jsx-runtime").JSX.Element;
5
+ export type SetupStep = 'lang' | 'apikey' | 'theme' | 'model' | 'mode' | 'done';
6
+ export interface SetupWizardState {
7
+ step: SetupStep;
8
+ apiKeyError: string;
9
+ langCursor: number;
10
+ themeCursor: number;
11
+ modelCursor: number;
12
+ modeCursor: number;
13
+ langOptions: Locale[];
14
+ modeOptions: ApprovalMode[];
15
+ }
16
+ export interface SetupWizardActions {
17
+ handleApiKeySubmit: (key: string) => Promise<void>;
18
+ finishSetup: () => Promise<void>;
19
+ setLangCursor: (c: number) => void;
20
+ setThemeCursor: (c: number) => void;
21
+ setModelCursor: (c: number) => void;
22
+ setModeCursor: (c: number) => void;
23
+ setStep: (s: SetupStep) => void;
24
+ setApiKeyError: (e: string) => void;
25
+ }
26
+ export declare function useSetupWizard(config: DeepSeekConfig, initialStep: SetupStep | undefined, onSetupComplete: (updatedConfig: DeepSeekConfig) => void, onMessage: (msg: ChatMessage) => void): [SetupWizardState, SetupWizardActions];
27
+ export declare function SetupWizard({ state }: {
28
+ state: SetupWizardState;
29
+ }): import("react/jsx-runtime").JSX.Element;
30
+ //# sourceMappingURL=setup-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../../src/ui/setup-wizard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAIzE,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAiDlD,wBAAgB,IAAI,4CAQnB;AAwGD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAE/E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,SAAS,YAAS,EAC/B,eAAe,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,EACxD,SAAS,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,GACpC,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CA6ExC;AAID,wBAAgB,WAAW,CAAE,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,2CA2BlE"}