@mohanscodex/spectra-code 0.4.5 → 0.4.7
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/package.json +1 -1
- package/dist/src/agents/definitions.d.ts +2 -2
- package/dist/src/agents/definitions.d.ts.map +1 -1
- package/dist/src/agents/definitions.js +18 -18
- package/dist/src/agents/definitions.js.map +1 -1
- package/dist/src/agents/registry.d.ts +1 -1
- package/dist/src/agents/registry.d.ts.map +1 -1
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/cli.js +117 -115
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/agent.d.ts +1 -1
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +14 -14
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/db.d.ts +1 -1
- package/dist/src/commands/db.d.ts.map +1 -1
- package/dist/src/commands/db.js +11 -11
- package/dist/src/commands/db.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +33 -30
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/mcp.d.ts +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +39 -39
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/plugin.d.ts +1 -1
- package/dist/src/commands/plugin.d.ts.map +1 -1
- package/dist/src/commands/plugin.js +13 -13
- package/dist/src/commands/plugin.js.map +1 -1
- package/dist/src/commands/session.d.ts +1 -1
- package/dist/src/commands/session.d.ts.map +1 -1
- package/dist/src/commands/session.js +12 -12
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/index.d.ts +18 -18
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +16 -16
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/acp/index.d.ts +1 -1
- package/dist/src/integrations/acp/index.js +1 -1
- package/dist/src/integrations/acp/server.d.ts.map +1 -1
- package/dist/src/integrations/acp/server.js +89 -79
- package/dist/src/integrations/acp/server.js.map +1 -1
- package/dist/src/integrations/custom-tools/index.d.ts +2 -2
- package/dist/src/integrations/custom-tools/index.js +1 -1
- package/dist/src/integrations/custom-tools/loader.d.ts +2 -2
- package/dist/src/integrations/custom-tools/loader.d.ts.map +1 -1
- package/dist/src/integrations/custom-tools/loader.js +19 -18
- package/dist/src/integrations/custom-tools/loader.js.map +1 -1
- package/dist/src/integrations/mcp/client.d.ts +5 -5
- package/dist/src/integrations/mcp/client.d.ts.map +1 -1
- package/dist/src/integrations/mcp/client.js +7 -7
- package/dist/src/integrations/mcp/client.js.map +1 -1
- package/dist/src/integrations/mcp/index.d.ts +2 -2
- package/dist/src/integrations/mcp/index.d.ts.map +1 -1
- package/dist/src/integrations/mcp/index.js +1 -1
- package/dist/src/integrations/mcp/index.js.map +1 -1
- package/dist/src/security/doom-loop.d.ts +1 -1
- package/dist/src/security/doom-loop.d.ts.map +1 -1
- package/dist/src/security/doom-loop.js +4 -4
- package/dist/src/security/doom-loop.js.map +1 -1
- package/dist/src/security/index.d.ts +10 -10
- package/dist/src/security/index.d.ts.map +1 -1
- package/dist/src/security/index.js +116 -69
- package/dist/src/security/index.js.map +1 -1
- package/dist/src/security/path-safety.d.ts +1 -1
- package/dist/src/security/path-safety.d.ts.map +1 -1
- package/dist/src/security/path-safety.js +19 -19
- package/dist/src/security/path-safety.js.map +1 -1
- package/dist/src/security/permissions.d.ts +1 -1
- package/dist/src/security/permissions.d.ts.map +1 -1
- package/dist/src/security/permissions.js +12 -10
- package/dist/src/security/permissions.js.map +1 -1
- package/dist/src/security/read-tracker.d.ts +2 -2
- package/dist/src/security/read-tracker.d.ts.map +1 -1
- package/dist/src/security/read-tracker.js +15 -13
- package/dist/src/security/read-tracker.js.map +1 -1
- package/dist/src/security/ssrf-guard.d.ts +1 -1
- package/dist/src/security/ssrf-guard.d.ts.map +1 -1
- package/dist/src/security/ssrf-guard.js +11 -11
- package/dist/src/security/ssrf-guard.js.map +1 -1
- package/dist/src/security/types.d.ts +4 -4
- package/dist/src/security/types.d.ts.map +1 -1
- package/dist/src/security/wildcard.d.ts.map +1 -1
- package/dist/src/security/wildcard.js +14 -16
- package/dist/src/security/wildcard.js.map +1 -1
- package/dist/src/services/auth-store.d.ts +3 -3
- package/dist/src/services/auth-store.d.ts.map +1 -1
- package/dist/src/services/auth-store.js +7 -7
- package/dist/src/services/auth-store.js.map +1 -1
- package/dist/src/services/config.d.ts +3 -3
- package/dist/src/services/config.d.ts.map +1 -1
- package/dist/src/services/config.js +17 -21
- package/dist/src/services/config.js.map +1 -1
- package/dist/src/services/context.d.ts.map +1 -1
- package/dist/src/services/context.js +5 -8
- package/dist/src/services/context.js.map +1 -1
- package/dist/src/services/custom-providers.d.ts +2 -2
- package/dist/src/services/custom-providers.d.ts.map +1 -1
- package/dist/src/services/custom-providers.js +108 -49
- package/dist/src/services/custom-providers.js.map +1 -1
- package/dist/src/services/session-store.d.ts +1 -1
- package/dist/src/services/session-store.d.ts.map +1 -1
- package/dist/src/services/session-store.js +32 -24
- package/dist/src/services/session-store.js.map +1 -1
- package/dist/src/services/snapshot-manager.d.ts.map +1 -1
- package/dist/src/services/snapshot-manager.js +14 -15
- package/dist/src/services/snapshot-manager.js.map +1 -1
- package/dist/src/tools/edit.d.ts +1 -1
- package/dist/src/tools/edit.js +18 -16
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -1
- package/dist/src/tools/glob.d.ts.map +1 -1
- package/dist/src/tools/glob.js +20 -16
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.d.ts.map +1 -1
- package/dist/src/tools/grep.js +18 -18
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/index.d.ts +4 -4
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +40 -32
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +2 -2
- package/dist/src/tools/mcp-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-tool.js +28 -25
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/read.d.ts +1 -1
- package/dist/src/tools/read.d.ts.map +1 -1
- package/dist/src/tools/read.js +15 -13
- package/dist/src/tools/read.js.map +1 -1
- package/dist/src/tools/shell.d.ts +1 -1
- package/dist/src/tools/shell.d.ts.map +1 -1
- package/dist/src/tools/shell.js +71 -62
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/task.d.ts +1 -1
- package/dist/src/tools/task.js +22 -22
- package/dist/src/tools/task.js.map +1 -1
- package/dist/src/tools/types.d.ts +3 -3
- package/dist/src/tools/types.d.ts.map +1 -1
- package/dist/src/tools/utils.d.ts +1 -1
- package/dist/src/tools/utils.js +2 -2
- package/dist/src/tools/utils.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +1 -1
- package/dist/src/tools/web-fetch.js +31 -31
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/write.d.ts +1 -1
- package/dist/src/tools/write.js +9 -9
- package/dist/src/tools/write.js.map +1 -1
- package/dist/src/tui/app-constants.d.ts.map +1 -1
- package/dist/src/tui/app-constants.js +11 -2
- package/dist/src/tui/app-constants.js.map +1 -1
- package/dist/src/tui/app.d.ts +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +293 -121
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/commands.d.ts +14 -14
- package/dist/src/tui/commands.d.ts.map +1 -1
- package/dist/src/tui/commands.js +242 -49
- package/dist/src/tui/commands.js.map +1 -1
- package/dist/src/tui/components/chat-area.d.ts +2 -2
- package/dist/src/tui/components/chat-area.d.ts.map +1 -1
- package/dist/src/tui/components/chat-area.js +5 -5
- package/dist/src/tui/components/chat-area.js.map +1 -1
- package/dist/src/tui/components/command-palette.d.ts.map +1 -1
- package/dist/src/tui/components/command-palette.js +7 -5
- package/dist/src/tui/components/command-palette.js.map +1 -1
- package/dist/src/tui/components/message.d.ts +2 -2
- package/dist/src/tui/components/message.d.ts.map +1 -1
- package/dist/src/tui/components/message.js +63 -50
- package/dist/src/tui/components/message.js.map +1 -1
- package/dist/src/tui/components/slash-autocomplete.d.ts +2 -2
- package/dist/src/tui/components/slash-autocomplete.d.ts.map +1 -1
- package/dist/src/tui/components/slash-autocomplete.js +6 -8
- package/dist/src/tui/components/slash-autocomplete.js.map +1 -1
- package/dist/src/tui/components/toast.d.ts +2 -2
- package/dist/src/tui/components/toast.d.ts.map +1 -1
- package/dist/src/tui/components/toast.js +10 -5
- package/dist/src/tui/components/toast.js.map +1 -1
- package/dist/src/tui/hooks/use-agent.d.ts +3 -3
- package/dist/src/tui/hooks/use-agent.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-agent.js +22 -29
- package/dist/src/tui/hooks/use-agent.js.map +1 -1
- package/dist/src/tui/hooks/use-app-keyboard.d.ts +3 -3
- package/dist/src/tui/hooks/use-app-keyboard.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-app-keyboard.js +28 -29
- package/dist/src/tui/hooks/use-app-keyboard.js.map +1 -1
- package/dist/src/tui/hooks/use-chat-submit.d.ts +6 -6
- package/dist/src/tui/hooks/use-chat-submit.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-chat-submit.js +115 -54
- package/dist/src/tui/hooks/use-chat-submit.js.map +1 -1
- package/dist/src/tui/hooks/use-permission-queue.d.ts +2 -2
- package/dist/src/tui/hooks/use-permission-queue.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-permission-queue.js +1 -1
- package/dist/src/tui/hooks/use-permission-queue.js.map +1 -1
- package/dist/src/tui/hooks/use-revert.d.ts +4 -4
- package/dist/src/tui/hooks/use-revert.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-revert.js +22 -13
- package/dist/src/tui/hooks/use-revert.js.map +1 -1
- package/dist/src/tui/index.d.ts.map +1 -1
- package/dist/src/tui/index.js +11 -11
- package/dist/src/tui/index.js.map +1 -1
- package/dist/src/tui/prompt-bar.d.ts +1 -1
- package/dist/src/tui/prompt-bar.d.ts.map +1 -1
- package/dist/src/tui/prompt-bar.js +14 -11
- package/dist/src/tui/prompt-bar.js.map +1 -1
- package/dist/src/tui/slash-commands.d.ts +2 -2
- package/dist/src/tui/slash-commands.d.ts.map +1 -1
- package/dist/src/tui/slash-commands.js +9 -9
- package/dist/src/tui/slash-commands.js.map +1 -1
- package/dist/src/tui/theme.d.ts +1 -1
- package/dist/src/tui/theme.d.ts.map +1 -1
- package/dist/src/tui/theme.js +46 -38
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/tips.d.ts.map +1 -1
- package/dist/src/tui/tips.js +14 -14
- package/dist/src/tui/tips.js.map +1 -1
- package/dist/src/tui/types.d.ts +5 -5
- package/dist/src/tui/types.d.ts.map +1 -1
- package/dist/src/tui/ui/about-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/about-dialog.js +5 -4
- package/dist/src/tui/ui/about-dialog.js.map +1 -1
- package/dist/src/tui/ui/agent-switcher.d.ts.map +1 -1
- package/dist/src/tui/ui/agent-switcher.js +16 -14
- package/dist/src/tui/ui/agent-switcher.js.map +1 -1
- package/dist/src/tui/ui/debug-dialog.d.ts +1 -1
- package/dist/src/tui/ui/debug-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/debug-dialog.js +26 -25
- package/dist/src/tui/ui/debug-dialog.js.map +1 -1
- package/dist/src/tui/ui/doctor-dialog.d.ts +2 -2
- package/dist/src/tui/ui/doctor-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/doctor-dialog.js +10 -8
- package/dist/src/tui/ui/doctor-dialog.js.map +1 -1
- package/dist/src/tui/ui/manage-providers-dialog.d.ts +1 -1
- package/dist/src/tui/ui/manage-providers-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/manage-providers-dialog.js +102 -86
- package/dist/src/tui/ui/manage-providers-dialog.js.map +1 -1
- package/dist/src/tui/ui/mcp-toggle-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/mcp-toggle-dialog.js +17 -14
- package/dist/src/tui/ui/mcp-toggle-dialog.js.map +1 -1
- package/dist/src/tui/ui/message-controls.d.ts +1 -1
- package/dist/src/tui/ui/message-controls.d.ts.map +1 -1
- package/dist/src/tui/ui/message-controls.js +40 -28
- package/dist/src/tui/ui/message-controls.js.map +1 -1
- package/dist/src/tui/ui/model-switcher.d.ts.map +1 -1
- package/dist/src/tui/ui/model-switcher.js +40 -25
- package/dist/src/tui/ui/model-switcher.js.map +1 -1
- package/dist/src/tui/ui/permission-dialog.d.ts +1 -1
- package/dist/src/tui/ui/permission-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/permission-dialog.js +11 -11
- package/dist/src/tui/ui/permission-dialog.js.map +1 -1
- package/dist/src/tui/ui/provider-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/provider-dialog.js +75 -64
- package/dist/src/tui/ui/provider-dialog.js.map +1 -1
- package/dist/src/tui/ui/session-list.d.ts +3 -3
- package/dist/src/tui/ui/session-list.d.ts.map +1 -1
- package/dist/src/tui/ui/session-list.js +44 -32
- package/dist/src/tui/ui/session-list.js.map +1 -1
- package/dist/src/tui/ui/thinking-effort-dialog.d.ts.map +1 -1
- package/dist/src/tui/ui/thinking-effort-dialog.js +19 -19
- package/dist/src/tui/ui/thinking-effort-dialog.js.map +1 -1
- package/dist/src/tui/utils/model-config.d.ts.map +1 -1
- package/dist/src/tui/utils/model-config.js +13 -13
- package/dist/src/tui/utils/model-config.js.map +1 -1
- package/dist/src/tui/utils/session-messages.d.ts +2 -2
- package/dist/src/tui/utils/session-messages.d.ts.map +1 -1
- package/dist/src/tui/utils/session-messages.js +35 -22
- package/dist/src/tui/utils/session-messages.js.map +1 -1
- package/dist/src/tui/utils/version.d.ts +2 -0
- package/dist/src/tui/utils/version.d.ts.map +1 -0
- package/dist/src/tui/utils/version.js +24 -0
- package/dist/src/tui/utils/version.js.map +1 -0
- package/dist/src/tui/utils.d.ts +2 -2
- package/dist/src/tui/utils.d.ts.map +1 -1
- package/dist/src/tui/utils.js +7 -7
- package/dist/src/tui/utils.js.map +1 -1
- package/dist/src/tui/variant-cycle.d.ts.map +1 -1
- package/dist/src/tui/variant-cycle.js +23 -23
- package/dist/src/tui/variant-cycle.js.map +1 -1
- package/dist/src/utils/paths.d.ts.map +1 -1
- package/dist/src/utils/paths.js +25 -25
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/platform.d.ts.map +1 -1
- package/dist/src/utils/platform.js +15 -17
- package/dist/src/utils/platform.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
-
import { useMemo, useEffect } from
|
|
3
|
-
import { c } from
|
|
4
|
-
import { loadConfig } from
|
|
5
|
-
import { listConnectedServers } from
|
|
6
|
-
import { readAll } from
|
|
7
|
-
import { getGlobalConfigDir, getGlobalDataDir } from
|
|
8
|
-
import { getPlatformInfo } from
|
|
9
|
-
import { titlecase } from
|
|
2
|
+
import { useMemo, useEffect } from 'react';
|
|
3
|
+
import { c } from '../theme.js';
|
|
4
|
+
import { loadConfig } from '../../services/config.js';
|
|
5
|
+
import { listConnectedServers } from '../../integrations/mcp/index.js';
|
|
6
|
+
import { readAll } from '../../services/auth-store.js';
|
|
7
|
+
import { getGlobalConfigDir, getGlobalDataDir } from '../../utils/paths.js';
|
|
8
|
+
import { getPlatformInfo } from '../../utils/platform.js';
|
|
9
|
+
import { titlecase } from '../utils.js';
|
|
10
|
+
import { VERSION } from '../utils/version.js';
|
|
10
11
|
export function DebugDialog(props) {
|
|
11
|
-
const { termWidth, termHeight, selectedModel, provider, selectedAgent, thinkingEffort, sessionStore, mcpCount, onClose, registerHandler } = props;
|
|
12
|
+
const { termWidth, termHeight, selectedModel, provider, selectedAgent, thinkingEffort, sessionStore, mcpCount, onClose, registerHandler, } = props;
|
|
12
13
|
const mw = Math.min(64, termWidth - 4);
|
|
13
14
|
const ml = Math.floor((termWidth - mw) / 2);
|
|
14
15
|
const mh = Math.min(24, termHeight - 4);
|
|
@@ -26,31 +27,31 @@ export function DebugDialog(props) {
|
|
|
26
27
|
const groups = [
|
|
27
28
|
{
|
|
28
29
|
rows: [
|
|
29
|
-
{ label:
|
|
30
|
-
{ label:
|
|
31
|
-
{ label:
|
|
32
|
-
{ label:
|
|
30
|
+
{ label: 'Version', value: VERSION },
|
|
31
|
+
{ label: 'Directory', value: platform.cwd },
|
|
32
|
+
{ label: 'Platform', value: `${platform.os} (${platform.arch})` },
|
|
33
|
+
{ label: 'Shell', value: platform.shell },
|
|
33
34
|
],
|
|
34
35
|
},
|
|
35
36
|
{
|
|
36
37
|
rows: [
|
|
37
|
-
{ label:
|
|
38
|
-
{ label:
|
|
39
|
-
{ label:
|
|
40
|
-
{ label:
|
|
38
|
+
{ label: 'Agent', value: titlecase(selectedAgent) },
|
|
39
|
+
{ label: 'Model', value: selectedModel || '(none)' },
|
|
40
|
+
{ label: 'Provider', value: provider || '(none)' },
|
|
41
|
+
{ label: 'Thinking effort', value: thinkingEffort || 'default' },
|
|
41
42
|
],
|
|
42
43
|
},
|
|
43
44
|
{
|
|
44
45
|
rows: [
|
|
45
|
-
{ label:
|
|
46
|
-
{ label:
|
|
47
|
-
{ label:
|
|
46
|
+
{ label: 'MCP servers', value: `${config.mcp?.length ?? 0} configured, ${mcpCount} connected` },
|
|
47
|
+
{ label: 'Sessions', value: `${sessions.length} total` },
|
|
48
|
+
{ label: 'Auth keys', value: `${Object.keys(authStore).length} provider(s)` },
|
|
48
49
|
],
|
|
49
50
|
},
|
|
50
51
|
{
|
|
51
52
|
rows: [
|
|
52
|
-
{ label:
|
|
53
|
-
{ label:
|
|
53
|
+
{ label: 'Config dir', value: configDir },
|
|
54
|
+
{ label: 'Data dir', value: dataDir },
|
|
54
55
|
],
|
|
55
56
|
},
|
|
56
57
|
];
|
|
@@ -59,16 +60,16 @@ export function DebugDialog(props) {
|
|
|
59
60
|
const maxLabel = useMemo(() => Math.max(...info.flatMap((g) => g.rows.map((r) => r.label.length))), [info]);
|
|
60
61
|
useEffect(() => {
|
|
61
62
|
registerHandler((key) => {
|
|
62
|
-
if (key.name ===
|
|
63
|
+
if (key.name === 'escape') {
|
|
63
64
|
onClose();
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
67
|
});
|
|
67
68
|
return () => registerHandler(null);
|
|
68
69
|
}, [onClose, registerHandler]);
|
|
69
|
-
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsxs("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "space-between", backgroundColor: c.bgCard, children: [_jsx("text", { fg: c.accent, flexDirection: "row", attributes: 1, height: 1, children: "Debug" }), _jsx("text", { fg: c.dim, flexDirection: "row", height: 1, children: "esc" })] }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children:
|
|
70
|
+
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsxs("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "space-between", backgroundColor: c.bgCard, children: [_jsx("text", { fg: c.accent, flexDirection: "row", attributes: 1, height: 1, children: "Debug" }), _jsx("text", { fg: c.dim, flexDirection: "row", height: 1, children: "esc" })] }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: '─'.repeat(innerW) }) }), _jsx("scrollbox", { maxHeight: listH, paddingX: 2, scrollY: true, scrollbarOptions: { visible: false }, children: _jsx("box", { flexDirection: "column", children: info.map((group, gi) => (_jsxs("box", { flexDirection: "column", children: [gi > 0 ? _jsx("box", { height: 1 }) : null, group.rows.map((row, i) => {
|
|
70
71
|
const pad = maxLabel - row.label.length + 1;
|
|
71
|
-
return (_jsxs("box", { height: 1, flexDirection: "row", children: [_jsxs("text", { fg: c.dim, children: [row.label, ":"] }), _jsxs("text", { fg: c.text, children: [
|
|
72
|
+
return (_jsxs("box", { height: 1, flexDirection: "row", children: [_jsxs("text", { fg: c.dim, children: [row.label, ":"] }), _jsxs("text", { fg: c.text, children: [' '.repeat(pad), row.value] })] }, i));
|
|
72
73
|
})] }, gi))) }) }), _jsx("box", { paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "center", children: _jsx("text", { fg: c.dim, children: "esc/enter close" }) })] }) }));
|
|
73
74
|
}
|
|
74
75
|
//# sourceMappingURL=debug-dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/debug-dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"debug-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/debug-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DoctorResult } from
|
|
2
|
-
export declare function DoctorDialog({ result, onClose, termWidth, termHeight, registerHandler }: {
|
|
1
|
+
import type { DoctorResult } from '../../commands/doctor.js';
|
|
2
|
+
export declare function DoctorDialog({ result, onClose, termWidth, termHeight, registerHandler, }: {
|
|
3
3
|
result: DoctorResult;
|
|
4
4
|
onClose: () => void;
|
|
5
5
|
termWidth: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/doctor-dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"doctor-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/doctor-dialog.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,wBAAgB,YAAY,CAAC,EAC5B,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,eAAe,GACf,EAAE;IACF,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,CAAC;CACnD,6BAyGA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
-
import { useEffect, useRef } from
|
|
3
|
-
import { c } from
|
|
4
|
-
export function DoctorDialog({ result, onClose, termWidth, termHeight, registerHandler }) {
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { c } from '../theme.js';
|
|
4
|
+
export function DoctorDialog({ result, onClose, termWidth, termHeight, registerHandler, }) {
|
|
5
5
|
const scrollRef = useRef(null);
|
|
6
6
|
useEffect(() => {
|
|
7
7
|
const handler = (key) => {
|
|
8
|
-
if (key.name ===
|
|
8
|
+
if (key.name === 'escape' || key.name === 'return' || key.name === 'enter') {
|
|
9
9
|
onClose();
|
|
10
10
|
}
|
|
11
11
|
};
|
|
@@ -25,10 +25,10 @@ export function DoctorDialog({ result, onClose, termWidth, termHeight, registerH
|
|
|
25
25
|
function trunc(s, max) {
|
|
26
26
|
if (s.length <= max)
|
|
27
27
|
return s;
|
|
28
|
-
return s.slice(0, Math.max(1, max - 1)) +
|
|
28
|
+
return s.slice(0, Math.max(1, max - 1)) + '…';
|
|
29
29
|
}
|
|
30
30
|
const rows = [];
|
|
31
|
-
let prevSection =
|
|
31
|
+
let prevSection = '';
|
|
32
32
|
for (let i = 0; i < result.checks.length; i++) {
|
|
33
33
|
const check = result.checks[i];
|
|
34
34
|
if (check.section !== prevSection) {
|
|
@@ -38,8 +38,10 @@ export function DoctorDialog({ result, onClose, termWidth, termHeight, registerH
|
|
|
38
38
|
prevSection = check.section;
|
|
39
39
|
rows.push(_jsx("box", { height: 1, paddingLeft: 2, backgroundColor: c.bgCard, children: _jsx("text", { fg: c.accent, children: check.section }) }, `sec-${check.section}`));
|
|
40
40
|
}
|
|
41
|
-
rows.push(_jsxs("box", { flexDirection: "row", height: 1, paddingLeft: 4, paddingRight: 1, gap: 2, alignItems: "center", backgroundColor: c.bgCard, children: [_jsx("text", { fg: check.passed ? c.success : c.error, width: 1, children: check.passed ?
|
|
41
|
+
rows.push(_jsxs("box", { flexDirection: "row", height: 1, paddingLeft: 4, paddingRight: 1, gap: 2, alignItems: "center", backgroundColor: c.bgCard, children: [_jsx("text", { fg: check.passed ? c.success : c.error, width: 1, children: check.passed ? '✓' : '✗' }), _jsx("text", { fg: c.text, children: trunc(check.name, nameMax) }), check.detail && _jsx("text", { fg: c.dim, children: trunc(check.detail, detailMax) })] }, check.name));
|
|
42
42
|
}
|
|
43
|
-
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsx("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, backgroundColor: c.bgCard, children: _jsx("text", { fg: result.allPassed ? c.success : c.error, children: result.allPassed ?
|
|
43
|
+
return (_jsx("box", { position: "absolute", left: 0, right: 0, top: 0, bottom: 0, backgroundColor: c.bgOverlay, children: _jsxs("box", { position: "absolute", left: ml, top: mt, width: mw, height: mh, backgroundColor: c.bgCard, children: [_jsx("box", { height: 1, paddingX: 2, paddingTop: 1, paddingBottom: 1, backgroundColor: c.bgCard, children: _jsx("text", { fg: result.allPassed ? c.success : c.error, children: result.allPassed ? '✓ All checks passed' : `✗ ${failedCount}/${result.checks.length} failed` }) }), _jsx("box", { height: 1, paddingX: 2, backgroundColor: c.bgCard, children: _jsx("text", { fg: c.border, children: '─'.repeat(innerW) }) }), _jsx("scrollbox", { ref: (r) => {
|
|
44
|
+
scrollRef.current = r;
|
|
45
|
+
}, paddingX: 1, maxHeight: listH, scrollY: true, backgroundColor: c.bgCard, children: _jsx("box", { flexDirection: "column", backgroundColor: c.bgCard, children: rows.length === 0 ? (_jsx("box", { height: 1, paddingX: 1, backgroundColor: c.bgCard, children: _jsx("text", { fg: c.dim, children: "No checks" }) })) : (rows) }) }), _jsx("box", { paddingX: 2, paddingTop: 1, paddingBottom: 1, flexDirection: "row", justifyContent: "center", children: _jsx("text", { fg: c.dim, children: "esc/enter close" }) })] }) }));
|
|
44
46
|
}
|
|
45
47
|
//# sourceMappingURL=doctor-dialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/doctor-dialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"doctor-dialog.js","sourceRoot":"","sources":["../../../../src/tui/ui/doctor-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manage-providers-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/manage-providers-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"manage-providers-dialog.d.ts","sourceRoot":"","sources":["../../../../src/tui/ui/manage-providers-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AA6BrE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAChD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,IAAI,CAAC;IAC3E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;CAC3D,6BAyWA"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
-
import { useState, useMemo, useEffect } from
|
|
3
|
-
import { c } from
|
|
4
|
-
import { getGlobalConfigDir } from
|
|
5
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from
|
|
6
|
-
import { join } from
|
|
7
|
-
import { registerCustomProvider } from
|
|
2
|
+
import { useState, useMemo, useEffect } from 'react';
|
|
3
|
+
import { c } from '../theme.js';
|
|
4
|
+
import { getGlobalConfigDir } from '../../utils/paths.js';
|
|
5
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
6
|
+
import { join } from 'path';
|
|
7
|
+
import { registerCustomProvider } from '../../services/custom-providers.js';
|
|
8
8
|
function saveProvidersToConfig(providers) {
|
|
9
9
|
const configDir = getGlobalConfigDir();
|
|
10
|
-
const configPath = join(configDir,
|
|
10
|
+
const configPath = join(configDir, 'spectra.json');
|
|
11
11
|
let cfg = {};
|
|
12
12
|
try {
|
|
13
|
-
cfg = JSON.parse(readFileSync(configPath,
|
|
13
|
+
cfg = JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
14
14
|
}
|
|
15
15
|
catch { }
|
|
16
16
|
cfg.providers = providers;
|
|
@@ -20,13 +20,13 @@ function saveProvidersToConfig(providers) {
|
|
|
20
20
|
}
|
|
21
21
|
export function ManageProvidersDialog(props) {
|
|
22
22
|
const { termWidth, termHeight, providers, onProvidersChange, onClose, registerHandler } = props;
|
|
23
|
-
const [mode, setMode] = useState(
|
|
23
|
+
const [mode, setMode] = useState('list');
|
|
24
24
|
const [listSel, setListSel] = useState(0);
|
|
25
|
-
const [form, setForm] = useState({ id:
|
|
26
|
-
const [formField, setFormField] = useState(
|
|
25
|
+
const [form, setForm] = useState({ id: '', name: '', baseUrl: '', apiKey: '', models: ['', '', ''] });
|
|
26
|
+
const [formField, setFormField] = useState('id');
|
|
27
27
|
const [confirmDeleteId, setConfirmDeleteId] = useState(null);
|
|
28
|
-
const [err, setErr] = useState(
|
|
29
|
-
const [success, setSuccess] = useState(
|
|
28
|
+
const [err, setErr] = useState('');
|
|
29
|
+
const [success, setSuccess] = useState('');
|
|
30
30
|
const mw = Math.min(72, termWidth - 4);
|
|
31
31
|
const mh = Math.min(28, termHeight - 4);
|
|
32
32
|
const mt = Math.max(1, Math.floor((termHeight - mh) / 2));
|
|
@@ -37,60 +37,60 @@ export function ManageProvidersDialog(props) {
|
|
|
37
37
|
}, [providerEntries.length, listSel]);
|
|
38
38
|
useEffect(() => {
|
|
39
39
|
registerHandler((key) => {
|
|
40
|
-
if (key.name ===
|
|
41
|
-
if (mode ===
|
|
42
|
-
setMode(
|
|
43
|
-
setErr(
|
|
44
|
-
setForm({ id:
|
|
40
|
+
if (key.name === 'escape') {
|
|
41
|
+
if (mode === 'add' || mode === 'edit') {
|
|
42
|
+
setMode('list');
|
|
43
|
+
setErr('');
|
|
44
|
+
setForm({ id: '', name: '', baseUrl: '', apiKey: '', models: ['', '', ''] });
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
|
-
if (mode ===
|
|
47
|
+
if (mode === 'delete-confirm') {
|
|
48
48
|
setConfirmDeleteId(null);
|
|
49
|
-
setMode(
|
|
49
|
+
setMode('list');
|
|
50
50
|
return;
|
|
51
51
|
}
|
|
52
52
|
onClose();
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
if (mode ===
|
|
56
|
-
if (key.name ===
|
|
57
|
-
setListSel(p => Math.max(0, p - 1));
|
|
55
|
+
if (mode === 'list') {
|
|
56
|
+
if (key.name === 'up') {
|
|
57
|
+
setListSel((p) => Math.max(0, p - 1));
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
60
|
-
if (key.name ===
|
|
61
|
-
setListSel(p => Math.min(providerEntries.length - 1, p + 1));
|
|
60
|
+
if (key.name === 'down') {
|
|
61
|
+
setListSel((p) => Math.min(providerEntries.length - 1, p + 1));
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
|
-
if (key.name ===
|
|
64
|
+
if (key.name === 'a' || key.name === 'A') {
|
|
65
65
|
startAdd();
|
|
66
66
|
return;
|
|
67
67
|
}
|
|
68
|
-
if ((key.name ===
|
|
68
|
+
if ((key.name === 'e' || key.name === 'E') && providerEntries.length > 0) {
|
|
69
69
|
startEdit(providerEntries[listSel]?.[0]);
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
|
-
if ((key.name ===
|
|
72
|
+
if ((key.name === 'd' || key.name === 'D') && providerEntries.length > 0) {
|
|
73
73
|
setConfirmDeleteId(providerEntries[listSel]?.[0]);
|
|
74
|
-
setMode(
|
|
74
|
+
setMode('delete-confirm');
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
|
-
if (mode ===
|
|
80
|
-
if (key.name ===
|
|
79
|
+
if (mode === 'delete-confirm') {
|
|
80
|
+
if (key.name === 'return' || key.name === 'enter') {
|
|
81
81
|
handleDeleteConfirm();
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
|
-
if (mode ===
|
|
87
|
-
if (key.name ===
|
|
88
|
-
const fields = [
|
|
86
|
+
if (mode === 'add' || mode === 'edit') {
|
|
87
|
+
if (key.name === 'tab') {
|
|
88
|
+
const fields = ['id', 'name', 'baseUrl', 'apiKey', 'model1', 'model2', 'model3'];
|
|
89
89
|
const idx = fields.indexOf(formField);
|
|
90
90
|
setFormField(fields[(idx + 1) % fields.length]);
|
|
91
91
|
return;
|
|
92
92
|
}
|
|
93
|
-
if (key.name ===
|
|
93
|
+
if (key.name === 'return' || key.name === 'enter') {
|
|
94
94
|
handleSave();
|
|
95
95
|
return;
|
|
96
96
|
}
|
|
@@ -98,7 +98,7 @@ export function ManageProvidersDialog(props) {
|
|
|
98
98
|
appendToField(key.name);
|
|
99
99
|
return;
|
|
100
100
|
}
|
|
101
|
-
if (key.name ===
|
|
101
|
+
if (key.name === 'backspace') {
|
|
102
102
|
removeFromField();
|
|
103
103
|
return;
|
|
104
104
|
}
|
|
@@ -107,56 +107,59 @@ export function ManageProvidersDialog(props) {
|
|
|
107
107
|
return () => registerHandler(null);
|
|
108
108
|
}, [mode, formField, form, listSel, providerEntries, confirmDeleteId]);
|
|
109
109
|
const appendToField = (char) => {
|
|
110
|
-
setForm(prev => {
|
|
110
|
+
setForm((prev) => {
|
|
111
111
|
const next = { ...prev };
|
|
112
|
-
if (formField ===
|
|
112
|
+
if (formField === 'id')
|
|
113
113
|
next.id = prev.id + char;
|
|
114
|
-
else if (formField ===
|
|
114
|
+
else if (formField === 'name')
|
|
115
115
|
next.name = prev.name + char;
|
|
116
|
-
else if (formField ===
|
|
116
|
+
else if (formField === 'baseUrl')
|
|
117
117
|
next.baseUrl = prev.baseUrl + char;
|
|
118
|
-
else if (formField ===
|
|
118
|
+
else if (formField === 'apiKey')
|
|
119
119
|
next.apiKey = prev.apiKey + char;
|
|
120
|
-
else if (formField ===
|
|
120
|
+
else if (formField === 'model1')
|
|
121
121
|
next.models = [prev.models[0] + char, prev.models[1], prev.models[2]];
|
|
122
|
-
else if (formField ===
|
|
122
|
+
else if (formField === 'model2')
|
|
123
123
|
next.models = [prev.models[0], prev.models[1] + char, prev.models[2]];
|
|
124
|
-
else if (formField ===
|
|
124
|
+
else if (formField === 'model3')
|
|
125
125
|
next.models = [prev.models[0], prev.models[1], prev.models[2] + char];
|
|
126
126
|
return next;
|
|
127
127
|
});
|
|
128
128
|
};
|
|
129
129
|
const removeFromField = () => {
|
|
130
|
-
setForm(prev => {
|
|
130
|
+
setForm((prev) => {
|
|
131
131
|
const next = { ...prev };
|
|
132
|
-
if (formField ===
|
|
132
|
+
if (formField === 'id')
|
|
133
133
|
next.id = prev.id.slice(0, -1);
|
|
134
|
-
else if (formField ===
|
|
134
|
+
else if (formField === 'name')
|
|
135
135
|
next.name = prev.name.slice(0, -1);
|
|
136
|
-
else if (formField ===
|
|
136
|
+
else if (formField === 'baseUrl')
|
|
137
137
|
next.baseUrl = prev.baseUrl.slice(0, -1);
|
|
138
|
-
else if (formField ===
|
|
138
|
+
else if (formField === 'apiKey')
|
|
139
139
|
next.apiKey = prev.apiKey.slice(0, -1);
|
|
140
|
-
else if (formField ===
|
|
140
|
+
else if (formField === 'model1')
|
|
141
141
|
next.models = [prev.models[0].slice(0, -1), prev.models[1], prev.models[2]];
|
|
142
|
-
else if (formField ===
|
|
142
|
+
else if (formField === 'model2')
|
|
143
143
|
next.models = [prev.models[0], prev.models[1].slice(0, -1), prev.models[2]];
|
|
144
|
-
else if (formField ===
|
|
144
|
+
else if (formField === 'model3')
|
|
145
145
|
next.models = [prev.models[0], prev.models[1], prev.models[2].slice(0, -1)];
|
|
146
146
|
return next;
|
|
147
147
|
});
|
|
148
148
|
};
|
|
149
149
|
const handleSave = () => {
|
|
150
|
-
setErr(
|
|
150
|
+
setErr('');
|
|
151
151
|
if (!form.id.trim()) {
|
|
152
|
-
setErr(
|
|
152
|
+
setErr('Provider ID is required');
|
|
153
153
|
return;
|
|
154
154
|
}
|
|
155
155
|
if (!form.baseUrl.trim()) {
|
|
156
|
-
setErr(
|
|
156
|
+
setErr('Base URL is required');
|
|
157
157
|
return;
|
|
158
158
|
}
|
|
159
|
-
const id = form.id
|
|
159
|
+
const id = form.id
|
|
160
|
+
.trim()
|
|
161
|
+
.toLowerCase()
|
|
162
|
+
.replace(/[^a-z0-9-_]/g, '-');
|
|
160
163
|
const updated = { ...providers };
|
|
161
164
|
const modelsObj = {};
|
|
162
165
|
for (const m of form.models) {
|
|
@@ -173,10 +176,13 @@ export function ManageProvidersDialog(props) {
|
|
|
173
176
|
registerCustomProvider(id, updated[id]);
|
|
174
177
|
saveProvidersToConfig(updated);
|
|
175
178
|
onProvidersChange(updated);
|
|
176
|
-
setSuccess(`Provider "${id}" ${mode ===
|
|
177
|
-
setForm({ id:
|
|
178
|
-
setFormField(
|
|
179
|
-
setTimeout(() => {
|
|
179
|
+
setSuccess(`Provider "${id}" ${mode === 'edit' ? 'updated' : 'added'}`);
|
|
180
|
+
setForm({ id: '', name: '', baseUrl: '', apiKey: '', models: ['', '', ''] });
|
|
181
|
+
setFormField('id');
|
|
182
|
+
setTimeout(() => {
|
|
183
|
+
setMode('list');
|
|
184
|
+
setSuccess('');
|
|
185
|
+
}, 800);
|
|
180
186
|
};
|
|
181
187
|
const handleDeleteConfirm = () => {
|
|
182
188
|
if (!confirmDeleteId)
|
|
@@ -186,32 +192,30 @@ export function ManageProvidersDialog(props) {
|
|
|
186
192
|
saveProvidersToConfig(updated);
|
|
187
193
|
onProvidersChange(updated);
|
|
188
194
|
setConfirmDeleteId(null);
|
|
189
|
-
setMode(
|
|
195
|
+
setMode('list');
|
|
190
196
|
setSuccess(`Provider "${confirmDeleteId}" removed`);
|
|
191
|
-
setTimeout(() => setSuccess(
|
|
197
|
+
setTimeout(() => setSuccess(''), 1500);
|
|
192
198
|
};
|
|
193
199
|
const startEdit = (id) => {
|
|
194
200
|
const cfg = providers[id];
|
|
195
201
|
setForm({
|
|
196
202
|
id,
|
|
197
203
|
name: cfg.name || id,
|
|
198
|
-
baseUrl: cfg.baseUrl ||
|
|
199
|
-
apiKey: cfg.apiKey ||
|
|
200
|
-
models: cfg.models
|
|
201
|
-
? Object.keys(cfg.models).concat(["", "", ""]).slice(0, 3)
|
|
202
|
-
: ["", "", ""],
|
|
204
|
+
baseUrl: cfg.baseUrl || '',
|
|
205
|
+
apiKey: cfg.apiKey || '',
|
|
206
|
+
models: cfg.models ? Object.keys(cfg.models).concat(['', '', '']).slice(0, 3) : ['', '', ''],
|
|
203
207
|
});
|
|
204
|
-
setFormField(
|
|
205
|
-
setMode(
|
|
208
|
+
setFormField('name');
|
|
209
|
+
setMode('edit');
|
|
206
210
|
};
|
|
207
211
|
const startAdd = () => {
|
|
208
|
-
setForm({ id:
|
|
209
|
-
setFormField(
|
|
210
|
-
setMode(
|
|
212
|
+
setForm({ id: '', name: '', baseUrl: '', apiKey: '', models: ['', '', ''] });
|
|
213
|
+
setFormField('id');
|
|
214
|
+
setMode('add');
|
|
211
215
|
};
|
|
212
216
|
const rows = [];
|
|
213
|
-
if (mode ===
|
|
214
|
-
rows.push(_jsxs("box", { paddingX: 2, paddingTop: 1, height: 1, flexDirection: "row", justifyContent: "space-between", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.accent, children:
|
|
217
|
+
if (mode === 'list') {
|
|
218
|
+
rows.push(_jsxs("box", { paddingX: 2, paddingTop: 1, height: 1, flexDirection: "row", justifyContent: "space-between", children: [_jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.accent, children: '>' }), _jsx("text", { fg: c.text, children: "Manage Providers" })] }), _jsx("box", { flexDirection: "row", height: 1, children: _jsx("text", { fg: c.dim, children: "esc close" }) })] }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: '─'.repeat(mw - 4) }) }));
|
|
215
219
|
if (providerEntries.length === 0) {
|
|
216
220
|
rows.push(_jsxs("box", { height: 2, paddingX: 2, flexDirection: "column", gap: 1, children: [_jsx("text", { fg: c.dim, children: "No custom providers configured" }), _jsx("text", { fg: c.dim, children: "Press \"a\" to add one" })] }));
|
|
217
221
|
}
|
|
@@ -222,27 +226,39 @@ export function ManageProvidersDialog(props) {
|
|
|
222
226
|
rows.push(_jsxs("box", { height: 2, paddingX: 2, flexDirection: "column", gap: 0, backgroundColor: isSel ? c.bgSelect : undefined, children: [_jsxs("box", { flexDirection: "row", justifyContent: "space-between", children: [_jsx("text", { fg: isSel ? c.accent : c.text, attributes: isSel ? 1 : 0, children: cfg.name || id }), _jsx("text", { fg: c.dim, children: id })] }), _jsxs("box", { flexDirection: "row", justifyContent: "space-between", children: [_jsx("text", { fg: c.dim, children: cfg.baseUrl }), _jsxs("box", { flexDirection: "row", gap: 1, children: [_jsx("text", { fg: c.warn, children: "e edit" }), _jsx("text", { fg: c.error, children: "d delete" })] })] })] }, id));
|
|
223
227
|
}
|
|
224
228
|
}
|
|
225
|
-
rows.push(_jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children:
|
|
229
|
+
rows.push(_jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: '─'.repeat(mw - 4) }) }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.accent, children: "a add provider" }) }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.dim, children: "\u2191\u2193 navigate \u00B7 a add \u00B7 e edit \u00B7 d delete \u00B7 esc close" }) }));
|
|
226
230
|
if (success)
|
|
227
231
|
rows.push(_jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.success, children: success }) }));
|
|
228
232
|
}
|
|
229
|
-
else if (mode ===
|
|
230
|
-
rows.push(_jsx("box", { paddingX: 2, paddingTop: 1, height: 1, children: _jsx("text", { fg: c.error, attributes: 1, children: "Delete Provider" }) }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children:
|
|
233
|
+
else if (mode === 'delete-confirm') {
|
|
234
|
+
rows.push(_jsx("box", { paddingX: 2, paddingTop: 1, height: 1, children: _jsx("text", { fg: c.error, attributes: 1, children: "Delete Provider" }) }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: '─'.repeat(mw - 4) }) }), _jsx("box", { height: 1, paddingX: 2, children: _jsxs("text", { fg: c.text, children: ["Delete \"", confirmDeleteId, "\"? This cannot be undone."] }) }), _jsxs("box", { height: 1, paddingX: 2, flexDirection: "row", gap: 2, children: [_jsx("text", { fg: c.error, children: "enter confirm" }), _jsx("text", { fg: c.dim, children: "esc cancel" })] }));
|
|
231
235
|
}
|
|
232
236
|
else {
|
|
233
237
|
const fields = [
|
|
234
|
-
{ key:
|
|
235
|
-
{ key:
|
|
236
|
-
{ key:
|
|
237
|
-
{ key:
|
|
238
|
-
{ key:
|
|
239
|
-
{ key:
|
|
240
|
-
{ key:
|
|
238
|
+
{ key: 'id', label: 'Provider ID', placeholder: 'my-provider' },
|
|
239
|
+
{ key: 'name', label: 'Display Name', placeholder: 'My Provider', optional: true },
|
|
240
|
+
{ key: 'baseUrl', label: 'Base URL', placeholder: 'https://api.example.com/v1' },
|
|
241
|
+
{ key: 'apiKey', label: 'API Key', placeholder: 'sk-... (optional)', optional: true },
|
|
242
|
+
{ key: 'model1', label: 'Model 1', placeholder: 'model-id-1 (optional)', optional: true },
|
|
243
|
+
{ key: 'model2', label: 'Model 2', placeholder: 'model-id-2 (optional)', optional: true },
|
|
244
|
+
{ key: 'model3', label: 'Model 3', placeholder: 'model-id-3 (optional)', optional: true },
|
|
241
245
|
];
|
|
242
|
-
rows.push(_jsxs("box", { paddingX: 2, paddingTop: 1, height: 1, flexDirection: "row", justifyContent: "space-between", children: [_jsx("text", { fg: c.accent, attributes: 1, children: mode ===
|
|
246
|
+
rows.push(_jsxs("box", { paddingX: 2, paddingTop: 1, height: 1, flexDirection: "row", justifyContent: "space-between", children: [_jsx("text", { fg: c.accent, attributes: 1, children: mode === 'add' ? 'Add Provider' : 'Edit Provider' }), _jsx("text", { fg: c.dim, children: "esc cancel \u00B7 tab next" })] }), _jsx("box", { height: 1, paddingX: 2, children: _jsx("text", { fg: c.border, children: '─'.repeat(mw - 4) }) }));
|
|
243
247
|
for (const f of fields) {
|
|
244
248
|
const isActive = formField === f.key;
|
|
245
|
-
const value = f.key ===
|
|
249
|
+
const value = f.key === 'id'
|
|
250
|
+
? form.id
|
|
251
|
+
: f.key === 'name'
|
|
252
|
+
? form.name
|
|
253
|
+
: f.key === 'baseUrl'
|
|
254
|
+
? form.baseUrl
|
|
255
|
+
: f.key === 'apiKey'
|
|
256
|
+
? form.apiKey
|
|
257
|
+
: f.key === 'model1'
|
|
258
|
+
? form.models[0]
|
|
259
|
+
: f.key === 'model2'
|
|
260
|
+
? form.models[1]
|
|
261
|
+
: form.models[2];
|
|
246
262
|
rows.push(_jsxs("box", { height: 1, paddingX: 2, flexDirection: "row", gap: 1, children: [_jsxs("text", { fg: isActive ? c.accent : c.dim, width: 14, children: [f.label, ":"] }), _jsxs("box", { flexGrow: 1, children: [_jsx("text", { fg: isActive ? c.text : c.dim, children: value || (f.optional ? f.placeholder : f.placeholder) }), isActive && _jsx("text", { fg: c.accent, children: "\u258C" })] })] }, f.key));
|
|
247
263
|
}
|
|
248
264
|
rows.push(_jsx("box", { height: 1 }));
|