@teleforge-ai/anya 0.5.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 (200) hide show
  1. package/README.md +69 -0
  2. package/assets/anya.jpg +0 -0
  3. package/assets/anya.png +0 -0
  4. package/dist/chat/session.d.ts +15 -0
  5. package/dist/chat/session.d.ts.map +1 -0
  6. package/dist/chat/session.js +59 -0
  7. package/dist/chat/session.js.map +1 -0
  8. package/dist/chat/stream.d.ts +13 -0
  9. package/dist/chat/stream.d.ts.map +1 -0
  10. package/dist/chat/stream.js +86 -0
  11. package/dist/chat/stream.js.map +1 -0
  12. package/dist/commands/providerFactory.d.ts +12 -0
  13. package/dist/commands/providerFactory.d.ts.map +1 -0
  14. package/dist/commands/providerFactory.js +73 -0
  15. package/dist/commands/providerFactory.js.map +1 -0
  16. package/dist/config/encryption.d.ts +3 -0
  17. package/dist/config/encryption.d.ts.map +1 -0
  18. package/dist/config/encryption.js +47 -0
  19. package/dist/config/encryption.js.map +1 -0
  20. package/dist/config/schema.d.ts +94 -0
  21. package/dist/config/schema.d.ts.map +1 -0
  22. package/dist/config/schema.js +28 -0
  23. package/dist/config/schema.js.map +1 -0
  24. package/dist/config/store.d.ts +40 -0
  25. package/dist/config/store.d.ts.map +1 -0
  26. package/dist/config/store.js +195 -0
  27. package/dist/config/store.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +97 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/providers/anthropic.d.ts +10 -0
  33. package/dist/providers/anthropic.d.ts.map +1 -0
  34. package/dist/providers/anthropic.js +128 -0
  35. package/dist/providers/anthropic.js.map +1 -0
  36. package/dist/providers/base.d.ts +39 -0
  37. package/dist/providers/base.d.ts.map +1 -0
  38. package/dist/providers/base.js +28 -0
  39. package/dist/providers/base.js.map +1 -0
  40. package/dist/providers/custom.d.ts +11 -0
  41. package/dist/providers/custom.d.ts.map +1 -0
  42. package/dist/providers/custom.js +90 -0
  43. package/dist/providers/custom.js.map +1 -0
  44. package/dist/providers/deepseek.d.ts +10 -0
  45. package/dist/providers/deepseek.d.ts.map +1 -0
  46. package/dist/providers/deepseek.js +88 -0
  47. package/dist/providers/deepseek.js.map +1 -0
  48. package/dist/providers/google.d.ts +10 -0
  49. package/dist/providers/google.d.ts.map +1 -0
  50. package/dist/providers/google.js +131 -0
  51. package/dist/providers/google.js.map +1 -0
  52. package/dist/providers/groq.d.ts +10 -0
  53. package/dist/providers/groq.d.ts.map +1 -0
  54. package/dist/providers/groq.js +88 -0
  55. package/dist/providers/groq.js.map +1 -0
  56. package/dist/providers/index.d.ts +10 -0
  57. package/dist/providers/index.d.ts.map +1 -0
  58. package/dist/providers/index.js +39 -0
  59. package/dist/providers/index.js.map +1 -0
  60. package/dist/providers/mistral.d.ts +10 -0
  61. package/dist/providers/mistral.d.ts.map +1 -0
  62. package/dist/providers/mistral.js +88 -0
  63. package/dist/providers/mistral.js.map +1 -0
  64. package/dist/providers/ollama.d.ts +11 -0
  65. package/dist/providers/ollama.d.ts.map +1 -0
  66. package/dist/providers/ollama.js +82 -0
  67. package/dist/providers/ollama.js.map +1 -0
  68. package/dist/providers/openai.d.ts +10 -0
  69. package/dist/providers/openai.d.ts.map +1 -0
  70. package/dist/providers/openai.js +127 -0
  71. package/dist/providers/openai.js.map +1 -0
  72. package/dist/providers/opencode.d.ts +11 -0
  73. package/dist/providers/opencode.d.ts.map +1 -0
  74. package/dist/providers/opencode.js +99 -0
  75. package/dist/providers/opencode.js.map +1 -0
  76. package/dist/providers/openrouter.d.ts +10 -0
  77. package/dist/providers/openrouter.d.ts.map +1 -0
  78. package/dist/providers/openrouter.js +119 -0
  79. package/dist/providers/openrouter.js.map +1 -0
  80. package/dist/providers/together.d.ts +10 -0
  81. package/dist/providers/together.d.ts.map +1 -0
  82. package/dist/providers/together.js +88 -0
  83. package/dist/providers/together.js.map +1 -0
  84. package/dist/providers/xai.d.ts +10 -0
  85. package/dist/providers/xai.d.ts.map +1 -0
  86. package/dist/providers/xai.js +88 -0
  87. package/dist/providers/xai.js.map +1 -0
  88. package/dist/tui/ansi.d.ts +49 -0
  89. package/dist/tui/ansi.d.ts.map +1 -0
  90. package/dist/tui/ansi.js +208 -0
  91. package/dist/tui/ansi.js.map +1 -0
  92. package/dist/tui/components/anyaArt.d.ts +2 -0
  93. package/dist/tui/components/anyaArt.d.ts.map +1 -0
  94. package/dist/tui/components/anyaArt.js +20 -0
  95. package/dist/tui/components/anyaArt.js.map +1 -0
  96. package/dist/tui/components/dialog.d.ts +15 -0
  97. package/dist/tui/components/dialog.d.ts.map +1 -0
  98. package/dist/tui/components/dialog.js +115 -0
  99. package/dist/tui/components/dialog.js.map +1 -0
  100. package/dist/tui/components/messages.d.ts +10 -0
  101. package/dist/tui/components/messages.d.ts.map +1 -0
  102. package/dist/tui/components/messages.js +100 -0
  103. package/dist/tui/components/messages.js.map +1 -0
  104. package/dist/tui/render.d.ts +3 -0
  105. package/dist/tui/render.d.ts.map +1 -0
  106. package/dist/tui/render.js +137 -0
  107. package/dist/tui/render.js.map +1 -0
  108. package/dist/tui/screen.d.ts +19 -0
  109. package/dist/tui/screen.d.ts.map +1 -0
  110. package/dist/tui/screen.js +98 -0
  111. package/dist/tui/screen.js.map +1 -0
  112. package/dist/tui/state.d.ts +41 -0
  113. package/dist/tui/state.d.ts.map +1 -0
  114. package/dist/tui/state.js +306 -0
  115. package/dist/tui/state.js.map +1 -0
  116. package/dist/ui/App.d.ts +3 -0
  117. package/dist/ui/App.d.ts.map +1 -0
  118. package/dist/ui/App.js +207 -0
  119. package/dist/ui/App.js.map +1 -0
  120. package/dist/ui/components/CommandPalette.d.ts +8 -0
  121. package/dist/ui/components/CommandPalette.d.ts.map +1 -0
  122. package/dist/ui/components/CommandPalette.js +63 -0
  123. package/dist/ui/components/CommandPalette.js.map +1 -0
  124. package/dist/ui/components/HomeScreen.d.ts +8 -0
  125. package/dist/ui/components/HomeScreen.d.ts.map +1 -0
  126. package/dist/ui/components/HomeScreen.js +29 -0
  127. package/dist/ui/components/HomeScreen.js.map +1 -0
  128. package/dist/ui/components/ImageRenderer.d.ts +8 -0
  129. package/dist/ui/components/ImageRenderer.d.ts.map +1 -0
  130. package/dist/ui/components/ImageRenderer.js +42 -0
  131. package/dist/ui/components/ImageRenderer.js.map +1 -0
  132. package/dist/ui/components/InputBox.d.ts +12 -0
  133. package/dist/ui/components/InputBox.d.ts.map +1 -0
  134. package/dist/ui/components/InputBox.js +96 -0
  135. package/dist/ui/components/InputBox.js.map +1 -0
  136. package/dist/ui/components/MessageList.d.ts +13 -0
  137. package/dist/ui/components/MessageList.d.ts.map +1 -0
  138. package/dist/ui/components/MessageList.js +10 -0
  139. package/dist/ui/components/MessageList.js.map +1 -0
  140. package/dist/ui/components/ModelSelector.d.ts +9 -0
  141. package/dist/ui/components/ModelSelector.d.ts.map +1 -0
  142. package/dist/ui/components/ModelSelector.js +77 -0
  143. package/dist/ui/components/ModelSelector.js.map +1 -0
  144. package/dist/ui/components/ProviderForm.d.ts +8 -0
  145. package/dist/ui/components/ProviderForm.d.ts.map +1 -0
  146. package/dist/ui/components/ProviderForm.js +88 -0
  147. package/dist/ui/components/ProviderForm.js.map +1 -0
  148. package/dist/ui/components/SettingsPanel.d.ts +7 -0
  149. package/dist/ui/components/SettingsPanel.d.ts.map +1 -0
  150. package/dist/ui/components/SettingsPanel.js +87 -0
  151. package/dist/ui/components/SettingsPanel.js.map +1 -0
  152. package/dist/ui/components/StatusBar.d.ts +8 -0
  153. package/dist/ui/components/StatusBar.d.ts.map +1 -0
  154. package/dist/ui/components/StatusBar.js +15 -0
  155. package/dist/ui/components/StatusBar.js.map +1 -0
  156. package/dist/ui/components/StatusDashboard.d.ts +7 -0
  157. package/dist/ui/components/StatusDashboard.d.ts.map +1 -0
  158. package/dist/ui/components/StatusDashboard.js +29 -0
  159. package/dist/ui/components/StatusDashboard.js.map +1 -0
  160. package/dist/ui/components/TitleBar.d.ts +8 -0
  161. package/dist/ui/components/TitleBar.d.ts.map +1 -0
  162. package/dist/ui/components/TitleBar.js +7 -0
  163. package/dist/ui/components/TitleBar.js.map +1 -0
  164. package/dist/ui/hooks/useConfig.d.ts +28 -0
  165. package/dist/ui/hooks/useConfig.d.ts.map +1 -0
  166. package/dist/ui/hooks/useConfig.js +20 -0
  167. package/dist/ui/hooks/useConfig.js.map +1 -0
  168. package/dist/ui/hooks/useModels.d.ts +10 -0
  169. package/dist/ui/hooks/useModels.d.ts.map +1 -0
  170. package/dist/ui/hooks/useModels.js +30 -0
  171. package/dist/ui/hooks/useModels.js.map +1 -0
  172. package/dist/ui/hooks/useProviders.d.ts +18 -0
  173. package/dist/ui/hooks/useProviders.d.ts.map +1 -0
  174. package/dist/ui/hooks/useProviders.js +56 -0
  175. package/dist/ui/hooks/useProviders.js.map +1 -0
  176. package/dist/ui/theme.d.ts +22 -0
  177. package/dist/ui/theme.d.ts.map +1 -0
  178. package/dist/ui/theme.js +99 -0
  179. package/dist/ui/theme.js.map +1 -0
  180. package/dist/utils/fuzzysearch.d.ts +8 -0
  181. package/dist/utils/fuzzysearch.d.ts.map +1 -0
  182. package/dist/utils/fuzzysearch.js +19 -0
  183. package/dist/utils/fuzzysearch.js.map +1 -0
  184. package/dist/utils/image.d.ts +8 -0
  185. package/dist/utils/image.d.ts.map +1 -0
  186. package/dist/utils/image.js +63 -0
  187. package/dist/utils/image.js.map +1 -0
  188. package/dist/utils/json.d.ts +2 -0
  189. package/dist/utils/json.d.ts.map +1 -0
  190. package/dist/utils/json.js +9 -0
  191. package/dist/utils/json.js.map +1 -0
  192. package/dist/utils/logger.d.ts +19 -0
  193. package/dist/utils/logger.d.ts.map +1 -0
  194. package/dist/utils/logger.js +23 -0
  195. package/dist/utils/logger.js.map +1 -0
  196. package/dist/utils/terminal.d.ts +11 -0
  197. package/dist/utils/terminal.d.ts.map +1 -0
  198. package/dist/utils/terminal.js +38 -0
  199. package/dist/utils/terminal.js.map +1 -0
  200. package/package.json +58 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","sourceRoot":"","sources":["../../../src/ui/components/CommandPalette.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ onNavigate: (route: string) => void;
4
+ showImage?: boolean;
5
+ }
6
+ export declare function HomeScreen(props: Props): React.JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=HomeScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomeScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/HomeScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AASlD,UAAU,KAAK;IACb,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,qBA6EtC"}
@@ -0,0 +1,29 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { loadConfig } from '../../config/store.js';
5
+ import { ALL_PROVIDERS } from '../../providers/base.js';
6
+ import { CONNECT_PROVIDERS } from '../../commands/providerFactory.js';
7
+ import { ImageRenderer } from './ImageRenderer.js';
8
+ import { getAnyaAsciiArt } from '../../utils/image.js';
9
+ import { readPackageJson } from '../../utils/json.js';
10
+ export function HomeScreen(props) {
11
+ const config = loadConfig();
12
+ const [cols, setCols] = useState(process.stdout.columns || 80);
13
+ const hasLeft = cols >= 80;
14
+ const pw = Math.floor((cols - 4) / 2);
15
+ useEffect(() => {
16
+ const onResize = () => { setCols(process.stdout.columns || 80); };
17
+ process.stdout.on('resize', onResize);
18
+ return () => { process.stdout.removeListener('resize', onResize); };
19
+ }, []);
20
+ const activeProvider = ALL_PROVIDERS.find((p) => p.id === config.activeProvider);
21
+ const connectedCount = Object.keys(config.providers).filter((k) => config.providers[k]?.apiKey).length;
22
+ const isConnected = !!config.providers[config.activeProvider]?.apiKey;
23
+ const tips = ['Type / for commands', 'Tab to switch modes', '/connect to add provider', '/models to browse', '/settings to customize', 'Ctrl+P for palette'];
24
+ const tip = tips[Math.floor(Math.random() * tips.length)];
25
+ const leftPanel = (_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, children: [_jsx(Box, { borderStyle: "round", borderColor: "#FF69B4", paddingX: 1, paddingY: 1, marginBottom: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "#FF1493", bold: true, children: "Anya AI CLI" }), _jsxs(Text, { color: "#CC99AA", children: ["Multi-provider AI assistant v", readPackageJson().version] })] }) }), _jsx(Box, { borderStyle: "round", borderColor: "#FF69B4", paddingX: 1, paddingY: 1, marginBottom: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "#FF1493", bold: true, children: "Provider Status" }), _jsxs(Box, { children: [_jsx(Text, { color: isConnected ? '#4CAF50' : '#F44336', children: isConnected ? '●' : '○' }), _jsxs(Text, { color: "#333333", children: [" ", activeProvider?.name || 'No provider'] }), isConnected ? _jsxs(Text, { color: "#CC99AA", children: [" (", config.activeModel, ")"] }) : null] }), _jsxs(Text, { color: "#CC99AA", children: [connectedCount, " / ", ALL_PROVIDERS.length, " configured"] })] }) }), _jsx(Box, { borderStyle: "round", borderColor: "#FF69B4", paddingX: 1, paddingY: 1, marginBottom: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "#FF1493", bold: true, children: "Quick Commands" }), CONNECT_PROVIDERS.slice(0, 6).map((p) => (_jsxs(Box, { children: [_jsxs(Text, { color: "#333333", children: [" /connect ", p.id] }), _jsxs(Text, { color: "#CC99AA", children: [" \u2014 ", p.name] })] }, p.id)))] }) }), _jsx(Box, { borderStyle: "round", borderColor: "#FF69B4", paddingX: 1, paddingY: 1, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "#FF1493", bold: true, children: "Help" }), _jsx(Text, { color: "#CC99AA", children: " /connect /models /settings" }), _jsx(Text, { color: "#CC99AA", children: " /status /help /quit" })] }) })] }));
26
+ const rightPanel = (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", width: pw, children: [props.showImage ? _jsx(ImageRenderer, { width: pw }) : (_jsx(Box, { flexDirection: "column", alignItems: "center", children: getAnyaAsciiArt(pw).map((line, i) => _jsx(Text, { color: "#FF69B4", children: line }, i)) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#CC99AA", children: tip }) })] }));
27
+ return (_jsx(Box, { flexDirection: "column", width: "100%", children: _jsxs(Box, { flexDirection: "row", flexGrow: 1, children: [_jsx(Box, { flexGrow: 1, width: hasLeft ? pw : cols - 2, children: leftPanel }), hasLeft ? _jsx(Box, { width: pw, children: rightPanel }) : null] }) }));
28
+ }
29
+ //# sourceMappingURL=HomeScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomeScreen.js","sourceRoot":"","sources":["../../../src/ui/components/HomeScreen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ width: number;
4
+ visible?: boolean;
5
+ }
6
+ export declare function ImageRenderer(props: Props): React.JSX.Element | null;
7
+ export {};
8
+ //# sourceMappingURL=ImageRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageRenderer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ImageRenderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAKlD,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,4BAkDzC"}
@@ -0,0 +1,42 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { renderImage } from '../../utils/image.js';
5
+ import { detectTerminal } from '../../utils/terminal.js';
6
+ export function ImageRenderer(props) {
7
+ const [imageOutput, setImageOutput] = useState('');
8
+ const [asciiArt, setAsciiArt] = useState([]);
9
+ const term = detectTerminal();
10
+ useEffect(() => {
11
+ if (!props.visible)
12
+ return;
13
+ const result = renderImage(props.width);
14
+ if ('data' in result) {
15
+ setImageOutput(result.data);
16
+ setAsciiArt([]);
17
+ }
18
+ else {
19
+ setImageOutput('');
20
+ setAsciiArt(result.ascii);
21
+ }
22
+ }, [props.width, props.visible]);
23
+ if (!props.visible)
24
+ return null;
25
+ if (term.supportsImages && imageOutput) {
26
+ return _jsx(Text, { children: imageOutput });
27
+ }
28
+ if (asciiArt.length > 0) {
29
+ return (_jsx(Box, { flexDirection: "column", alignItems: "center", children: asciiArt.map((line, i) => (_jsx(Text, { color: "#FF69B4", children: line }, i))) }));
30
+ }
31
+ const w = Math.min(props.width - 2, 34);
32
+ const fallback = [
33
+ ` ┌${'─'.repeat(w)}┐`,
34
+ ` │ ★ Anya AI CLI ★ │`,
35
+ ` │ Command Line Assistant │`,
36
+ ` │ anya@cli ~ ready │`,
37
+ ` └${'─'.repeat(w)}┘`,
38
+ ` ♥ ♥ ♥ ♥ ♥`,
39
+ ];
40
+ return (_jsx(Box, { flexDirection: "column", alignItems: "center", children: fallback.map((line, i) => (_jsx(Text, { color: "#FF69B4", children: line }, i))) }));
41
+ }
42
+ //# sourceMappingURL=ImageRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageRenderer.js","sourceRoot":"","sources":["../../../src/ui/components/ImageRenderer.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAOxD,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAClD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAA;IACtD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;IAE7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAM;QAC1B,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3B,WAAW,CAAC,EAAE,CAAC,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,EAAE,CAAC,CAAA;YAClB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAE/B,IAAI,IAAI,CAAC,cAAc,IAAI,WAAW,EAAE,CAAC;QACvC,OAAO,KAAC,IAAI,cAAE,WAAW,GAAQ,CAAA;IACnC,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,YAC5C,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE,CAAC,CACzC,KAAC,IAAI,IAAS,KAAK,EAAC,SAAS,YAAE,IAAI,IAAxB,CAAC,CAA+B,CAC5C,CAAC,GACE,CACP,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;IACvC,MAAM,QAAQ,GAAG;QACf,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;QACrB,gCAAgC;QAChC,kCAAkC;QAClC,kCAAkC;QAClC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;QACrB,aAAa;KACd,CAAA;IAED,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,QAAQ,YAC5C,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,CAAS,EAAE,EAAE,CAAC,CACzC,KAAC,IAAI,IAAS,KAAK,EAAC,SAAS,YAAE,IAAI,IAAxB,CAAC,CAA+B,CAC5C,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ onSubmit: (value: string) => void;
4
+ placeholder?: string;
5
+ mode?: string;
6
+ modelName?: string;
7
+ onSlash?: () => void;
8
+ disabled?: boolean;
9
+ }
10
+ export declare function InputBox(props: Props): React.JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=InputBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwC,MAAM,OAAO,CAAA;AAG5D,UAAU,KAAK;IACb,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,qBAmGpC"}
@@ -0,0 +1,96 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useCallback } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ export function InputBox(props) {
5
+ const [value, setValue] = useState('');
6
+ const [cursor, setCursor] = useState(0);
7
+ const [history, setHistory] = useState([]);
8
+ const [historyIdx, setHistoryIdx] = useState(-1);
9
+ const valueRef = useRef(value);
10
+ valueRef.current = value;
11
+ const submitValue = useCallback(() => {
12
+ const t = valueRef.current.trim();
13
+ if (!t)
14
+ return;
15
+ props.onSubmit(t);
16
+ setHistory((p) => [...p, t]);
17
+ setHistoryIdx(-1);
18
+ setValue('');
19
+ setCursor(0);
20
+ }, [props]);
21
+ useInput((input, key) => {
22
+ if (props.disabled)
23
+ return;
24
+ if (key.return && !key.shift) {
25
+ submitValue();
26
+ return;
27
+ }
28
+ if (key.escape) {
29
+ setValue('');
30
+ setCursor(0);
31
+ return;
32
+ }
33
+ if (key.upArrow && !key.ctrl) {
34
+ if (history.length > 0) {
35
+ const ni = Math.min(historyIdx + 1, history.length - 1);
36
+ setHistoryIdx(ni);
37
+ const h = history[history.length - 1 - ni];
38
+ setValue(h);
39
+ setCursor(h.length);
40
+ }
41
+ return;
42
+ }
43
+ if (key.downArrow && !key.ctrl) {
44
+ if (historyIdx > 0) {
45
+ const ni = historyIdx - 1;
46
+ setHistoryIdx(ni);
47
+ const h = history[history.length - 1 - ni];
48
+ setValue(h);
49
+ setCursor(h.length);
50
+ }
51
+ else {
52
+ setHistoryIdx(-1);
53
+ setValue('');
54
+ setCursor(0);
55
+ }
56
+ return;
57
+ }
58
+ if (key.leftArrow) {
59
+ setCursor((p) => Math.max(0, p - 1));
60
+ return;
61
+ }
62
+ if (key.rightArrow) {
63
+ setCursor((p) => Math.min(value.length, p + 1));
64
+ return;
65
+ }
66
+ if (key.backspace || key.delete) {
67
+ if (cursor > 0) {
68
+ setValue((p) => p.slice(0, cursor - 1) + p.slice(cursor));
69
+ setCursor((p) => p - 1);
70
+ }
71
+ return;
72
+ }
73
+ if (key.ctrl && input === 'p') {
74
+ props.onSlash?.();
75
+ return;
76
+ }
77
+ if (key.tab)
78
+ return;
79
+ if (key.return && key.shift) {
80
+ setValue((p) => p.slice(0, cursor) + '\n' + p.slice(cursor));
81
+ setCursor((p) => p + 1);
82
+ return;
83
+ }
84
+ if (input && input.length === 1 && input >= ' ') {
85
+ setValue((p) => p.slice(0, cursor) + input + p.slice(cursor));
86
+ setCursor((p) => p + 1);
87
+ }
88
+ });
89
+ const display = value || props.placeholder || 'Ask anything...';
90
+ const color = value ? '#333333' : '#CC99AA';
91
+ const lines = display.split('\n');
92
+ const displayLine = lines.length > 0 ? lines[lines.length - 1] : display;
93
+ const lineCount = lines.length;
94
+ return (_jsx(Box, { flexDirection: "column", width: "100%", children: _jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", paddingX: 1, paddingY: lineCount > 1 ? 0 : 0, children: [lines.map((line, i) => (_jsx(Box, { children: _jsx(Text, { color: color, children: line || ' ' }) }, i))), _jsxs(Box, { marginTop: lineCount > 1 ? 0 : 0, children: [_jsx(Text, { color: "#FF69B4", children: props.mode || 'Build' }), _jsx(Text, { children: " \u00B7 " }), _jsx(Text, { color: "#CC99AA", children: props.modelName || 'No provider' })] })] }) }));
95
+ }
96
+ //# sourceMappingURL=InputBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputBox.js","sourceRoot":"","sources":["../../../src/ui/components/InputBox.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAC5D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAA;AAWzC,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAgB,EAAE,CAAC,CAAA;IACzD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9B,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;IAExB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACjC,IAAI,CAAC,CAAC;YAAE,OAAM;QACd,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QACjB,UAAU,CAAC,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3C,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACjB,QAAQ,CAAC,EAAE,CAAC,CAAA;QACZ,SAAS,CAAC,CAAC,CAAC,CAAA;IACd,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,QAAQ,CAAC,CAAC,KAAa,EAAE,GAAQ,EAAE,EAAE;QACnC,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAM;QAE1B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAC7B,WAAW,EAAE,CAAA;YACb,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAEtD,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACvD,aAAa,CAAC,EAAE,CAAC,CAAA;gBACjB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;gBAC1C,QAAQ,CAAC,CAAC,CAAC,CAAA;gBACX,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAA;gBACzB,aAAa,CAAC,EAAE,CAAC,CAAA;gBACjB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;gBAC1C,QAAQ,CAAC,CAAC,CAAC,CAAA;gBACX,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAAC,SAAS,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAC3E,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YAAC,SAAS,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAC,OAAM;QAAC,CAAC;QAEvF,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,QAAQ,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;gBACjE,SAAS,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YACjC,CAAC;YACD,OAAM;QACR,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAAC,OAAM;QAAC,CAAC;QAC5D,IAAI,GAAG,CAAC,GAAG;YAAE,OAAM;QACnB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC5B,QAAQ,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YACpE,SAAS,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC/B,OAAM;QACR,CAAC;QAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YAChD,QAAQ,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;YACrE,SAAS,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,iBAAiB,CAAA;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACjC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;IACxE,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAA;IAE9B,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAC,MAAM,YACtC,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAC/G,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,YAAG,IAAI,IAAI,GAAG,GAAQ,IADhC,CAAC,CAEL,CACP,CAAC,EACF,MAAC,GAAG,IAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aACnC,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,KAAK,CAAC,IAAI,IAAI,OAAO,GAAQ,EACpD,KAAC,IAAI,2BAAW,EAChB,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,KAAK,CAAC,SAAS,IAAI,aAAa,GAAQ,IAC3D,IACF,GACF,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ interface Msg {
3
+ role: 'user' | 'assistant' | 'system';
4
+ content: string;
5
+ timing?: string;
6
+ }
7
+ interface Props {
8
+ messages: Msg[];
9
+ loading?: boolean;
10
+ }
11
+ export declare function MessageList(props: Props): React.JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=MessageList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/ui/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,UAAU,GAAG;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,KAAK;IACb,QAAQ,EAAE,GAAG,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,qBAqDvC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function MessageList(props) {
4
+ if (props.messages.length === 0 && !props.loading) {
5
+ return (_jsx(Box, { flexDirection: "column", alignItems: "flex-start", paddingY: 1, children: _jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", paddingX: 2, paddingY: 1, children: [_jsx(Text, { color: "#FF1493", bold: true, children: "Anya AI CLI v0.5.0" }), _jsx(Text, { color: "#CC99AA", children: "Multi-provider AI assistant" }), _jsx(Text, { color: "#FFB6C1", children: "~ Waku Waku! ~" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#CC99AA", children: "Type a message to chat, or / for commands" }) })] }) }));
6
+ }
7
+ const msgs = props.messages;
8
+ return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [msgs.map((msg, i) => (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: msg.role === 'user' ? (_jsxs(Box, { children: [_jsx(Text, { color: "#FF69B4", children: "\u25CF " }), _jsx(Text, { color: "#333333", children: msg.content })] })) : msg.role === 'system' ? (_jsx(Box, { children: _jsxs(Text, { color: "#CC99AA", children: ["\u2699 ", msg.content] }) })) : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsx(Text, { color: "#FF1493", children: msg.content }) }), msg.timing ? (_jsx(Box, { children: _jsxs(Text, { color: "#CC99AA", children: [" \u2514 ", msg.timing] }) })) : null] })) }, i))), props.loading ? (_jsxs(Box, { children: [_jsx(Text, { color: "#FF1493", children: "\u280B " }), _jsx(Text, { color: "#CC99AA", children: "Thinking..." })] })) : null] }));
9
+ }
10
+ //# sourceMappingURL=MessageList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../../src/ui/components/MessageList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAa/B,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAC,YAAY,EAAC,QAAQ,EAAE,CAAC,YAC7D,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,SAAS,EAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aAC5F,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,yCAA0B,EACpD,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,4CAAmC,EACxD,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,+BAAsB,EAC3C,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,0DAAiD,GAClE,IACF,GACF,CACP,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAA;IAE3B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACpC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,CAAS,EAAE,EAAE,CAAC,CACjC,KAAC,GAAG,IAAS,aAAa,EAAC,QAAQ,EAAC,YAAY,EAAE,CAAC,YAChD,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CACrB,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,wBAAU,EAC/B,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,GAAG,CAAC,OAAO,GAAQ,IACtC,CACP,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAC1B,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,wBAAI,GAAG,CAAC,OAAO,IAAQ,GACxC,CACP,CAAC,CAAC,CAAC,CACF,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,GAAG,CAAC,OAAO,GAAQ,GACtC,EACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CACZ,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,yBAAK,GAAG,CAAC,MAAM,IAAQ,GACxC,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,IArBO,CAAC,CAsBL,CACP,CAAC,EACD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,wBAAU,EAC/B,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,4BAAmB,IACpC,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ providerId?: string;
4
+ onSelect: (modelId: string) => void;
5
+ onBack: () => void;
6
+ }
7
+ export declare function ModelSelector(props: Props): React.JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=ModelSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ModelSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAMlD,UAAU,KAAK;IACb,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,qBAsEzC"}
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import { ALL_PROVIDERS } from '../../providers/base.js';
5
+ import { fetchModelsFromProvider } from '../../commands/providerFactory.js';
6
+ import { loadConfig, setModel, addRecentModel, isFavorite } from '../../config/store.js';
7
+ export function ModelSelector(props) {
8
+ const config = loadConfig();
9
+ const pid = props.providerId || config.activeProvider;
10
+ const [models, setModels] = useState([]);
11
+ const [loading, setLoading] = useState(true);
12
+ const [selIdx, setSelIdx] = useState(0);
13
+ const [search, setSearch] = useState('');
14
+ useEffect(() => {
15
+ setLoading(true);
16
+ const prov = ALL_PROVIDERS.find((p) => p.id === pid);
17
+ if (prov && prov.models.length > 0) {
18
+ setModels(prov.models.map((m) => ({ id: m, name: m, provider: pid })));
19
+ setLoading(false);
20
+ return;
21
+ }
22
+ fetchModelsFromProvider(pid).then((fetched) => {
23
+ if (fetched.length > 0) {
24
+ setModels(fetched);
25
+ }
26
+ else {
27
+ const p2 = ALL_PROVIDERS.find((p3) => p3.id === pid);
28
+ if (p2)
29
+ setModels(p2.models.map((m) => ({ id: m, name: m, provider: pid })));
30
+ }
31
+ }).catch(() => {
32
+ const p2 = ALL_PROVIDERS.find((p3) => p3.id === pid);
33
+ if (p2)
34
+ setModels(p2.models.map((m) => ({ id: m, name: m, provider: pid })));
35
+ }).finally(() => setLoading(false));
36
+ }, [pid]);
37
+ const filtered = search.trim()
38
+ ? models.filter((m) => m.id.toLowerCase().includes(search.toLowerCase()))
39
+ : models;
40
+ useInput((input, key) => {
41
+ if (key.escape) {
42
+ props.onBack();
43
+ return;
44
+ }
45
+ if (key.return) {
46
+ if (filtered[selIdx]) {
47
+ setModel(pid, filtered[selIdx].id);
48
+ addRecentModel(filtered[selIdx].id);
49
+ props.onSelect(filtered[selIdx].id);
50
+ }
51
+ return;
52
+ }
53
+ if (key.upArrow) {
54
+ setSelIdx((p) => Math.max(0, p - 1));
55
+ return;
56
+ }
57
+ if (key.downArrow) {
58
+ setSelIdx((p) => Math.min(filtered.length - 1, p + 1));
59
+ return;
60
+ }
61
+ if (key.backspace || key.delete) {
62
+ setSearch((p) => p.slice(0, -1));
63
+ setSelIdx(0);
64
+ return;
65
+ }
66
+ if (input && input.length === 1 && input >= ' ') {
67
+ setSearch((p) => p + input);
68
+ setSelIdx(0);
69
+ return;
70
+ }
71
+ });
72
+ if (loading)
73
+ return _jsx(Box, { children: _jsx(Text, { color: "#CC99AA", children: "Loading models..." }) });
74
+ const display = filtered.slice(0, 15);
75
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 70, padding: 1, children: [_jsxs(Text, { color: "#FF1493", children: ["Model Selector \u2014 ", pid] }), _jsx(Box, { children: _jsx(Text, { color: "#CC99AA", children: search || 'Search models...' }) }), display.map((m, i) => (_jsxs(Box, { children: [_jsx(Text, { color: i === selIdx ? '#FF1493' : '#CC99AA', children: i === selIdx ? '▶ ' : ' ' }), _jsx(Text, { color: i === selIdx ? '#FF1493' : '#333333', children: m.name }), _jsxs(Text, { color: "#CC99AA", children: [" (", m.provider, ")"] }), isFavorite(m.id) ? _jsx(Text, { color: "#FFD700", children: " \u2605" }) : null] }, m.id))), filtered.length > 15 ? _jsxs(Text, { color: "#CC99AA", children: ["...and ", filtered.length - 15, " more"] }) : null] }), _jsx(Text, { color: "#CC99AA", children: "Type to search \u2191/\u2193 Enter Esc" })] }));
76
+ }
77
+ //# sourceMappingURL=ModelSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelSelector.js","sourceRoot":"","sources":["../../../src/ui/components/ModelSelector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ onComplete: (providerId: string) => void;
4
+ onBack: () => void;
5
+ }
6
+ export declare function ProviderForm(props: Props): React.JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ProviderForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderForm.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ProviderForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,UAAU,KAAK;IACb,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,qBAuFxC"}
@@ -0,0 +1,88 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import { CONNECT_PROVIDERS } from '../../commands/providerFactory.js';
5
+ import { setApiKey } from '../../config/store.js';
6
+ export function ProviderForm(props) {
7
+ const [step, setStep] = useState('select');
8
+ const [selIdx, setSelIdx] = useState(0);
9
+ const [apiKeyInput, setApiKeyInput] = useState('');
10
+ const [showKey, setShowKey] = useState(false);
11
+ const filtered = CONNECT_PROVIDERS.filter((p) => p.needsKey);
12
+ const selected = filtered[selIdx];
13
+ useInput((input, key) => {
14
+ if (step === 'select') {
15
+ if (key.escape) {
16
+ props.onBack();
17
+ return;
18
+ }
19
+ if (key.return) {
20
+ if (selected) {
21
+ setStep('key');
22
+ setShowKey(false);
23
+ }
24
+ return;
25
+ }
26
+ if (key.upArrow) {
27
+ setSelIdx((p) => Math.max(0, p - 1));
28
+ return;
29
+ }
30
+ if (key.downArrow) {
31
+ setSelIdx((p) => Math.min(filtered.length - 1, p + 1));
32
+ return;
33
+ }
34
+ if (input && input.length === 1 && input >= ' ') {
35
+ const idx = filtered.findIndex((p2) => p2.id.startsWith(input.toLowerCase()));
36
+ if (idx >= 0)
37
+ setSelIdx(idx);
38
+ return;
39
+ }
40
+ }
41
+ if (step === 'key') {
42
+ if (key.escape) {
43
+ setStep('select');
44
+ return;
45
+ }
46
+ if (key.return) {
47
+ if (apiKeyInput.trim())
48
+ setStep('confirm');
49
+ return;
50
+ }
51
+ if (key.backspace || key.delete) {
52
+ setApiKeyInput((p) => p.slice(0, -1));
53
+ return;
54
+ }
55
+ if (key.tab) {
56
+ setShowKey((p) => !p);
57
+ return;
58
+ }
59
+ if (input && input.length === 1 && input >= ' ') {
60
+ setApiKeyInput((p) => p + input);
61
+ return;
62
+ }
63
+ }
64
+ if (step === 'confirm') {
65
+ if (key.escape) {
66
+ setStep('key');
67
+ return;
68
+ }
69
+ if (key.return) {
70
+ setApiKey(selected.id, apiKeyInput.trim());
71
+ props.onComplete(selected.id);
72
+ return;
73
+ }
74
+ if (input === 'n' || input === 'N') {
75
+ setStep('key');
76
+ return;
77
+ }
78
+ }
79
+ });
80
+ if (step === 'select') {
81
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 60, padding: 1, children: [_jsx(Text, { color: "#FF1493", children: "Select a provider to connect:" }), filtered.map((p, i) => (_jsxs(Box, { children: [_jsx(Text, { color: i === selIdx ? '#FF1493' : '#CC99AA', children: i === selIdx ? '▶ ' : ' ' }), _jsx(Text, { color: i === selIdx ? '#FF1493' : '#333333', children: p.name }), _jsxs(Text, { color: "#CC99AA", children: [" \u2014 ", p.desc] })] }, p.id)))] }), _jsx(Text, { color: "#CC99AA", children: "\u2191/\u2193 Enter Esc" })] }));
82
+ }
83
+ if (step === 'key') {
84
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 60, padding: 1, children: [_jsxs(Text, { color: "#FF1493", children: ["Provider: ", selected?.name] }), _jsx(Text, { color: "#CC99AA", children: selected?.desc }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "#333333", children: ["API Key", selected?.env ? ` (${selected.env})` : '', ":"] }) }), _jsx(Box, { children: _jsxs(Text, { color: "#333333", children: ["[", showKey ? apiKeyInput : '*'.repeat(apiKeyInput.length) || '________________', "]"] }) }), _jsx(Text, { color: "#CC99AA", children: "Tab toggle Enter continue" })] }), _jsx(Text, { color: "#CC99AA", children: "Esc back" })] }));
85
+ }
86
+ return (_jsx(Box, { flexDirection: "column", alignItems: "center", paddingY: 1, children: _jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 40, padding: 1, children: [_jsxs(Text, { color: "#FF1493", children: ["Save API key for ", selected?.name, "?"] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "#333333", children: ["Key: ", apiKeyInput.slice(0, 4), "****", apiKeyInput.slice(-4)] }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "#CC99AA", children: "Enter confirm Esc edit N cancel" }) })] }) }));
87
+ }
88
+ //# sourceMappingURL=ProviderForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProviderForm.js","sourceRoot":"","sources":["../../../src/ui/components/ProviderForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ onClose: () => void;
4
+ }
5
+ export declare function SettingsPanel(props: Props): React.JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=SettingsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPanel.d.ts","sourceRoot":"","sources":["../../../src/ui/components/SettingsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAKvC,UAAU,KAAK;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,qBA8EzC"}
@@ -0,0 +1,87 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import { loadConfig, updateSettings } from '../../config/store.js';
5
+ import { THEME_MODES } from '../theme.js';
6
+ export function SettingsPanel(props) {
7
+ const config = loadConfig();
8
+ const [selIdx, setSelIdx] = useState(0);
9
+ const [editMode, setEditMode] = useState(false);
10
+ const [editValue, setEditValue] = useState('');
11
+ const settings = [
12
+ { id: 'theme', label: 'Theme', value: config.theme, type: 'select', options: Object.keys(THEME_MODES).map((k) => ({ label: k.charAt(0).toUpperCase() + k.slice(1), value: k })) },
13
+ { id: 'defaultProvider', label: 'Default Provider', value: config.defaultProvider, type: 'select', options: [{ label: 'OpenAI', value: 'openai' }, { label: 'Anthropic', value: 'anthropic' }, { label: 'Google', value: 'google' }, { label: 'OpenRouter', value: 'openrouter' }] },
14
+ { id: 'defaultModel', label: 'Default Model', value: config.defaultModel, type: 'string' },
15
+ { id: 'imageVisibility', label: 'Show Image', value: config.imageVisibility ? 'true' : 'false', type: 'toggle' },
16
+ { id: 'telemetry', label: 'Telemetry', value: config.telemetry ? 'true' : 'false', type: 'toggle' },
17
+ { id: 'updateChannel', label: 'Update Channel', value: config.updateChannel, type: 'select', options: [{ label: 'Stable', value: 'stable' }, { label: 'Beta', value: 'beta' }, { label: 'Nightly', value: 'nightly' }] },
18
+ ];
19
+ useInput((input, key) => {
20
+ if (editMode) {
21
+ if (key.escape) {
22
+ setEditMode(false);
23
+ return;
24
+ }
25
+ if (key.return) {
26
+ const item = settings[selIdx];
27
+ if (item) {
28
+ updateSettings({ [item.id]: item.type === 'toggle' ? editValue === 'true' : editValue });
29
+ setEditMode(false);
30
+ }
31
+ return;
32
+ }
33
+ if (key.upArrow) {
34
+ const item = settings[selIdx];
35
+ if (item?.options) {
36
+ const idx = item.options.findIndex((o) => o.value === editValue);
37
+ setEditValue(item.options[Math.max(0, idx - 1)].value);
38
+ }
39
+ return;
40
+ }
41
+ if (key.downArrow) {
42
+ const item = settings[selIdx];
43
+ if (item?.options) {
44
+ const idx = item.options.findIndex((o) => o.value === editValue);
45
+ setEditValue(item.options[Math.min(item.options.length - 1, idx + 1)].value);
46
+ }
47
+ return;
48
+ }
49
+ if (key.backspace || key.delete) {
50
+ setEditValue((p) => p.slice(0, -1));
51
+ return;
52
+ }
53
+ if (input && input.length === 1 && input >= ' ') {
54
+ setEditValue((p) => p + input);
55
+ return;
56
+ }
57
+ return;
58
+ }
59
+ if (key.escape) {
60
+ props.onClose();
61
+ return;
62
+ }
63
+ if (key.return) {
64
+ const item = settings[selIdx];
65
+ if (item) {
66
+ if (item.type === 'toggle') {
67
+ updateSettings({ [item.id]: item.value === 'true' ? false : true });
68
+ }
69
+ else {
70
+ setEditMode(true);
71
+ setEditValue(item.value);
72
+ }
73
+ }
74
+ return;
75
+ }
76
+ if (key.upArrow) {
77
+ setSelIdx((p) => Math.max(0, p - 1));
78
+ return;
79
+ }
80
+ if (key.downArrow) {
81
+ setSelIdx((p) => Math.min(settings.length - 1, p + 1));
82
+ return;
83
+ }
84
+ });
85
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 60, padding: 1, children: [_jsx(Text, { color: "#FF1493", children: "Settings" }), settings.map((item, i) => (_jsxs(Box, { children: [_jsx(Text, { color: i === selIdx ? '#FF1493' : '#CC99AA', children: i === selIdx ? '▶ ' : ' ' }), _jsxs(Text, { color: i === selIdx ? '#FF1493' : '#333333', children: [item.label, ":"] }), _jsxs(Text, { color: "#CC99AA", children: [" ", editMode && i === selIdx ? `${editValue} (editing)` : ` ${item.value}`] })] }, item.id)))] }), _jsx(Text, { color: "#CC99AA", children: "\u2191/\u2193 Enter Esc" })] }));
86
+ }
87
+ //# sourceMappingURL=SettingsPanel.js.map