gencode-ai 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/.env.example +11 -0
  2. package/CLAUDE.md +70 -0
  3. package/LICENSE +21 -0
  4. package/README.md +117 -0
  5. package/dist/agent/agent.d.ts +84 -0
  6. package/dist/agent/agent.d.ts.map +1 -0
  7. package/dist/agent/agent.js +233 -0
  8. package/dist/agent/agent.js.map +1 -0
  9. package/dist/agent/index.d.ts +6 -0
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +6 -0
  12. package/dist/agent/index.js.map +1 -0
  13. package/dist/agent/types.d.ts +47 -0
  14. package/dist/agent/types.d.ts.map +1 -0
  15. package/dist/agent/types.js +5 -0
  16. package/dist/agent/types.js.map +1 -0
  17. package/dist/cli/components/App.d.ts +14 -0
  18. package/dist/cli/components/App.d.ts.map +1 -0
  19. package/dist/cli/components/App.js +395 -0
  20. package/dist/cli/components/App.js.map +1 -0
  21. package/dist/cli/components/CommandSuggestions.d.ts +13 -0
  22. package/dist/cli/components/CommandSuggestions.d.ts.map +1 -0
  23. package/dist/cli/components/CommandSuggestions.js +32 -0
  24. package/dist/cli/components/CommandSuggestions.js.map +1 -0
  25. package/dist/cli/components/Header.d.ts +9 -0
  26. package/dist/cli/components/Header.d.ts.map +1 -0
  27. package/dist/cli/components/Header.js +13 -0
  28. package/dist/cli/components/Header.js.map +1 -0
  29. package/dist/cli/components/Input.d.ts +13 -0
  30. package/dist/cli/components/Input.d.ts.map +1 -0
  31. package/dist/cli/components/Input.js +27 -0
  32. package/dist/cli/components/Input.js.map +1 -0
  33. package/dist/cli/components/Logo.d.ts +2 -0
  34. package/dist/cli/components/Logo.d.ts.map +1 -0
  35. package/dist/cli/components/Logo.js +8 -0
  36. package/dist/cli/components/Logo.js.map +1 -0
  37. package/dist/cli/components/Messages.d.ts +37 -0
  38. package/dist/cli/components/Messages.d.ts.map +1 -0
  39. package/dist/cli/components/Messages.js +106 -0
  40. package/dist/cli/components/Messages.js.map +1 -0
  41. package/dist/cli/components/ModelSelector.d.ts +13 -0
  42. package/dist/cli/components/ModelSelector.d.ts.map +1 -0
  43. package/dist/cli/components/ModelSelector.js +72 -0
  44. package/dist/cli/components/ModelSelector.js.map +1 -0
  45. package/dist/cli/components/Spinner.d.ts +12 -0
  46. package/dist/cli/components/Spinner.d.ts.map +1 -0
  47. package/dist/cli/components/Spinner.js +45 -0
  48. package/dist/cli/components/Spinner.js.map +1 -0
  49. package/dist/cli/components/index.d.ts +12 -0
  50. package/dist/cli/components/index.d.ts.map +1 -0
  51. package/dist/cli/components/index.js +12 -0
  52. package/dist/cli/components/index.js.map +1 -0
  53. package/dist/cli/components/theme.d.ts +31 -0
  54. package/dist/cli/components/theme.d.ts.map +1 -0
  55. package/dist/cli/components/theme.js +36 -0
  56. package/dist/cli/components/theme.js.map +1 -0
  57. package/dist/cli/index-legacy.d.ts +7 -0
  58. package/dist/cli/index-legacy.d.ts.map +1 -0
  59. package/dist/cli/index-legacy.js +431 -0
  60. package/dist/cli/index-legacy.js.map +1 -0
  61. package/dist/cli/index.d.ts +7 -0
  62. package/dist/cli/index.d.ts.map +1 -0
  63. package/dist/cli/index.js +116 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/ink-cli.d.ts +7 -0
  66. package/dist/cli/ink-cli.d.ts.map +1 -0
  67. package/dist/cli/ink-cli.js +105 -0
  68. package/dist/cli/ink-cli.js.map +1 -0
  69. package/dist/cli/session-picker.d.ts +16 -0
  70. package/dist/cli/session-picker.d.ts.map +1 -0
  71. package/dist/cli/session-picker.js +280 -0
  72. package/dist/cli/session-picker.js.map +1 -0
  73. package/dist/cli/ui.d.ts +61 -0
  74. package/dist/cli/ui.d.ts.map +1 -0
  75. package/dist/cli/ui.js +364 -0
  76. package/dist/cli/ui.js.map +1 -0
  77. package/dist/config/index.d.ts +7 -0
  78. package/dist/config/index.d.ts.map +1 -0
  79. package/dist/config/index.js +6 -0
  80. package/dist/config/index.js.map +1 -0
  81. package/dist/config/manager.d.ts +31 -0
  82. package/dist/config/manager.d.ts.map +1 -0
  83. package/dist/config/manager.js +65 -0
  84. package/dist/config/manager.js.map +1 -0
  85. package/dist/config/types.d.ts +22 -0
  86. package/dist/config/types.d.ts.map +1 -0
  87. package/dist/config/types.js +6 -0
  88. package/dist/config/types.js.map +1 -0
  89. package/dist/index.d.ts +12 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +21 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/memory/index.d.ts +10 -0
  94. package/dist/memory/index.d.ts.map +1 -0
  95. package/dist/memory/index.js +9 -0
  96. package/dist/memory/index.js.map +1 -0
  97. package/dist/memory/init.d.ts +20 -0
  98. package/dist/memory/init.d.ts.map +1 -0
  99. package/dist/memory/init.js +332 -0
  100. package/dist/memory/init.js.map +1 -0
  101. package/dist/memory/manager.d.ts +85 -0
  102. package/dist/memory/manager.d.ts.map +1 -0
  103. package/dist/memory/manager.js +234 -0
  104. package/dist/memory/manager.js.map +1 -0
  105. package/dist/memory/types.d.ts +74 -0
  106. package/dist/memory/types.d.ts.map +1 -0
  107. package/dist/memory/types.js +6 -0
  108. package/dist/memory/types.js.map +1 -0
  109. package/dist/permissions/index.d.ts +7 -0
  110. package/dist/permissions/index.d.ts.map +1 -0
  111. package/dist/permissions/index.js +6 -0
  112. package/dist/permissions/index.js.map +1 -0
  113. package/dist/permissions/manager.d.ts +32 -0
  114. package/dist/permissions/manager.d.ts.map +1 -0
  115. package/dist/permissions/manager.js +79 -0
  116. package/dist/permissions/manager.js.map +1 -0
  117. package/dist/permissions/types.d.ts +14 -0
  118. package/dist/permissions/types.d.ts.map +1 -0
  119. package/dist/permissions/types.js +17 -0
  120. package/dist/permissions/types.js.map +1 -0
  121. package/dist/providers/anthropic.d.ts +20 -0
  122. package/dist/providers/anthropic.d.ts.map +1 -0
  123. package/dist/providers/anthropic.js +185 -0
  124. package/dist/providers/anthropic.js.map +1 -0
  125. package/dist/providers/gemini.d.ts +21 -0
  126. package/dist/providers/gemini.d.ts.map +1 -0
  127. package/dist/providers/gemini.js +241 -0
  128. package/dist/providers/gemini.js.map +1 -0
  129. package/dist/providers/index.d.ts +34 -0
  130. package/dist/providers/index.d.ts.map +1 -0
  131. package/dist/providers/index.js +72 -0
  132. package/dist/providers/index.js.map +1 -0
  133. package/dist/providers/openai.d.ts +19 -0
  134. package/dist/providers/openai.d.ts.map +1 -0
  135. package/dist/providers/openai.js +221 -0
  136. package/dist/providers/openai.js.map +1 -0
  137. package/dist/providers/types.d.ts +125 -0
  138. package/dist/providers/types.d.ts.map +1 -0
  139. package/dist/providers/types.js +6 -0
  140. package/dist/providers/types.js.map +1 -0
  141. package/dist/session/index.d.ts +6 -0
  142. package/dist/session/index.d.ts.map +1 -0
  143. package/dist/session/index.js +6 -0
  144. package/dist/session/index.js.map +1 -0
  145. package/dist/session/manager.d.ts +101 -0
  146. package/dist/session/manager.d.ts.map +1 -0
  147. package/dist/session/manager.js +295 -0
  148. package/dist/session/manager.js.map +1 -0
  149. package/dist/session/types.d.ts +39 -0
  150. package/dist/session/types.d.ts.map +1 -0
  151. package/dist/session/types.js +10 -0
  152. package/dist/session/types.js.map +1 -0
  153. package/dist/tools/builtin/bash.d.ts +7 -0
  154. package/dist/tools/builtin/bash.d.ts.map +1 -0
  155. package/dist/tools/builtin/bash.js +80 -0
  156. package/dist/tools/builtin/bash.js.map +1 -0
  157. package/dist/tools/builtin/edit.d.ts +7 -0
  158. package/dist/tools/builtin/edit.d.ts.map +1 -0
  159. package/dist/tools/builtin/edit.js +32 -0
  160. package/dist/tools/builtin/edit.js.map +1 -0
  161. package/dist/tools/builtin/glob.d.ts +7 -0
  162. package/dist/tools/builtin/glob.d.ts.map +1 -0
  163. package/dist/tools/builtin/glob.js +36 -0
  164. package/dist/tools/builtin/glob.js.map +1 -0
  165. package/dist/tools/builtin/grep.d.ts +7 -0
  166. package/dist/tools/builtin/grep.d.ts.map +1 -0
  167. package/dist/tools/builtin/grep.js +59 -0
  168. package/dist/tools/builtin/grep.js.map +1 -0
  169. package/dist/tools/builtin/read.d.ts +7 -0
  170. package/dist/tools/builtin/read.d.ts.map +1 -0
  171. package/dist/tools/builtin/read.js +29 -0
  172. package/dist/tools/builtin/read.js.map +1 -0
  173. package/dist/tools/builtin/write.d.ts +7 -0
  174. package/dist/tools/builtin/write.d.ts.map +1 -0
  175. package/dist/tools/builtin/write.js +24 -0
  176. package/dist/tools/builtin/write.js.map +1 -0
  177. package/dist/tools/index.d.ts +38 -0
  178. package/dist/tools/index.d.ts.map +1 -0
  179. package/dist/tools/index.js +32 -0
  180. package/dist/tools/index.js.map +1 -0
  181. package/dist/tools/registry.d.ts +22 -0
  182. package/dist/tools/registry.d.ts.map +1 -0
  183. package/dist/tools/registry.js +71 -0
  184. package/dist/tools/registry.js.map +1 -0
  185. package/dist/tools/types.d.ts +62 -0
  186. package/dist/tools/types.d.ts.map +1 -0
  187. package/dist/tools/types.js +126 -0
  188. package/dist/tools/types.js.map +1 -0
  189. package/docs/README.md +16 -0
  190. package/docs/proposals/0001-web-fetch-tool.md +293 -0
  191. package/docs/proposals/0002-web-search-tool.md +306 -0
  192. package/docs/proposals/0003-task-subagents.md +333 -0
  193. package/docs/proposals/0004-plan-mode.md +338 -0
  194. package/docs/proposals/0005-todo-system.md +299 -0
  195. package/docs/proposals/0006-memory-system.md +539 -0
  196. package/docs/proposals/0007-context-management.md +429 -0
  197. package/docs/proposals/0008-checkpointing.md +327 -0
  198. package/docs/proposals/0009-hooks-system.md +343 -0
  199. package/docs/proposals/0010-mcp-integration.md +382 -0
  200. package/docs/proposals/0011-custom-commands.md +374 -0
  201. package/docs/proposals/0012-ask-user-question.md +317 -0
  202. package/docs/proposals/0013-multi-edit-tool.md +345 -0
  203. package/docs/proposals/0014-lsp-tool.md +478 -0
  204. package/docs/proposals/0015-ls-tool.md +407 -0
  205. package/docs/proposals/0016-kill-shell-tool.md +455 -0
  206. package/docs/proposals/0017-background-tasks.md +489 -0
  207. package/docs/proposals/0018-parallel-tool-execution.md +415 -0
  208. package/docs/proposals/0019-session-enhancements.md +462 -0
  209. package/docs/proposals/0020-session-summarization.md +447 -0
  210. package/docs/proposals/0021-skills-system.md +409 -0
  211. package/docs/proposals/0022-plugin-system.md +467 -0
  212. package/docs/proposals/0023-permission-enhancements.md +470 -0
  213. package/docs/proposals/0024-keyboard-shortcuts.md +443 -0
  214. package/docs/proposals/0025-cost-tracking.md +447 -0
  215. package/docs/proposals/0026-git-integration.md +475 -0
  216. package/docs/proposals/0027-enhanced-read-tool.md +514 -0
  217. package/docs/proposals/0028-enhanced-bash-tool.md +511 -0
  218. package/docs/proposals/0029-notebook-edit-tool.md +413 -0
  219. package/docs/proposals/0030-plugin-marketplace.md +360 -0
  220. package/docs/proposals/0031-command-suggestions.md +295 -0
  221. package/docs/proposals/0032-ide-integrations.md +328 -0
  222. package/docs/proposals/0033-enterprise-deployment.md +221 -0
  223. package/docs/proposals/0034-sandboxing.md +273 -0
  224. package/docs/proposals/0035-auto-updater.md +311 -0
  225. package/docs/proposals/0036-enhanced-glob-tool.md +267 -0
  226. package/docs/proposals/0037-enhanced-grep-tool.md +360 -0
  227. package/docs/proposals/0038-interactive-cli-ui.md +373 -0
  228. package/docs/proposals/0039-streaming-enhancements.md +359 -0
  229. package/docs/proposals/0040-multi-provider-enhancements.md +369 -0
  230. package/docs/proposals/README.md +84 -0
  231. package/docs/proposals/TEMPLATE.md +57 -0
  232. package/docs/proposals/research/claude-code-research.md +307 -0
  233. package/examples/agent-demo.ts +115 -0
  234. package/examples/basic.ts +166 -0
  235. package/package.json +50 -0
  236. package/src/agent/agent.ts +276 -0
  237. package/src/agent/index.ts +6 -0
  238. package/src/agent/types.ts +62 -0
  239. package/src/cli/components/App.tsx +565 -0
  240. package/src/cli/components/CommandSuggestions.tsx +58 -0
  241. package/src/cli/components/Header.tsx +36 -0
  242. package/src/cli/components/Input.tsx +60 -0
  243. package/src/cli/components/Logo.tsx +16 -0
  244. package/src/cli/components/Messages.tsx +210 -0
  245. package/src/cli/components/ModelSelector.tsx +135 -0
  246. package/src/cli/components/Spinner.tsx +72 -0
  247. package/src/cli/components/index.ts +21 -0
  248. package/src/cli/components/theme.ts +36 -0
  249. package/src/cli/index.tsx +136 -0
  250. package/src/config/index.ts +7 -0
  251. package/src/config/manager.ts +77 -0
  252. package/src/config/types.ts +25 -0
  253. package/src/index.ts +86 -0
  254. package/src/permissions/index.ts +7 -0
  255. package/src/permissions/manager.ts +97 -0
  256. package/src/permissions/types.ts +29 -0
  257. package/src/providers/anthropic.ts +224 -0
  258. package/src/providers/gemini.ts +295 -0
  259. package/src/providers/index.ts +97 -0
  260. package/src/providers/openai.ts +261 -0
  261. package/src/providers/types.ts +181 -0
  262. package/src/session/index.ts +6 -0
  263. package/src/session/manager.ts +354 -0
  264. package/src/session/types.ts +49 -0
  265. package/src/tools/builtin/bash.ts +92 -0
  266. package/src/tools/builtin/edit.ts +37 -0
  267. package/src/tools/builtin/glob.ts +42 -0
  268. package/src/tools/builtin/grep.ts +67 -0
  269. package/src/tools/builtin/read.ts +34 -0
  270. package/src/tools/builtin/write.ts +27 -0
  271. package/src/tools/index.ts +36 -0
  272. package/src/tools/registry.ts +83 -0
  273. package/src/tools/types.ts +172 -0
  274. package/tsconfig.json +21 -0
@@ -0,0 +1,106 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ import { colors, icons } from './theme.js';
4
+ // Word wrap text to terminal width
5
+ function wrapText(text, width) {
6
+ const lines = [];
7
+ for (const line of text.split('\n')) {
8
+ if (line.length <= width) {
9
+ lines.push(line);
10
+ }
11
+ else {
12
+ // Simple word wrap
13
+ let currentLine = '';
14
+ const words = line.split(' ');
15
+ for (const word of words) {
16
+ if (currentLine.length + word.length + 1 <= width) {
17
+ currentLine += (currentLine ? ' ' : '') + word;
18
+ }
19
+ else {
20
+ if (currentLine)
21
+ lines.push(currentLine);
22
+ currentLine = word;
23
+ }
24
+ }
25
+ if (currentLine)
26
+ lines.push(currentLine);
27
+ }
28
+ }
29
+ return lines;
30
+ }
31
+ export function UserMessage({ text }) {
32
+ const lines = text.trimEnd().split('\n');
33
+ return (_jsx(Box, { flexDirection: "column", marginTop: 1, marginBottom: 0, children: lines.map((line, i) => (_jsxs(Box, { children: [_jsxs(Text, { color: colors.brand, children: [icons.userPrompt, " "] }), _jsxs(Text, { backgroundColor: "#1E293B", color: colors.text, children: [" ", line, " "] })] }, i))) }));
34
+ }
35
+ export function AssistantMessage({ text, streaming }) {
36
+ if (!text)
37
+ return null;
38
+ // Get terminal width for wrapping
39
+ const termWidth = process.stdout.columns || 80;
40
+ const contentWidth = termWidth - 4; // Account for prefix
41
+ // Wrap text to terminal width
42
+ const lines = wrapText(text.trimEnd(), contentWidth);
43
+ return (_jsx(Box, { flexDirection: "column", marginTop: 1, marginBottom: 0, children: lines.map((line, i) => (_jsxs(Box, { children: [i === 0 && _jsxs(Text, { color: colors.success, children: [icons.assistant, " "] }), i > 0 && _jsx(Text, { children: " " }), _jsxs(Text, { children: [line, streaming && i === lines.length - 1 ? (_jsx(Text, { color: colors.brandLight, children: icons.cursor })) : ('')] })] }, i))) }));
44
+ }
45
+ export function ToolCall({ name, input }) {
46
+ const inputStr = JSON.stringify(input);
47
+ const shortInput = inputStr.length > 50 ? inputStr.slice(0, 47) + '...' : inputStr;
48
+ return (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: colors.tool, children: icons.tool }), " ", name, ' ', _jsx(Text, { color: colors.textMuted, children: shortInput })] }) }));
49
+ }
50
+ export function ToolResult({ name, success, output }) {
51
+ const firstLine = output.split('\n')[0]?.trim() || '';
52
+ const displayOutput = firstLine.length > 50 ? firstLine.slice(0, 47) + '...' : firstLine;
53
+ const statusColor = success ? colors.success : colors.error;
54
+ const statusIcon = success ? icons.success : icons.error;
55
+ return (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: statusColor, children: statusIcon }), " ", name, ' ', _jsx(Text, { color: colors.textMuted, children: displayOutput })] }) }));
56
+ }
57
+ export function InfoMessage({ text, type = 'info' }) {
58
+ const config = {
59
+ info: { color: colors.info, icon: icons.info },
60
+ success: { color: colors.success, icon: icons.success },
61
+ warning: { color: colors.warning, icon: icons.warning },
62
+ error: { color: colors.error, icon: icons.error },
63
+ };
64
+ const { color, icon } = config[type];
65
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: color, children: [icon, " "] }), _jsx(Text, { color: colors.textSecondary, children: text })] }));
66
+ }
67
+ export function Separator() {
68
+ const width = process.stdout.columns || 80;
69
+ return _jsx(Text, { color: colors.separator, children: '─'.repeat(width) });
70
+ }
71
+ export function WelcomeMessage({ model }) {
72
+ return (_jsxs(Box, { marginTop: 1, marginBottom: 0, children: [_jsx(Text, { color: colors.textMuted, children: "Welcome to " }), _jsx(Text, { color: colors.brand, children: model })] }));
73
+ }
74
+ export function ShortcutsHint() {
75
+ return (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.textMuted, children: " ? for shortcuts" }) }));
76
+ }
77
+ // Random verbs for completion message (Claude Code style)
78
+ const COMPLETION_VERBS = [
79
+ 'Baked',
80
+ 'Crafted',
81
+ 'Brewed',
82
+ 'Cooked',
83
+ 'Forged',
84
+ 'Built',
85
+ 'Woven',
86
+ 'Assembled',
87
+ 'Conjured',
88
+ 'Rendered',
89
+ 'Compiled',
90
+ 'Distilled',
91
+ ];
92
+ function formatDuration(ms) {
93
+ const totalSecs = Math.floor(ms / 1000);
94
+ const mins = Math.floor(totalSecs / 60);
95
+ const secs = totalSecs % 60;
96
+ if (mins > 0) {
97
+ return `${mins}m ${secs}s`;
98
+ }
99
+ return `${secs}s`;
100
+ }
101
+ export function CompletionMessage({ durationMs }) {
102
+ // Pick a random verb (stable per render via useMemo would be better, but keep simple)
103
+ const verb = COMPLETION_VERBS[Math.floor(Math.random() * COMPLETION_VERBS.length)];
104
+ return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.textMuted, children: ["\u273B ", verb, " for ", formatDuration(durationMs)] }) }));
105
+ }
106
+ //# sourceMappingURL=Messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Messages.js","sourceRoot":"","sources":["../../../src/cli/components/Messages.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface Model {
2
+ id: string;
3
+ name: string;
4
+ }
5
+ interface ModelSelectorProps {
6
+ currentModel: string;
7
+ onSelect: (modelId: string) => void;
8
+ onCancel: () => void;
9
+ listModels: () => Promise<Model[]>;
10
+ }
11
+ export declare function ModelSelector({ currentModel, onSelect, onCancel, listModels, }: ModelSelectorProps): import("react/jsx-runtime").JSX.Element | null;
12
+ export {};
13
+ //# sourceMappingURL=ModelSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../../src/cli/components/ModelSelector.tsx"],"names":[],"mappings":"AASA,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,kBAAkB;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;CACpC;AAED,wBAAgB,aAAa,CAAC,EAC5B,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,EAAE,kBAAkB,kDA4GpB"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Model Selector Component - Interactive model selection with fuzzy filter
4
+ */
5
+ import { useState, useEffect } from 'react';
6
+ import { Box, Text, useInput } from 'ink';
7
+ import TextInput from 'ink-text-input';
8
+ import { colors, icons } from './theme.js';
9
+ import { LoadingSpinner } from './Spinner.js';
10
+ export function ModelSelector({ currentModel, onSelect, onCancel, listModels, }) {
11
+ const [models, setModels] = useState([]);
12
+ const [loading, setLoading] = useState(true);
13
+ const [error, setError] = useState(null);
14
+ const [filter, setFilter] = useState('');
15
+ const [selectedIndex, setSelectedIndex] = useState(0);
16
+ useEffect(() => {
17
+ const fetchModels = async () => {
18
+ try {
19
+ const result = await listModels();
20
+ setModels(result);
21
+ }
22
+ catch (err) {
23
+ setError(err instanceof Error ? err.message : 'Failed to fetch models');
24
+ }
25
+ finally {
26
+ setLoading(false);
27
+ }
28
+ };
29
+ fetchModels();
30
+ }, [listModels]);
31
+ // Fuzzy filter models
32
+ const filtered = models.filter((m) => m.id.toLowerCase().includes(filter.toLowerCase()) ||
33
+ m.name.toLowerCase().includes(filter.toLowerCase()));
34
+ // Reset selection when filter changes
35
+ useEffect(() => {
36
+ setSelectedIndex(0);
37
+ }, [filter]);
38
+ // Keyboard navigation
39
+ useInput((input, key) => {
40
+ if (key.upArrow) {
41
+ setSelectedIndex((i) => Math.max(0, i - 1));
42
+ }
43
+ else if (key.downArrow) {
44
+ setSelectedIndex((i) => Math.min(filtered.length - 1, i + 1));
45
+ }
46
+ else if (key.return) {
47
+ if (filtered.length > 0) {
48
+ onSelect(filtered[selectedIndex].id);
49
+ }
50
+ }
51
+ else if (key.escape) {
52
+ onCancel();
53
+ }
54
+ });
55
+ if (loading) {
56
+ return (_jsxs(Box, { children: [_jsx(LoadingSpinner, {}), _jsx(Text, { color: colors.textMuted, children: " Loading models..." })] }));
57
+ }
58
+ if (error) {
59
+ onCancel();
60
+ return null;
61
+ }
62
+ const maxVisible = 8;
63
+ const startIndex = Math.max(0, Math.min(selectedIndex - Math.floor(maxVisible / 2), filtered.length - maxVisible));
64
+ const visibleModels = filtered.slice(startIndex, startIndex + maxVisible);
65
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: colors.primary, children: [icons.prompt, " "] }), _jsx(TextInput, { value: filter, onChange: setFilter, placeholder: "Type to filter models..." })] }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: visibleModels.length === 0 ? (_jsxs(Text, { color: colors.textMuted, children: ["No models match \"", filter, "\""] })) : (visibleModels.map((m, i) => {
66
+ const actualIndex = startIndex + i;
67
+ const isSelected = actualIndex === selectedIndex;
68
+ const isCurrent = m.id === currentModel;
69
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? colors.primary : colors.textMuted, children: isSelected ? icons.arrow : ' ' }), _jsx(Text, { color: isSelected ? colors.text : colors.textSecondary, bold: isSelected, children: m.name }), isCurrent && _jsx(Text, { color: colors.success, children: " (current)" })] }, m.id));
70
+ })) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: colors.textMuted, children: [filtered.length, " models \u00B7 \u2191\u2193 navigate \u00B7 Enter select \u00B7 Esc cancel"] }) })] }));
71
+ }
72
+ //# sourceMappingURL=ModelSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelSelector.js","sourceRoot":"","sources":["../../../src/cli/components/ModelSelector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface SpinnerProps {
2
+ text?: string;
3
+ }
4
+ export declare function ThinkingSpinner({ text }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
5
+ export declare function LoadingSpinner({ text }: SpinnerProps): import("react/jsx-runtime").JSX.Element;
6
+ /**
7
+ * Progress bar animation for processing state
8
+ * Bouncing ball with trail effect
9
+ */
10
+ export declare function ProgressBar(): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../src/cli/components/Spinner.tsx"],"names":[],"mappings":"AAQA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAiB,EAAE,EAAE,YAAY,2CAUlE;AAED,wBAAgB,cAAc,CAAC,EAAE,IAAmB,EAAE,EAAE,YAAY,2CASnE;AAED;;;GAGG;AACH,wBAAgB,WAAW,4CAgC1B"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Spinner Component - Compact thinking animation (Claude Code style)
4
+ */
5
+ import { useState, useEffect } from 'react';
6
+ import { Box, Text } from 'ink';
7
+ import InkSpinner from 'ink-spinner';
8
+ import { colors } from './theme.js';
9
+ export function ThinkingSpinner({ text = 'Thinking' }) {
10
+ return (_jsxs(Box, { marginTop: 1, marginBottom: 0, children: [_jsx(Text, { color: colors.brand, children: _jsx(InkSpinner, { type: "dots" }) }), _jsxs(Text, { color: colors.textSecondary, children: [" ", text] }), _jsx(Text, { color: colors.textMuted, children: " \u00B7 ctrl+c to stop" })] }));
11
+ }
12
+ export function LoadingSpinner({ text = 'Loading...' }) {
13
+ return (_jsxs(Box, { children: [_jsx(Text, { color: colors.textSecondary, children: _jsx(InkSpinner, { type: "dots" }) }), _jsxs(Text, { color: colors.textMuted, children: [" ", text] })] }));
14
+ }
15
+ /**
16
+ * Progress bar animation for processing state
17
+ * Bouncing ball with trail effect
18
+ */
19
+ export function ProgressBar() {
20
+ const [frame, setFrame] = useState(0);
21
+ useEffect(() => {
22
+ const timer = setInterval(() => {
23
+ setFrame((f) => (f + 1) % 14);
24
+ }, 100);
25
+ return () => clearInterval(timer);
26
+ }, []);
27
+ // Bouncing ball animation: ball moves left-right with trail
28
+ const width = 7;
29
+ // Frame 0-6: left to right, 7-13: right to left
30
+ const pos = frame < 7 ? frame : 13 - frame;
31
+ let bar = '';
32
+ for (let i = 0; i < width; i++) {
33
+ if (i === pos) {
34
+ bar += '●';
35
+ }
36
+ else if (i === pos - 1 || i === pos + 1) {
37
+ bar += '○';
38
+ }
39
+ else {
40
+ bar += '·';
41
+ }
42
+ }
43
+ return (_jsxs(Box, { children: [_jsx(Text, { color: colors.brand, children: bar }), _jsx(Text, { color: colors.textMuted, children: " esc to stop" })] }));
44
+ }
45
+ //# sourceMappingURL=Spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../../../src/cli/components/Spinner.tsx"],"names":[],"mappings":";AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMpC,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,GAAG,UAAU,EAAgB;IACjE,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aAChC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YACvB,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,GAAG,GACrB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,aAAa,kBAAI,IAAI,IAAQ,EACjD,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,uCAA0B,IACnD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,GAAG,YAAY,EAAgB;IAClE,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,aAAa,YAC/B,KAAC,UAAU,IAAC,IAAI,EAAC,MAAM,GAAG,GACrB,EACP,MAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,kBAAI,IAAI,IAAQ,IACzC,CACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,4DAA4D;IAC5D,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,gDAAgD;IAChD,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC;IAE3C,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YAC1C,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,KAAK,YAAG,GAAG,GAAQ,EACvC,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,SAAS,6BAAqB,IAC9C,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Ink Components Index
3
+ */
4
+ export { App } from './App.js';
5
+ export { Header, Welcome } from './Header.js';
6
+ export { UserMessage, AssistantMessage, ToolCall, ToolResult, InfoMessage, Separator, WelcomeMessage, ShortcutsHint, CompletionMessage, } from './Messages.js';
7
+ export { ThinkingSpinner, LoadingSpinner, ProgressBar } from './Spinner.js';
8
+ export { PromptInput, ConfirmPrompt } from './Input.js';
9
+ export { colors, icons } from './theme.js';
10
+ export { ModelSelector } from './ModelSelector.js';
11
+ export { CommandSuggestions, COMMANDS, getFilteredCommands } from './CommandSuggestions.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Ink Components Index
3
+ */
4
+ export { App } from './App.js';
5
+ export { Header, Welcome } from './Header.js';
6
+ export { UserMessage, AssistantMessage, ToolCall, ToolResult, InfoMessage, Separator, WelcomeMessage, ShortcutsHint, CompletionMessage, } from './Messages.js';
7
+ export { ThinkingSpinner, LoadingSpinner, ProgressBar } from './Spinner.js';
8
+ export { PromptInput, ConfirmPrompt } from './Input.js';
9
+ export { colors, icons } from './theme.js';
10
+ export { ModelSelector } from './ModelSelector.js';
11
+ export { CommandSuggestions, COMMANDS, getFilteredCommands } from './CommandSuggestions.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Theme Configuration - Claude Code inspired
3
+ */
4
+ export declare const colors: {
5
+ brand: string;
6
+ brandLight: string;
7
+ primary: string;
8
+ success: string;
9
+ warning: string;
10
+ error: string;
11
+ info: string;
12
+ text: string;
13
+ textSecondary: string;
14
+ textMuted: string;
15
+ tool: string;
16
+ separator: string;
17
+ };
18
+ export declare const icons: {
19
+ userPrompt: string;
20
+ assistant: string;
21
+ prompt: string;
22
+ success: string;
23
+ error: string;
24
+ warning: string;
25
+ info: string;
26
+ tool: string;
27
+ arrow: string;
28
+ thinking: string;
29
+ cursor: string;
30
+ };
31
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/cli/components/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAalB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;CAiBjB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Theme Configuration - Claude Code inspired
3
+ */
4
+ export const colors = {
5
+ brand: '#818CF8', // Indigo 400
6
+ brandLight: '#A5B4FC', // Indigo 300
7
+ primary: '#818CF8',
8
+ success: '#34D399', // Emerald 400
9
+ warning: '#FBBF24', // Amber 400
10
+ error: '#F87171', // Red 400
11
+ info: '#60A5FA', // Blue 400
12
+ text: '#F1F5F9', // Slate 100
13
+ textSecondary: '#94A3B8', // Slate 400
14
+ textMuted: '#64748B', // Slate 500
15
+ tool: '#C084FC', // Purple 400
16
+ separator: '#1E293B', // Slate 800
17
+ };
18
+ export const icons = {
19
+ // Message prefixes (Claude Code style)
20
+ userPrompt: '❯', // Chevron for user input
21
+ assistant: '●', // Filled circle for assistant
22
+ // Prompt
23
+ prompt: '❯',
24
+ // Status
25
+ success: '✔',
26
+ error: '✖',
27
+ warning: '⚠',
28
+ info: 'ℹ',
29
+ // Tools
30
+ tool: '⚡', // Lightning for tools
31
+ arrow: '→',
32
+ // UI
33
+ thinking: '✱', // Star for thinking state
34
+ cursor: '▋',
35
+ };
36
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/cli/components/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,SAAS,EAAE,aAAa;IAC/B,UAAU,EAAE,SAAS,EAAE,aAAa;IACpC,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS,EAAE,cAAc;IAClC,OAAO,EAAE,SAAS,EAAE,YAAY;IAChC,KAAK,EAAE,SAAS,EAAE,UAAU;IAC5B,IAAI,EAAE,SAAS,EAAE,WAAW;IAC5B,IAAI,EAAE,SAAS,EAAE,YAAY;IAC7B,aAAa,EAAE,SAAS,EAAE,YAAY;IACtC,SAAS,EAAE,SAAS,EAAE,YAAY;IAClC,IAAI,EAAE,SAAS,EAAE,aAAa;IAC9B,SAAS,EAAE,SAAS,EAAE,YAAY;CACnC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,uCAAuC;IACvC,UAAU,EAAE,GAAG,EAAE,yBAAyB;IAC1C,SAAS,EAAE,GAAG,EAAE,8BAA8B;IAC9C,SAAS;IACT,MAAM,EAAE,GAAG;IACX,SAAS;IACT,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,QAAQ;IACR,IAAI,EAAE,GAAG,EAAE,sBAAsB;IACjC,KAAK,EAAE,GAAG;IACV,KAAK;IACL,QAAQ,EAAE,GAAG,EAAE,0BAA0B;IACzC,MAAM,EAAE,GAAG;CACZ,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * GenCode CLI - Modern Interactive Agent Interface
4
+ * Beautiful terminal UI with session management
5
+ */
6
+ import 'dotenv/config';
7
+ //# sourceMappingURL=index-legacy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-legacy.d.ts","sourceRoot":"","sources":["../../src/cli/index-legacy.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,eAAe,CAAC"}