@syntero/orca-cli 1.2.2 → 1.2.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.
- package/dist/auth.d.ts +2 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +6 -3
- package/dist/auth.js.map +1 -1
- package/dist/components/ChatApp.d.ts.map +1 -1
- package/dist/components/ChatApp.js +50 -339
- package/dist/components/ChatApp.js.map +1 -1
- package/dist/components/InputFooter.d.ts +23 -1
- package/dist/components/InputFooter.d.ts.map +1 -1
- package/dist/components/InputFooter.js +11 -8
- package/dist/components/InputFooter.js.map +1 -1
- package/dist/components/MultiSelectList.d.ts +25 -0
- package/dist/components/MultiSelectList.d.ts.map +1 -0
- package/dist/components/MultiSelectList.js +70 -0
- package/dist/components/MultiSelectList.js.map +1 -0
- package/dist/components/SyncMenu.d.ts +30 -6
- package/dist/components/SyncMenu.d.ts.map +1 -1
- package/dist/components/SyncMenu.js +383 -43
- package/dist/components/SyncMenu.js.map +1 -1
- package/dist/hooks/useConversationPersistence.d.ts +15 -0
- package/dist/hooks/useConversationPersistence.d.ts.map +1 -0
- package/dist/hooks/useConversationPersistence.js +86 -0
- package/dist/hooks/useConversationPersistence.js.map +1 -0
- package/dist/hooks/useInputDispatch.d.ts +11 -0
- package/dist/hooks/useInputDispatch.d.ts.map +1 -0
- package/dist/hooks/useInputDispatch.js +112 -0
- package/dist/hooks/useInputDispatch.js.map +1 -0
- package/dist/hooks/useSlashCommands.d.ts +21 -0
- package/dist/hooks/useSlashCommands.d.ts.map +1 -0
- package/dist/hooks/useSlashCommands.js +146 -0
- package/dist/hooks/useSlashCommands.js.map +1 -0
- package/dist/hooks/useSyncFetchers.d.ts +8 -0
- package/dist/hooks/useSyncFetchers.d.ts.map +1 -0
- package/dist/hooks/useSyncFetchers.js +103 -0
- package/dist/hooks/useSyncFetchers.js.map +1 -0
- package/dist/sync/download.d.ts +3 -3
- package/dist/sync/download.d.ts.map +1 -1
- package/dist/sync/download.js +16 -11
- package/dist/sync/download.js.map +1 -1
- package/dist/sync/sync-engine.d.ts.map +1 -1
- package/dist/sync/sync-engine.js +42 -4
- package/dist/sync/sync-engine.js.map +1 -1
- package/dist/types/sync.d.ts +2 -0
- package/dist/types/sync.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { useState, useCallback, useRef } from 'react';
|
|
2
|
+
import { generateAITitle } from '../assistant/index.js';
|
|
3
|
+
import { debugLog } from '../settings.js';
|
|
4
|
+
import { createConversation, saveConversation, loadConversation, updateConversation, updateConversationTitle, } from '../conversations/index.js';
|
|
5
|
+
import { setConversationTitle, resetTerminalTitle } from '../terminalTitle.js';
|
|
6
|
+
export function useConversationPersistence(client, settings, getNextId) {
|
|
7
|
+
const [currentConversationId, setCurrentConversationId] = useState(null);
|
|
8
|
+
const currentConversationIdRef = useRef(null);
|
|
9
|
+
// Called after streaming completes with the final messages + history.
|
|
10
|
+
// Persists the conversation and returns the new conversation ID (if created), or null.
|
|
11
|
+
const autoSave = useCallback((messages, conversationHistory) => {
|
|
12
|
+
// Filter out system messages for storage (keep only user/assistant)
|
|
13
|
+
const savableMessages = messages.filter(m => m.role !== 'system');
|
|
14
|
+
if (savableMessages.length === 0)
|
|
15
|
+
return;
|
|
16
|
+
try {
|
|
17
|
+
// Use ref to get current conversation ID (avoids closure stale value issue)
|
|
18
|
+
const convId = currentConversationIdRef.current;
|
|
19
|
+
debugLog(`[auto-save] convId from ref: ${convId}, savableMessages: ${savableMessages.length}`);
|
|
20
|
+
if (convId) {
|
|
21
|
+
// Update existing conversation
|
|
22
|
+
debugLog(`[auto-save] Updating existing conversation: ${convId}`);
|
|
23
|
+
updateConversation(convId, savableMessages, conversationHistory);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Create new conversation
|
|
27
|
+
const newConversation = createConversation(savableMessages, conversationHistory);
|
|
28
|
+
debugLog(`[auto-save] Creating NEW conversation: ${newConversation.id}`);
|
|
29
|
+
saveConversation(newConversation);
|
|
30
|
+
// Set both ref and state immediately to prevent race condition
|
|
31
|
+
currentConversationIdRef.current = newConversation.id;
|
|
32
|
+
setCurrentConversationId(newConversation.id);
|
|
33
|
+
// Generate AI title asynchronously in background
|
|
34
|
+
// Don't block the user - do it after save completes
|
|
35
|
+
setTimeout(async () => {
|
|
36
|
+
try {
|
|
37
|
+
const aiTitle = await generateAITitle(client, settings, savableMessages);
|
|
38
|
+
if (aiTitle) {
|
|
39
|
+
updateConversationTitle(newConversation.id, aiTitle);
|
|
40
|
+
setConversationTitle(aiTitle); // Update terminal title
|
|
41
|
+
debugLog(`[auto-save] AI title generated: "${aiTitle}"`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (titleError) {
|
|
45
|
+
// Silently fail - AI title is non-critical
|
|
46
|
+
debugLog(`[auto-save] AI title generation failed: ${titleError}`);
|
|
47
|
+
}
|
|
48
|
+
}, 100);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (saveError) {
|
|
52
|
+
// Silently fail on save errors - don't interrupt user experience
|
|
53
|
+
debugLog(`[auto-save] Error saving conversation: ${saveError}`);
|
|
54
|
+
}
|
|
55
|
+
}, [client, settings]);
|
|
56
|
+
// Resume a conversation by ID; returns the data or null
|
|
57
|
+
const handleResume = useCallback((conversationId) => {
|
|
58
|
+
const conversation = loadConversation(conversationId);
|
|
59
|
+
if (!conversation)
|
|
60
|
+
return null;
|
|
61
|
+
// Reassign message IDs so Ink's Static component treats them as new
|
|
62
|
+
// (Static only renders items it hasn't seen before based on key)
|
|
63
|
+
const messagesWithNewIds = conversation.messages.map(msg => ({
|
|
64
|
+
...msg,
|
|
65
|
+
id: getNextId(),
|
|
66
|
+
}));
|
|
67
|
+
// Update internal tracking
|
|
68
|
+
currentConversationIdRef.current = conversation.id;
|
|
69
|
+
setCurrentConversationId(conversation.id);
|
|
70
|
+
// Update terminal title to reflect the resumed conversation
|
|
71
|
+
setConversationTitle(conversation.title);
|
|
72
|
+
return {
|
|
73
|
+
messages: messagesWithNewIds,
|
|
74
|
+
conversationHistory: conversation.conversationHistory,
|
|
75
|
+
title: conversation.title,
|
|
76
|
+
};
|
|
77
|
+
}, [getNextId]);
|
|
78
|
+
// Clear conversation tracking (called by /clear)
|
|
79
|
+
const clearConversation = useCallback(() => {
|
|
80
|
+
currentConversationIdRef.current = null;
|
|
81
|
+
setCurrentConversationId(null);
|
|
82
|
+
resetTerminalTitle();
|
|
83
|
+
}, []);
|
|
84
|
+
return { currentConversationId, autoSave, handleResume, clearConversation };
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=useConversationPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConversationPersistence.js","sourceRoot":"","sources":["../../src/hooks/useConversationPersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Settings } from '../settings.js';
|
|
2
|
+
export interface InputDispatchDeps {
|
|
3
|
+
settings: Settings;
|
|
4
|
+
reconnectClient: (s: Settings) => {
|
|
5
|
+
isCloud: boolean;
|
|
6
|
+
cloudProvider?: string;
|
|
7
|
+
};
|
|
8
|
+
addSystemMessage: (content: string) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function useInputDispatch(deps: InputDispatchDeps): (input: string) => Promise<boolean>;
|
|
11
|
+
//# sourceMappingURL=useInputDispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputDispatch.d.ts","sourceRoot":"","sources":["../../src/hooks/useInputDispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA0B,MAAM,gBAAgB,CAAC;AAOlE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CA6H7F"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { loadSettings, debugLog } from '../settings.js';
|
|
3
|
+
import { Colors, color } from '../utils.js';
|
|
4
|
+
import { setToken as authSetToken, loadCredentials, } from '../auth.js';
|
|
5
|
+
export function useInputDispatch(deps) {
|
|
6
|
+
return useCallback(async (input) => {
|
|
7
|
+
// Handle special token submission from InputFooter
|
|
8
|
+
if (input.startsWith('__TOKEN__:')) {
|
|
9
|
+
const token = input.slice('__TOKEN__:'.length);
|
|
10
|
+
const success = await authSetToken(token);
|
|
11
|
+
if (success) {
|
|
12
|
+
const newClient = deps.reconnectClient(deps.settings);
|
|
13
|
+
if (newClient.isCloud && newClient.cloudProvider) {
|
|
14
|
+
const creds = loadCredentials();
|
|
15
|
+
if (creds) {
|
|
16
|
+
deps.addSystemMessage(color(`Using cloud: ${creds.user.email} (${newClient.cloudProvider})`, Colors.green));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
// Handle sync menu actions
|
|
23
|
+
if (input.startsWith('__SYNC__:')) {
|
|
24
|
+
const payload = input.slice('__SYNC__:'.length);
|
|
25
|
+
const { runSync, resumeSync, showSyncStatus } = await import('../sync/index.js');
|
|
26
|
+
// Legacy string actions (backward compat)
|
|
27
|
+
if (payload === 'normal') {
|
|
28
|
+
await runSync({ force: false });
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (payload === 'force') {
|
|
32
|
+
await runSync({ force: true });
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
if (payload === 'preview') {
|
|
36
|
+
await runSync({ dryRun: true });
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
if (payload === 'status') {
|
|
40
|
+
await showSyncStatus();
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
if (payload === 'resume') {
|
|
44
|
+
await resumeSync({});
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
// JSON payload from expanded sync menu
|
|
48
|
+
if (payload.startsWith('{')) {
|
|
49
|
+
try {
|
|
50
|
+
const params = JSON.parse(payload);
|
|
51
|
+
if (params.scope === 'all') {
|
|
52
|
+
// Sync library then workspace
|
|
53
|
+
await runSync({ force: params.force, orgId: params.orgId });
|
|
54
|
+
// runWorkspaceSync() will be implemented in a follow-up task
|
|
55
|
+
}
|
|
56
|
+
else if (params.scope === 'library') {
|
|
57
|
+
await runSync({
|
|
58
|
+
force: params.force,
|
|
59
|
+
solutionFilter: params.solutionFilter,
|
|
60
|
+
orgId: params.orgId,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
else if (params.scope === 'workspace') {
|
|
64
|
+
// runWorkspaceSync() will be implemented in a follow-up task
|
|
65
|
+
// For now, show a message that workspace sync is not yet available
|
|
66
|
+
deps.addSystemMessage(color('Workspace sync is not yet implemented. Coming soon.', Colors.yellow));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
deps.addSystemMessage(color(`Sync error: ${e instanceof Error ? e.message : String(e)}`, Colors.red));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
// Handle config saved
|
|
76
|
+
if (input === '__CONFIG_SAVED__') {
|
|
77
|
+
debugLog(`[processMessage] Received __CONFIG_SAVED__, reloading settings`);
|
|
78
|
+
const reloadedSettings = loadSettings();
|
|
79
|
+
debugLog(`[processMessage] Reloaded settings: provider=${reloadedSettings.provider}, anthropic.model=${reloadedSettings.anthropic.model}, openai.model=${reloadedSettings.openai.model}`);
|
|
80
|
+
const newClient = deps.reconnectClient(reloadedSettings);
|
|
81
|
+
debugLog(`[processMessage] Client reconnected: isCloud=${newClient.isCloud}, cloudProvider=${newClient.cloudProvider}`);
|
|
82
|
+
if (newClient.isCloud && newClient.cloudProvider) {
|
|
83
|
+
const creds = loadCredentials();
|
|
84
|
+
// Get the actual model being used based on the cloud provider
|
|
85
|
+
let modelInUse;
|
|
86
|
+
if (newClient.cloudProvider === 'anthropic') {
|
|
87
|
+
modelInUse = reloadedSettings.anthropic.model;
|
|
88
|
+
}
|
|
89
|
+
else if (newClient.cloudProvider === 'openai') {
|
|
90
|
+
modelInUse = reloadedSettings.openai.model;
|
|
91
|
+
}
|
|
92
|
+
else if (newClient.cloudProvider === 'azure') {
|
|
93
|
+
modelInUse = reloadedSettings.azure.deployment;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
modelInUse = 'unknown';
|
|
97
|
+
}
|
|
98
|
+
debugLog(`[processMessage] Cloud mode: provider=${newClient.cloudProvider}, model=${modelInUse}`);
|
|
99
|
+
if (creds) {
|
|
100
|
+
deps.addSystemMessage(color(`Using cloud: ${creds.user.email} (${newClient.cloudProvider}: ${modelInUse})`, Colors.green));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
debugLog(`[processMessage] Local mode: provider=${reloadedSettings.provider}`);
|
|
105
|
+
deps.addSystemMessage(color(`Using local provider: ${reloadedSettings.provider}`, Colors.green));
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
return false;
|
|
110
|
+
}, [deps.settings, deps.reconnectClient, deps.addSystemMessage]);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=useInputDispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInputDispatch.js","sourceRoot":"","sources":["../../src/hooks/useInputDispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Settings } from '../settings.js';
|
|
2
|
+
import { AnthropicMessage } from '../assistant/index.js';
|
|
3
|
+
export interface CommandResult {
|
|
4
|
+
handled: boolean;
|
|
5
|
+
message?: string;
|
|
6
|
+
output?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SlashCommandDeps {
|
|
9
|
+
settings: Settings;
|
|
10
|
+
conversationHistory: AnthropicMessage[];
|
|
11
|
+
currentConversationId: string | null;
|
|
12
|
+
reconnectClient: (s: Settings) => {
|
|
13
|
+
isCloud: boolean;
|
|
14
|
+
cloudProvider?: string;
|
|
15
|
+
};
|
|
16
|
+
performCompaction: (instructions?: string) => Promise<boolean>;
|
|
17
|
+
addSystemMessage: (content: string) => void;
|
|
18
|
+
clearConversation: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function useSlashCommands(deps: SlashCommandDeps): (command: string) => Promise<CommandResult>;
|
|
21
|
+
//# sourceMappingURL=useSlashCommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlashCommands.d.ts","sourceRoot":"","sources":["../../src/hooks/useSlashCommands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAsBzD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;IACxC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,iBAAiB,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAoJpG"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import { Colors, color } from '../utils.js';
|
|
4
|
+
import { logout as authLogout, status as authStatus, loadCredentials, } from '../auth.js';
|
|
5
|
+
import { estimateConversationTokens, formatTokenCount, AUTO_COMPACT_THRESHOLD, calculateContextBreakdown, generateContextDisplay, } from '../tokens.js';
|
|
6
|
+
import { debugLog } from '../settings.js';
|
|
7
|
+
import { renameConversation } from '../conversations/index.js';
|
|
8
|
+
import { setConversationTitle } from '../terminalTitle.js';
|
|
9
|
+
// Get package version
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
const pkg = require('../../package.json');
|
|
12
|
+
export function useSlashCommands(deps) {
|
|
13
|
+
return useCallback(async (command) => {
|
|
14
|
+
const parts = command.trim().split(/\s+/);
|
|
15
|
+
const cmd = parts[0].toLowerCase();
|
|
16
|
+
const args = parts.slice(1).join(' ');
|
|
17
|
+
if (cmd === '/token') {
|
|
18
|
+
// Token is handled inline by InputFooter
|
|
19
|
+
return { handled: false };
|
|
20
|
+
}
|
|
21
|
+
if (cmd === '/logout') {
|
|
22
|
+
await authLogout();
|
|
23
|
+
const newClient = deps.reconnectClient(deps.settings);
|
|
24
|
+
return {
|
|
25
|
+
handled: true,
|
|
26
|
+
output: newClient.isCloud && newClient.cloudProvider
|
|
27
|
+
? color(`Using cloud: ${loadCredentials()?.user.email} (${newClient.cloudProvider})`, Colors.green)
|
|
28
|
+
: color(`Using local provider: ${deps.settings.provider}`, Colors.green),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (cmd === '/status') {
|
|
32
|
+
await authStatus();
|
|
33
|
+
return { handled: true };
|
|
34
|
+
}
|
|
35
|
+
if (cmd === '/config') {
|
|
36
|
+
// Config is handled inline by InputFooter
|
|
37
|
+
return { handled: false };
|
|
38
|
+
}
|
|
39
|
+
if (cmd === '/settings') {
|
|
40
|
+
return { handled: true, output: `\n${deps.settings.getMaskedDisplay()}\n` };
|
|
41
|
+
}
|
|
42
|
+
if (cmd === '/context') {
|
|
43
|
+
// Determine the current model based on provider (handles both cloud and local mode)
|
|
44
|
+
let currentModel;
|
|
45
|
+
const effectiveProvider = deps.settings.provider;
|
|
46
|
+
if (effectiveProvider === 'anthropic') {
|
|
47
|
+
currentModel = deps.settings.anthropic.model;
|
|
48
|
+
}
|
|
49
|
+
else if (effectiveProvider === 'openai') {
|
|
50
|
+
currentModel = deps.settings.openai.model;
|
|
51
|
+
}
|
|
52
|
+
else if (effectiveProvider === 'azure') {
|
|
53
|
+
currentModel = deps.settings.azure.deployment;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
currentModel = deps.settings.openai.model; // Fallback
|
|
57
|
+
}
|
|
58
|
+
debugLog(`[/context] effectiveProvider=${effectiveProvider}, currentModel=${currentModel}`);
|
|
59
|
+
const breakdown = calculateContextBreakdown(currentModel, deps.conversationHistory);
|
|
60
|
+
const display = generateContextDisplay(breakdown);
|
|
61
|
+
return { handled: true, output: `\n${display}\n` };
|
|
62
|
+
}
|
|
63
|
+
if (cmd === '/help') {
|
|
64
|
+
const tokenCount = estimateConversationTokens(deps.conversationHistory);
|
|
65
|
+
const streamingStatus = deps.settings.streaming !== false ? 'enabled' : 'disabled';
|
|
66
|
+
const helpText = `
|
|
67
|
+
Available commands:
|
|
68
|
+
/token Enter CLI token from web UI
|
|
69
|
+
/token <token> Set CLI token directly
|
|
70
|
+
/logout Log out from cloud platform
|
|
71
|
+
/status Show authentication status
|
|
72
|
+
/config Configure local API keys (instead of cloud)
|
|
73
|
+
/model Select AI model for current provider
|
|
74
|
+
/settings Show current settings
|
|
75
|
+
/streaming Configure response streaming (currently ${streamingStatus})
|
|
76
|
+
/sync Sync library from cloud (opens menu)
|
|
77
|
+
/resume Resume a previous conversation
|
|
78
|
+
/rename <title> Rename current conversation
|
|
79
|
+
/clear Clear conversation
|
|
80
|
+
/compact [msg] Compact conversation (summarize and reset)
|
|
81
|
+
Optional: add instructions for what to preserve
|
|
82
|
+
/context Show token usage breakdown
|
|
83
|
+
/version Show CLI version
|
|
84
|
+
/help Show this help
|
|
85
|
+
quit, exit Exit
|
|
86
|
+
|
|
87
|
+
Current conversation: ~${formatTokenCount(tokenCount)} tokens (auto-compact at ${formatTokenCount(AUTO_COMPACT_THRESHOLD)})
|
|
88
|
+
|
|
89
|
+
Tip: Ask the AI to "update Orca" and it will handle the deployment update process.
|
|
90
|
+
`;
|
|
91
|
+
return { handled: true, output: helpText };
|
|
92
|
+
}
|
|
93
|
+
if (cmd === '/version') {
|
|
94
|
+
return { handled: true, output: `orca v${pkg.version}` };
|
|
95
|
+
}
|
|
96
|
+
if (cmd === '/clear') {
|
|
97
|
+
deps.clearConversation();
|
|
98
|
+
return { handled: true, output: color('Conversation cleared.', Colors.dim) };
|
|
99
|
+
}
|
|
100
|
+
if (cmd === '/compact') {
|
|
101
|
+
if (deps.conversationHistory.length === 0) {
|
|
102
|
+
return { handled: true, output: color('Nothing to compact - conversation is empty.', Colors.dim) };
|
|
103
|
+
}
|
|
104
|
+
// Extract custom instructions if provided
|
|
105
|
+
const customInstructions = args.trim() || undefined;
|
|
106
|
+
const tokenCount = estimateConversationTokens(deps.conversationHistory);
|
|
107
|
+
deps.addSystemMessage(color(`Compacting conversation (~${formatTokenCount(tokenCount)} tokens)...`, Colors.dim));
|
|
108
|
+
// Perform compaction asynchronously
|
|
109
|
+
deps.performCompaction(customInstructions);
|
|
110
|
+
return { handled: true };
|
|
111
|
+
}
|
|
112
|
+
if (cmd === '/sync') {
|
|
113
|
+
// Sync is handled inline by InputFooter via SyncMenu
|
|
114
|
+
return { handled: false };
|
|
115
|
+
}
|
|
116
|
+
if (cmd === '/resume') {
|
|
117
|
+
// Resume is handled inline by InputFooter via ResumeMenu
|
|
118
|
+
return { handled: false };
|
|
119
|
+
}
|
|
120
|
+
if (cmd === '/rename') {
|
|
121
|
+
if (!deps.currentConversationId) {
|
|
122
|
+
return { handled: true, output: color('No active conversation to rename.', Colors.yellow) };
|
|
123
|
+
}
|
|
124
|
+
const newTitle = args.trim();
|
|
125
|
+
if (!newTitle) {
|
|
126
|
+
return { handled: true, output: color('Usage: /rename <new title>', Colors.yellow) };
|
|
127
|
+
}
|
|
128
|
+
const success = renameConversation(deps.currentConversationId, newTitle);
|
|
129
|
+
if (success) {
|
|
130
|
+
setConversationTitle(newTitle); // Update terminal title
|
|
131
|
+
return { handled: true, output: color(`Conversation renamed to: "${newTitle}"`, Colors.green) };
|
|
132
|
+
}
|
|
133
|
+
return { handled: true, output: color('Failed to rename conversation.', Colors.red) };
|
|
134
|
+
}
|
|
135
|
+
if (cmd === '/streaming') {
|
|
136
|
+
// Streaming menu is handled inline by InputFooter
|
|
137
|
+
return { handled: false };
|
|
138
|
+
}
|
|
139
|
+
if (cmd === '/model') {
|
|
140
|
+
// Model selection is handled inline by InputFooter
|
|
141
|
+
return { handled: false };
|
|
142
|
+
}
|
|
143
|
+
return { handled: false };
|
|
144
|
+
}, [deps.settings, deps.conversationHistory, deps.currentConversationId, deps.reconnectClient, deps.performCompaction, deps.addSystemMessage, deps.clearConversation]);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=useSlashCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSlashCommands.js","sourceRoot":"","sources":["../../src/hooks/useSlashCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function useSyncFetchers(): {
|
|
2
|
+
fetchSolutions: (orgId?: string) => Promise<any>;
|
|
3
|
+
fetchUsers: (orgId?: string) => Promise<any[]>;
|
|
4
|
+
fetchFolders: (userId: string, orgId?: string) => Promise<any>;
|
|
5
|
+
fetchOrganizations: () => Promise<any>;
|
|
6
|
+
userRole: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=useSyncFetchers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSyncFetchers.d.ts","sourceRoot":"","sources":["../../src/hooks/useSyncFetchers.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe;6BACqB,MAAM;yBAkBV,MAAM;2BAqDJ,MAAM,UAAU,MAAM;;;EA2BvE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { useCallback } from 'react';
|
|
2
|
+
import { cloudRequest, loadCredentials } from '../auth.js';
|
|
3
|
+
import { debugLog } from '../settings.js';
|
|
4
|
+
export function useSyncFetchers() {
|
|
5
|
+
const fetchSolutions = useCallback(async (orgId) => {
|
|
6
|
+
debugLog(`[fetchSolutions] Starting request to /api/v2/solution-library${orgId ? ` (org=${orgId})` : ''}`);
|
|
7
|
+
try {
|
|
8
|
+
const headers = orgId ? { 'X-Org-Id': orgId } : undefined;
|
|
9
|
+
const response = await cloudRequest('GET', '/api/v2/solution-library', undefined, headers);
|
|
10
|
+
debugLog(`[fetchSolutions] Response status=${response.status}, data keys=${Object.keys(response.data || {})}`);
|
|
11
|
+
debugLog(`[fetchSolutions] Response data: ${JSON.stringify(response.data).substring(0, 500)}`);
|
|
12
|
+
const solutions = response.data?.data?.solutions ?? [];
|
|
13
|
+
debugLog(`[fetchSolutions] Parsed ${solutions.length} solutions`);
|
|
14
|
+
const result = solutions.map((s) => ({ id: s.library_id, name: s.name || s.library_id }));
|
|
15
|
+
debugLog(`[fetchSolutions] Returning ${result.length} items`);
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
debugLog(`[fetchSolutions] ERROR: ${e instanceof Error ? e.message : String(e)}`);
|
|
20
|
+
throw e;
|
|
21
|
+
}
|
|
22
|
+
}, []);
|
|
23
|
+
const fetchUsers = useCallback(async (orgId) => {
|
|
24
|
+
debugLog(`[fetchUsers] Starting request to /api/v1/users/organization/users${orgId ? ` (org=${orgId})` : ''}`);
|
|
25
|
+
try {
|
|
26
|
+
const headers = orgId ? { 'X-Org-Id': orgId } : undefined;
|
|
27
|
+
const response = await cloudRequest('GET', '/api/v1/users/organization/users', undefined, headers);
|
|
28
|
+
debugLog(`[fetchUsers] Response status=${response.status}`);
|
|
29
|
+
const creds = loadCredentials();
|
|
30
|
+
const currentUserId = creds?.user?.id;
|
|
31
|
+
const currentUserEmail = creds?.user?.email;
|
|
32
|
+
// When querying a different org, don't prepend the current user
|
|
33
|
+
const isSameOrg = !orgId || orgId === creds?.org_id;
|
|
34
|
+
const orgUsers = response.data?.users ?? [];
|
|
35
|
+
const users = [
|
|
36
|
+
// Current user first (only when querying own org)
|
|
37
|
+
...(isSameOrg && currentUserId && currentUserEmail ? [{
|
|
38
|
+
id: currentUserId,
|
|
39
|
+
email: currentUserEmail,
|
|
40
|
+
isCurrentUser: true,
|
|
41
|
+
}] : []),
|
|
42
|
+
...orgUsers.map((u) => ({
|
|
43
|
+
id: u.id,
|
|
44
|
+
email: u.email,
|
|
45
|
+
isCurrentUser: false,
|
|
46
|
+
})),
|
|
47
|
+
];
|
|
48
|
+
debugLog(`[fetchUsers] Returning ${users.length} users`);
|
|
49
|
+
return users;
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
debugLog(`[fetchUsers] ERROR: ${e instanceof Error ? e.message : String(e)}`);
|
|
53
|
+
throw e;
|
|
54
|
+
}
|
|
55
|
+
}, []);
|
|
56
|
+
const fetchOrganizations = useCallback(async () => {
|
|
57
|
+
debugLog('[fetchOrganizations] Starting request to /api/v1/super-admin/organizations');
|
|
58
|
+
try {
|
|
59
|
+
const response = await cloudRequest('GET', '/api/v1/super-admin/organizations?per_page=100');
|
|
60
|
+
debugLog(`[fetchOrganizations] Response status=${response.status}`);
|
|
61
|
+
const orgs = response.data?.data?.organizations ?? [];
|
|
62
|
+
const creds = loadCredentials();
|
|
63
|
+
const result = orgs.map((o) => ({
|
|
64
|
+
id: o.id,
|
|
65
|
+
name: o.name,
|
|
66
|
+
isCurrent: o.id === creds?.org_id,
|
|
67
|
+
}));
|
|
68
|
+
debugLog(`[fetchOrganizations] Returning ${result.length} organizations`);
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
debugLog(`[fetchOrganizations] ERROR: ${e instanceof Error ? e.message : String(e)}`);
|
|
73
|
+
throw e;
|
|
74
|
+
}
|
|
75
|
+
}, []);
|
|
76
|
+
const fetchFolders = useCallback(async (userId, orgId) => {
|
|
77
|
+
debugLog(`[fetchFolders] Starting request for user=${userId}${orgId ? ` (org=${orgId})` : ''}`);
|
|
78
|
+
try {
|
|
79
|
+
const headers = orgId ? { 'X-Org-Id': orgId } : undefined;
|
|
80
|
+
const userPath = `/workspace/users/${userId}`;
|
|
81
|
+
const response = await cloudRequest('GET', `/api/v2/workspace/tree?path=${encodeURIComponent(userPath)}`, undefined, headers);
|
|
82
|
+
debugLog(`[fetchFolders] Response status=${response.status}`);
|
|
83
|
+
const items = response.data?.items ?? [];
|
|
84
|
+
// Only include directories
|
|
85
|
+
const folders = items
|
|
86
|
+
.filter((item) => item.type === 'directory')
|
|
87
|
+
.map((item) => ({
|
|
88
|
+
path: item.name,
|
|
89
|
+
solutionCount: item.items ?? 0,
|
|
90
|
+
}));
|
|
91
|
+
debugLog(`[fetchFolders] Returning ${folders.length} folders`);
|
|
92
|
+
return folders;
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
debugLog(`[fetchFolders] ERROR: ${e instanceof Error ? e.message : String(e)}`);
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
}, []);
|
|
99
|
+
// Get user role from credentials for super_admin features
|
|
100
|
+
const userRole = loadCredentials()?.user?.role;
|
|
101
|
+
return { fetchSolutions, fetchUsers, fetchFolders, fetchOrganizations, userRole };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=useSyncFetchers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSyncFetchers.js","sourceRoot":"","sources":["../../src/hooks/useSyncFetchers.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/download.d.ts
CHANGED
|
@@ -60,14 +60,14 @@ export declare function splitIntoBatches(files: FileToDownload[], maxSize?: numb
|
|
|
60
60
|
* @param expectedHash Expected SHA-256 hash
|
|
61
61
|
* @returns Downloaded file content
|
|
62
62
|
*/
|
|
63
|
-
export declare function downloadSingleFile(solution: string, filePath: string, expectedHash: string): Promise<Buffer>;
|
|
63
|
+
export declare function downloadSingleFile(solution: string, filePath: string, expectedHash: string, orgId?: string): Promise<Buffer>;
|
|
64
64
|
/**
|
|
65
65
|
* Download a batch of files as a tar.gz archive.
|
|
66
66
|
*
|
|
67
67
|
* @param files Files to download
|
|
68
68
|
* @returns Path to downloaded archive
|
|
69
69
|
*/
|
|
70
|
-
export declare function downloadBatch(files: FileToDownload[]): Promise<string>;
|
|
70
|
+
export declare function downloadBatch(files: FileToDownload[], orgId?: string): Promise<string>;
|
|
71
71
|
/**
|
|
72
72
|
* Extract a tar.gz archive and verify file hashes.
|
|
73
73
|
*
|
|
@@ -83,5 +83,5 @@ export declare function extractAndVerify(archivePath: string, expectedFiles: Fil
|
|
|
83
83
|
* @param onProgress Progress callback
|
|
84
84
|
* @returns Download result
|
|
85
85
|
*/
|
|
86
|
-
export declare function downloadWithRetry(files: FileToDownload[], onProgress?: (downloaded: number, total: number) => void): Promise<DownloadResult>;
|
|
86
|
+
export declare function downloadWithRetry(files: FileToDownload[], onProgress?: (downloaded: number, total: number) => void, orgId?: string): Promise<DownloadResult>;
|
|
87
87
|
//# sourceMappingURL=download.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/sync/download.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,MAAuB,GAC/B,cAAc,EAAE,EAAE,CAQpB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/sync/download.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoBH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,GAAE,MAAuB,GAC/B,cAAc,EAAE,EAAE,CAQpB;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAkDD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,cAAc,EAAE,GAC9B,OAAO,CAAC,cAAc,CAAC,CAmFzB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,cAAc,EAAE,EACvB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EACxD,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,CAAC,CAyEzB"}
|