@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,306 @@
1
+ import { PROVIDERS } from '../providers/base.js';
2
+ import { ChatSession } from '../chat/session.js';
3
+ import { loadConfig } from '../config/store.js';
4
+ export const COMMANDS = [
5
+ { cmd: '/connect', desc: 'Connect a provider' },
6
+ { cmd: '/models', desc: 'List available models' },
7
+ { cmd: '/model', desc: 'Change model: /model gpt-4o' },
8
+ { cmd: '/clear', desc: 'Clear conversation' },
9
+ { cmd: '/help', desc: 'Show help' },
10
+ { cmd: '/exit', desc: 'Quit Anya CLI' },
11
+ ];
12
+ export class TUIState {
13
+ constructor() {
14
+ this.provider = null;
15
+ this.providerName = '';
16
+ this.modelName = '';
17
+ this.session = new ChatSession();
18
+ this.messages = [];
19
+ this.input = '';
20
+ this.cursorPos = 0;
21
+ this.mode = 'Build';
22
+ this.history = [];
23
+ this.historyIdx = -1;
24
+ this.showMenu = false;
25
+ this.menuIdx = 0;
26
+ this.loading = false;
27
+ this.loadingFrame = 0;
28
+ this.loadingTimer = null;
29
+ this.configLoaded = false;
30
+ this.onRender = null;
31
+ this.onCleanup = null;
32
+ }
33
+ loadProvider() {
34
+ const config = loadConfig();
35
+ this.configLoaded = true;
36
+ const active = config.activeProvider;
37
+ if (!active || !config.providers[active]?.apiKey)
38
+ return false;
39
+ const { createProvider } = require('../commands/providerFactory');
40
+ try {
41
+ const p = createProvider(active);
42
+ this.provider = p;
43
+ this.providerName = PROVIDERS.find((pr) => pr.id === active)?.name || active;
44
+ this.modelName = p.getModel();
45
+ return true;
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ get filteredCommands() {
52
+ if (!this.input.startsWith('/'))
53
+ return COMMANDS;
54
+ const q = this.input.toLowerCase();
55
+ return COMMANDS.filter((c) => c.cmd.includes(q));
56
+ }
57
+ submit() {
58
+ const text = this.input.trim();
59
+ if (!text)
60
+ return;
61
+ this.history.push(text);
62
+ this.historyIdx = -1;
63
+ this.showMenu = false;
64
+ if (text === '/exit' || text === '/quit') {
65
+ this.cleanup();
66
+ return;
67
+ }
68
+ if (text === '/clear') {
69
+ this.messages = [];
70
+ this.session.clear();
71
+ this.input = '';
72
+ this.cursorPos = 0;
73
+ this.render();
74
+ return;
75
+ }
76
+ if (text === '/help') {
77
+ this.showMenu = true;
78
+ this.menuIdx = 0;
79
+ this.input = '';
80
+ this.cursorPos = 0;
81
+ this.render();
82
+ return;
83
+ }
84
+ if (text.startsWith('/connect')) {
85
+ const parts = text.split(' ');
86
+ const providerName = parts[1];
87
+ this.handleConnect(providerName);
88
+ return;
89
+ }
90
+ if (text === '/models' && this.provider) {
91
+ this.showModels();
92
+ return;
93
+ }
94
+ if (text.startsWith('/model ') && this.provider) {
95
+ const model = text.slice(7).trim();
96
+ if (model) {
97
+ this.provider.setModel(model);
98
+ this.modelName = model;
99
+ }
100
+ this.input = '';
101
+ this.cursorPos = 0;
102
+ this.render();
103
+ return;
104
+ }
105
+ if (!this.provider) {
106
+ this.messages.push({ role: 'assistant', content: 'Please connect a provider first:\n/connect openrouter' });
107
+ this.input = '';
108
+ this.cursorPos = 0;
109
+ this.render();
110
+ return;
111
+ }
112
+ this.messages.push({ role: 'user', content: text });
113
+ this.session.addMessage('user', text);
114
+ this.input = '';
115
+ this.cursorPos = 0;
116
+ this.loading = true;
117
+ this.loadingFrame = 0;
118
+ this.render();
119
+ this.loadingTimer = setInterval(() => { this.loadingFrame++; this.render(); }, 100);
120
+ const startTime = Date.now();
121
+ this.streamResponse(text, startTime);
122
+ }
123
+ async streamResponse(text, startTime) {
124
+ try {
125
+ const msgs = this.session.getMessages();
126
+ let full = '';
127
+ for await (const chunk of this.provider.streamMessage(msgs)) {
128
+ if (chunk.text) {
129
+ full += chunk.text;
130
+ const last = this.messages.length - 1;
131
+ if (this.messages[last]?.role === 'assistant') {
132
+ this.messages[last] = { role: 'assistant', content: full };
133
+ }
134
+ else {
135
+ this.messages.push({ role: 'assistant', content: full });
136
+ }
137
+ this.render();
138
+ }
139
+ if (chunk.done)
140
+ break;
141
+ }
142
+ const elapsed = Date.now() - startTime;
143
+ const last = this.messages.length - 1;
144
+ if (this.messages[last]?.role === 'assistant') {
145
+ this.messages[last] = { ...this.messages[last], timing: `Thought: ${elapsed}ms` };
146
+ }
147
+ this.session.addMessage('assistant', full);
148
+ }
149
+ catch (err) {
150
+ this.messages.push({ role: 'assistant', content: `Error: ${err.message}` });
151
+ }
152
+ if (this.loadingTimer)
153
+ clearInterval(this.loadingTimer);
154
+ this.loading = false;
155
+ this.render();
156
+ }
157
+ async handleConnect(providerName) {
158
+ const { CONNECT_PROVIDERS } = require('../commands/providerFactory');
159
+ if (providerName) {
160
+ const p = CONNECT_PROVIDERS.find((cp) => cp.id === providerName);
161
+ if (!p) {
162
+ this.messages.push({ role: 'assistant', content: `Unknown provider. Try: openai, anthropic, google, openrouter, opencode` });
163
+ this.input = '';
164
+ this.cursorPos = 0;
165
+ this.render();
166
+ return;
167
+ }
168
+ this.messages.push({ role: 'assistant', content: `Connecting to ${p.name}...\nEnter your API key (or set via: anya config set ${p.id} YOUR_KEY)` });
169
+ this.input = '';
170
+ this.cursorPos = 0;
171
+ this.render();
172
+ return;
173
+ }
174
+ const list = CONNECT_PROVIDERS.map((p) => ` ${p.id} — ${p.desc}`).join('\n');
175
+ this.messages.push({ role: 'assistant', content: `Available providers:\n${list}\n\nUsage: /connect <provider>` });
176
+ this.input = '';
177
+ this.cursorPos = 0;
178
+ this.render();
179
+ }
180
+ async showModels() {
181
+ if (!this.provider)
182
+ return;
183
+ try {
184
+ const models = await this.provider.fetchModels();
185
+ const list = models.slice(0, 20).map((m) => ` ${m.id}`).join('\n');
186
+ this.messages.push({ role: 'assistant', content: `Available models (showing 20):\n${list}\n\nUse: /model <name>` });
187
+ }
188
+ catch {
189
+ this.messages.push({ role: 'assistant', content: 'Could not fetch models. Check your API key.' });
190
+ }
191
+ this.input = '';
192
+ this.cursorPos = 0;
193
+ this.render();
194
+ }
195
+ onKey(key) {
196
+ if (this.loading)
197
+ return;
198
+ if (this.showMenu) {
199
+ if (key === '\x1b' || key === '\x1b[A') {
200
+ this.showMenu = false;
201
+ this.render();
202
+ return;
203
+ }
204
+ if (key === '\r') {
205
+ const items = this.filteredCommands;
206
+ if (items[this.menuIdx]) {
207
+ this.input = items[this.menuIdx].cmd + ' ';
208
+ this.cursorPos = this.input.length;
209
+ }
210
+ this.showMenu = false;
211
+ this.menuIdx = 0;
212
+ this.render();
213
+ return;
214
+ }
215
+ if (key === '\x1b[B') {
216
+ this.menuIdx = Math.min(this.menuIdx + 1, this.filteredCommands.length - 1);
217
+ this.render();
218
+ return;
219
+ }
220
+ if (key === '\x1b[A') {
221
+ this.menuIdx = Math.max(this.menuIdx - 1, 0);
222
+ this.render();
223
+ return;
224
+ }
225
+ }
226
+ switch (key) {
227
+ case '\x03':
228
+ this.cleanup();
229
+ break;
230
+ case '\r':
231
+ this.submit();
232
+ break;
233
+ case '\t':
234
+ this.mode = this.mode === 'Build' ? 'Plan' : 'Build';
235
+ this.render();
236
+ break;
237
+ case '\x10':
238
+ this.showMenu = !this.showMenu;
239
+ this.menuIdx = 0;
240
+ this.render();
241
+ break;
242
+ case '\x7f':
243
+ if (this.input.length > 0) {
244
+ this.input = this.input.slice(0, -1);
245
+ this.cursorPos = Math.min(this.cursorPos, this.input.length);
246
+ this.render();
247
+ }
248
+ break;
249
+ case '\x1b[A':
250
+ if (this.history.length > 0) {
251
+ this.historyIdx = Math.min(this.historyIdx + 1, this.history.length - 1);
252
+ this.input = this.history[this.history.length - 1 - this.historyIdx];
253
+ this.cursorPos = this.input.length;
254
+ this.render();
255
+ }
256
+ break;
257
+ case '\x1b[B':
258
+ if (this.historyIdx > 0) {
259
+ this.historyIdx--;
260
+ this.input = this.history[this.history.length - 1 - this.historyIdx];
261
+ this.cursorPos = this.input.length;
262
+ }
263
+ else {
264
+ this.historyIdx = -1;
265
+ this.input = '';
266
+ this.cursorPos = 0;
267
+ }
268
+ this.render();
269
+ break;
270
+ case '\x1b[D':
271
+ if (this.cursorPos > 0) {
272
+ this.cursorPos--;
273
+ this.render();
274
+ }
275
+ break;
276
+ case '\x1b[C':
277
+ if (this.cursorPos < this.input.length) {
278
+ this.cursorPos++;
279
+ this.render();
280
+ }
281
+ break;
282
+ default:
283
+ if (key.length === 1 && key >= ' ') {
284
+ this.input += key;
285
+ this.cursorPos++;
286
+ if (this.input === '/') {
287
+ this.showMenu = true;
288
+ this.menuIdx = 0;
289
+ }
290
+ this.render();
291
+ }
292
+ break;
293
+ }
294
+ }
295
+ render() {
296
+ if (this.onRender)
297
+ this.onRender();
298
+ }
299
+ cleanup() {
300
+ if (this.loadingTimer)
301
+ clearInterval(this.loadingTimer);
302
+ if (this.onCleanup)
303
+ this.onCleanup();
304
+ }
305
+ }
306
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare function App(): React.JSX.Element;
3
+ //# sourceMappingURL=App.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAiC/D,wBAAgB,GAAG,sBAmPlB"}
package/dist/ui/App.js ADDED
@@ -0,0 +1,207 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback, useEffect } from 'react';
3
+ import { Box, Text, useApp, useInput, useStdout } from 'ink';
4
+ import { readPackageJson } from '../utils/json.js';
5
+ import { TitleBar } from './components/TitleBar.js';
6
+ import { InputBox } from './components/InputBox.js';
7
+ import { MessageList } from './components/MessageList.js';
8
+ import { ImageRenderer } from './components/ImageRenderer.js';
9
+ import { StatusBar } from './components/StatusBar.js';
10
+ import { CommandPalette } from './components/CommandPalette.js';
11
+ import { ProviderForm } from './components/ProviderForm.js';
12
+ import { ModelSelector } from './components/ModelSelector.js';
13
+ import { SettingsPanel } from './components/SettingsPanel.js';
14
+ import { loadConfig } from '../config/store.js';
15
+ import { createProvider } from '../commands/providerFactory.js';
16
+ import { ChatSession } from '../chat/session.js';
17
+ import { ALL_PROVIDERS } from '../providers/base.js';
18
+ export function App() {
19
+ const { exit } = useApp();
20
+ const { stdout } = useStdout();
21
+ const [view, setView] = useState('chat');
22
+ const [showPalette, setShowPalette] = useState(false);
23
+ const [messages, setMessages] = useState([]);
24
+ const [loading, setLoading] = useState(false);
25
+ const [chatProvider, setChatProvider] = useState(null);
26
+ const [chatSession] = useState(() => new ChatSession());
27
+ const [showImage] = useState(() => loadConfig().imageVisibility);
28
+ const [cols, setCols] = useState(stdout.columns || 80);
29
+ const [histories, setHistories] = useState([]);
30
+ const [currentHistoryId, setCurrentHistoryId] = useState('');
31
+ useEffect(() => {
32
+ const onResize = () => setCols(stdout.columns || 80);
33
+ stdout.on('resize', onResize);
34
+ return () => { stdout.removeListener('resize', onResize); };
35
+ }, [stdout]);
36
+ const navigate = useCallback((route) => {
37
+ setShowPalette(false);
38
+ const cmd = route.split(' ')[0];
39
+ switch (cmd) {
40
+ case '/connect':
41
+ case '/providers':
42
+ case '/api':
43
+ setView('connect');
44
+ break;
45
+ case '/models':
46
+ setView('models');
47
+ break;
48
+ case '/settings':
49
+ case '/themes':
50
+ setView('settings');
51
+ break;
52
+ case '/help':
53
+ setView('help');
54
+ break;
55
+ case '/version':
56
+ setMessages((prev) => [...prev, { role: 'assistant', content: `Anya CLI v${readPackageJson().version}` }]);
57
+ break;
58
+ case '/clear':
59
+ setMessages([]);
60
+ chatSession.clear();
61
+ break;
62
+ case '/reset':
63
+ setMessages([]);
64
+ chatSession.clear();
65
+ setView('chat');
66
+ break;
67
+ case '/new-chat': {
68
+ const id = Date.now().toString(36);
69
+ setHistories((prev) => [...prev, { id, timestamp: Date.now(), label: messages[0]?.content?.slice(0, 50) || 'Empty', messages: chatSession.getMessages() }]);
70
+ setCurrentHistoryId(id);
71
+ setMessages([]);
72
+ chatSession.clear();
73
+ break;
74
+ }
75
+ case '/history':
76
+ if (histories.length === 0) {
77
+ setMessages((prev) => [...prev, { role: 'assistant', content: 'No previous conversations.' }]);
78
+ }
79
+ else {
80
+ const h = histories[histories.length - 1];
81
+ chatSession.clear();
82
+ for (const m of h.messages)
83
+ chatSession.addMessage(m.role, m.content);
84
+ setMessages(h.messages.map((m) => ({ role: m.role, content: m.content })));
85
+ setCurrentHistoryId(h.id);
86
+ }
87
+ break;
88
+ case '/export': {
89
+ const text = chatSession.getMessages().map((m) => `[${m.role}] ${m.content}`).join('\n\n');
90
+ setMessages((prev) => [...prev, { role: 'assistant', content: `Conversation export (${chatSession.length} messages):\n\n${text.slice(0, 2000)}` }]);
91
+ break;
92
+ }
93
+ case '/quit':
94
+ exit();
95
+ break;
96
+ default: setView('chat');
97
+ }
98
+ }, [exit, chatSession, histories]);
99
+ const handleConnect = useCallback((_providerId) => {
100
+ setView('chat');
101
+ const config = loadConfig();
102
+ try {
103
+ const p = createProvider(config.activeProvider);
104
+ setChatProvider(p);
105
+ setMessages([{ role: 'assistant', content: `Connected to ${p.info.name}! Ask me anything. ♥` }]);
106
+ }
107
+ catch {
108
+ setMessages([{ role: 'assistant', content: 'Provider not configured. Use /connect to set up.' }]);
109
+ }
110
+ }, []);
111
+ const handleSubmit = useCallback(async (text) => {
112
+ if (!text.trim())
113
+ return;
114
+ if (text.startsWith('/')) {
115
+ navigate(text);
116
+ return;
117
+ }
118
+ if (!chatProvider) {
119
+ const config = loadConfig();
120
+ if (config.providers[config.activeProvider]?.apiKey) {
121
+ try {
122
+ setChatProvider(createProvider(config.activeProvider));
123
+ }
124
+ catch { }
125
+ }
126
+ }
127
+ if (!chatProvider) {
128
+ setMessages((prev) => [...prev, { role: 'user', content: text }, { role: 'assistant', content: 'Please connect a provider first with /connect' }]);
129
+ return;
130
+ }
131
+ setMessages((prev) => [...prev, { role: 'user', content: text }]);
132
+ chatSession.addMessage('user', text);
133
+ setLoading(true);
134
+ try {
135
+ const msgs = chatSession.getMessages();
136
+ let full = '';
137
+ const startTime = Date.now();
138
+ for await (const chunk of chatProvider.streamMessage(msgs)) {
139
+ if (chunk.text) {
140
+ full += chunk.text;
141
+ setMessages((prev) => {
142
+ const last = prev[prev.length - 1];
143
+ if (last?.role === 'assistant') {
144
+ return [...prev.slice(0, -1), { role: 'assistant', content: full }];
145
+ }
146
+ return [...prev, { role: 'assistant', content: full }];
147
+ });
148
+ }
149
+ if (chunk.done)
150
+ break;
151
+ }
152
+ const elapsed = Date.now() - startTime;
153
+ setMessages((prev) => {
154
+ const last = prev[prev.length - 1];
155
+ if (last?.role === 'assistant') {
156
+ return [...prev.slice(0, -1), { ...last, timing: `Thought: ${elapsed}ms` }];
157
+ }
158
+ return prev;
159
+ });
160
+ chatSession.addMessage('assistant', full);
161
+ }
162
+ catch (err) {
163
+ setMessages((prev) => [...prev, { role: 'assistant', content: `Error: ${err.message}` }]);
164
+ }
165
+ setLoading(false);
166
+ }, [chatProvider, chatSession, navigate]);
167
+ const handleBack = useCallback(() => { setView('chat'); }, []);
168
+ useInput((_input, key) => {
169
+ if (key.ctrl && _input === 'p') {
170
+ setShowPalette((p) => !p);
171
+ return;
172
+ }
173
+ if (key.escape) {
174
+ if (showPalette) {
175
+ setShowPalette(false);
176
+ return;
177
+ }
178
+ if (view !== 'chat') {
179
+ setView('chat');
180
+ return;
181
+ }
182
+ }
183
+ });
184
+ const hasRoom = cols >= 100;
185
+ const leftWidth = hasRoom ? Math.floor(cols * 0.6) : cols - 2;
186
+ const rightWidth = hasRoom ? cols - leftWidth - 4 : 0;
187
+ if (showPalette) {
188
+ return (_jsxs(Box, { flexDirection: "column", minHeight: "100%", children: [_jsx(TitleBar, {}), _jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: _jsx(CommandPalette, { onSelect: navigate, onClose: () => setShowPalette(false) }) })] }));
189
+ }
190
+ if (view === 'connect') {
191
+ return (_jsxs(Box, { flexDirection: "column", minHeight: "100%", children: [_jsx(TitleBar, { titleRight: "anya@cli ~ connect" }), _jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: _jsx(ProviderForm, { onComplete: handleConnect, onBack: handleBack }) }), _jsx(StatusBar, { provider: chatProvider })] }));
192
+ }
193
+ if (view === 'models') {
194
+ return (_jsxs(Box, { flexDirection: "column", minHeight: "100%", children: [_jsx(TitleBar, { titleRight: "anya@cli ~ models" }), _jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: _jsx(ModelSelector, { onSelect: () => setView('chat'), onBack: handleBack }) }), _jsx(StatusBar, { provider: chatProvider })] }));
195
+ }
196
+ if (view === 'settings') {
197
+ return (_jsxs(Box, { flexDirection: "column", minHeight: "100%", children: [_jsx(TitleBar, { titleRight: "anya@cli ~ settings" }), _jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: _jsx(SettingsPanel, { onClose: handleBack }) }), _jsx(StatusBar, { provider: chatProvider })] }));
198
+ }
199
+ if (view === 'help') {
200
+ const config = loadConfig();
201
+ const activeProv = ALL_PROVIDERS.find((p) => p.id === config.activeProvider);
202
+ return (_jsxs(Box, { flexDirection: "column", minHeight: "100%", children: [_jsx(TitleBar, { titleRight: "anya@cli ~ help" }), _jsxs(Box, { flexDirection: "column", alignItems: "center", flexGrow: 1, paddingY: 1, children: [_jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 55, padding: 1, children: [_jsx(Text, { color: "#FF1493", children: "Keyboard Shortcuts" }), [['Enter', 'Send message'], ['S-Enter', 'New line'], ['↑/↓', 'History / Navigate'], ['Ctrl+P', 'Command palette'], ['Esc', 'Back / Close'], ['Tab', 'Next option'], ['Ctrl+C', 'Quit']].map(([k, a]) => (_jsxs(Box, { children: [_jsx(Text, { color: "#FF1493", children: k.padEnd(14) }), _jsx(Text, { color: "#333333", children: a })] }, k)))] }), _jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 55, padding: 1, marginTop: 1, children: [_jsx(Text, { color: "#FF1493", children: "Slash Commands" }), [['/connect', 'Add provider'], ['/models', 'Browse models'], ['/settings', 'Customize'], ['/status', 'Dashboard'], ['/new-chat', 'Start fresh'], ['/history', 'View history'], ['/export', 'Export chat'], ['/clear', 'Clear messages'], ['/help', 'This help'], ['/quit', 'Exit']].map(([cmd, desc]) => (_jsxs(Box, { children: [_jsx(Text, { color: "#FF1493", children: cmd.padEnd(14) }), _jsx(Text, { color: "#333333", children: desc })] }, cmd)))] }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "#CC99AA", children: ["Active: ", activeProv?.name || config.activeProvider, " (", config.activeModel, ")"] }) })] }), _jsx(StatusBar, { provider: chatProvider })] }));
203
+ }
204
+ const config = loadConfig();
205
+ return (_jsxs(Box, { flexDirection: "column", minHeight: "100%", children: [_jsx(TitleBar, {}), _jsxs(Box, { flexDirection: "row", flexGrow: 1, children: [_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, marginBottom: 1, children: _jsx(MessageList, { messages: messages, loading: loading }) }) }), hasRoom ? (_jsx(Box, { width: rightWidth, marginRight: 1, children: _jsx(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", alignItems: "center", justifyContent: "center", paddingX: 1, paddingY: 1, width: rightWidth - 2, children: _jsx(ImageRenderer, { width: rightWidth - 4, visible: showImage }) }) })) : null] }), _jsx(StatusBar, { provider: chatProvider }), _jsx(Box, { paddingX: 1, paddingY: 1, children: _jsx(InputBox, { onSubmit: handleSubmit, placeholder: "Ask anything...", mode: "Build", modelName: chatProvider?.getModel() || config.activeModel, onSlash: () => setShowPalette(true), disabled: loading }) })] }));
206
+ }
207
+ //# sourceMappingURL=App.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface Props {
3
+ onSelect: (cmd: string) => void;
4
+ onClose: () => void;
5
+ }
6
+ export declare function CommandPalette(props: Props): React.JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.d.ts","sourceRoot":"","sources":["../../../src/ui/components/CommandPalette.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAsBhD,UAAU,KAAK;IACb,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,qBAyC1C"}
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ import Fuse from 'fuse.js';
5
+ const COMMANDS = [
6
+ { id: '/connect', label: '/connect', description: 'Connect a provider', keywords: ['provider', 'api', 'key'] },
7
+ { id: '/models', label: '/models', description: 'Browse and switch models', keywords: ['model'] },
8
+ { id: '/providers', label: '/providers', description: 'List all providers', keywords: ['provider', 'list'] },
9
+ { id: '/api', label: '/api', description: 'Manage API keys', keywords: ['key', 'api'] },
10
+ { id: '/settings', label: '/settings', description: 'Open settings panel', keywords: ['config', 'preferences'] },
11
+ { id: '/help', label: '/help', description: 'Show help and shortcuts', keywords: ['help'] },
12
+ { id: '/themes', label: '/themes', description: 'Change color theme', keywords: ['theme', 'color'] },
13
+ { id: '/version', label: '/version', description: 'Show CLI version', keywords: ['version'] },
14
+ { id: '/status', label: '/status', description: 'Show status dashboard', keywords: ['status', 'usage'] },
15
+ { id: '/clear', label: '/clear', description: 'Clear conversation', keywords: ['clear'] },
16
+ { id: '/quit', label: '/quit', description: 'Exit Anya CLI', keywords: ['quit', 'exit'] },
17
+ ];
18
+ export function CommandPalette(props) {
19
+ const [query, setQuery] = useState('');
20
+ const [selIdx, setSelIdx] = useState(0);
21
+ const fuse = useMemo(() => new Fuse(COMMANDS, {
22
+ keys: ['label', 'description', 'keywords'],
23
+ threshold: 0.3, includeScore: true,
24
+ }), []);
25
+ const filtered = useMemo(() => {
26
+ if (!query.trim())
27
+ return COMMANDS;
28
+ return fuse.search(query).map((r) => r.item);
29
+ }, [query, fuse]);
30
+ useInput((input, key) => {
31
+ if (key.escape) {
32
+ props.onClose();
33
+ return;
34
+ }
35
+ if (key.return) {
36
+ if (filtered[selIdx])
37
+ props.onSelect(filtered[selIdx].id);
38
+ return;
39
+ }
40
+ if (key.upArrow) {
41
+ setSelIdx((p) => Math.max(0, p - 1));
42
+ return;
43
+ }
44
+ if (key.downArrow) {
45
+ setSelIdx((p) => Math.min(filtered.length - 1, p + 1));
46
+ return;
47
+ }
48
+ if (key.backspace || key.delete) {
49
+ setQuery((p) => p.slice(0, -1));
50
+ setSelIdx(0);
51
+ return;
52
+ }
53
+ if (key.tab)
54
+ return;
55
+ if (input && input.length === 1 && input >= ' ') {
56
+ setQuery((p) => p + input);
57
+ setSelIdx(0);
58
+ }
59
+ });
60
+ const items = filtered.slice(0, 10);
61
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", children: [_jsxs(Box, { borderStyle: "round", borderColor: "#FF69B4", flexDirection: "column", width: 50, padding: 1, children: [_jsx(Text, { color: "#FF1493", children: "Commands" }), _jsx(Box, { children: _jsx(Text, { color: "#CC99AA", children: query || 'Type to search...' }) }), items.map((cmd, i) => (_jsxs(Box, { children: [_jsx(Text, { color: i === selIdx ? '#FF1493' : '#CC99AA', children: i === selIdx ? '▶ ' : ' ' }), _jsx(Text, { color: i === selIdx ? '#FF1493' : '#333333', children: cmd.label }), _jsxs(Text, { color: "#CC99AA", children: [" ", cmd.description] })] }, cmd.id)))] }), _jsx(Text, { color: "#CC99AA", children: "\u2191/\u2193 Enter Esc" })] }));
62
+ }
63
+ //# sourceMappingURL=CommandPalette.js.map