@syntero/orca-cli 1.3.2 → 1.3.4

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 (95) hide show
  1. package/dist/assistant/anthropic.js +1 -1
  2. package/dist/assistant/anthropic.js.map +1 -1
  3. package/dist/assistant/helpers.js +1 -1
  4. package/dist/assistant/helpers.js.map +1 -1
  5. package/dist/assistant/openai.js +1 -1
  6. package/dist/assistant/openai.js.map +1 -1
  7. package/dist/assistant/prompts.d.ts.map +1 -1
  8. package/dist/assistant/prompts.js +63 -34
  9. package/dist/assistant/prompts.js.map +1 -1
  10. package/dist/assistant/types.d.ts +1 -1
  11. package/dist/assistant/types.d.ts.map +1 -1
  12. package/dist/components/ChatApp.d.ts.map +1 -1
  13. package/dist/components/ChatApp.js +8 -6
  14. package/dist/components/ChatApp.js.map +1 -1
  15. package/dist/components/InputFooter.d.ts.map +1 -1
  16. package/dist/components/InputFooter.js +34 -695
  17. package/dist/components/InputFooter.js.map +1 -1
  18. package/dist/components/ResumeMenu.d.ts.map +1 -1
  19. package/dist/components/ResumeMenu.js +24 -3
  20. package/dist/components/ResumeMenu.js.map +1 -1
  21. package/dist/components/hooks/useCommandPalette.d.ts +13 -0
  22. package/dist/components/hooks/useCommandPalette.d.ts.map +1 -0
  23. package/dist/components/hooks/useCommandPalette.js +38 -0
  24. package/dist/components/hooks/useCommandPalette.js.map +1 -0
  25. package/dist/components/hooks/useInputKeyHandler.d.ts +14 -0
  26. package/dist/components/hooks/useInputKeyHandler.d.ts.map +1 -0
  27. package/dist/components/hooks/useInputKeyHandler.js +584 -0
  28. package/dist/components/hooks/useInputKeyHandler.js.map +1 -0
  29. package/dist/components/hooks/useInputLines.d.ts +18 -0
  30. package/dist/components/hooks/useInputLines.d.ts.map +1 -0
  31. package/dist/components/hooks/useInputLines.js +46 -0
  32. package/dist/components/hooks/useInputLines.js.map +1 -0
  33. package/dist/components/hooks/useMenus.d.ts +60 -0
  34. package/dist/components/hooks/useMenus.d.ts.map +1 -0
  35. package/dist/components/hooks/useMenus.js +266 -0
  36. package/dist/components/hooks/useMenus.js.map +1 -0
  37. package/dist/components/hooks/usePasteBlocks.d.ts +14 -0
  38. package/dist/components/hooks/usePasteBlocks.d.ts.map +1 -0
  39. package/dist/components/hooks/usePasteBlocks.js +32 -0
  40. package/dist/components/hooks/usePasteBlocks.js.map +1 -0
  41. package/dist/models.js +4 -4
  42. package/dist/settings.js +1 -1
  43. package/dist/tools/auth-tools.d.ts +26 -0
  44. package/dist/tools/auth-tools.d.ts.map +1 -0
  45. package/dist/tools/auth-tools.js +53 -0
  46. package/dist/tools/auth-tools.js.map +1 -0
  47. package/dist/tools/command.d.ts +28 -0
  48. package/dist/tools/command.d.ts.map +1 -0
  49. package/dist/tools/command.js +76 -0
  50. package/dist/tools/command.js.map +1 -0
  51. package/dist/tools/database.d.ts +19 -0
  52. package/dist/tools/database.d.ts.map +1 -0
  53. package/dist/tools/database.js +90 -0
  54. package/dist/tools/database.js.map +1 -0
  55. package/dist/tools/deployment.d.ts +195 -0
  56. package/dist/tools/deployment.d.ts.map +1 -0
  57. package/dist/tools/deployment.js +324 -0
  58. package/dist/tools/deployment.js.map +1 -0
  59. package/dist/tools/docker.d.ts +51 -0
  60. package/dist/tools/docker.d.ts.map +1 -0
  61. package/dist/tools/docker.js +68 -0
  62. package/dist/tools/docker.js.map +1 -0
  63. package/dist/tools/env.d.ts +18 -0
  64. package/dist/tools/env.d.ts.map +1 -0
  65. package/dist/tools/env.js +52 -0
  66. package/dist/tools/env.js.map +1 -0
  67. package/dist/tools/filesystem.d.ts +77 -0
  68. package/dist/tools/filesystem.d.ts.map +1 -0
  69. package/dist/tools/filesystem.js +138 -0
  70. package/dist/tools/filesystem.js.map +1 -0
  71. package/dist/tools/handler.d.ts +5 -0
  72. package/dist/tools/handler.d.ts.map +1 -0
  73. package/dist/tools/handler.js +62 -0
  74. package/dist/tools/handler.js.map +1 -0
  75. package/dist/tools/index.d.ts +614 -0
  76. package/dist/tools/index.d.ts.map +1 -0
  77. package/dist/tools/index.js +40 -0
  78. package/dist/tools/index.js.map +1 -0
  79. package/dist/tools/inference.d.ts +127 -0
  80. package/dist/tools/inference.d.ts.map +1 -0
  81. package/dist/tools/inference.js +318 -0
  82. package/dist/tools/inference.js.map +1 -0
  83. package/dist/tools/shared.d.ts +21 -0
  84. package/dist/tools/shared.d.ts.map +1 -0
  85. package/dist/tools/shared.js +75 -0
  86. package/dist/tools/shared.js.map +1 -0
  87. package/dist/tools/types.d.ts +2 -0
  88. package/dist/tools/types.d.ts.map +1 -0
  89. package/dist/tools/types.js +3 -0
  90. package/dist/tools/types.js.map +1 -0
  91. package/package.json +4 -4
  92. package/dist/tools.d.ts +0 -908
  93. package/dist/tools.d.ts.map +0 -1
  94. package/dist/tools.js +0 -774
  95. package/dist/tools.js.map +0 -1
@@ -0,0 +1,46 @@
1
+ import { useState, useCallback } from 'react';
2
+ // ---------------------------------------------------------------------------
3
+ // Hook
4
+ // ---------------------------------------------------------------------------
5
+ export function useInputLines(onSubmit, pasteBlocks) {
6
+ const { expandLines, clearPasteBlocks } = pasteBlocks;
7
+ // State for multi-line input - combined into single object for atomic updates
8
+ const [inputState, setInputState] = useState({
9
+ lines: [''],
10
+ currentLine: 0,
11
+ cursorPos: 0,
12
+ });
13
+ // State for command history navigation
14
+ // historyIndex: -1 means not navigating, 0 = most recent, length-1 = oldest
15
+ const [historyIndex, setHistoryIndex] = useState(-1);
16
+ // savedInput: saves the current input when user starts navigating history
17
+ const [savedInput, setSavedInput] = useState('');
18
+ // Helper to update input state atomically
19
+ const updateInputState = (updates) => {
20
+ setInputState(prev => ({ ...prev, ...updates }));
21
+ };
22
+ const handleSubmit = useCallback(() => {
23
+ const result = expandLines(inputState.lines).join('\n').trim();
24
+ if (!result)
25
+ return;
26
+ // Reset history navigation state
27
+ setHistoryIndex(-1);
28
+ setSavedInput('');
29
+ // Clear input and paste blocks
30
+ setInputState({ lines: [''], currentLine: 0, cursorPos: 0 });
31
+ clearPasteBlocks();
32
+ // Call the onSubmit callback (parent handles queuing if streaming)
33
+ onSubmit(result);
34
+ }, [inputState.lines, expandLines, clearPasteBlocks, onSubmit]);
35
+ return {
36
+ inputState,
37
+ setInputState,
38
+ updateInputState,
39
+ historyIndex,
40
+ setHistoryIndex,
41
+ savedInput,
42
+ setSavedInput,
43
+ handleSubmit,
44
+ };
45
+ }
46
+ //# sourceMappingURL=useInputLines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInputLines.js","sourceRoot":"","sources":["../../../src/components/hooks/useInputLines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAwB9C,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,MAAM,UAAU,aAAa,CAC3B,QAAiC,EACjC,WAAiC;IAEjC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,WAAW,CAAC;IAEtD,8EAA8E;IAC9E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAa;QACvD,KAAK,EAAE,CAAC,EAAE,CAAC;QACX,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;KACb,CAAC,CAAC;IAEH,uCAAuC;IACvC,4EAA4E;IAC5E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,0EAA0E;IAC1E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjD,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,CAAC,OAA4B,EAAE,EAAE;QACxD,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,iCAAiC;QACjC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,+BAA+B;QAC/B,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7D,gBAAgB,EAAE,CAAC;QACnB,mEAAmE;QACnE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhE,OAAO;QACL,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,YAAY;QACZ,eAAe;QACf,UAAU;QACV,aAAa;QACb,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { type ConversationMeta } from '../../conversations/index.js';
2
+ import { Settings } from '../../settings.js';
3
+ import type { SyncMenuResult } from '../SyncMenu.js';
4
+ import type { UploadMenuResult } from '../UploadMenu.js';
5
+ import type { InputState } from './useInputLines.js';
6
+ export interface UseMenusParams {
7
+ settings: Settings | undefined;
8
+ onSubmit: (value: string) => void;
9
+ onResumeConversation?: (conversationId: string) => void;
10
+ onSettingsChange?: (settings: Settings) => void;
11
+ updateInputState: (updates: Partial<InputState>) => void;
12
+ }
13
+ export interface UseMenusReturn {
14
+ confirmationMessage: string | null;
15
+ setConfirmationMessage: React.Dispatch<React.SetStateAction<string | null>>;
16
+ currentSettings: Settings | undefined;
17
+ setCurrentSettings: React.Dispatch<React.SetStateAction<Settings | undefined>>;
18
+ showModelMenu: boolean;
19
+ setShowModelMenu: React.Dispatch<React.SetStateAction<boolean>>;
20
+ closeModelMenu: () => void;
21
+ handleModelSelect: (provider: string, modelId: string) => void;
22
+ handleModelCancel: () => void;
23
+ showStreamingMenu: boolean;
24
+ setShowStreamingMenu: React.Dispatch<React.SetStateAction<boolean>>;
25
+ closeStreamingMenu: () => void;
26
+ handleStreamingSelect: (streaming: boolean) => void;
27
+ handleStreamingCancel: () => void;
28
+ showConfigWizard: boolean;
29
+ setShowConfigWizard: React.Dispatch<React.SetStateAction<boolean>>;
30
+ closeConfigWizard: () => void;
31
+ handleConfigComplete: (newSettings: Settings) => void;
32
+ handleConfigCancel: () => void;
33
+ showTokenInput: boolean;
34
+ setShowTokenInput: React.Dispatch<React.SetStateAction<boolean>>;
35
+ closeTokenInput: () => void;
36
+ handleTokenSubmit: (token: string) => void;
37
+ handleTokenCancel: () => void;
38
+ showSyncMenu: boolean;
39
+ setShowSyncMenu: React.Dispatch<React.SetStateAction<boolean>>;
40
+ closeSyncMenu: () => void;
41
+ handleSyncSelect: (result: SyncMenuResult) => Promise<void>;
42
+ handleSyncCancel: () => void;
43
+ showUploadMenu: boolean;
44
+ setShowUploadMenu: React.Dispatch<React.SetStateAction<boolean>>;
45
+ closeUploadMenu: () => void;
46
+ handleUploadSelect: (result: UploadMenuResult) => void;
47
+ handleUploadCancel: () => void;
48
+ showResumeMenu: boolean;
49
+ setShowResumeMenu: React.Dispatch<React.SetStateAction<boolean>>;
50
+ closeResumeMenu: () => void;
51
+ handleResumeSelect: (conversationId: string) => void;
52
+ handleResumeCancel: () => void;
53
+ handleResumeDelete: (conversationId: string) => void;
54
+ resumeConversations: ConversationMeta[];
55
+ setResumeConversations: React.Dispatch<React.SetStateAction<ConversationMeta[]>>;
56
+ /** True when any sub-menu is open (used to suppress key handling) */
57
+ isAnyMenuOpen: boolean;
58
+ }
59
+ export declare function useMenus({ settings, onSubmit, onResumeConversation, onSettingsChange, updateInputState, }: UseMenusParams): UseMenusReturn;
60
+ //# sourceMappingURL=useMenus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenus.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useMenus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ import { useState, useCallback, useEffect } from 'react';
2
+ import { listConversations, deleteConversation } from '../../conversations/index.js';
3
+ import { Settings, Provider, saveSettings, debugLog as settingsDebugLog } from '../../settings.js';
4
+ import { isAuthenticated, setSelectedCloudProvider } from '../../auth.js';
5
+ // ---------------------------------------------------------------------------
6
+ // Hook
7
+ // ---------------------------------------------------------------------------
8
+ export function useMenus({ settings, onSubmit, onResumeConversation, onSettingsChange, updateInputState, }) {
9
+ // ---- Confirmation message ----
10
+ const [confirmationMessage, setConfirmationMessage] = useState(null);
11
+ useEffect(() => {
12
+ if (confirmationMessage) {
13
+ const timer = setTimeout(() => {
14
+ setConfirmationMessage(null);
15
+ }, 2000);
16
+ return () => clearTimeout(timer);
17
+ }
18
+ }, [confirmationMessage]);
19
+ // ---- Settings ----
20
+ const [currentSettings, setCurrentSettings] = useState(settings);
21
+ useEffect(() => {
22
+ if (settings) {
23
+ setCurrentSettings(settings);
24
+ }
25
+ }, [settings]);
26
+ // ---- Model menu ----
27
+ const [showModelMenu, setShowModelMenu] = useState(false);
28
+ const closeModelMenu = useCallback(() => {
29
+ setShowModelMenu(false);
30
+ updateInputState({ lines: [''], cursorPos: 0 });
31
+ }, [updateInputState]);
32
+ const handleModelSelect = useCallback((provider, modelId) => {
33
+ if (!currentSettings) {
34
+ settingsDebugLog('[handleModelSelect] No currentSettings, aborting');
35
+ closeModelMenu();
36
+ return;
37
+ }
38
+ settingsDebugLog(`[handleModelSelect] Changing to provider=${provider}, model=${modelId}`);
39
+ settingsDebugLog(`[handleModelSelect] Before: provider=${currentSettings.provider}, isAuthenticated=${isAuthenticated()}`);
40
+ const updatedSettings = Settings.fromDict(currentSettings.toDict());
41
+ updatedSettings.provider = provider;
42
+ if (provider === Provider.ANTHROPIC || provider === 'anthropic') {
43
+ updatedSettings.anthropic.model = modelId;
44
+ }
45
+ else if (provider === Provider.OPENAI || provider === 'openai') {
46
+ updatedSettings.openai.model = modelId;
47
+ }
48
+ else if (provider === Provider.AZURE || provider === 'azure') {
49
+ updatedSettings.azure.deployment = modelId;
50
+ }
51
+ settingsDebugLog(`[handleModelSelect] Saving settings: provider=${updatedSettings.provider}`);
52
+ saveSettings(updatedSettings);
53
+ if (isAuthenticated()) {
54
+ settingsDebugLog(`[handleModelSelect] Cloud authenticated, calling setSelectedCloudProvider(${provider})`);
55
+ const cloudProviderSet = setSelectedCloudProvider(provider);
56
+ if (!cloudProviderSet) {
57
+ settingsDebugLog(`[handleModelSelect] WARNING: setSelectedCloudProvider returned false - provider ${provider} may not be available in cloud config`);
58
+ }
59
+ else {
60
+ settingsDebugLog(`[handleModelSelect] Cloud provider selection saved successfully`);
61
+ }
62
+ }
63
+ setCurrentSettings(updatedSettings);
64
+ const providerName = provider.charAt(0).toUpperCase() + provider.slice(1);
65
+ setConfirmationMessage(`Provider changed to ${providerName}, model: ${modelId}`);
66
+ closeModelMenu();
67
+ settingsDebugLog(`[handleModelSelect] Triggering reconnect via __CONFIG_SAVED__`);
68
+ setTimeout(() => {
69
+ onSubmit('__CONFIG_SAVED__');
70
+ }, 100);
71
+ }, [currentSettings, closeModelMenu, onSubmit]);
72
+ const handleModelCancel = useCallback(() => {
73
+ setConfirmationMessage('Model selection cancelled');
74
+ closeModelMenu();
75
+ }, [closeModelMenu]);
76
+ // ---- Streaming menu ----
77
+ const [showStreamingMenu, setShowStreamingMenu] = useState(false);
78
+ const closeStreamingMenu = useCallback(() => {
79
+ setShowStreamingMenu(false);
80
+ updateInputState({ lines: [''], cursorPos: 0 });
81
+ }, [updateInputState]);
82
+ const handleStreamingSelect = useCallback((streaming) => {
83
+ if (!currentSettings) {
84
+ closeStreamingMenu();
85
+ return;
86
+ }
87
+ const updatedSettings = Settings.fromDict({ ...currentSettings.toDict(), streaming });
88
+ saveSettings(updatedSettings);
89
+ setCurrentSettings(updatedSettings);
90
+ onSettingsChange?.(updatedSettings);
91
+ const statusText = streaming ? 'enabled' : 'disabled';
92
+ setConfirmationMessage(`Response streaming ${statusText}`);
93
+ closeStreamingMenu();
94
+ }, [currentSettings, closeStreamingMenu, onSettingsChange]);
95
+ const handleStreamingCancel = useCallback(() => {
96
+ setConfirmationMessage('Streaming selection cancelled');
97
+ closeStreamingMenu();
98
+ }, [closeStreamingMenu]);
99
+ // ---- Config wizard ----
100
+ const [showConfigWizard, setShowConfigWizard] = useState(false);
101
+ const closeConfigWizard = useCallback(() => {
102
+ setShowConfigWizard(false);
103
+ updateInputState({ lines: [''], cursorPos: 0 });
104
+ }, [updateInputState]);
105
+ const handleConfigComplete = useCallback((newSettings) => {
106
+ saveSettings(newSettings);
107
+ setCurrentSettings(newSettings);
108
+ setConfirmationMessage(`Configuration saved for ${newSettings.provider}`);
109
+ closeConfigWizard();
110
+ setTimeout(() => {
111
+ onSubmit('__CONFIG_SAVED__');
112
+ }, 100);
113
+ }, [closeConfigWizard, onSubmit]);
114
+ const handleConfigCancel = useCallback(() => {
115
+ setConfirmationMessage('Configuration cancelled');
116
+ closeConfigWizard();
117
+ }, [closeConfigWizard]);
118
+ // ---- Token input ----
119
+ const [showTokenInput, setShowTokenInput] = useState(false);
120
+ const closeTokenInput = useCallback(() => {
121
+ setShowTokenInput(false);
122
+ updateInputState({ lines: [''], cursorPos: 0 });
123
+ }, [updateInputState]);
124
+ const handleTokenSubmit = useCallback((token) => {
125
+ closeTokenInput();
126
+ onSubmit(`__TOKEN__:${token}`);
127
+ }, [closeTokenInput, onSubmit]);
128
+ const handleTokenCancel = useCallback(() => {
129
+ setConfirmationMessage('Token entry cancelled');
130
+ closeTokenInput();
131
+ }, [closeTokenInput]);
132
+ // ---- Sync menu ----
133
+ const [showSyncMenu, setShowSyncMenu] = useState(false);
134
+ const closeSyncMenu = useCallback(() => {
135
+ setShowSyncMenu(false);
136
+ updateInputState({ lines: [''], cursorPos: 0 });
137
+ }, [updateInputState]);
138
+ const handleSyncSelect = useCallback(async (result) => {
139
+ closeSyncMenu();
140
+ switch (result.action) {
141
+ case 'sync':
142
+ onSubmit(`__SYNC__:${JSON.stringify({
143
+ scope: result.scope ?? 'all',
144
+ force: result.force ?? false,
145
+ pathFilter: result.pathFilter,
146
+ workspaceUser: result.workspaceUser,
147
+ workspaceFolders: result.workspaceFolders,
148
+ orgId: result.orgId,
149
+ })}`);
150
+ break;
151
+ case 'preview':
152
+ onSubmit('__SYNC__:preview');
153
+ break;
154
+ case 'status':
155
+ onSubmit('__SYNC__:status');
156
+ break;
157
+ case 'resume':
158
+ onSubmit('__SYNC__:resume');
159
+ break;
160
+ case 'cancel':
161
+ break;
162
+ }
163
+ }, [closeSyncMenu, onSubmit]);
164
+ const handleSyncCancel = useCallback(() => {
165
+ setConfirmationMessage('Sync cancelled');
166
+ closeSyncMenu();
167
+ }, [closeSyncMenu]);
168
+ // ---- Upload menu ----
169
+ const [showUploadMenu, setShowUploadMenu] = useState(false);
170
+ const closeUploadMenu = useCallback(() => {
171
+ setShowUploadMenu(false);
172
+ updateInputState({ lines: [''], cursorPos: 0 });
173
+ }, [updateInputState]);
174
+ const handleUploadSelect = useCallback((result) => {
175
+ closeUploadMenu();
176
+ if (result.action === 'upload') {
177
+ onSubmit(`__UPLOAD__:${JSON.stringify({
178
+ scope: result.scope,
179
+ pathFilter: result.pathFilter,
180
+ workspaceUser: result.workspaceUser,
181
+ workspaceFolders: result.workspaceFolders,
182
+ orgId: result.orgId,
183
+ })}`);
184
+ }
185
+ }, [closeUploadMenu, onSubmit]);
186
+ const handleUploadCancel = useCallback(() => {
187
+ setConfirmationMessage('Upload cancelled');
188
+ closeUploadMenu();
189
+ }, [closeUploadMenu]);
190
+ // ---- Resume menu ----
191
+ const [showResumeMenu, setShowResumeMenu] = useState(false);
192
+ const [resumeConversations, setResumeConversations] = useState([]);
193
+ const closeResumeMenu = useCallback(() => {
194
+ setShowResumeMenu(false);
195
+ updateInputState({ lines: [''], cursorPos: 0 });
196
+ }, [updateInputState]);
197
+ const handleResumeSelect = useCallback((conversationId) => {
198
+ closeResumeMenu();
199
+ onResumeConversation?.(conversationId);
200
+ }, [closeResumeMenu, onResumeConversation]);
201
+ const handleResumeCancel = useCallback(() => {
202
+ setConfirmationMessage('Resume cancelled');
203
+ closeResumeMenu();
204
+ }, [closeResumeMenu]);
205
+ const handleResumeDelete = useCallback((conversationId) => {
206
+ const deleted = deleteConversation(conversationId);
207
+ if (deleted) {
208
+ setResumeConversations(listConversations());
209
+ setConfirmationMessage('Conversation deleted');
210
+ }
211
+ }, []);
212
+ // ---- Aggregate helper ----
213
+ const isAnyMenuOpen = showModelMenu ||
214
+ showStreamingMenu ||
215
+ showConfigWizard ||
216
+ showTokenInput ||
217
+ showSyncMenu ||
218
+ showUploadMenu ||
219
+ showResumeMenu;
220
+ return {
221
+ confirmationMessage,
222
+ setConfirmationMessage,
223
+ currentSettings,
224
+ setCurrentSettings,
225
+ showModelMenu,
226
+ setShowModelMenu,
227
+ closeModelMenu,
228
+ handleModelSelect,
229
+ handleModelCancel,
230
+ showStreamingMenu,
231
+ setShowStreamingMenu,
232
+ closeStreamingMenu,
233
+ handleStreamingSelect,
234
+ handleStreamingCancel,
235
+ showConfigWizard,
236
+ setShowConfigWizard,
237
+ closeConfigWizard,
238
+ handleConfigComplete,
239
+ handleConfigCancel,
240
+ showTokenInput,
241
+ setShowTokenInput,
242
+ closeTokenInput,
243
+ handleTokenSubmit,
244
+ handleTokenCancel,
245
+ showSyncMenu,
246
+ setShowSyncMenu,
247
+ closeSyncMenu,
248
+ handleSyncSelect,
249
+ handleSyncCancel,
250
+ showUploadMenu,
251
+ setShowUploadMenu,
252
+ closeUploadMenu,
253
+ handleUploadSelect,
254
+ handleUploadCancel,
255
+ showResumeMenu,
256
+ setShowResumeMenu,
257
+ closeResumeMenu,
258
+ handleResumeSelect,
259
+ handleResumeCancel,
260
+ handleResumeDelete,
261
+ resumeConversations,
262
+ setResumeConversations,
263
+ isAnyMenuOpen,
264
+ };
265
+ }
266
+ //# sourceMappingURL=useMenus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenus.js","sourceRoot":"","sources":["../../../src/components/hooks/useMenus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const isPasteMarker: (line: string) => boolean;
2
+ export declare const parsePasteMarker: (line: string) => {
3
+ id: number;
4
+ lineCount: number;
5
+ } | null;
6
+ export declare const makePasteMarker: (id: number, lineCount: number) => string;
7
+ export interface UsePasteBlocksReturn {
8
+ pasteBlocksRef: React.MutableRefObject<Map<number, string[]>>;
9
+ pasteCounterRef: React.MutableRefObject<number>;
10
+ expandLines: (linesToExpand: string[]) => string[];
11
+ clearPasteBlocks: () => void;
12
+ }
13
+ export declare function usePasteBlocks(): UsePasteBlocksReturn;
14
+ //# sourceMappingURL=usePasteBlocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePasteBlocks.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/usePasteBlocks.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,YACc,CAAC;AAEzD,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM;;;QAG5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,IAAI,MAAM,EAAE,WAAW,MAAM,WACzB,CAAC;AAMrC,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,eAAe,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChD,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACnD,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,cAAc,IAAI,oBAAoB,CAsBrD"}
@@ -0,0 +1,32 @@
1
+ import { useRef, useCallback } from 'react';
2
+ // ---------------------------------------------------------------------------
3
+ // Paste marker utilities for collapsed large pastes
4
+ // ---------------------------------------------------------------------------
5
+ const PASTE_MARKER_RE = /^\x01PASTE:(\d+):(\d+)\x01$/;
6
+ export const isPasteMarker = (line) => line.charCodeAt(0) === 1 && PASTE_MARKER_RE.test(line);
7
+ export const parsePasteMarker = (line) => {
8
+ const m = line.match(PASTE_MARKER_RE);
9
+ return m ? { id: parseInt(m[1], 10), lineCount: parseInt(m[2], 10) } : null;
10
+ };
11
+ export const makePasteMarker = (id, lineCount) => `\x01PASTE:${id}:${lineCount}\x01`;
12
+ export function usePasteBlocks() {
13
+ const pasteBlocksRef = useRef(new Map());
14
+ const pasteCounterRef = useRef(0);
15
+ // Expand paste markers back into real lines
16
+ const expandLines = useCallback((linesToExpand) => {
17
+ return linesToExpand.flatMap(line => {
18
+ const marker = parsePasteMarker(line);
19
+ if (marker) {
20
+ return pasteBlocksRef.current.get(marker.id) || [];
21
+ }
22
+ return [line];
23
+ });
24
+ }, []);
25
+ // Clear all paste block state
26
+ const clearPasteBlocks = useCallback(() => {
27
+ pasteBlocksRef.current.clear();
28
+ pasteCounterRef.current = 0;
29
+ }, []);
30
+ return { pasteBlocksRef, pasteCounterRef, expandLines, clearPasteBlocks };
31
+ }
32
+ //# sourceMappingURL=usePasteBlocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePasteBlocks.js","sourceRoot":"","sources":["../../../src/components/hooks/usePasteBlocks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE5C,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5C,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,SAAiB,EAAE,EAAE,CAC/D,aAAa,EAAE,IAAI,SAAS,MAAM,CAAC;AAarC,MAAM,UAAU,cAAc;IAC5B,MAAM,cAAc,GAAG,MAAM,CAAwB,IAAI,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAElC,4CAA4C;IAC5C,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,aAAuB,EAAE,EAAE;QAC1D,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAClC,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,EAAE;QACxC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,eAAe,CAAC,OAAO,GAAG,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAC5E,CAAC"}
package/dist/models.js CHANGED
@@ -12,10 +12,10 @@ export class ModelRegistry {
12
12
  */
13
13
  static ALL_MODELS = {
14
14
  // Anthropic Models
15
- 'claude-opus-4-5': {
16
- id: 'claude-opus-4-5',
17
- name: 'claude-opus-4-5',
18
- displayName: 'Claude Opus 4.5',
15
+ 'claude-opus-4-6': {
16
+ id: 'claude-opus-4-6',
17
+ name: 'claude-opus-4-6',
18
+ displayName: 'Claude Opus 4.6',
19
19
  category: 'large',
20
20
  icon: 'brain',
21
21
  supportsThinking: true,
package/dist/settings.js CHANGED
@@ -52,7 +52,7 @@ export class Settings {
52
52
  provider = Provider.ANTHROPIC;
53
53
  anthropic = {
54
54
  api_key: '',
55
- model: ModelRegistry.getDefaultModel('anthropic'), // claude-opus-4-5
55
+ model: ModelRegistry.getDefaultModel('anthropic'), // claude-opus-4-6
56
56
  };
57
57
  openai = {
58
58
  api_key: '',
@@ -0,0 +1,26 @@
1
+ export declare const AUTH_TOOLS: ({
2
+ name: string;
3
+ description: string;
4
+ input_schema: {
5
+ type: string;
6
+ properties: {};
7
+ required?: undefined;
8
+ };
9
+ } | {
10
+ name: string;
11
+ description: string;
12
+ input_schema: {
13
+ type: string;
14
+ properties: {};
15
+ required: never[];
16
+ };
17
+ })[];
18
+ /**
19
+ * Handle docker_login_ghcr tool call.
20
+ */
21
+ export declare function handleDockerLoginGhcr(): Promise<string>;
22
+ /**
23
+ * Handle check_auth_status tool call.
24
+ */
25
+ export declare function handleCheckAuthStatus(): string;
26
+ //# sourceMappingURL=auth-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-tools.d.ts","sourceRoot":"","sources":["../../src/tools/auth-tools.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;IAqBtB,CAAC;AAEF;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAK7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAkB9C"}
@@ -0,0 +1,53 @@
1
+ import { dockerLoginGHCR, isAuthenticated, loadCredentials, getSelectedCloudProvider, } from '../auth.js';
2
+ export const AUTH_TOOLS = [
3
+ {
4
+ name: 'docker_login_ghcr',
5
+ description: `Authenticate with GitHub Container Registry (ghcr.io) to pull Orca images.
6
+ This tool fetches GHCR credentials from the server and runs docker login.
7
+ IMPORTANT: The user must be authenticated (/token) before this will work.
8
+ Use this before pulling Orca images during installation.`,
9
+ input_schema: {
10
+ type: 'object',
11
+ properties: {},
12
+ },
13
+ },
14
+ {
15
+ name: 'check_auth_status',
16
+ description: 'Check if the user is authenticated with the Orca cloud platform. Returns authentication status, user email, organization ID (org_id), and the cloud provider being used. IMPORTANT: When creating users with manage_users.py, always use the org_id from this tool to ensure correct organization assignment.',
17
+ input_schema: {
18
+ type: 'object',
19
+ properties: {},
20
+ required: [],
21
+ },
22
+ },
23
+ ];
24
+ /**
25
+ * Handle docker_login_ghcr tool call.
26
+ */
27
+ export async function handleDockerLoginGhcr() {
28
+ const success = await dockerLoginGHCR();
29
+ return success
30
+ ? 'Successfully authenticated with GHCR. You can now pull Orca images.'
31
+ : 'Failed to authenticate with GHCR. Make sure you are authenticated (/token) and the server has GHCR configured.';
32
+ }
33
+ /**
34
+ * Handle check_auth_status tool call.
35
+ */
36
+ export function handleCheckAuthStatus() {
37
+ const authenticated = isAuthenticated();
38
+ if (!authenticated) {
39
+ return JSON.stringify({
40
+ authenticated: false,
41
+ message: 'Not authenticated. Use /token command to authenticate.',
42
+ });
43
+ }
44
+ const creds = loadCredentials();
45
+ const provider = getSelectedCloudProvider();
46
+ return JSON.stringify({
47
+ authenticated: true,
48
+ email: creds?.user?.email || 'unknown',
49
+ org_id: creds?.org_id || 'unknown',
50
+ provider: provider || 'none',
51
+ });
52
+ }
53
+ //# sourceMappingURL=auth-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-tools.js","sourceRoot":"","sources":["../../src/tools/auth-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE;;;yDAGwC;QACrD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,+SAA+S;QAC5T,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;SACb;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAC;IACxC,OAAO,OAAO;QACZ,CAAC,CAAC,qEAAqE;QACvE,CAAC,CAAC,gHAAgH,CAAC;AACvH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,aAAa,GAAG,eAAe,EAAE,CAAC;IACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,wDAAwD;SAClE,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAE5C,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS;QACtC,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,SAAS;QAClC,QAAQ,EAAE,QAAQ,IAAI,MAAM;KAC7B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare const COMMAND_TOOLS: {
2
+ name: string;
3
+ description: string;
4
+ input_schema: {
5
+ type: string;
6
+ properties: {
7
+ command: {
8
+ type: string;
9
+ description: string;
10
+ };
11
+ gist: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ };
16
+ required: string[];
17
+ };
18
+ }[];
19
+ /**
20
+ * Execute a shell command with timeout.
21
+ *
22
+ * Note: Dangerous command detection is now handled at a higher level
23
+ * (assistant.ts/ChatApp.tsx) via the confirmation system. This function
24
+ * executes commands directly - callers are responsible for confirming
25
+ * dangerous commands before calling this.
26
+ */
27
+ export declare function runCommand(command: string, timeout?: number, signal?: AbortSignal): Promise<string>;
28
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/tools/command.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;GAoBzB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,SAAQ,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCxG"}