flaio-cli 0.3.1
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/LICENSE +21 -0
- package/README.md +461 -0
- package/dist/agents/agent-detector.d.ts +21 -0
- package/dist/agents/agent-detector.d.ts.map +1 -0
- package/dist/agents/agent-detector.js +109 -0
- package/dist/agents/agent-detector.js.map +1 -0
- package/dist/agents/agent-registry.d.ts +6 -0
- package/dist/agents/agent-registry.d.ts.map +1 -0
- package/dist/agents/agent-registry.js +25 -0
- package/dist/agents/agent-registry.js.map +1 -0
- package/dist/agents/agent-session.d.ts +60 -0
- package/dist/agents/agent-session.d.ts.map +1 -0
- package/dist/agents/agent-session.js +251 -0
- package/dist/agents/agent-session.js.map +1 -0
- package/dist/agents/drivers/base-driver.d.ts +37 -0
- package/dist/agents/drivers/base-driver.d.ts.map +1 -0
- package/dist/agents/drivers/base-driver.js +18 -0
- package/dist/agents/drivers/base-driver.js.map +1 -0
- package/dist/agents/drivers/claude-driver.d.ts +23 -0
- package/dist/agents/drivers/claude-driver.d.ts.map +1 -0
- package/dist/agents/drivers/claude-driver.js +61 -0
- package/dist/agents/drivers/claude-driver.js.map +1 -0
- package/dist/agents/drivers/gemini-driver.d.ts +23 -0
- package/dist/agents/drivers/gemini-driver.d.ts.map +1 -0
- package/dist/agents/drivers/gemini-driver.js +60 -0
- package/dist/agents/drivers/gemini-driver.js.map +1 -0
- package/dist/agents/session-metadata.d.ts +33 -0
- package/dist/agents/session-metadata.d.ts.map +1 -0
- package/dist/agents/session-metadata.js +34 -0
- package/dist/agents/session-metadata.js.map +1 -0
- package/dist/agents/sideband/hook-scripts.d.ts +29 -0
- package/dist/agents/sideband/hook-scripts.d.ts.map +1 -0
- package/dist/agents/sideband/hook-scripts.js +259 -0
- package/dist/agents/sideband/hook-scripts.js.map +1 -0
- package/dist/agents/sideband/sideband-receiver.d.ts +37 -0
- package/dist/agents/sideband/sideband-receiver.d.ts.map +1 -0
- package/dist/agents/sideband/sideband-receiver.js +203 -0
- package/dist/agents/sideband/sideband-receiver.js.map +1 -0
- package/dist/agents/sideband/status-resolver.d.ts +55 -0
- package/dist/agents/sideband/status-resolver.d.ts.map +1 -0
- package/dist/agents/sideband/status-resolver.js +194 -0
- package/dist/agents/sideband/status-resolver.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +94 -0
- package/dist/app.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +188 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/config.d.ts +341 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +94 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +33 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +33 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/connectors/adapters/discord-adapter.d.ts +25 -0
- package/dist/connectors/adapters/discord-adapter.d.ts.map +1 -0
- package/dist/connectors/adapters/discord-adapter.js +154 -0
- package/dist/connectors/adapters/discord-adapter.js.map +1 -0
- package/dist/connectors/adapters/slack-adapter.d.ts +38 -0
- package/dist/connectors/adapters/slack-adapter.d.ts.map +1 -0
- package/dist/connectors/adapters/slack-adapter.js +502 -0
- package/dist/connectors/adapters/slack-adapter.js.map +1 -0
- package/dist/connectors/adapters/telegram-adapter.d.ts +25 -0
- package/dist/connectors/adapters/telegram-adapter.d.ts.map +1 -0
- package/dist/connectors/adapters/telegram-adapter.js +164 -0
- package/dist/connectors/adapters/telegram-adapter.js.map +1 -0
- package/dist/connectors/connector-interface.d.ts +41 -0
- package/dist/connectors/connector-interface.d.ts.map +1 -0
- package/dist/connectors/connector-interface.js +2 -0
- package/dist/connectors/connector-interface.js.map +1 -0
- package/dist/connectors/connector-manager.d.ts +24 -0
- package/dist/connectors/connector-manager.d.ts.map +1 -0
- package/dist/connectors/connector-manager.js +82 -0
- package/dist/connectors/connector-manager.js.map +1 -0
- package/dist/connectors/debug.d.ts +3 -0
- package/dist/connectors/debug.d.ts.map +1 -0
- package/dist/connectors/debug.js +16 -0
- package/dist/connectors/debug.js.map +1 -0
- package/dist/hooks/hook-server.d.ts +27 -0
- package/dist/hooks/hook-server.d.ts.map +1 -0
- package/dist/hooks/hook-server.js +149 -0
- package/dist/hooks/hook-server.js.map +1 -0
- package/dist/hooks/hook.d.ts +10 -0
- package/dist/hooks/hook.d.ts.map +1 -0
- package/dist/hooks/hook.js +58 -0
- package/dist/hooks/hook.js.map +1 -0
- package/dist/hooks/install.d.ts +8 -0
- package/dist/hooks/install.d.ts.map +1 -0
- package/dist/hooks/install.js +160 -0
- package/dist/hooks/install.js.map +1 -0
- package/dist/hooks/notification-hook.d.ts +9 -0
- package/dist/hooks/notification-hook.d.ts.map +1 -0
- package/dist/hooks/notification-hook.js +38 -0
- package/dist/hooks/notification-hook.js.map +1 -0
- package/dist/hooks/post-tool-hook.d.ts +9 -0
- package/dist/hooks/post-tool-hook.d.ts.map +1 -0
- package/dist/hooks/post-tool-hook.js +39 -0
- package/dist/hooks/post-tool-hook.js.map +1 -0
- package/dist/hooks/stop-hook.d.ts +9 -0
- package/dist/hooks/stop-hook.d.ts.map +1 -0
- package/dist/hooks/stop-hook.js +37 -0
- package/dist/hooks/stop-hook.js.map +1 -0
- package/dist/portal/ansi-renderer.d.ts +15 -0
- package/dist/portal/ansi-renderer.d.ts.map +1 -0
- package/dist/portal/ansi-renderer.js +75 -0
- package/dist/portal/ansi-renderer.js.map +1 -0
- package/dist/portal/portal-client.d.ts +18 -0
- package/dist/portal/portal-client.d.ts.map +1 -0
- package/dist/portal/portal-client.js +335 -0
- package/dist/portal/portal-client.js.map +1 -0
- package/dist/portal/portal-picker.d.ts +8 -0
- package/dist/portal/portal-picker.d.ts.map +1 -0
- package/dist/portal/portal-picker.js +145 -0
- package/dist/portal/portal-picker.js.map +1 -0
- package/dist/portal/portal-server.d.ts +24 -0
- package/dist/portal/portal-server.d.ts.map +1 -0
- package/dist/portal/portal-server.js +330 -0
- package/dist/portal/portal-server.js.map +1 -0
- package/dist/portal/shared.d.ts +79 -0
- package/dist/portal/shared.d.ts.map +1 -0
- package/dist/portal/shared.js +5 -0
- package/dist/portal/shared.js.map +1 -0
- package/dist/relay/rate-limiter.d.ts +16 -0
- package/dist/relay/rate-limiter.d.ts.map +1 -0
- package/dist/relay/rate-limiter.js +37 -0
- package/dist/relay/rate-limiter.js.map +1 -0
- package/dist/relay/relay-auth.d.ts +29 -0
- package/dist/relay/relay-auth.d.ts.map +1 -0
- package/dist/relay/relay-auth.js +129 -0
- package/dist/relay/relay-auth.js.map +1 -0
- package/dist/relay/relay-client.d.ts +52 -0
- package/dist/relay/relay-client.d.ts.map +1 -0
- package/dist/relay/relay-client.js +1102 -0
- package/dist/relay/relay-client.js.map +1 -0
- package/dist/relay/relay-crypto.d.ts +29 -0
- package/dist/relay/relay-crypto.d.ts.map +1 -0
- package/dist/relay/relay-crypto.js +100 -0
- package/dist/relay/relay-crypto.js.map +1 -0
- package/dist/relay/relay-message-schemas.d.ts +276 -0
- package/dist/relay/relay-message-schemas.d.ts.map +1 -0
- package/dist/relay/relay-message-schemas.js +137 -0
- package/dist/relay/relay-message-schemas.js.map +1 -0
- package/dist/relay/relay-protocol.d.ts +444 -0
- package/dist/relay/relay-protocol.d.ts.map +1 -0
- package/dist/relay/relay-protocol.js +15 -0
- package/dist/relay/relay-protocol.js.map +1 -0
- package/dist/relay/relay-store.d.ts +23 -0
- package/dist/relay/relay-store.d.ts.map +1 -0
- package/dist/relay/relay-store.js +54 -0
- package/dist/relay/relay-store.js.map +1 -0
- package/dist/relay/ticket-tracker.d.ts +18 -0
- package/dist/relay/ticket-tracker.d.ts.map +1 -0
- package/dist/relay/ticket-tracker.js +58 -0
- package/dist/relay/ticket-tracker.js.map +1 -0
- package/dist/store/app-store.d.ts +66 -0
- package/dist/store/app-store.d.ts.map +1 -0
- package/dist/store/app-store.js +227 -0
- package/dist/store/app-store.js.map +1 -0
- package/dist/store/connector-store.d.ts +21 -0
- package/dist/store/connector-store.d.ts.map +1 -0
- package/dist/store/connector-store.js +591 -0
- package/dist/store/connector-store.js.map +1 -0
- package/dist/store/portal-store.d.ts +5 -0
- package/dist/store/portal-store.d.ts.map +1 -0
- package/dist/store/portal-store.js +5 -0
- package/dist/store/portal-store.js.map +1 -0
- package/dist/store/settings-store.d.ts +13 -0
- package/dist/store/settings-store.d.ts.map +1 -0
- package/dist/store/settings-store.js +59 -0
- package/dist/store/settings-store.js.map +1 -0
- package/dist/terminal/pty-manager.d.ts +19 -0
- package/dist/terminal/pty-manager.d.ts.map +1 -0
- package/dist/terminal/pty-manager.js +58 -0
- package/dist/terminal/pty-manager.js.map +1 -0
- package/dist/terminal/screen-buffer.d.ts +36 -0
- package/dist/terminal/screen-buffer.d.ts.map +1 -0
- package/dist/terminal/screen-buffer.js +109 -0
- package/dist/terminal/screen-buffer.js.map +1 -0
- package/dist/terminal/xterm-bridge.d.ts +32 -0
- package/dist/terminal/xterm-bridge.d.ts.map +1 -0
- package/dist/terminal/xterm-bridge.js +168 -0
- package/dist/terminal/xterm-bridge.js.map +1 -0
- package/dist/ui/components/adopt-agent-dialog.d.ts +10 -0
- package/dist/ui/components/adopt-agent-dialog.d.ts.map +1 -0
- package/dist/ui/components/adopt-agent-dialog.js +31 -0
- package/dist/ui/components/adopt-agent-dialog.js.map +1 -0
- package/dist/ui/components/agent-tab.d.ts +17 -0
- package/dist/ui/components/agent-tab.d.ts.map +1 -0
- package/dist/ui/components/agent-tab.js +33 -0
- package/dist/ui/components/agent-tab.js.map +1 -0
- package/dist/ui/components/agents-settings-content.d.ts +7 -0
- package/dist/ui/components/agents-settings-content.d.ts.map +1 -0
- package/dist/ui/components/agents-settings-content.js +238 -0
- package/dist/ui/components/agents-settings-content.js.map +1 -0
- package/dist/ui/components/help-modal.d.ts +7 -0
- package/dist/ui/components/help-modal.d.ts.map +1 -0
- package/dist/ui/components/help-modal.js +29 -0
- package/dist/ui/components/help-modal.js.map +1 -0
- package/dist/ui/components/new-session-dialog.d.ts +8 -0
- package/dist/ui/components/new-session-dialog.d.ts.map +1 -0
- package/dist/ui/components/new-session-dialog.js +84 -0
- package/dist/ui/components/new-session-dialog.js.map +1 -0
- package/dist/ui/components/path-input.d.ts +8 -0
- package/dist/ui/components/path-input.d.ts.map +1 -0
- package/dist/ui/components/path-input.js +151 -0
- package/dist/ui/components/path-input.js.map +1 -0
- package/dist/ui/components/settings-panel.d.ts +7 -0
- package/dist/ui/components/settings-panel.d.ts.map +1 -0
- package/dist/ui/components/settings-panel.js +134 -0
- package/dist/ui/components/settings-panel.js.map +1 -0
- package/dist/ui/components/standalone-agents.d.ts +9 -0
- package/dist/ui/components/standalone-agents.d.ts.map +1 -0
- package/dist/ui/components/standalone-agents.js +28 -0
- package/dist/ui/components/standalone-agents.js.map +1 -0
- package/dist/ui/components/terminal-view.d.ts +12 -0
- package/dist/ui/components/terminal-view.d.ts.map +1 -0
- package/dist/ui/components/terminal-view.js +53 -0
- package/dist/ui/components/terminal-view.js.map +1 -0
- package/dist/ui/components/viewer-approval-dialog.d.ts +9 -0
- package/dist/ui/components/viewer-approval-dialog.d.ts.map +1 -0
- package/dist/ui/components/viewer-approval-dialog.js +38 -0
- package/dist/ui/components/viewer-approval-dialog.js.map +1 -0
- package/dist/ui/hooks/use-git-info.d.ts +8 -0
- package/dist/ui/hooks/use-git-info.d.ts.map +1 -0
- package/dist/ui/hooks/use-git-info.js +72 -0
- package/dist/ui/hooks/use-git-info.js.map +1 -0
- package/dist/ui/hooks/use-keybindings.d.ts +10 -0
- package/dist/ui/hooks/use-keybindings.d.ts.map +1 -0
- package/dist/ui/hooks/use-keybindings.js +91 -0
- package/dist/ui/hooks/use-keybindings.js.map +1 -0
- package/dist/ui/hooks/use-portal-connected.d.ts +2 -0
- package/dist/ui/hooks/use-portal-connected.d.ts.map +1 -0
- package/dist/ui/hooks/use-portal-connected.js +10 -0
- package/dist/ui/hooks/use-portal-connected.js.map +1 -0
- package/dist/ui/hooks/use-raw-input.d.ts +8 -0
- package/dist/ui/hooks/use-raw-input.d.ts.map +1 -0
- package/dist/ui/hooks/use-raw-input.js +106 -0
- package/dist/ui/hooks/use-raw-input.js.map +1 -0
- package/dist/ui/hooks/use-spinner.d.ts +2 -0
- package/dist/ui/hooks/use-spinner.d.ts.map +1 -0
- package/dist/ui/hooks/use-spinner.js +13 -0
- package/dist/ui/hooks/use-spinner.js.map +1 -0
- package/dist/ui/hooks/use-terminal-size.d.ts +5 -0
- package/dist/ui/hooks/use-terminal-size.d.ts.map +1 -0
- package/dist/ui/hooks/use-terminal-size.js +22 -0
- package/dist/ui/hooks/use-terminal-size.js.map +1 -0
- package/dist/ui/hooks/use-update-check.d.ts +6 -0
- package/dist/ui/hooks/use-update-check.d.ts.map +1 -0
- package/dist/ui/hooks/use-update-check.js +62 -0
- package/dist/ui/hooks/use-update-check.js.map +1 -0
- package/dist/ui/layout/main-pane.d.ts +13 -0
- package/dist/ui/layout/main-pane.d.ts.map +1 -0
- package/dist/ui/layout/main-pane.js +36 -0
- package/dist/ui/layout/main-pane.js.map +1 -0
- package/dist/ui/layout/shell.d.ts +17 -0
- package/dist/ui/layout/shell.d.ts.map +1 -0
- package/dist/ui/layout/shell.js +24 -0
- package/dist/ui/layout/shell.js.map +1 -0
- package/dist/ui/layout/sidebar.d.ts +12 -0
- package/dist/ui/layout/sidebar.d.ts.map +1 -0
- package/dist/ui/layout/sidebar.js +9 -0
- package/dist/ui/layout/sidebar.js.map +1 -0
- package/dist/ui/layout/status-bar.d.ts +9 -0
- package/dist/ui/layout/status-bar.d.ts.map +1 -0
- package/dist/ui/layout/status-bar.js +138 -0
- package/dist/ui/layout/status-bar.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface AgentsSettingsContentProps {
|
|
3
|
+
isActive: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function AgentsSettingsContent({ isActive }: AgentsSettingsContentProps): React.ReactElement;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=agents-settings-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-settings-content.d.ts","sourceRoot":"","sources":["../../../src/ui/components/agents-settings-content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AA6EhE,UAAU,0BAA0B;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,0BAA0B,GAAG,KAAK,CAAC,YAAY,CAySlG"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState, useEffect, useCallback } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { execFile } from "node:child_process";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { installHookScripts, getClaudeHooksConfig, getClaudeStatusLineConfig, getGeminiHooksConfig, mergeSettingsFile, areClaudeHooksConfigured, areGeminiHooksConfigured, } from "../../agents/sideband/hook-scripts.js";
|
|
7
|
+
import os from "node:os";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
10
|
+
const AGENT_DEFS = [
|
|
11
|
+
{ driverName: "claude", displayName: "Claude Code", command: "claude", npmPackage: "@anthropic-ai/claude-code", brewFormula: "claude-code" },
|
|
12
|
+
{ driverName: "gemini", displayName: "Gemini CLI", command: "gemini", npmPackage: "@google/gemini-cli", brewFormula: "gemini-cli" },
|
|
13
|
+
];
|
|
14
|
+
const SEMVER_RE = /(\d+\.\d+\.\d+)/;
|
|
15
|
+
function initAgents() {
|
|
16
|
+
return AGENT_DEFS.map((def) => ({
|
|
17
|
+
displayName: def.displayName,
|
|
18
|
+
command: def.command,
|
|
19
|
+
npmPackage: def.npmPackage,
|
|
20
|
+
brewFormula: def.brewFormula,
|
|
21
|
+
installMethod: "npm",
|
|
22
|
+
installedVersion: null,
|
|
23
|
+
latestVersion: null,
|
|
24
|
+
status: "checking",
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
function getLatestVersion(agent) {
|
|
28
|
+
if (agent.installMethod === "brew") {
|
|
29
|
+
return execFileAsync("brew", ["info", "--json=v2", agent.brewFormula])
|
|
30
|
+
.then(({ stdout }) => {
|
|
31
|
+
const info = JSON.parse(stdout);
|
|
32
|
+
return info.formulae[0]?.versions.stable ?? null;
|
|
33
|
+
})
|
|
34
|
+
.catch(() => null);
|
|
35
|
+
}
|
|
36
|
+
return execFileAsync("npm", ["show", agent.npmPackage, "version"])
|
|
37
|
+
.then(({ stdout }) => stdout.trim())
|
|
38
|
+
.catch(() => null);
|
|
39
|
+
}
|
|
40
|
+
function installAgent(agent) {
|
|
41
|
+
if (agent.installMethod === "brew") {
|
|
42
|
+
// brew upgrade handles both install and update
|
|
43
|
+
return execFileAsync("brew", ["upgrade", agent.brewFormula], { timeout: 120_000 })
|
|
44
|
+
.catch(() => execFileAsync("brew", ["install", agent.brewFormula], { timeout: 120_000 }));
|
|
45
|
+
}
|
|
46
|
+
return execFileAsync("npm", ["install", "-g", agent.npmPackage], { timeout: 120_000 });
|
|
47
|
+
}
|
|
48
|
+
export function AgentsSettingsContent({ isActive }) {
|
|
49
|
+
const [subTab, setSubTab] = useState(0);
|
|
50
|
+
const [agents, setAgents] = useState(initAgents);
|
|
51
|
+
const [hooksStatus, setHooksStatus] = useState({ claude: "checking", gemini: "checking" });
|
|
52
|
+
const [hooksError, setHooksError] = useState(null);
|
|
53
|
+
const checkVersions = useCallback((currentAgents) => {
|
|
54
|
+
let cancelled = false;
|
|
55
|
+
for (let idx = 0; idx < currentAgents.length; idx++) {
|
|
56
|
+
const agent = currentAgents[idx];
|
|
57
|
+
const i = idx;
|
|
58
|
+
// Reset to checking
|
|
59
|
+
setAgents((prev) => prev.map((a, j) => j === i ? { ...a, status: "checking", error: undefined } : a));
|
|
60
|
+
const getInstalled = execFileAsync(agent.command, ["--version"])
|
|
61
|
+
.then(({ stdout }) => {
|
|
62
|
+
const match = stdout.match(SEMVER_RE);
|
|
63
|
+
return match ? match[1] : null;
|
|
64
|
+
})
|
|
65
|
+
.catch(() => null);
|
|
66
|
+
const getLatest = getLatestVersion(agent);
|
|
67
|
+
Promise.all([getInstalled, getLatest]).then(([installed, latest]) => {
|
|
68
|
+
if (cancelled)
|
|
69
|
+
return;
|
|
70
|
+
let status;
|
|
71
|
+
if (installed === null) {
|
|
72
|
+
status = "not_installed";
|
|
73
|
+
}
|
|
74
|
+
else if (latest && installed === latest) {
|
|
75
|
+
status = "up_to_date";
|
|
76
|
+
}
|
|
77
|
+
else if (latest && installed !== latest) {
|
|
78
|
+
status = "update_available";
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
status = "up_to_date";
|
|
82
|
+
}
|
|
83
|
+
setAgents((prev) => prev.map((a, j) => j === i ? { ...a, installedVersion: installed, latestVersion: latest, status } : a));
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return () => { cancelled = true; };
|
|
87
|
+
}, []);
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
return checkVersions(agents);
|
|
90
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
91
|
+
}, []);
|
|
92
|
+
// Check hooks status on mount
|
|
93
|
+
useEffect(() => {
|
|
94
|
+
Promise.all([areClaudeHooksConfigured(), areGeminiHooksConfigured()]).then(([claude, gemini]) => {
|
|
95
|
+
setHooksStatus({
|
|
96
|
+
claude: claude ? "configured" : "not_configured",
|
|
97
|
+
gemini: gemini ? "configured" : "not_configured",
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}, []);
|
|
101
|
+
const handleSetupHooks = useCallback(async () => {
|
|
102
|
+
setHooksStatus((prev) => ({ ...prev, claude: "installing", gemini: "installing" }));
|
|
103
|
+
setHooksError(null);
|
|
104
|
+
try {
|
|
105
|
+
const { hookPath, statusLinePath } = await installHookScripts();
|
|
106
|
+
const claudeSettingsPath = path.join(os.homedir(), ".claude", "settings.json");
|
|
107
|
+
const hooksCfg = getClaudeHooksConfig(hookPath);
|
|
108
|
+
const statusLineCfg = getClaudeStatusLineConfig(statusLinePath);
|
|
109
|
+
await mergeSettingsFile(claudeSettingsPath, { ...hooksCfg, ...statusLineCfg });
|
|
110
|
+
const geminiSettingsPath = path.join(os.homedir(), ".gemini", "settings.json");
|
|
111
|
+
const geminiCfg = getGeminiHooksConfig(hookPath);
|
|
112
|
+
await mergeSettingsFile(geminiSettingsPath, geminiCfg);
|
|
113
|
+
setHooksStatus({ claude: "done", gemini: "done" });
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
117
|
+
setHooksError(msg);
|
|
118
|
+
setHooksStatus((prev) => ({
|
|
119
|
+
claude: prev.claude === "installing" ? "error" : prev.claude,
|
|
120
|
+
gemini: prev.gemini === "installing" ? "error" : prev.gemini,
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
}, []);
|
|
124
|
+
const handleAction = useCallback((idx) => {
|
|
125
|
+
const agent = agents[idx];
|
|
126
|
+
if (!agent)
|
|
127
|
+
return;
|
|
128
|
+
if (agent.status !== "not_installed" && agent.status !== "update_available" && agent.status !== "error")
|
|
129
|
+
return;
|
|
130
|
+
setAgents((prev) => prev.map((a, j) => j === idx ? { ...a, status: "installing", error: undefined } : a));
|
|
131
|
+
installAgent(agent)
|
|
132
|
+
.then(() => {
|
|
133
|
+
// Re-check version after install
|
|
134
|
+
const getInstalled = execFileAsync(agent.command, ["--version"])
|
|
135
|
+
.then(({ stdout }) => {
|
|
136
|
+
const match = stdout.match(SEMVER_RE);
|
|
137
|
+
return match ? match[1] : null;
|
|
138
|
+
})
|
|
139
|
+
.catch(() => null);
|
|
140
|
+
const getLatest = getLatestVersion(agent);
|
|
141
|
+
return Promise.all([getInstalled, getLatest]);
|
|
142
|
+
})
|
|
143
|
+
.then(([installed, latest]) => {
|
|
144
|
+
let status;
|
|
145
|
+
if (installed === null) {
|
|
146
|
+
status = "not_installed";
|
|
147
|
+
}
|
|
148
|
+
else if (latest && installed === latest) {
|
|
149
|
+
status = "up_to_date";
|
|
150
|
+
}
|
|
151
|
+
else if (latest && installed !== latest) {
|
|
152
|
+
status = "update_available";
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
status = "up_to_date";
|
|
156
|
+
}
|
|
157
|
+
setAgents((prev) => prev.map((a, j) => j === idx ? { ...a, installedVersion: installed, latestVersion: latest, status } : a));
|
|
158
|
+
})
|
|
159
|
+
.catch((err) => {
|
|
160
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
161
|
+
setAgents((prev) => prev.map((a, j) => j === idx ? { ...a, status: "error", error: msg } : a));
|
|
162
|
+
});
|
|
163
|
+
}, [agents]);
|
|
164
|
+
const toggleMethod = useCallback((idx) => {
|
|
165
|
+
setAgents((prev) => {
|
|
166
|
+
const updated = prev.map((a, j) => {
|
|
167
|
+
if (j !== idx)
|
|
168
|
+
return a;
|
|
169
|
+
const newMethod = a.installMethod === "npm" ? "brew" : "npm";
|
|
170
|
+
return { ...a, installMethod: newMethod, status: "checking", installedVersion: null, latestVersion: null, error: undefined };
|
|
171
|
+
});
|
|
172
|
+
// Re-check versions for the toggled agent
|
|
173
|
+
const agent = updated[idx];
|
|
174
|
+
const getInstalled = execFileAsync(agent.command, ["--version"])
|
|
175
|
+
.then(({ stdout }) => {
|
|
176
|
+
const match = stdout.match(SEMVER_RE);
|
|
177
|
+
return match ? match[1] : null;
|
|
178
|
+
})
|
|
179
|
+
.catch(() => null);
|
|
180
|
+
const getLatest = getLatestVersion(agent);
|
|
181
|
+
Promise.all([getInstalled, getLatest]).then(([installed, latest]) => {
|
|
182
|
+
let status;
|
|
183
|
+
if (installed === null)
|
|
184
|
+
status = "not_installed";
|
|
185
|
+
else if (latest && installed === latest)
|
|
186
|
+
status = "up_to_date";
|
|
187
|
+
else if (latest && installed !== latest)
|
|
188
|
+
status = "update_available";
|
|
189
|
+
else
|
|
190
|
+
status = "up_to_date";
|
|
191
|
+
setAgents((p) => p.map((a, j) => j === idx ? { ...a, installedVersion: installed, latestVersion: latest, status } : a));
|
|
192
|
+
});
|
|
193
|
+
return updated;
|
|
194
|
+
});
|
|
195
|
+
}, []);
|
|
196
|
+
useInput((input, key) => {
|
|
197
|
+
if (!isActive)
|
|
198
|
+
return;
|
|
199
|
+
if (key.leftArrow) {
|
|
200
|
+
setSubTab((t) => (t > 0 ? t - 1 : AGENT_DEFS.length - 1));
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (key.rightArrow) {
|
|
204
|
+
setSubTab((t) => (t < AGENT_DEFS.length - 1 ? t + 1 : 0));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (input === "m") {
|
|
208
|
+
toggleMethod(subTab);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (input === "h") {
|
|
212
|
+
handleSetupHooks();
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (key.return) {
|
|
216
|
+
handleAction(subTab);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
const agent = agents[subTab];
|
|
220
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { marginBottom: 1, children: AGENT_DEFS.map((def, i) => (_jsxs(React.Fragment, { children: [i > 0 && _jsx(Text, { children: " | " }), _jsx(Text, { bold: subTab === i, underline: subTab === i, color: subTab === i ? "cyan" : undefined, children: def.displayName })] }, def.driverName))) }), _jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 2, paddingY: 1, children: [_jsx(Text, { bold: true, children: agent.displayName }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { children: ["Method: ", _jsx(Text, { color: "magenta", bold: true, children: agent.installMethod === "npm" ? "npm" : "Homebrew" }), _jsx(Text, { dimColor: true, children: " (m to switch)" })] }), _jsxs(Text, { children: ["Installed: ", agent.status === "checking" ? "..." : agent.installedVersion ?? "not installed"] }), _jsxs(Text, { children: ["Latest: ", agent.status === "checking" ? "..." : agent.latestVersion ?? "unknown"] })] }), _jsxs(Box, { marginTop: 1, children: [agent.status === "checking" && (_jsx(Text, { color: "yellow", children: "Checking versions..." })), agent.status === "not_installed" && (_jsx(Text, { color: "cyan", bold: true, children: "[ Install ] (Enter)" })), agent.status === "update_available" && (_jsx(Text, { color: "yellow", bold: true, children: "[ Update ] (Enter)" })), agent.status === "up_to_date" && (_jsx(Text, { color: "green", children: "Up to date" })), agent.status === "installing" && (_jsx(Text, { color: "yellow", children: "Installing..." })), agent.status === "error" && (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "red", children: agent.error }), _jsx(Text, { dimColor: true, children: "(Enter to retry)" })] }))] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "\u2500\u2500\u2500 Sideband Hooks \u2500\u2500\u2500" }), (() => {
|
|
221
|
+
const hs = agent.command === "claude" ? hooksStatus.claude : hooksStatus.gemini;
|
|
222
|
+
return (_jsx(Box, { marginTop: 0, children: _jsxs(Text, { children: ["Hooks: ", hs === "checking" ? _jsx(Text, { color: "yellow", children: "checking..." })
|
|
223
|
+
: hs === "configured" || hs === "done" ? _jsx(Text, { color: "green", children: "configured" })
|
|
224
|
+
: hs === "installing" ? _jsx(Text, { color: "yellow", children: "installing..." })
|
|
225
|
+
: hs === "error" ? _jsx(Text, { color: "red", children: "error" })
|
|
226
|
+
: _jsx(Text, { color: "gray", children: "not configured" })] }) }));
|
|
227
|
+
})(), (() => {
|
|
228
|
+
const hs = agent.command === "claude" ? hooksStatus.claude : hooksStatus.gemini;
|
|
229
|
+
if (hs === "not_configured" || hs === "error") {
|
|
230
|
+
return (_jsx(Box, { children: _jsx(Text, { color: "cyan", bold: true, children: "[ Setup Hooks ] (h)" }) }));
|
|
231
|
+
}
|
|
232
|
+
if (hs === "done") {
|
|
233
|
+
return _jsx(Text, { color: "green", children: "Hooks installed successfully" });
|
|
234
|
+
}
|
|
235
|
+
return null;
|
|
236
|
+
})(), hooksError && (_jsx(Text, { color: "red", children: hooksError }))] })] })] }));
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=agents-settings-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents-settings-content.js","sourceRoot":"","sources":["../../../src/ui/components/agents-settings-content.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-modal.d.ts","sourceRoot":"","sources":["../../../src/ui/components/help-modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAsBD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA0CzE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
const KEYBINDINGS = [
|
|
4
|
+
["Ctrl+T", "New session"],
|
|
5
|
+
["Ctrl+W", "Close active session"],
|
|
6
|
+
["Ctrl+Q", "Quit app"],
|
|
7
|
+
["Ctrl+S", "Toggle settings"],
|
|
8
|
+
["Ctrl+B", "Toggle sidebar"],
|
|
9
|
+
["Ctrl+N / Ctrl+Down", "Next session"],
|
|
10
|
+
["Ctrl+P / Ctrl+Up", "Previous session"],
|
|
11
|
+
["Alt+1-9", "Jump to session N"],
|
|
12
|
+
["Alt+A", "Adopt standalone agent"],
|
|
13
|
+
["Ctrl+U", "Scroll up"],
|
|
14
|
+
["Ctrl+D", "Scroll down"],
|
|
15
|
+
["Mouse Wheel", "Scroll up/down"],
|
|
16
|
+
["Shift+Drag", "Select text (terminal)"],
|
|
17
|
+
["Ctrl+G / ?", "Toggle this help"],
|
|
18
|
+
["Esc", "Close modal / cancel"],
|
|
19
|
+
];
|
|
20
|
+
const KEY_COL_WIDTH = 22;
|
|
21
|
+
export function HelpModal({ onClose }) {
|
|
22
|
+
useInput((_input, key) => {
|
|
23
|
+
if (key.escape) {
|
|
24
|
+
onClose();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return (_jsx(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", width: "100%", height: "100%", children: _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, width: 52, children: [_jsx(Text, { bold: true, color: "cyan", children: "Keybindings" }), _jsx(Box, { marginTop: 1, flexDirection: "column", children: KEYBINDINGS.map(([key, desc]) => (_jsxs(Box, { children: [_jsx(Box, { width: KEY_COL_WIDTH, children: _jsx(Text, { color: "yellow", children: key }) }), _jsx(Text, { children: desc })] }, key))) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Press Esc to close" }) })] }) }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=help-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help-modal.js","sourceRoot":"","sources":["../../../src/ui/components/help-modal.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAM1C,MAAM,WAAW,GAA4B;IAC3C,CAAC,QAAQ,EAAE,aAAa,CAAC;IACzB,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAClC,CAAC,QAAQ,EAAE,UAAU,CAAC;IACtB,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAC7B,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAC5B,CAAC,oBAAoB,EAAE,cAAc,CAAC;IACtC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACxC,CAAC,SAAS,EAAE,mBAAmB,CAAC;IAChC,CAAC,OAAO,EAAE,wBAAwB,CAAC;IACnC,CAAC,QAAQ,EAAE,WAAW,CAAC;IACvB,CAAC,QAAQ,EAAE,aAAa,CAAC;IACzB,CAAC,aAAa,EAAE,gBAAgB,CAAC;IACjC,CAAC,YAAY,EAAE,wBAAwB,CAAC;IACxC,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAClC,CAAC,KAAK,EAAE,sBAAsB,CAAC;CAChC,CAAC;AAEF,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,MAAM,UAAU,SAAS,CAAC,EAAE,OAAO,EAAkB;IACnD,QAAQ,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACvB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,QAAQ,EACvB,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,YAEb,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,EAAE,aAET,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,4BAEhB,EACP,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,YACtC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAChC,MAAC,GAAG,eACF,KAAC,GAAG,IAAC,KAAK,EAAE,aAAa,YACvB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,GAAG,GAAQ,GAC7B,EACN,KAAC,IAAI,cAAE,IAAI,GAAQ,KAJX,GAAG,CAKP,CACP,CAAC,GACE,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,QAAQ,yCAA0B,GACpC,IACF,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface NewSessionDialogProps {
|
|
3
|
+
onSubmit: (driverName: string, cwd: string) => void;
|
|
4
|
+
onCancel: () => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function NewSessionDialog({ onSubmit, onCancel, }: NewSessionDialogProps): React.ReactElement;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=new-session-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-session-dialog.d.ts","sourceRoot":"","sources":["../../../src/ui/components/new-session-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAM5D,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AASD,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,QAAQ,GACT,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CA0J5C"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useMemo } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { getAllDrivers } from "../../agents/agent-registry.js";
|
|
5
|
+
import { PathInput } from "./path-input.js";
|
|
6
|
+
export function NewSessionDialog({ onSubmit, onCancel, }) {
|
|
7
|
+
const [step, setStep] = useState("select-agent");
|
|
8
|
+
const [selectedDriver, setSelectedDriver] = useState("");
|
|
9
|
+
const [entries, setEntries] = useState(() => getAllDrivers().map((d) => ({ driver: d, installed: null })));
|
|
10
|
+
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
11
|
+
// Check installation status on mount
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
let cancelled = false;
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
entry.driver.checkInstalled().then((installed) => {
|
|
16
|
+
if (cancelled)
|
|
17
|
+
return;
|
|
18
|
+
setEntries((prev) => prev.map((e) => e.driver.name === entry.driver.name ? { ...e, installed } : e));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return () => {
|
|
22
|
+
cancelled = true;
|
|
23
|
+
};
|
|
24
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
+
}, []);
|
|
26
|
+
const isLoading = entries.some((e) => e.installed === null);
|
|
27
|
+
// Indices of installed (selectable) drivers
|
|
28
|
+
const installedIndices = useMemo(() => entries
|
|
29
|
+
.map((e, i) => (e.installed === true ? i : -1))
|
|
30
|
+
.filter((i) => i >= 0), [entries]);
|
|
31
|
+
// Snap selectedIndex to nearest installed driver when results come in
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (installedIndices.length > 0 && !installedIndices.includes(selectedIndex)) {
|
|
34
|
+
setSelectedIndex(installedIndices[0]);
|
|
35
|
+
}
|
|
36
|
+
}, [installedIndices, selectedIndex]);
|
|
37
|
+
useInput((_input, key) => {
|
|
38
|
+
if (key.escape) {
|
|
39
|
+
onCancel();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (step !== "select-agent")
|
|
43
|
+
return;
|
|
44
|
+
if (key.downArrow) {
|
|
45
|
+
// Find next installed index after current
|
|
46
|
+
const next = installedIndices.find((i) => i > selectedIndex);
|
|
47
|
+
if (next !== undefined)
|
|
48
|
+
setSelectedIndex(next);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (key.upArrow) {
|
|
52
|
+
// Find previous installed index before current
|
|
53
|
+
const prev = [...installedIndices].reverse().find((i) => i < selectedIndex);
|
|
54
|
+
if (prev !== undefined)
|
|
55
|
+
setSelectedIndex(prev);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (key.return && !isLoading) {
|
|
59
|
+
const entry = entries[selectedIndex];
|
|
60
|
+
if (entry && entry.installed) {
|
|
61
|
+
setSelectedDriver(entry.driver.name);
|
|
62
|
+
setStep("enter-cwd");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
if (step === "select-agent") {
|
|
67
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "New Session" }), _jsx(Text, { dimColor: true, children: "Select an agent:" }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [isLoading && _jsx(Text, { color: "yellow", children: "\u280B Checking installed agents\u2026" }), entries.map((entry, i) => {
|
|
68
|
+
const isSelected = i === selectedIndex;
|
|
69
|
+
const isInstalled = entry.installed === true;
|
|
70
|
+
const isPending = entry.installed === null;
|
|
71
|
+
if (isPending && !isLoading)
|
|
72
|
+
return null;
|
|
73
|
+
if (isInstalled) {
|
|
74
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", bold: isSelected, children: isSelected ? "▸ " : " " }), _jsx(Text, { bold: isSelected, children: entry.driver.displayName })] }, entry.driver.name));
|
|
75
|
+
}
|
|
76
|
+
return (_jsxs(Text, { dimColor: true, children: [" ", entry.driver.displayName, isPending ? " (checking…)" : " (not installed)"] }, entry.driver.name));
|
|
77
|
+
})] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "\u2191\u2193 navigate \u00B7 Enter select \u00B7 Esc cancel" }) })] }));
|
|
78
|
+
}
|
|
79
|
+
const driverDisplayName = entries.find((e) => e.driver.name === selectedDriver)?.driver.displayName;
|
|
80
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsxs(Text, { bold: true, color: "cyan", children: ["New Session \u2014 ", driverDisplayName] }), _jsx(Text, { dimColor: true, children: "Working directory:" }), _jsx(Box, { marginTop: 1, children: _jsx(PathInput, { defaultValue: process.cwd(), onSubmit: (cwd) => {
|
|
81
|
+
onSubmit(selectedDriver, cwd || process.cwd());
|
|
82
|
+
} }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "\u2193 suggestions \u00B7 Tab accept \u00B7 Enter confirm \u00B7 Esc cancel" }) })] }));
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=new-session-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new-session-dialog.js","sourceRoot":"","sources":["../../../src/ui/components/new-session-dialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface PathInputProps {
|
|
3
|
+
defaultValue: string;
|
|
4
|
+
onSubmit: (path: string) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function PathInput({ defaultValue, onSubmit, }: PathInputProps): React.ReactElement;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=path-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-input.d.ts","sourceRoot":"","sources":["../../../src/ui/components/path-input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAMjD,UAAU,cAAc;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AA4CD,wBAAgB,SAAS,CAAC,EACxB,YAAY,EACZ,QAAQ,GACT,EAAE,cAAc,GAAG,KAAK,CAAC,YAAY,CA0JrC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useMemo } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import os from "node:os";
|
|
7
|
+
function resolveTilde(p) {
|
|
8
|
+
if (p === "~")
|
|
9
|
+
return os.homedir();
|
|
10
|
+
if (p.startsWith("~/"))
|
|
11
|
+
return path.join(os.homedir(), p.slice(2));
|
|
12
|
+
return p;
|
|
13
|
+
}
|
|
14
|
+
function listDirectories(inputValue) {
|
|
15
|
+
const resolved = resolveTilde(inputValue);
|
|
16
|
+
let dirToRead;
|
|
17
|
+
let prefix;
|
|
18
|
+
if (resolved.endsWith("/")) {
|
|
19
|
+
dirToRead = resolved;
|
|
20
|
+
prefix = "";
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
dirToRead = path.dirname(resolved);
|
|
24
|
+
prefix = path.basename(resolved).toLowerCase();
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const entries = fs.readdirSync(dirToRead, { withFileTypes: true });
|
|
28
|
+
const dirs = entries
|
|
29
|
+
.filter((e) => e.isDirectory() && !e.name.startsWith("."))
|
|
30
|
+
.map((e) => e.name)
|
|
31
|
+
.filter((name) => prefix === "" || name.toLowerCase().startsWith(prefix))
|
|
32
|
+
.sort();
|
|
33
|
+
return dirs.map((name) => path.join(dirToRead, name));
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function displayPath(fullPath) {
|
|
40
|
+
const home = os.homedir();
|
|
41
|
+
if (fullPath === home)
|
|
42
|
+
return "~";
|
|
43
|
+
if (fullPath.startsWith(home + "/"))
|
|
44
|
+
return "~/" + fullPath.slice(home.length + 1);
|
|
45
|
+
return fullPath;
|
|
46
|
+
}
|
|
47
|
+
const MAX_VISIBLE = 6;
|
|
48
|
+
export function PathInput({ defaultValue, onSubmit, }) {
|
|
49
|
+
const [value, setValue] = useState(defaultValue);
|
|
50
|
+
const [cursorOffset, setCursorOffset] = useState(0); // offset from end
|
|
51
|
+
const [highlightIndex, setHighlightIndex] = useState(-1);
|
|
52
|
+
const [inSuggestions, setInSuggestions] = useState(false);
|
|
53
|
+
const suggestions = useMemo(() => listDirectories(value), [value]);
|
|
54
|
+
const scrollOffset = useMemo(() => {
|
|
55
|
+
if (highlightIndex < 0)
|
|
56
|
+
return 0;
|
|
57
|
+
if (highlightIndex < MAX_VISIBLE)
|
|
58
|
+
return 0;
|
|
59
|
+
return Math.min(highlightIndex - MAX_VISIBLE + 1, Math.max(0, suggestions.length - MAX_VISIBLE));
|
|
60
|
+
}, [highlightIndex, suggestions.length]);
|
|
61
|
+
const visibleSuggestions = suggestions.slice(scrollOffset, scrollOffset + MAX_VISIBLE);
|
|
62
|
+
const cursorPos = value.length - cursorOffset;
|
|
63
|
+
useInput((input, key) => {
|
|
64
|
+
// --- Suggestion navigation ---
|
|
65
|
+
if (key.downArrow) {
|
|
66
|
+
if (suggestions.length > 0) {
|
|
67
|
+
setInSuggestions(true);
|
|
68
|
+
setHighlightIndex((prev) => prev < suggestions.length - 1 ? prev + 1 : prev);
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (key.upArrow) {
|
|
73
|
+
if (inSuggestions) {
|
|
74
|
+
if (highlightIndex <= 0) {
|
|
75
|
+
setInSuggestions(false);
|
|
76
|
+
setHighlightIndex(-1);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
setHighlightIndex((prev) => prev - 1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (key.tab &&
|
|
85
|
+
inSuggestions &&
|
|
86
|
+
highlightIndex >= 0 &&
|
|
87
|
+
highlightIndex < suggestions.length) {
|
|
88
|
+
const selected = suggestions[highlightIndex];
|
|
89
|
+
setValue(selected + "/");
|
|
90
|
+
setCursorOffset(0);
|
|
91
|
+
setInSuggestions(false);
|
|
92
|
+
setHighlightIndex(-1);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// --- Submit ---
|
|
96
|
+
if (key.return) {
|
|
97
|
+
if (inSuggestions &&
|
|
98
|
+
highlightIndex >= 0 &&
|
|
99
|
+
highlightIndex < suggestions.length) {
|
|
100
|
+
const selected = suggestions[highlightIndex];
|
|
101
|
+
setValue(selected + "/");
|
|
102
|
+
setCursorOffset(0);
|
|
103
|
+
setInSuggestions(false);
|
|
104
|
+
setHighlightIndex(-1);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
onSubmit(resolveTilde(value));
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// --- Text editing (exits suggestion mode) ---
|
|
112
|
+
if (key.backspace || key.delete) {
|
|
113
|
+
if (cursorOffset < value.length) {
|
|
114
|
+
const pos = value.length - cursorOffset;
|
|
115
|
+
setValue(value.slice(0, pos - 1) + value.slice(pos));
|
|
116
|
+
}
|
|
117
|
+
setInSuggestions(false);
|
|
118
|
+
setHighlightIndex(-1);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (key.leftArrow) {
|
|
122
|
+
setCursorOffset((prev) => Math.min(prev + 1, value.length));
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (key.rightArrow) {
|
|
126
|
+
setCursorOffset((prev) => Math.max(prev - 1, 0));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Ignore control sequences
|
|
130
|
+
if (key.ctrl || key.meta || key.escape || key.tab) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
// --- Character input ---
|
|
134
|
+
if (input) {
|
|
135
|
+
const pos = value.length - cursorOffset;
|
|
136
|
+
setValue(value.slice(0, pos) + input + value.slice(pos));
|
|
137
|
+
setInSuggestions(false);
|
|
138
|
+
setHighlightIndex(-1);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
// Render text input with cursor
|
|
142
|
+
const beforeCursor = value.slice(0, cursorPos);
|
|
143
|
+
const cursorChar = cursorPos < value.length ? value[cursorPos] : " ";
|
|
144
|
+
const afterCursor = cursorPos < value.length ? value.slice(cursorPos + 1) : "";
|
|
145
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: "❯ " }), _jsx(Text, { children: beforeCursor }), _jsx(Text, { inverse: true, children: cursorChar }), _jsx(Text, { children: afterCursor })] }), suggestions.length > 0 && (_jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [scrollOffset > 0 && _jsx(Text, { dimColor: true, children: " ↑ more" }), visibleSuggestions.map((suggestion, i) => {
|
|
146
|
+
const actualIndex = scrollOffset + i;
|
|
147
|
+
const isHighlighted = inSuggestions && actualIndex === highlightIndex;
|
|
148
|
+
return (_jsx(Text, { children: isHighlighted ? (_jsx(Text, { color: "cyan", bold: true, children: "▸ " + displayPath(suggestion) })) : (_jsx(Text, { dimColor: true, children: " " + displayPath(suggestion) })) }, suggestion));
|
|
149
|
+
}), scrollOffset + MAX_VISIBLE < suggestions.length && (_jsx(Text, { dimColor: true, children: " ↓ more" }))] }))] }));
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=path-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-input.js","sourceRoot":"","sources":["../../../src/ui/components/path-input.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAOzB,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAE1C,IAAI,SAAiB,CAAC;IACtB,IAAI,MAAc,CAAC;IAEnB,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,SAAS,GAAG,QAAQ,CAAC;QACrB,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,OAAO;aACjB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACzD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACxE,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IAClC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,UAAU,SAAS,CAAC,EACxB,YAAY,EACZ,QAAQ,GACO;IACf,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB;IACvE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,cAAc,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QACjC,IAAI,cAAc,GAAG,WAAW;YAAE,OAAO,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CACb,cAAc,GAAG,WAAW,GAAG,CAAC,EAChC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,CAC9C,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzC,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAC1C,YAAY,EACZ,YAAY,GAAG,WAAW,CAC3B,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;IAE9C,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,gCAAgC;QAChC,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACvB,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAChD,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;oBACxB,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBACxB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IACE,GAAG,CAAC,GAAG;YACP,aAAa;YACb,cAAc,IAAI,CAAC;YACnB,cAAc,GAAG,WAAW,CAAC,MAAM,EACnC,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAE,CAAC;YAC9C,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;YACzB,eAAe,CAAC,CAAC,CAAC,CAAC;YACnB,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,IACE,aAAa;gBACb,cAAc,IAAI,CAAC;gBACnB,cAAc,GAAG,WAAW,CAAC,MAAM,EACnC,CAAC;gBACD,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAE,CAAC;gBAC9C,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;gBACzB,eAAe,CAAC,CAAC,CAAC,CAAC;gBACnB,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACxB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,OAAO;QACT,CAAC;QAED,+CAA+C;QAC/C,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;gBACxC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,eAAe,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YAClD,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;YACxC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACrE,MAAM,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/E,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,IAAI,GAAQ,EAChC,KAAC,IAAI,cAAE,YAAY,GAAQ,EAC3B,KAAC,IAAI,IAAC,OAAO,kBAAE,UAAU,GAAQ,EACjC,KAAC,IAAI,cAAE,WAAW,GAAQ,IACrB,EACN,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,UAAU,EAAE,CAAC,aACtC,YAAY,GAAG,CAAC,IAAI,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,GAAQ,EACtD,kBAAkB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;wBACxC,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;wBACrC,MAAM,aAAa,GACjB,aAAa,IAAI,WAAW,KAAK,cAAc,CAAC;wBAClD,OAAO,CACL,KAAC,IAAI,cACF,aAAa,CAAC,CAAC,CAAC,CACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,kBACpB,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,GAC1B,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,QAAQ,kBAAE,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,GAAQ,CACvD,IAPQ,UAAU,CAQd,CACR,CAAC;oBACJ,CAAC,CAAC,EACD,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC,MAAM,IAAI,CAClD,KAAC,IAAI,IAAC,QAAQ,kBAAE,UAAU,GAAQ,CACnC,IACG,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-panel.d.ts","sourceRoot":"","sources":["../../../src/ui/components/settings-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAuHD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,GACR,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA2IzC"}
|