@mrpatronz/nexusflow 2.3.1 → 2.4.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/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +15 -1
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/open.d.ts.map +1 -1
- package/dist/commands/open.js +66 -21
- package/dist/commands/open.js.map +1 -1
- package/dist/core/refresh.d.ts.map +1 -1
- package/dist/core/refresh.js +31 -0
- package/dist/core/refresh.js.map +1 -1
- package/dist/core/workspace.d.ts.map +1 -1
- package/dist/core/workspace.js +34 -13
- package/dist/core/workspace.js.map +1 -1
- package/dist/gui/antigravity-logo.png +0 -0
- package/dist/gui/assets/AgentsPage-BNHR9qux.js +3 -0
- package/dist/gui/assets/CSPContext-BG7no5S_.js +1 -0
- package/dist/gui/assets/DashboardPage-BScH3Cxp.js +1 -0
- package/dist/gui/assets/{GettingStartedPage-BJvrh67p.js → GettingStartedPage-AWlI-176.js} +1 -1
- package/dist/gui/assets/ProjectsPage-Bojj7gxI.js +1 -0
- package/dist/gui/assets/ScaffoldRepoInline-DJMbeHVM.js +1 -0
- package/dist/gui/assets/SettingsPage-BAdXO8X0.js +1 -0
- package/dist/gui/assets/SkillsPage-CF6Db1FA.js +6 -0
- package/dist/gui/assets/StartWorkPage-BQid3uIw.js +1 -0
- package/dist/gui/assets/{StrategiesPage-CWMrYI29.js → StrategiesPage-nGbR9TAc.js} +2 -2
- package/dist/gui/assets/WorkspacesPage-7XRtVJNF.js +2 -0
- package/dist/gui/assets/{alert-dialog-CroDe9HW.js → alert-dialog-67uzXJi4.js} +1 -1
- package/dist/gui/assets/antigravity-logo-DRKQga2U.png +0 -0
- package/dist/gui/assets/{badge-BnkhqVEF.js → badge-CAohJGj6.js} +1 -1
- package/dist/gui/assets/{bot-wH0FKlic.js → bot-C2HWrAft.js} +1 -1
- package/dist/gui/assets/{button-cPldH5S4.js → button-BDDZnIHx.js} +1 -1
- package/dist/gui/assets/card-BKXzd_5L.js +1 -0
- package/dist/gui/assets/chevron-down-qTL8HPug.js +1 -0
- package/dist/gui/assets/{circle-plus-C0PNc7h4.js → circle-plus-lmU1yNJd.js} +1 -1
- package/dist/gui/assets/{code-xml-Chu1p81J.js → code-xml-jFAa3-TT.js} +1 -1
- package/dist/gui/assets/{cpu-CPUNnHRM.js → cpu-Cdwd84Jz.js} +1 -1
- package/dist/gui/assets/{empty-DWyDwDYB.js → empty-BdlgbifD.js} +1 -1
- package/dist/gui/assets/{git-branch-Dw55pQWa.js → git-branch-Cfj9D8yW.js} +1 -1
- package/dist/gui/assets/index-CZoZQkeC.css +2 -0
- package/dist/gui/assets/index-V1dDX1O_.js +50 -0
- package/dist/gui/assets/isElementDisabled-D_fu2zfc.js +1 -0
- package/dist/gui/assets/{label-JFgMNsTn.js → label-CG5exjag.js} +1 -1
- package/dist/gui/assets/square-DlIYnlSq.js +1 -0
- package/dist/gui/assets/store-D7ixdVck.js +3 -0
- package/dist/gui/assets/styles-CVwNuFCx.js +1 -0
- package/dist/gui/assets/textarea-BNRuIXNs.js +1 -0
- package/dist/gui/assets/{trash-2-Da8F2gKd.js → trash-2-CtR35_eF.js} +1 -1
- package/dist/gui/assets/useAriaLabelledBy-DfRdwH8a.js +1 -0
- package/dist/gui/assets/useValueChanged-CStSGSsD.js +1 -0
- package/dist/gui/assets/vsc-Di05BTNr.js +1 -0
- package/dist/gui/assets/{zap-FQrDnrgb.js → zap-CWG_Lvki.js} +1 -1
- package/dist/gui/index.html +9 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +129 -22
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +178 -6
- package/dist/server.test.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/detect-editors.d.ts +1 -7
- package/dist/utils/detect-editors.d.ts.map +1 -1
- package/dist/utils/detect-editors.js +12 -10
- package/dist/utils/detect-editors.js.map +1 -1
- package/dist/utils/detect-editors.test.js +58 -25
- package/dist/utils/detect-editors.test.js.map +1 -1
- package/dist/utils/open-editor.d.ts +1 -1
- package/dist/utils/open-editor.d.ts.map +1 -1
- package/dist/utils/open-editor.js +11 -2
- package/dist/utils/open-editor.js.map +1 -1
- package/dist/utils/prompts.d.ts +5 -1
- package/dist/utils/prompts.d.ts.map +1 -1
- package/dist/utils/prompts.js +16 -0
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/session-finder.d.ts +9 -0
- package/dist/utils/session-finder.d.ts.map +1 -1
- package/dist/utils/session-finder.js +108 -48
- package/dist/utils/session-finder.js.map +1 -1
- package/dist/utils/session-finder.test.js +105 -1
- package/dist/utils/session-finder.test.js.map +1 -1
- package/dist/utils/terminal-launch.d.ts +39 -0
- package/dist/utils/terminal-launch.d.ts.map +1 -0
- package/dist/utils/terminal-launch.js +205 -0
- package/dist/utils/terminal-launch.js.map +1 -0
- package/dist/utils/terminal-launch.test.d.ts +2 -0
- package/dist/utils/terminal-launch.test.d.ts.map +1 -0
- package/dist/utils/terminal-launch.test.js +117 -0
- package/dist/utils/terminal-launch.test.js.map +1 -0
- package/dist/utils/workspace-launch.d.ts.map +1 -1
- package/dist/utils/workspace-launch.js +3 -1
- package/dist/utils/workspace-launch.js.map +1 -1
- package/package.json +1 -1
- package/dist/gui/assets/AgentsPage-C7wGK7q-.js +0 -3
- package/dist/gui/assets/DashboardPage-DqZRdOF3.js +0 -1
- package/dist/gui/assets/ProjectsPage-B0VFV1vX.js +0 -1
- package/dist/gui/assets/ScaffoldRepoInline-DSt_6QLb.js +0 -1
- package/dist/gui/assets/Separator-Chx6O62Y.js +0 -1
- package/dist/gui/assets/SettingsPage-DO5HasvS.js +0 -1
- package/dist/gui/assets/SkillsPage-CvRIKdsQ.js +0 -6
- package/dist/gui/assets/StartWorkPage-CK5QF6Oa.js +0 -1
- package/dist/gui/assets/WorkspaceLauncher-EIY_u44S.js +0 -1
- package/dist/gui/assets/WorkspacesPage-CHUfqrA6.js +0 -6
- package/dist/gui/assets/card-82INhRRE.js +0 -1
- package/dist/gui/assets/chevron-down-DDmhvRLr.js +0 -1
- package/dist/gui/assets/index-Bq5NL5AJ.css +0 -2
- package/dist/gui/assets/index-CcIOIZ24.js +0 -52
- package/dist/gui/assets/search-ChVovkOL.js +0 -1
- package/dist/gui/assets/skeleton-CCPbfn1L.js +0 -1
- package/dist/gui/assets/spinner-BCEaGbib.js +0 -1
- package/dist/gui/assets/terminal-gK6BMl3E.js +0 -1
- package/dist/gui/assets/textarea-D3-elOAa.js +0 -1
- package/dist/gui/assets/useAriaLabelledBy-DmwmZIqb.js +0 -1
- package/dist/gui/assets/useCompositeListItem-CZnlZ-eF.js +0 -1
- package/dist/gui/assets/useValueChanged-BfI2s7NX.js +0 -1
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module utils/terminal-launch
|
|
3
|
+
* Spawns external interactive terminal windows for workspaces and AI assistant sessions.
|
|
4
|
+
*/
|
|
5
|
+
import { execa, execaSync } from 'execa';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { isValidSessionUuid } from '../agent/session.js';
|
|
8
|
+
export const SUPPORTED_ASSISTANTS = new Set(['antigravity', 'claude', 'codex', 'copilot', 'cursor']);
|
|
9
|
+
/**
|
|
10
|
+
* Escapes a string for PowerShell single-quoted string literal (' -> '')
|
|
11
|
+
*/
|
|
12
|
+
export function escapePsSingleQuote(str) {
|
|
13
|
+
return str.replace(/'/g, "''");
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Escapes a string for POSIX single-quoted string literal (' -> '\'')
|
|
17
|
+
*/
|
|
18
|
+
export function escapePosixSingleQuote(str) {
|
|
19
|
+
return str.replace(/'/g, "'\\''");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Checks whether an executable exists on the system PATH.
|
|
23
|
+
*/
|
|
24
|
+
export function isBinaryOnPath(bin) {
|
|
25
|
+
try {
|
|
26
|
+
const checker = process.platform === 'win32' ? 'where.exe' : 'which';
|
|
27
|
+
const res = execaSync(checker, [bin], { reject: false, stdio: 'ignore' });
|
|
28
|
+
return res.exitCode === 0;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Builds the interactive CLI command string for starting or resuming a harness session.
|
|
36
|
+
*/
|
|
37
|
+
export function buildHarnessCliCommand(assistant, sessionId) {
|
|
38
|
+
const normalized = assistant.trim().toLowerCase();
|
|
39
|
+
if (!SUPPORTED_ASSISTANTS.has(normalized)) {
|
|
40
|
+
throw new Error(`Unsupported assistant for terminal launch: "${assistant}".`);
|
|
41
|
+
}
|
|
42
|
+
if (sessionId) {
|
|
43
|
+
if (!isValidSessionUuid(sessionId)) {
|
|
44
|
+
throw new Error('Invalid session UUID format.');
|
|
45
|
+
}
|
|
46
|
+
switch (normalized) {
|
|
47
|
+
case 'antigravity':
|
|
48
|
+
return `agy --conversation ${sessionId}`;
|
|
49
|
+
case 'claude':
|
|
50
|
+
return `claude --resume ${sessionId}`;
|
|
51
|
+
case 'codex':
|
|
52
|
+
return `codex resume ${sessionId}`;
|
|
53
|
+
case 'copilot':
|
|
54
|
+
return `copilot --resume ${sessionId}`;
|
|
55
|
+
case 'cursor':
|
|
56
|
+
return `cursor-agent --resume ${sessionId}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
switch (normalized) {
|
|
60
|
+
case 'antigravity':
|
|
61
|
+
return 'agy';
|
|
62
|
+
case 'claude':
|
|
63
|
+
return 'claude';
|
|
64
|
+
case 'codex':
|
|
65
|
+
return 'codex';
|
|
66
|
+
case 'copilot':
|
|
67
|
+
return 'copilot';
|
|
68
|
+
case 'cursor':
|
|
69
|
+
return 'cursor-agent';
|
|
70
|
+
default:
|
|
71
|
+
return 'agy';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validates and sanitizes a custom command string for terminal execution.
|
|
76
|
+
*/
|
|
77
|
+
export function sanitizeTerminalCommand(cmd) {
|
|
78
|
+
const trimmed = cmd.trim();
|
|
79
|
+
if (/[\r\n\0]/.test(trimmed)) {
|
|
80
|
+
throw new Error('Terminal command contains invalid newline or null characters.');
|
|
81
|
+
}
|
|
82
|
+
return trimmed;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Spawns an external interactive terminal at the given workspace directory.
|
|
86
|
+
*/
|
|
87
|
+
export async function launchWorkspaceTerminal(workspacePath, options = {}, platform = process.platform) {
|
|
88
|
+
const isAbsolute = platform === 'win32'
|
|
89
|
+
? path.win32.isAbsolute(workspacePath)
|
|
90
|
+
: (path.posix.isAbsolute(workspacePath) || path.win32.isAbsolute(workspacePath));
|
|
91
|
+
if (!isAbsolute) {
|
|
92
|
+
throw new Error('Workspace path must be an absolute directory.');
|
|
93
|
+
}
|
|
94
|
+
let cmdToRun = '';
|
|
95
|
+
if (options.command) {
|
|
96
|
+
cmdToRun = sanitizeTerminalCommand(options.command);
|
|
97
|
+
}
|
|
98
|
+
else if (options.assistant) {
|
|
99
|
+
cmdToRun = buildHarnessCliCommand(options.assistant, options.sessionId);
|
|
100
|
+
}
|
|
101
|
+
if (platform === 'win32') {
|
|
102
|
+
const winTitle = (options.title || 'NexusFlow Terminal').replace(/[^a-zA-Z0-9 _-]/g, '') || 'NexusFlow Terminal';
|
|
103
|
+
const escapedWs = escapePsSingleQuote(workspacePath);
|
|
104
|
+
const shellBin = isBinaryOnPath('pwsh.exe') ? 'pwsh.exe' : 'powershell.exe';
|
|
105
|
+
const titleScript = `$host.UI.RawUI.WindowTitle = '${escapePsSingleQuote(winTitle)}'; `;
|
|
106
|
+
const focusPrefix = '$wshell = New-Object -ComObject Wscript.Shell; try { $wshell.AppActivate($PID) } catch {}; ';
|
|
107
|
+
const psScript = cmdToRun
|
|
108
|
+
? `${titleScript}${focusPrefix}Set-Location -LiteralPath '${escapedWs}'; ${cmdToRun}`
|
|
109
|
+
: `${titleScript}${focusPrefix}Set-Location -LiteralPath '${escapedWs}'`;
|
|
110
|
+
const encodedCmd = Buffer.from(psScript, 'utf16le').toString('base64');
|
|
111
|
+
// Method 1: Start-Process via powershell.exe (guarantees a visible, focused native console window)
|
|
112
|
+
try {
|
|
113
|
+
const res = await execa('powershell.exe', [
|
|
114
|
+
'-NoProfile',
|
|
115
|
+
'-NonInteractive',
|
|
116
|
+
'-Command',
|
|
117
|
+
`Start-Process -FilePath '${shellBin}' -ArgumentList '-NoExit', '-EncodedCommand', '${encodedCmd}' -WorkingDirectory '${escapedWs}'`,
|
|
118
|
+
], { reject: false, stdio: 'ignore' });
|
|
119
|
+
if (res.exitCode === 0) {
|
|
120
|
+
return { success: true, command: cmdToRun };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch { }
|
|
124
|
+
// Method 2: cmd.exe start
|
|
125
|
+
try {
|
|
126
|
+
const child = execa('cmd.exe', ['/c', 'start', '""', shellBin, '-NoExit', '-EncodedCommand', encodedCmd], {
|
|
127
|
+
detached: true,
|
|
128
|
+
stdio: 'ignore',
|
|
129
|
+
shell: false,
|
|
130
|
+
windowsHide: false,
|
|
131
|
+
});
|
|
132
|
+
if (child && typeof child.catch === 'function') {
|
|
133
|
+
child.catch(() => { });
|
|
134
|
+
}
|
|
135
|
+
if (child && typeof child.unref === 'function') {
|
|
136
|
+
child.unref();
|
|
137
|
+
}
|
|
138
|
+
return { success: true, command: cmdToRun };
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
throw new Error(`Failed to launch terminal on Windows: ${err instanceof Error ? err.message : String(err)}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (platform === 'darwin') {
|
|
145
|
+
const posixEscapedPath = escapePosixSingleQuote(workspacePath);
|
|
146
|
+
const appleScriptSafePath = posixEscapedPath.replace(/[\\"]/g, '\\$&');
|
|
147
|
+
const appleScriptSafeCmd = cmdToRun ? cmdToRun.replace(/[\\"]/g, '\\$&') : '';
|
|
148
|
+
const script = cmdToRun
|
|
149
|
+
? `tell application "Terminal" to do script "cd '${appleScriptSafePath}' && ${appleScriptSafeCmd}"\ntell application "Terminal" to activate`
|
|
150
|
+
: `tell application "Terminal" to do script "cd '${appleScriptSafePath}'"\ntell application "Terminal" to activate`;
|
|
151
|
+
try {
|
|
152
|
+
const child = execa('/usr/bin/osascript', ['-e', script], {
|
|
153
|
+
detached: true,
|
|
154
|
+
stdio: 'ignore',
|
|
155
|
+
});
|
|
156
|
+
if (child && typeof child.catch === 'function') {
|
|
157
|
+
child.catch(() => { });
|
|
158
|
+
}
|
|
159
|
+
if (child && typeof child.unref === 'function') {
|
|
160
|
+
child.unref();
|
|
161
|
+
}
|
|
162
|
+
return { success: true, command: cmdToRun };
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
throw new Error(`Failed to launch Terminal.app on macOS: ${err instanceof Error ? err.message : String(err)}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (platform === 'linux') {
|
|
169
|
+
const escapedWs = escapePosixSingleQuote(workspacePath);
|
|
170
|
+
const bashScript = cmdToRun
|
|
171
|
+
? `cd '${escapedWs}' && ${cmdToRun}; exec bash`
|
|
172
|
+
: `cd '${escapedWs}'; exec bash`;
|
|
173
|
+
const linuxTerminals = [
|
|
174
|
+
{ bin: 'gnome-terminal', args: ['--working-directory', workspacePath, '--', 'bash', '-c', `${cmdToRun ? cmdToRun + '; ' : ''}exec bash`] },
|
|
175
|
+
{ bin: 'konsole', args: ['--workdir', workspacePath, '-e', 'bash', '-c', `${cmdToRun ? cmdToRun + '; ' : ''}exec bash`] },
|
|
176
|
+
{ bin: 'xfce4-terminal', args: ['--working-directory', workspacePath, '-e', `bash -c "${cmdToRun ? cmdToRun + '; ' : ''}exec bash"`] },
|
|
177
|
+
{ bin: 'alacritty', args: ['--working-directory', workspacePath, '-e', 'bash', '-c', `${cmdToRun ? cmdToRun + '; ' : ''}exec bash`] },
|
|
178
|
+
{ bin: 'x-terminal-emulator', args: ['-e', 'bash', '-c', bashScript] },
|
|
179
|
+
{ bin: 'xterm', args: ['-e', 'bash', '-c', bashScript] },
|
|
180
|
+
];
|
|
181
|
+
for (const term of linuxTerminals) {
|
|
182
|
+
if (!isBinaryOnPath(term.bin))
|
|
183
|
+
continue;
|
|
184
|
+
try {
|
|
185
|
+
const child = execa(term.bin, term.args, {
|
|
186
|
+
detached: true,
|
|
187
|
+
stdio: 'ignore',
|
|
188
|
+
});
|
|
189
|
+
if (child && typeof child.catch === 'function') {
|
|
190
|
+
child.catch(() => { });
|
|
191
|
+
}
|
|
192
|
+
if (child && typeof child.unref === 'function') {
|
|
193
|
+
child.unref();
|
|
194
|
+
}
|
|
195
|
+
return { success: true, command: cmdToRun };
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Try next candidate
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
throw new Error('No supported Linux terminal emulator found on PATH (tried gnome-terminal, konsole, xfce4-terminal, alacritty, x-terminal-emulator, xterm).');
|
|
202
|
+
}
|
|
203
|
+
throw new Error(`Terminal launching is not supported on platform: ${platform}`);
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=terminal-launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-launch.js","sourceRoot":"","sources":["../../src/utils/terminal-launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-launch.test.d.ts","sourceRoot":"","sources":["../../src/utils/terminal-launch.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { buildHarnessCliCommand, launchWorkspaceTerminal, escapePsSingleQuote, escapePosixSingleQuote, } from './terminal-launch.js';
|
|
3
|
+
import { execa, execaSync } from 'execa';
|
|
4
|
+
vi.mock('execa');
|
|
5
|
+
describe('terminal-launch utility', () => {
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
vi.resetAllMocks();
|
|
8
|
+
});
|
|
9
|
+
describe('escaping helpers', () => {
|
|
10
|
+
it('escapes single quotes for PowerShell', () => {
|
|
11
|
+
expect(escapePsSingleQuote("C:\\Bob's Workspace\\repo")).toBe("C:\\Bob''s Workspace\\repo");
|
|
12
|
+
});
|
|
13
|
+
it('escapes single quotes for POSIX shell', () => {
|
|
14
|
+
expect(escapePosixSingleQuote("/home/bob's-workspace/repo")).toBe("/home/bob'\\''s-workspace/repo");
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
describe('buildHarnessCliCommand', () => {
|
|
18
|
+
it('builds start commands for known assistants', () => {
|
|
19
|
+
expect(buildHarnessCliCommand('antigravity')).toBe('agy');
|
|
20
|
+
expect(buildHarnessCliCommand('claude')).toBe('claude');
|
|
21
|
+
expect(buildHarnessCliCommand('codex')).toBe('codex');
|
|
22
|
+
expect(buildHarnessCliCommand('copilot')).toBe('copilot');
|
|
23
|
+
expect(buildHarnessCliCommand('cursor')).toBe('cursor-agent');
|
|
24
|
+
});
|
|
25
|
+
it('builds resume commands when a valid UUID is provided', () => {
|
|
26
|
+
const uuid = '3a14e9f7-628b-4d51-87b4-1065a7df4921';
|
|
27
|
+
expect(buildHarnessCliCommand('antigravity', uuid)).toBe(`agy --conversation ${uuid}`);
|
|
28
|
+
expect(buildHarnessCliCommand('claude', uuid)).toBe(`claude --resume ${uuid}`);
|
|
29
|
+
expect(buildHarnessCliCommand('codex', uuid)).toBe(`codex resume ${uuid}`);
|
|
30
|
+
expect(buildHarnessCliCommand('copilot', uuid)).toBe(`copilot --resume ${uuid}`);
|
|
31
|
+
expect(buildHarnessCliCommand('cursor', uuid)).toBe(`cursor-agent --resume ${uuid}`);
|
|
32
|
+
});
|
|
33
|
+
it('throws on invalid session UUID', () => {
|
|
34
|
+
expect(() => buildHarnessCliCommand('claude', 'invalid-id')).toThrow('Invalid session UUID format');
|
|
35
|
+
});
|
|
36
|
+
it('throws on unsupported assistant', () => {
|
|
37
|
+
expect(() => buildHarnessCliCommand('unsupported-ai')).toThrow('Unsupported assistant');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('launchWorkspaceTerminal', () => {
|
|
41
|
+
it('throws on relative workspace path', async () => {
|
|
42
|
+
await expect(launchWorkspaceTerminal('relative/path')).rejects.toThrow('must be an absolute directory');
|
|
43
|
+
});
|
|
44
|
+
it('launches PowerShell via Start-Process when available on Windows', async () => {
|
|
45
|
+
vi.mocked(execaSync).mockImplementation((_cmd, args) => {
|
|
46
|
+
if (Array.isArray(args) && args[0] === 'pwsh.exe')
|
|
47
|
+
return { exitCode: 0 };
|
|
48
|
+
return { exitCode: 1 };
|
|
49
|
+
});
|
|
50
|
+
vi.mocked(execa).mockResolvedValue({ exitCode: 0 });
|
|
51
|
+
const res = await launchWorkspaceTerminal("C:\\workspaces\\bob's-app", {
|
|
52
|
+
assistant: 'antigravity',
|
|
53
|
+
sessionId: '3a14e9f7-628b-4d51-87b4-1065a7df4921',
|
|
54
|
+
}, 'win32');
|
|
55
|
+
expect(res.success).toBe(true);
|
|
56
|
+
expect(res.command).toBe('agy --conversation 3a14e9f7-628b-4d51-87b4-1065a7df4921');
|
|
57
|
+
const expectedScript = "$host.UI.RawUI.WindowTitle = 'NexusFlow Terminal'; $wshell = New-Object -ComObject Wscript.Shell; try { $wshell.AppActivate($PID) } catch {}; Set-Location -LiteralPath 'C:\\workspaces\\bob''s-app'; agy --conversation 3a14e9f7-628b-4d51-87b4-1065a7df4921";
|
|
58
|
+
const expectedEncoded = Buffer.from(expectedScript, 'utf16le').toString('base64');
|
|
59
|
+
expect(execa).toHaveBeenCalledWith('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `Start-Process -FilePath 'pwsh.exe' -ArgumentList '-NoExit', '-EncodedCommand', '${expectedEncoded}' -WorkingDirectory 'C:\\workspaces\\bob''s-app'`], { reject: false, stdio: 'ignore' });
|
|
60
|
+
});
|
|
61
|
+
it('falls back to cmd.exe start when Start-Process fails on Windows', async () => {
|
|
62
|
+
const mockUnref = vi.fn();
|
|
63
|
+
vi.mocked(execaSync).mockImplementation((_cmd, args) => {
|
|
64
|
+
if (Array.isArray(args) && args[0] === 'pwsh.exe')
|
|
65
|
+
return { exitCode: 0 };
|
|
66
|
+
return { exitCode: 1 };
|
|
67
|
+
});
|
|
68
|
+
vi.mocked(execa).mockImplementation((cmd) => {
|
|
69
|
+
if (cmd === 'powershell.exe') {
|
|
70
|
+
return Promise.resolve({ exitCode: 1 });
|
|
71
|
+
}
|
|
72
|
+
return { unref: mockUnref, catch: vi.fn() };
|
|
73
|
+
});
|
|
74
|
+
const res = await launchWorkspaceTerminal("C:\\workspaces\\bob's-app", {
|
|
75
|
+
assistant: 'antigravity',
|
|
76
|
+
sessionId: '3a14e9f7-628b-4d51-87b4-1065a7df4921',
|
|
77
|
+
}, 'win32');
|
|
78
|
+
expect(res.success).toBe(true);
|
|
79
|
+
expect(res.command).toBe('agy --conversation 3a14e9f7-628b-4d51-87b4-1065a7df4921');
|
|
80
|
+
const expectedScript = "$host.UI.RawUI.WindowTitle = 'NexusFlow Terminal'; $wshell = New-Object -ComObject Wscript.Shell; try { $wshell.AppActivate($PID) } catch {}; Set-Location -LiteralPath 'C:\\workspaces\\bob''s-app'; agy --conversation 3a14e9f7-628b-4d51-87b4-1065a7df4921";
|
|
81
|
+
const expectedEncoded = Buffer.from(expectedScript, 'utf16le').toString('base64');
|
|
82
|
+
expect(execa).toHaveBeenCalledWith('cmd.exe', ['/c', 'start', '""', 'pwsh.exe', '-NoExit', '-EncodedCommand', expectedEncoded], expect.objectContaining({ detached: true, shell: false, windowsHide: false }));
|
|
83
|
+
expect(mockUnref).toHaveBeenCalled();
|
|
84
|
+
});
|
|
85
|
+
it('launches Terminal.app on macOS via osascript', async () => {
|
|
86
|
+
const mockUnref = vi.fn();
|
|
87
|
+
vi.mocked(execa).mockReturnValue({ unref: mockUnref, catch: vi.fn() });
|
|
88
|
+
const res = await launchWorkspaceTerminal('/Users/user/workspace', {
|
|
89
|
+
assistant: 'codex',
|
|
90
|
+
sessionId: '3a14e9f7-628b-4d51-87b4-1065a7df4921',
|
|
91
|
+
}, 'darwin');
|
|
92
|
+
expect(res.success).toBe(true);
|
|
93
|
+
expect(res.command).toBe('codex resume 3a14e9f7-628b-4d51-87b4-1065a7df4921');
|
|
94
|
+
expect(execa).toHaveBeenCalledWith('/usr/bin/osascript', ['-e', expect.stringContaining('tell application "Terminal"')], expect.objectContaining({ detached: true, stdio: 'ignore' }));
|
|
95
|
+
expect(mockUnref).toHaveBeenCalled();
|
|
96
|
+
});
|
|
97
|
+
it('searches and launches terminal emulator on Linux', async () => {
|
|
98
|
+
const mockUnref = vi.fn();
|
|
99
|
+
vi.mocked(execaSync).mockImplementation((_cmd, args) => {
|
|
100
|
+
if (Array.isArray(args) && (args[0] === 'gnome-terminal' || args[0] === 'konsole'))
|
|
101
|
+
return { exitCode: 1 };
|
|
102
|
+
if (Array.isArray(args) && args[0] === 'xfce4-terminal')
|
|
103
|
+
return { exitCode: 0 };
|
|
104
|
+
return { exitCode: 1 };
|
|
105
|
+
});
|
|
106
|
+
vi.mocked(execa).mockReturnValue({ unref: mockUnref, catch: vi.fn() });
|
|
107
|
+
const res = await launchWorkspaceTerminal('/home/user/workspace', {
|
|
108
|
+
assistant: 'claude',
|
|
109
|
+
}, 'linux');
|
|
110
|
+
expect(res.success).toBe(true);
|
|
111
|
+
expect(res.command).toBe('claude');
|
|
112
|
+
expect(execa).toHaveBeenCalledWith('xfce4-terminal', ['--working-directory', '/home/user/workspace', '-e', 'bash -c "claude; exec bash"'], expect.objectContaining({ detached: true, stdio: 'ignore' }));
|
|
113
|
+
expect(mockUnref).toHaveBeenCalled();
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
//# sourceMappingURL=terminal-launch.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-launch.test.js","sourceRoot":"","sources":["../../src/utils/terminal-launch.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-launch.d.ts","sourceRoot":"","sources":["../../src/utils/workspace-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAarB,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5D,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBlD,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,CAOxF;
|
|
1
|
+
{"version":3,"file":"workspace-launch.d.ts","sourceRoot":"","sources":["../../src/utils/workspace-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAarB,UAAU,iBAAiB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5D,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5C;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBlD,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,CAOxF;AA4DD,6EAA6E;AAC7E,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,GAAG,aAAa,CAAC,EAC7D,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,OAAO,CAAC,CAiClB;AAED,mFAAmF;AACnF,wBAAsB,4BAA4B,CAChD,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAsClC;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,kBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC5F;AAED,4EAA4E;AAC5E,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,qBAAiD,EACzD,QAAQ,kBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED,+DAA+D;AAC/D,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7E"}
|
|
@@ -57,10 +57,12 @@ const DESKTOP_TARGETS = [
|
|
|
57
57
|
},
|
|
58
58
|
];
|
|
59
59
|
const EDITOR_TARGETS = [
|
|
60
|
-
{ id: 'vscode', name: 'VS Code', command: 'code', icon: 'vscode', description: 'Open the generated VS Code workspace.' },
|
|
61
60
|
{ id: 'vscode-insiders', name: 'VS Code Insiders', command: 'code-insiders', icon: 'vscode-insiders', description: 'Open the generated workspace in Insiders.' },
|
|
61
|
+
{ id: 'vscode', name: 'VS Code', command: 'code', icon: 'vscode', description: 'Open the generated VS Code workspace.' },
|
|
62
62
|
{ id: 'cursor', name: 'Cursor', command: 'cursor', icon: 'cursor', description: 'Open the generated workspace in Cursor.' },
|
|
63
63
|
{ id: 'antigravity', name: 'Antigravity', command: 'antigravity', icon: 'antigravity', description: 'Open the workspace in Antigravity.' },
|
|
64
|
+
{ id: 'powershell', name: 'PowerShell', command: 'powershell', icon: 'powershell', description: 'Open an interactive PowerShell terminal in this workspace.' },
|
|
65
|
+
{ id: 'cmd', name: 'Command Prompt', command: 'cmd', icon: 'cmd', description: 'Open Command Prompt in this workspace.' },
|
|
64
66
|
{ id: 'intellij', name: 'IntelliJ IDEA', command: 'idea', icon: 'intellij', description: 'Open the workspace folder in IntelliJ IDEA.' },
|
|
65
67
|
{ id: 'webstorm', name: 'WebStorm', command: 'webstorm', icon: 'webstorm', description: 'Open the workspace folder in WebStorm.' },
|
|
66
68
|
{ id: 'pycharm', name: 'PyCharm', command: 'charm', icon: 'pycharm', description: 'Open the workspace folder in PyCharm.' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-launch.js","sourceRoot":"","sources":["../../src/utils/workspace-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyBhD,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AACxD,MAAM,2BAA2B,GAAG,cAAc,uBAAuB,IAAI,CAAC;AAC9E,MAAM,wBAAwB,GAC5B,sMAAsM,CAAC;AAEzM,SAAS,kBAAkB,CAAC,KAAa,EAAE,YAAoB;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,YAAY;YAAE,MAAM;QAC/D,MAAM,IAAI,aAAa,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,0BAA0B,CAAC,OAAqC;IAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,WAAW;QAAE,OAAO,wBAAwB,CAAC;IAElD,MAAM,MAAM,GAAG,GAAG,wBAAwB,sBAAsB,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,GAAG,MAAM,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,eAAe,GAAiC;IACpD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;QACjC,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CACrC,4BAA4B,kBAAkB,CAAC,aAAa,CAAC,EAAE;cAC7D,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,kBAAkB,CAAC,SAAS,CAAC,EAAE;KAClF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CACrC,4BAA4B,kBAAkB,CAAC,aAAa,CAAC,EAAE;cAC7D,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD;CACO,CAAC;AAEX,MAAM,cAAc,GAAgC;IAClD,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"workspace-launch.js","sourceRoot":"","sources":["../../src/utils/workspace-launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAyBhD,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,uBAAuB,GAAG,uBAAuB,CAAC;AACxD,MAAM,2BAA2B,GAAG,cAAc,uBAAuB,IAAI,CAAC;AAC9E,MAAM,wBAAwB,GAC5B,sMAAsM,CAAC;AAEzM,SAAS,kBAAkB,CAAC,KAAa,EAAE,YAAoB;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC5C,MAAM,aAAa,GAAG,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,YAAY;YAAE,MAAM;QAC/D,MAAM,IAAI,aAAa,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,0BAA0B,CAAC,OAAqC;IAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,WAAW;QAAE,OAAO,wBAAwB,CAAC;IAElD,MAAM,MAAM,GAAG,GAAG,wBAAwB,sBAAsB,CAAC;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,GAAG,MAAM,GAAG,kBAAkB,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,eAAe,GAAiC;IACpD;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,2DAA2D;QACxE,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;QACjC,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CACrC,4BAA4B,kBAAkB,CAAC,aAAa,CAAC,EAAE;cAC7D,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,cAAc,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,kBAAkB,CAAC,SAAS,CAAC,EAAE;KAClF;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,6EAA6E;QAC1F,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,WAAW,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CACrC,4BAA4B,kBAAkB,CAAC,aAAa,CAAC,EAAE;cAC7D,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD;CACO,CAAC;AAEX,MAAM,cAAc,GAAgC;IAClD,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,2CAA2C,EAAE;IAChK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;IACxH,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;IAC3H,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,oCAAoC,EAAE;IAC1I,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,4DAA4D,EAAE;IAC9J,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,wCAAwC,EAAE;IACzH,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,6CAA6C,EAAE;IACxI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,wCAAwC,EAAE;IAClI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;IAC3H,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4CAA4C,EAAE;IACpI,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,mCAAmC,EAAE;IACzG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,wCAAwC,EAAE;CAC1H,CAAC;AAEX,SAAS,iBAAiB,CACxB,UAAwF,EACxF,IAA+B,EAC/B,iBAAyB;IAEzB,OAAO,EAAE,GAAG,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,IAAc;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAA6D,EAC7D,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG;YACX,4BAA4B,UAAU,CAAC,MAAM,EAAE;YAC/C,SAAS,UAAU,CAAC,MAAM,EAAE;SAC7B,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QACpE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC7C,IAAI,MAAM,eAAe,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,QAAQ,KAAK,OAAO,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,UAAU,EACV,CAAC,OAAO,EAAE,SAAS,EAAE,yBAAyB,CAAC,EAC/C,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAChC,CAAC;YACF,OAAO,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClF,aAAa,EAAE;KAChB,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEvG,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAyB,EAAE;QAC5E,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QACF,OAAO,mBAAmB,CAAC,KAAK,CAAC;YAC/B,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9C,CAAC,CAAC,iBAAiB,CACf,IAAI,EACJ,QAAQ,EACR,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO;gBAC/C,CAAC,CAAC,mEAAmE;gBACrE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,uDAAuD,CAC1E,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAyB,EAAE;QACnE,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QACF,OAAO,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3C,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;YAC9C,CAAC,CAAC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,4BAA4B,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAC3E,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,yEAAyE;QACzE,+EAA+E;QAC/E,iEAAiE;QACjE,IAAI,CAAC;YACH,MAAM,KAAK,CACT,SAAS,EACT,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,2BAA2B,CAAC,EACzD;gBACE,GAAG,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,GAAG,EAAE;gBACvC,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,IAAI;gBACjB,wBAAwB,EAAE,IAAI;aAC/B,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,uDAAuD;YACvD,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;AAC9E,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,aAAqB,EACrB,SAAgC,EAAE,IAAI,EAAE,eAAe,EAAE,EACzD,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACzE,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,MAAM,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,uDAAuD,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QACD,MAAM,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACvE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,qCAAqC,CAAC,CAAC;IACvE,CAAC;IACD,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACnD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,8BAA8B,CAAC,OAAe;IAC5D,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AACjF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{_ as e,b as t,g as n,h as r,m as i,t as a}from"./button-cPldH5S4.js";import{t as ee,xt as o}from"./spinner-BCEaGbib.js";import{t as s}from"./bot-wH0FKlic.js";import{a as te,c,i as l,n as ne,o as re,r as ie,s as ae,t as oe}from"./alert-dialog-CroDe9HW.js";import{t as se}from"./search-ChVovkOL.js";import{t as ce}from"./trash-2-Da8F2gKd.js";import{At as le,B as ue,Ct as u,Et as de,G as fe,R as pe,Y as me,d,dt as he,et as ge,f,ft as _e,g as p,h as m,mt as ve,p as h,u as g}from"./index-CcIOIZ24.js";import{t as _}from"./badge-BnkhqVEF.js";import{t as ye}from"./card-82INhRRE.js";import{a as v,i as be,n as y,r as b,t as x}from"./empty-DWyDwDYB.js";import{t as S}from"./label-JFgMNsTn.js";import{t as C}from"./textarea-D3-elOAa.js";var xe=r(`file-up`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),w=t(e(),1),T=n(),E={id:``,name:``,category:`general`,description:``,developerInstructions:``};function D(e){return e.toLowerCase().trim().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)}function O({showToast:e}){let[t,n]=(0,w.useState)(`global`),[r,O]=(0,w.useState)(``),[Se,k]=(0,w.useState)(!1),[A,j]=(0,w.useState)(!1),[M,N]=(0,w.useState)(null),[P,F]=(0,w.useState)(E),[I,L]=(0,w.useState)(``),[R,z]=(0,w.useState)(null),[B,V]=(0,w.useState)(null),{data:H=[],isLoading:Ce,isError:we}=pe(),{data:U=[]}=_e(),W=he(t===`global`?``:t),G=ge(),K=me(),q=fe(),J=ue(),Y=t!==`global`,Te=U.find(e=>e.id===t),X=!Y||Te?.assistants?.includes(`codex`),Z=Y&&X&&!W.isLoading&&!W.isError&&!!W.data;(0,w.useEffect)(()=>{if(!Y){z(null);return}W.data&&z([...W.data.enabledAgents??[]])},[Y,t,W.data]);let Q=(0,w.useMemo)(()=>{let e=r.trim().toLowerCase();return e?H.filter(t=>[t.name,t.description,t.category].some(t=>t.toLowerCase().includes(e))):H},[H,r]),Ee=new Set(R??W.data?.enabledAgents??[]);function $(){N(null),F(E),k(!0)}function De(e){N(e.id),F({id:e.id,name:e.name,category:e.category,description:e.description,developerInstructions:e.developerInstructions,model:e.model,modelReasoningEffort:e.modelReasoningEffort,sandboxMode:e.sandboxMode}),k(!0)}async function Oe(){try{let t=M??D(P.name);await G.mutateAsync({...P,id:t,name:t}),k(!1),e?.(`Codex agent saved`,`success`)}catch(t){e?.(t instanceof Error?t.message:`Failed to save agent`,`error`)}}async function ke(){try{await K.mutateAsync({toml:I,category:`general`}),j(!1),L(``),e?.(`Codex agent imported`,`success`)}catch(t){e?.(t instanceof Error?t.message:`Failed to import agent`,`error`)}}async function Ae(){if(B)try{await q.mutateAsync(B.id),V(null),e?.(`Agent deleted from the personal catalog`,`info`)}catch(t){e?.(t instanceof Error?t.message:`Failed to delete agent`,`error`)}}function je(e){if(!Z||R===null)return;let t=new Set(R);t.has(e)?t.delete(e):t.add(e),z([...t])}async function Me(){if(!(!W.data||R===null))try{await J.mutateAsync({workspaceId:t,expectedRevision:W.data.revision??0,enabledSkills:W.data.enabledSkills,enabledAgents:R,enabledCategories:W.data.enabledCategories??[]}),e?.(`Agent selection saved. Refresh the workspace to apply it.`,`success`)}catch(t){e?.(t instanceof Error?t.message:`Failed to save agent selection`,`error`)}}return(0,T.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,T.jsxs)(`header`,{className:`flex flex-wrap items-center justify-between gap-4 border-b border-border px-6 py-5`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,T.jsx)(`div`,{className:`rounded-lg bg-primary/10 p-2 text-primary`,children:(0,T.jsx)(s,{className:`h-5 w-5`})}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`h1`,{className:`text-xl font-bold tracking-tight`,children:`Codex Agent Library`}),(0,T.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Create and reuse project-scoped Codex custom agents.`})]})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,T.jsx)(a,{render:(0,T.jsx)(ve,{to:`/skills`}),variant:`outline`,size:`sm`,children:`Skills`}),(0,T.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-muted/50 px-3 py-1.5`,children:[(0,T.jsx)(de,{className:`h-4 w-4 text-muted-foreground`}),(0,T.jsx)(S,{htmlFor:`agent-scope`,className:`text-xs text-muted-foreground`,children:`Scope`}),(0,T.jsxs)(`select`,{id:`agent-scope`,value:t,onChange:e=>n(e.target.value),className:`cursor-pointer bg-transparent text-xs font-semibold text-foreground focus:outline-none`,children:[(0,T.jsx)(`option`,{value:`global`,children:`Personal catalog`}),U.map(e=>(0,T.jsx)(`option`,{value:e.id,children:e.id},e.id))]})]}),Y?(0,T.jsx)(a,{size:`sm`,onClick:Me,disabled:!Z||J.isPending,children:J.isPending?`Saving…`:`Save selection`}):(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(a,{variant:`outline`,size:`sm`,onClick:()=>j(!0),children:[(0,T.jsx)(xe,{className:`mr-1.5 h-4 w-4`}),`Import TOML`]}),(0,T.jsxs)(a,{size:`sm`,onClick:$,children:[(0,T.jsx)(u,{className:`mr-1.5 h-4 w-4`}),`New agent`]})]})]})]}),(0,T.jsx)(`div`,{className:`border-b border-border/60 bg-muted/20 px-6 py-3`,children:(0,T.jsxs)(`div`,{className:`relative max-w-md`,children:[(0,T.jsx)(se,{className:`absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,T.jsx)(o,{value:r,onChange:e=>O(e.target.value),placeholder:`Search agents…`,className:`pl-9`})]})}),(0,T.jsx)(`main`,{className:`min-h-0 flex-1 overflow-auto p-6`,children:Ce||Y&&W.isLoading?(0,T.jsx)(`div`,{className:`flex justify-center p-12`,children:(0,T.jsx)(ee,{})}):we||Y&&W.isError?(0,T.jsx)(x,{className:`border border-dashed py-12`,children:(0,T.jsxs)(b,{children:[(0,T.jsx)(v,{children:`Resources could not be loaded`}),(0,T.jsx)(y,{children:`Assignment controls remain disabled to protect the saved selection.`})]})}):Y&&!X?(0,T.jsx)(x,{className:`border border-dashed py-12`,children:(0,T.jsxs)(b,{children:[(0,T.jsx)(v,{children:`Codex is not enabled for this workspace`}),(0,T.jsx)(y,{children:`Add Codex to the workspace before assigning Codex-native agents.`})]})}):Q.length===0?(0,T.jsxs)(x,{className:`border border-dashed py-12`,children:[(0,T.jsx)(be,{children:(0,T.jsx)(s,{className:`h-8 w-8 text-muted-foreground`})}),(0,T.jsxs)(b,{children:[(0,T.jsx)(v,{children:`No Codex agents found`}),(0,T.jsx)(y,{children:`Create an agent or import a native TOML definition.`})]}),!Y&&(0,T.jsxs)(a,{size:`sm`,onClick:$,children:[(0,T.jsx)(u,{className:`mr-1.5 h-4 w-4`}),`New agent`]})]}):(0,T.jsx)(`div`,{className:`mx-auto grid max-w-6xl grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3`,children:Q.map(e=>{let t=Ee.has(e.id);return(0,T.jsxs)(ye,{className:i(`flex flex-col gap-4 p-4`,Y&&!t&&`opacity-60`),children:[(0,T.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,T.jsx)(`h2`,{className:`font-semibold`,children:e.name}),(0,T.jsx)(_,{variant:`outline`,children:`Codex`})]}),(0,T.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:e.description})]}),Y?(0,T.jsxs)(a,{variant:t?`default`:`outline`,size:`sm`,onClick:()=>je(e.id),disabled:!Z,children:[(0,T.jsx)(le,{className:i(`mr-1 h-3.5 w-3.5`,!t&&`opacity-0`)}),t?`Enabled`:`Disabled`]}):(0,T.jsxs)(`div`,{className:`flex gap-1`,children:[(0,T.jsx)(a,{variant:`ghost`,size:`icon`,"aria-label":`Edit ${e.name}`,onClick:()=>De(e),children:(0,T.jsx)(c,{className:`h-4 w-4`})}),(0,T.jsx)(a,{variant:`ghost`,size:`icon`,"aria-label":`Delete ${e.name}`,onClick:()=>V(e),children:(0,T.jsx)(ce,{className:`h-4 w-4`})})]})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap gap-2 text-xs text-muted-foreground`,children:[e.sandboxMode&&(0,T.jsx)(_,{variant:`secondary`,children:e.sandboxMode}),e.modelReasoningEffort&&(0,T.jsx)(_,{variant:`secondary`,children:e.modelReasoningEffort}),e.model&&(0,T.jsx)(_,{variant:`secondary`,children:e.model})]})]},e.id)})})}),(0,T.jsx)(g,{open:Se,onOpenChange:k,children:(0,T.jsxs)(m,{className:`max-w-2xl`,children:[(0,T.jsxs)(h,{children:[(0,T.jsx)(p,{children:M?`Edit Codex agent`:`Create Codex agent`}),(0,T.jsx)(d,{children:`Only the current stable native fields are managed. Omitted settings inherit from Codex.`})]}),(0,T.jsxs)(`div`,{className:`grid gap-4 py-2`,children:[(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-name`,children:`Name`}),(0,T.jsx)(o,{id:`agent-name`,value:P.name,disabled:!!M,onChange:e=>F({...P,name:D(e.target.value)}),placeholder:`code-reviewer`})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-description`,children:`Description`}),(0,T.jsx)(o,{id:`agent-description`,value:P.description,onChange:e=>F({...P,description:e.target.value}),placeholder:`Use when reviewing a fixed diff for correctness and security.`})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-instructions`,children:`Developer instructions`}),(0,T.jsx)(C,{id:`agent-instructions`,value:P.developerInstructions,onChange:e=>F({...P,developerInstructions:e.target.value}),className:`min-h-48 font-mono`})]}),(0,T.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-model`,children:`Model override`}),(0,T.jsx)(o,{id:`agent-model`,value:P.model??``,onChange:e=>F({...P,model:e.target.value||void 0}),placeholder:`Inherit`})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-effort`,children:`Reasoning`}),(0,T.jsxs)(`select`,{id:`agent-effort`,value:P.modelReasoningEffort??``,onChange:e=>F({...P,modelReasoningEffort:e.target.value||void 0}),className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,T.jsx)(`option`,{value:``,children:`Inherit`}),(0,T.jsx)(`option`,{value:`low`,children:`Low`}),(0,T.jsx)(`option`,{value:`medium`,children:`Medium`}),(0,T.jsx)(`option`,{value:`high`,children:`High`}),(0,T.jsx)(`option`,{value:`xhigh`,children:`XHigh`}),(0,T.jsx)(`option`,{value:`max`,children:`Max`}),(0,T.jsx)(`option`,{value:`ultra`,children:`Ultra`})]})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-sandbox`,children:`Sandbox`}),(0,T.jsxs)(`select`,{id:`agent-sandbox`,value:P.sandboxMode??``,onChange:e=>F({...P,sandboxMode:e.target.value||void 0}),className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,T.jsx)(`option`,{value:``,children:`Inherit`}),(0,T.jsx)(`option`,{value:`read-only`,children:`Read only`}),(0,T.jsx)(`option`,{value:`workspace-write`,children:`Workspace write`})]})]})]})]}),(0,T.jsxs)(f,{children:[(0,T.jsx)(a,{variant:`outline`,onClick:()=>k(!1),children:`Cancel`}),(0,T.jsx)(a,{onClick:Oe,disabled:G.isPending||!P.name||!P.description||!P.developerInstructions,children:G.isPending?`Saving…`:`Save agent`})]})]})}),(0,T.jsx)(g,{open:A,onOpenChange:j,children:(0,T.jsxs)(m,{className:`max-w-2xl`,children:[(0,T.jsxs)(h,{children:[(0,T.jsx)(p,{children:`Import Codex agent TOML`}),(0,T.jsx)(d,{children:`The import accepts the required native fields and supported model, reasoning, and sandbox overrides.`})]}),(0,T.jsx)(C,{value:I,onChange:e=>L(e.target.value),className:`min-h-72 font-mono`,placeholder:`name = "reviewer"
|
|
2
|
-
description = "Use for code review."
|
|
3
|
-
developer_instructions = "Review the fixed diff."`}),(0,T.jsxs)(f,{children:[(0,T.jsx)(a,{variant:`outline`,onClick:()=>j(!1),children:`Cancel`}),(0,T.jsx)(a,{onClick:ke,disabled:K.isPending||!I.trim(),children:K.isPending?`Importing…`:`Import agent`})]})]})}),(0,T.jsx)(oe,{open:B!==null,onOpenChange:e=>!e&&V(null),children:(0,T.jsxs)(re,{children:[(0,T.jsxs)(te,{children:[(0,T.jsxs)(ae,{children:[`Delete “`,B?.name,`”?`]}),(0,T.jsx)(ie,{children:`This removes the agent from the personal catalog. Existing workspace copies remain until the workspace is refreshed.`})]}),(0,T.jsxs)(l,{children:[(0,T.jsx)(ne,{render:(0,T.jsx)(a,{variant:`outline`,children:`Cancel`})}),(0,T.jsx)(a,{variant:`destructive`,onClick:Ae,disabled:q.isPending,children:q.isPending?`Deleting…`:`Delete agent`})]})]})})]})}export{O as AgentsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as e,t}from"./button-cPldH5S4.js";import{t as n}from"./git-branch-Dw55pQWa.js";import{Ct as r,Et as i,Nt as a,St as o,c as s,l as c,wt as l,yt as u}from"./index-CcIOIZ24.js";import{n as d,t as f}from"./card-82INhRRE.js";import{a as p,i as m,n as h,r as g,t as _}from"./empty-DWyDwDYB.js";import{t as v}from"./skeleton-CCPbfn1L.js";var y=e();function b({icon:e,label:t,value:n,tone:r}){return(0,y.jsxs)(d,{className:`gap-3.5 p-4`,children:[(0,y.jsx)(`div`,{className:`grid h-9 w-9 shrink-0 place-items-center rounded-md ${r}`,children:e}),(0,y.jsxs)(`div`,{className:`min-w-0`,children:[(0,y.jsx)(`div`,{className:`text-xl font-bold leading-none text-foreground`,children:n}),(0,y.jsx)(`div`,{className:`mt-1 text-xs text-muted-foreground`,children:t})]})]})}function x({workspaces:e,workspaceStatuses:x,workspacesLoading:S,statusesLoading:C,onOpenWorkspace:w,onNewWorkspace:T}){let E=Object.values(x),D=E.filter(e=>e.changedFiles>0).length,O=E.reduce((e,t)=>e+t.runningServices,0),k=E.filter(e=>e.pendingValidation).length;return(0,y.jsxs)(`div`,{className:`mx-auto max-w-6xl animate-fade-in`,children:[(0,y.jsxs)(`header`,{className:`mb-6`,children:[(0,y.jsx)(`h1`,{className:`text-xl font-semibold text-foreground`,children:`Overview`}),(0,y.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Your multi-repo environment at a glance.`})]}),(0,y.jsxs)(`div`,{className:`mb-8 grid grid-cols-2 gap-3 lg:grid-cols-4`,children:[(0,y.jsx)(b,{icon:(0,y.jsx)(i,{size:18,className:`text-primary`}),tone:`bg-primary/10`,label:`Workspaces`,value:e.length}),(0,y.jsx)(b,{icon:(0,y.jsx)(n,{size:18,className:`text-warning`}),tone:`bg-warning/10`,label:`With uncommitted changes`,value:D}),(0,y.jsx)(b,{icon:(0,y.jsx)(l,{size:18,className:`text-running`}),tone:`bg-running/10`,label:`Running services`,value:O}),(0,y.jsx)(b,{icon:(0,y.jsx)(u,{size:18,className:`text-warning`}),tone:`bg-warning/10`,label:`Need validation`,value:k})]}),(0,y.jsx)(`div`,{className:`mb-3 flex items-center justify-between`,children:(0,y.jsx)(`h2`,{className:`text-sm font-semibold uppercase tracking-wider text-muted-foreground`,children:`Workspaces`})}),S?(0,y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,y.jsx)(v,{className:`h-20`}),(0,y.jsx)(v,{className:`h-20`}),(0,y.jsx)(v,{className:`h-20`})]}):e.length===0?(0,y.jsx)(f,{className:`border-dashed`,children:(0,y.jsxs)(_,{children:[(0,y.jsxs)(g,{children:[(0,y.jsx)(m,{variant:`icon`,children:(0,y.jsx)(i,{})}),(0,y.jsx)(p,{children:`No workspaces yet`}),(0,y.jsx)(h,{children:`Create a feature workspace to group repositories and give your AI assistants shared context.`})]}),(0,y.jsxs)(t,{onClick:T,children:[(0,y.jsx)(r,{size:16}),` New workspace`]})]})}):(0,y.jsx)(`div`,{className:`flex flex-col gap-2`,children:e.map(e=>{let t=x[e.branchName],n=t?s(t.syncStatus):null;return(0,y.jsxs)(d,{className:`group cursor-pointer gap-4 p-4 transition-colors hover:border-foreground/15 hover:bg-accent/50`,onClick:()=>w(e.branchName),children:[(0,y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(`span`,{className:`truncate font-mono text-sm font-semibold text-foreground`,children:e.branchName}),(0,y.jsxs)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:[e.repos.length,` repos`]})]}),e.description&&(0,y.jsx)(`p`,{className:`mt-0.5 truncate text-xs text-muted-foreground`,children:e.description})]}),(0,y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[!t&&C?(0,y.jsx)(v,{className:`h-5 w-40`}):t?(0,y.jsxs)(y.Fragment,{children:[t.changedFiles>0?(0,y.jsxs)(c,{tone:`warning`,dot:!0,children:[t.changedFiles,` changed`]}):(0,y.jsx)(c,{tone:`idle`,dot:!0,children:`Clean`}),t.runningServices>0&&(0,y.jsxs)(c,{tone:`running`,dot:!0,children:[t.runningServices,` running`]}),n&&(0,y.jsxs)(c,{tone:n.tone,children:[(0,y.jsx)(o,{size:11}),` `,n.label]})]}):null,(0,y.jsx)(a,{size:16,className:`text-muted-foreground transition-transform group-hover:translate-x-0.5 group-hover:text-foreground`})]})]},e.id)})})]})}export{x as DashboardPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,b as t,g as n,t as r}from"./button-cPldH5S4.js";import{t as i,xt as a}from"./spinner-BCEaGbib.js";import{n as o,t as s}from"./ScaffoldRepoInline-DSt_6QLb.js";import{a as c,c as l,i as u,n as d,o as f,r as p,s as m,t as h}from"./alert-dialog-CroDe9HW.js";import{t as g}from"./trash-2-Da8F2gKd.js";import{$ as _,Ct as v,Et as y,H as b,K as x,Z as S,d as ee,f as C,ft as w,g as T,gt as E,h as D,m as O,ot as k,p as A,u as j,wt as M}from"./index-CcIOIZ24.js";import{t as N}from"./badge-BnkhqVEF.js";import{a as P,i as F,n as I,r as L,t as te}from"./empty-DWyDwDYB.js";var R=t(e(),1),z=n(),B={editingId:null,name:``,description:``,repoPaths:[]};function V(){let e=E(),t=S(),n=_(),V=w(),H=b(),U=k(),W=x(),[G,K]=(0,R.useState)(null),[q,J]=(0,R.useState)(null),[Y,X]=(0,R.useState)(null),Z=(0,R.useMemo)(()=>{let e={};for(let t of V.data??[])t.projectId&&(e[t.projectId]=(e[t.projectId]??0)+1);return e},[V.data]),Q=()=>{J(null),K(B)},ne=e=>{J(null),K({editingId:e.id,name:e.name,description:e.description??``,repoPaths:e.repos.map(e=>e.path)})},re=e=>{K(t=>t&&{...t,repoPaths:t.repoPaths.includes(e.path)?t.repoPaths.filter(t=>t!==e.path):[...t.repoPaths,e.path]})},ie=async()=>{if(G){J(null);try{G.editingId?await U.mutateAsync({id:G.editingId,name:G.name,description:G.description||null,repos:G.repoPaths}):await H.mutateAsync({name:G.name,description:G.description||void 0,repos:G.repoPaths}),K(null)}catch(e){J(e instanceof Error?e.message:String(e))}}},ae=async()=>{if(Y)try{await W.mutateAsync(Y.id)}finally{X(null)}},oe=!!(G&&G.name.trim()&&G.repoPaths.length>0),$=H.isPending||U.isPending;return(0,z.jsxs)(`div`,{className:`mx-auto max-w-4xl animate-fade-in`,children:[(0,z.jsxs)(`header`,{className:`mb-6 flex items-center justify-between gap-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-xl font-semibold`,children:`Projects`}),(0,z.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Named groups of repositories you start work from. Registered once, reused for every feature.`})]}),(0,z.jsxs)(r,{onClick:Q,children:[(0,z.jsx)(v,{}),` New project`]})]}),t.isLoading?(0,z.jsx)(`div`,{className:`flex justify-center py-20`,children:(0,z.jsx)(i,{className:`size-6`})}):(t.data??[]).length===0?(0,z.jsxs)(te,{className:`border border-border border-dashed`,children:[(0,z.jsxs)(L,{children:[(0,z.jsx)(F,{variant:`icon`,children:(0,z.jsx)(y,{})}),(0,z.jsx)(P,{children:`No projects yet`}),(0,z.jsx)(I,{children:`Register your first project to start work without re-picking repositories every time.`})]}),(0,z.jsxs)(r,{onClick:Q,children:[(0,z.jsx)(v,{}),` New project`]})]}):(0,z.jsx)(`ul`,{className:`flex flex-col gap-3`,children:(t.data??[]).map(t=>(0,z.jsx)(`li`,{className:`rounded-xl border border-border bg-card p-4 transition-colors hover:border-foreground/15`,children:(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`h2`,{className:`truncate text-sm font-semibold`,children:t.name}),(Z[t.id]??0)>0&&(0,z.jsxs)(N,{variant:`secondary`,children:[Z[t.id],` workspace`,Z[t.id]===1?``:`s`]})]}),t.description&&(0,z.jsx)(`p`,{className:`mt-0.5 truncate text-sm text-muted-foreground`,children:t.description}),(0,z.jsx)(`ul`,{className:`mt-2 flex flex-col gap-0.5`,children:t.repos.map(e=>(0,z.jsxs)(`li`,{className:`truncate font-mono text-xs text-muted-foreground`,children:[e.path,(0,z.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[`[`,e.defaultBranch,`]`]})]},e.path))})]}),(0,z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[(0,z.jsxs)(r,{size:`sm`,onClick:()=>e(`/new?project=${encodeURIComponent(t.id)}`),children:[(0,z.jsx)(M,{}),` Start work`]}),(0,z.jsx)(r,{size:`icon-sm`,variant:`ghost`,"aria-label":`Edit ${t.name}`,onClick:()=>ne(t),children:(0,z.jsx)(l,{})}),(0,z.jsx)(r,{size:`icon-sm`,variant:`ghost`,"aria-label":`Remove ${t.name}`,onClick:()=>X(t),children:(0,z.jsx)(g,{})})]})]})},t.id))}),(0,z.jsx)(j,{open:G!==null,onOpenChange:e=>!e&&K(null),children:(0,z.jsxs)(D,{className:`max-w-lg`,children:[(0,z.jsxs)(A,{children:[(0,z.jsx)(T,{children:G?.editingId?`Edit project`:`New project`}),(0,z.jsx)(ee,{children:`A project is a reusable group of source repositories. Removing one later never touches disk.`})]}),(0,z.jsxs)(O,{className:`space-y-4`,children:[(0,z.jsxs)(`label`,{className:`block`,children:[(0,z.jsx)(`span`,{className:`mb-1 block text-sm font-medium`,children:`Name`}),(0,z.jsx)(a,{value:G?.name??``,onChange:e=>K(t=>t&&{...t,name:e.target.value}),placeholder:`e.g. Hogia Billing`,autoFocus:!0})]}),(0,z.jsxs)(`label`,{className:`block`,children:[(0,z.jsxs)(`span`,{className:`mb-1 block text-sm font-medium`,children:[`Description `,(0,z.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(optional)`})]}),(0,z.jsx)(a,{value:G?.description??``,onChange:e=>K(t=>t&&{...t,description:e.target.value}),placeholder:`What this group of repos is for`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`mb-1 block text-sm font-medium`,children:`Repositories`}),(0,z.jsx)(o,{repos:n.data??[],selectedPaths:G?.repoPaths??[],onToggle:re,loading:n.isLoading,emptyHint:`No repositories found in your dev directory.`}),(0,z.jsx)(s,{onCreated:e=>K(t=>t&&{...t,repoPaths:[...t.repoPaths,e.path]})})]}),q&&(0,z.jsx)(`p`,{className:`text-sm text-destructive-foreground`,children:q})]}),(0,z.jsxs)(C,{children:[(0,z.jsx)(r,{variant:`outline`,onClick:()=>K(null),children:`Cancel`}),(0,z.jsxs)(r,{onClick:ie,disabled:!oe||$,children:[$?(0,z.jsx)(i,{}):null,G?.editingId?`Save changes`:`Create project`]})]})]})}),(0,z.jsx)(h,{open:Y!==null,onOpenChange:e=>!e&&X(null),children:(0,z.jsxs)(f,{children:[(0,z.jsxs)(c,{children:[(0,z.jsxs)(m,{children:[`Remove “`,Y?.name,`”?`]}),(0,z.jsx)(p,{children:`This only removes the project from the registry — repositories and workspaces on disk are not touched.`})]}),(0,z.jsxs)(u,{children:[(0,z.jsx)(d,{render:(0,z.jsx)(r,{variant:`outline`,children:`Cancel`})}),(0,z.jsxs)(r,{variant:`destructive`,onClick:ae,disabled:W.isPending,children:[W.isPending?(0,z.jsx)(i,{}):null,`Remove project`]})]})]})})]})}export{V as ProjectsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,b as t,d as n,g as r,h as i,i as a,l as o,m as s,o as c,p as l,s as u,t as d,u as ee}from"./button-cPldH5S4.js";import{$n as f,Bn as p,Ct as te,Ht as ne,Pt as m,Qn as re,S as ie,Ut as h,Vt as ae,Wt as g,Xn as oe,Yn as se,bt as ce,er as _,nr as v,qt as y,t as b,xt as x,yt as le}from"./spinner-BCEaGbib.js";import{t as S}from"./search-ChVovkOL.js";import{t as ue}from"./useAriaLabelledBy-DmwmZIqb.js";import{t as de}from"./useValueChanged-BfI2s7NX.js";import{U as C}from"./index-CcIOIZ24.js";var fe=i(`folder-plus`,[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),w=t(e(),1),T=w.createContext({disabled:!1});function pe(){return w.useContext(T)}var E=w.createContext(void 0);function me(e=!0){let t=w.useContext(E);if(t===void 0&&!e)throw Error(n(3));return t}function he(e){if(!e)return null;for(let t of e.elements){let e=t.tagName;if(e===`BUTTON`||e===`INPUT`){let e=t;if(e.type===`submit`)return e}}return null}var D=function(e){return e.checked=`data-checked`,e.unchecked=`data-unchecked`,e.indeterminate=`data-indeterminate`,e.disabled=`data-disabled`,e.readonly=`data-readonly`,e.required=`data-required`,e.valid=`data-valid`,e.invalid=`data-invalid`,e.touched=`data-touched`,e.dirty=`data-dirty`,e.filled=`data-filled`,e.focused=`data-focused`,e}({});function ge(e){return w.useMemo(()=>({checked(t){return e.indeterminate?{}:t?{[D.checked]:``}:{[D.unchecked]:``}},..._}),[e.indeterminate])}var _e=w.createContext(void 0);function O(){let e=w.useContext(_e);if(e===void 0)throw Error(n(14));return e}var k=r(),ve=`data-parent`,ye=w.forwardRef(function(e,t){let{checked:n,className:r,defaultChecked:i=!1,"aria-labelledby":s,disabled:d=!1,form:h,id:g,indeterminate:_=!1,inputRef:y,name:b,onCheckedChange:x,parent:S=!1,readOnly:C=!1,render:fe,required:T=!1,uncheckedValue:E,value:D,nativeButton:O=!1,style:ye,...A}=e,{clearErrors:j}=re(),{disabled:M,name:N,setDirty:be,setFilled:P,setFocused:xe,setTouched:Se,state:Ce,validationMode:we,validityData:Te,validation:Ee}=f(),De=pe(),{labelId:Oe,controlId:ke,registerControlId:F,getDescriptionProps:Ae}=se(),I=me(),L=I?.parent,R=L&&I.allValues,z=M||De.disabled||I?.disabled||d,B=N??b,V=D??B,je=oe(),Me=oe(),H=ke;R?H=S?Me:`${L.id}-${V}`:g&&(H=g);let U={};R&&(S?U=I.parent.getParentProps():V&&(U=I.parent.getChildProps(V)));let{checked:Ne=n,indeterminate:Pe=_,onCheckedChange:Fe,...Ie}=U,W=I?.value,Le=I?.setValue,Re=I?.defaultValue,G=w.useRef(null),K=ee(()=>Symbol(`checkbox-control`)),q=w.useRef(!1),{getButtonProps:ze,buttonRef:Be}=ie({disabled:z,native:O}),J=I?.validation??Ee,[Y,Ve]=ne({controlled:V&&W&&!S?W.includes(V):Ne,default:V&&Re&&!S?Re.includes(V):i,name:`Checkbox`,state:`checked`}),X=R?!!Ne:Y,Z=R&&Pe||_;v(()=>{F!==u&&(q.current=!0,F(K.current,H))},[H,F,K]),w.useEffect(()=>{let e=K.current;return()=>{!q.current||F===u||(q.current=!1,F(e,void 0))}},[F,K]),ae(G,je,Y,void 0,!I&&!z,b);let Q=w.useRef(null),He=o(y,Q,J.inputRef,J.registerInput),Ue=ue(s,Oe,Q,!O,H??void 0);v(()=>{Q.current&&(Q.current.indeterminate=Z,Y&&P(!0))},[Y,Z,P]),de(Y,()=>{I||(j(B),P(Y),be(Y!==Te.initialValue),J.change(Y))});let We=l({checked:Y,disabled:z,form:h,name:S?void 0:B,id:O?void 0:H??void 0,required:T,ref:He,style:B?ce:le,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(C){e.preventDefault();return}let t=e.currentTarget.checked,n=te(m,e.nativeEvent);if(x?.(t,n),!n.isCanceled&&(Fe?.(t,n),!n.isCanceled&&(Ve(t),V&&W&&Le&&!S&&!R))){let e=t?[...W,V]:W.filter(e=>e!==V);Le(e,n)}},onFocus(){G.current?.focus()}},D===void 0?c:{value:(I?Y&&D:D)||``},Ae,e=>J.getValidationProps(z,e));w.useEffect(()=>{if(!L||!V)return;let e=L.disabledStatesRef.current;return e.set(V,z),()=>{e.delete(V)}},[L,z,V]);let $=w.useMemo(()=>({...Ce,checked:X,disabled:z,readOnly:C,required:T,indeterminate:Z}),[Ce,X,z,C,T,Z]),Ge=ge($),Ke=a(`span`,e,{state:$,ref:[Be,G,t,I?.registerControlRef],props:[{id:O?H??void 0:je,role:`checkbox`,"aria-checked":Z?`mixed`:X,"aria-readonly":C||void 0,"aria-required":T||void 0,"aria-labelledby":Ue,[ve]:S?``:void 0,onFocus(){z||xe(!0)},onBlur(){let e=Q.current;e&&(Se(!0),xe(!1),we===`onBlur`&&J.commit(I?W:e.checked))},onKeyDown(e){if(e.key!==`Enter`||(e.preventBaseUIHandler(),e.defaultPrevented))return;let t=Q.current?.form??null,n=e.currentTarget,r=e.nativeEvent,i=e.preventDefault,a=r.preventDefault,o=!1;e.preventDefault=()=>{o=!0,i.call(e)},r.preventDefault=()=>{o=!0,a.call(r)},a.call(r),p(n).queueMicrotask(()=>{e.preventDefault=i,r.preventDefault=a,o||he(t)?.click()})},onClick(e){if(C||z)return;e.preventDefault();let t=Q.current;t&&t.dispatchEvent(new(p(t)).PointerEvent(`click`,{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey}))}},A,Ie,ze,Ae,e=>J.getValidationProps(z,e)],stateAttributesMapping:Ge});return(0,k.jsxs)(_e.Provider,{value:$,children:[Ke,!Y&&!I&&B&&!S&&E!==void 0&&(0,k.jsx)(`input`,{type:`hidden`,form:h,name:B,value:E,disabled:z}),(0,k.jsx)(`input`,{...We,suppressHydrationWarning:!0})]})}),A=w.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:o=!1,...s}=e,c=O(),l=c.checked||c.indeterminate,{mounted:u,transitionStatus:d,setMounted:ee}=h(l),f=w.useRef(null),p={...c,transitionStatus:d};g({open:l,ref:f,onComplete(){l||ee(!1)}});let te={...ge(c),...y,..._},ne=o||u,m=a(`span`,e,{ref:[t,f],state:p,stateAttributesMapping:te,props:s});return ne?m:null});function j({className:e,...t}){return(0,k.jsx)(ye,{className:s(`relative inline-flex size-4.5 shrink-0 items-center justify-center rounded-[.25rem] border border-input bg-background not-dark:bg-clip-padding shadow-xs/5 outline-none ring-ring transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[3px] not-data-disabled:not-data-checked:not-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-offset-background aria-invalid:border-destructive/36 focus-visible:aria-invalid:border-destructive/64 focus-visible:aria-invalid:ring-destructive/48 data-disabled:opacity-64 sm:size-4 dark:not-data-checked:bg-input/32 dark:aria-invalid:ring-destructive/24 dark:not-data-disabled:not-data-checked:not-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)] [[data-disabled],[data-checked],[aria-invalid]]:shadow-none`,e),"data-slot":`checkbox`,...t,children:(0,k.jsx)(A,{className:`-inset-px absolute flex items-center justify-center rounded-[.25rem] text-primary-foreground data-unchecked:hidden data-checked:bg-primary data-indeterminate:text-foreground`,"data-slot":`checkbox-indicator`,render:(e,t)=>(0,k.jsx)(`span`,{...e,children:t.indeterminate?(0,k.jsx)(`svg`,{className:`size-3.5 sm:size-3`,fill:`none`,height:`24`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`3`,viewBox:`0 0 24 24`,width:`24`,xmlns:`http://www.w3.org/2000/svg`,children:(0,k.jsx)(`path`,{d:`M5.252 12h13.496`})}):(0,k.jsx)(`svg`,{className:`size-3.5 sm:size-3`,fill:`none`,height:`24`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`3`,viewBox:`0 0 24 24`,width:`24`,xmlns:`http://www.w3.org/2000/svg`,children:(0,k.jsx)(`path`,{d:`M5.252 12.7 10.2 18.63 18.748 5.37`})})})})})}function M({repos:e,selectedPaths:t,onToggle:n,loading:r,emptyHint:i,className:a}){let[o,c]=(0,w.useState)(``),l=(0,w.useMemo)(()=>{let t=o.trim().toLowerCase();return t?e.filter(e=>e.name.toLowerCase().includes(t)||e.path.toLowerCase().includes(t)):e},[e,o]);return(0,k.jsxs)(`div`,{className:s(`flex flex-col gap-2`,a),children:[(0,k.jsxs)(`div`,{className:`relative`,children:[(0,k.jsx)(S,{className:`absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground`}),(0,k.jsx)(x,{value:o,onChange:e=>c(e.target.value),placeholder:`Filter repositories…`,className:`pl-8`,"aria-label":`Filter repositories`})]}),(0,k.jsx)(`div`,{className:`max-h-56 overflow-y-auto rounded-lg border border-border`,children:r?(0,k.jsx)(`p`,{className:`p-3 text-sm text-muted-foreground`,children:`Scanning for repositories…`}):l.length===0?(0,k.jsx)(`p`,{className:`p-3 text-sm text-muted-foreground`,children:i??`No repositories found.`}):(0,k.jsx)(`ul`,{className:`divide-y divide-border`,children:l.map(e=>(0,k.jsx)(`li`,{children:(0,k.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-3 px-3 py-2 hover:bg-accent`,children:[(0,k.jsx)(j,{checked:t.includes(e.path),onCheckedChange:()=>n(e),"aria-label":e.name}),(0,k.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,k.jsx)(`span`,{className:`block truncate text-sm font-medium`,children:e.name}),(0,k.jsx)(`span`,{className:`block truncate font-mono text-xs text-muted-foreground`,children:e.path})]}),(0,k.jsx)(`span`,{className:`shrink-0 font-mono text-xs text-muted-foreground`,children:e.defaultBranch})]})},e.path))})})]})}function N({onCreated:e}){let[t,n]=(0,w.useState)(!1),[r,i]=(0,w.useState)(``),[a,o]=(0,w.useState)(null),s=C(),c=async()=>{o(null);try{let{repo:t}=await s.mutateAsync(r.trim());i(``),n(!1),e(t)}catch(e){o(e instanceof Error?e.message:String(e))}};return t?(0,k.jsxs)(`div`,{className:`mt-1.5 flex flex-col gap-1.5`,children:[(0,k.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,k.jsx)(x,{value:r,onChange:e=>i(e.target.value),onKeyDown:e=>e.key===`Enter`&&r.trim()&&c(),placeholder:`new-repo-name`,className:`h-7 font-mono text-xs`,"aria-label":`New repository name`,autoFocus:!0}),(0,k.jsxs)(d,{size:`xs`,onClick:c,disabled:!r.trim()||s.isPending,children:[s.isPending?(0,k.jsx)(b,{}):null,`Create`]}),(0,k.jsx)(d,{size:`xs`,variant:`ghost`,onClick:()=>{n(!1),o(null)},children:`Cancel`})]}),a&&(0,k.jsx)(`p`,{className:`text-xs text-destructive-foreground`,children:a})]}):(0,k.jsxs)(`button`,{type:`button`,onClick:()=>n(!0),className:`mt-1.5 inline-flex cursor-pointer items-center gap-1.5 text-xs text-muted-foreground hover:text-foreground`,children:[(0,k.jsx)(fe,{className:`size-3.5`}),` Scaffold a brand-new repository`]})}export{M as n,j as r,N as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,b as t,i as n}from"./button-cPldH5S4.js";var r=t(e(),1).forwardRef(function(e,t){let{className:r,render:i,orientation:a=`horizontal`,style:o,...s}=e;return n(`div`,e,{state:{orientation:a},ref:t,props:[{role:`separator`,"aria-orientation":a},s]})});export{r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as e,b as t,d as n,g as r,i,l as a,m as o,n as s,o as c,p as l,t as u}from"./button-cPldH5S4.js";import{$n as d,Bn as f,Ct as p,Ht as m,Pt as ee,Qn as te,S as ne,Vt as h,Xn as g,Yn as re,bt as ie,er as _,jn as ae,nr as oe,t as v,xt as y,yt as se}from"./spinner-BCEaGbib.js";import{t as ce}from"./useAriaLabelledBy-DmwmZIqb.js";import{t as le}from"./useValueChanged-BfI2s7NX.js";import{t as b}from"./Separator-Chx6O62Y.js";import{A as x,At as S,M as C,N as w,St as ue,j as T,k as E,yt as de}from"./index-CcIOIZ24.js";import{t as D}from"./badge-BnkhqVEF.js";import{t as O}from"./card-82INhRRE.js";import{t as k}from"./label-JFgMNsTn.js";var A=t(e(),1),j=r(),M=s(`relative rounded-xl border px-3.5 py-3 text-card-foreground text-sm`,{defaultVariants:{variant:`default`},variants:{variant:{default:`bg-transparent dark:bg-input/32 [&_svg]:text-muted-foreground`,error:`border-destructive/32 bg-destructive/4 text-destructive-foreground [&_[data-slot=alert-description]]:text-destructive-foreground/80 [&_svg]:text-destructive`,info:`border-info/32 bg-info/4 [&_svg]:text-info`,success:`border-success/32 bg-success/4 [&_svg]:text-success`,warning:`border-warning/32 bg-warning/4 [&_svg]:text-warning`}}});function N(e){let t=e.props[`data-slot`];if(t)return t;let n=e.type;switch(n.displayName??n.name){case`AlertAction`:return`alert-action`;case`AlertTitle`:return`alert-title`;case`AlertDescription`:return`alert-description`;default:return}}function P({className:e,variant:t,children:n,...r}){let i=[],a=[],s=[];return A.Children.forEach(n,e=>{if(!(0,A.isValidElement)(e)){a.push(e);return}let t=N(e);t===`alert-action`?s.push(e):t===`alert-title`||t===`alert-description`?a.push(e):i.push(e)}),(0,j.jsx)(`div`,{className:o(M({variant:t}),e),"data-slot":`alert`,role:`alert`,...r,children:(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i.length>0&&(0,j.jsx)(`div`,{className:`flex size-4 shrink-0 items-center justify-center [&>svg]:size-full`,children:i}),a.length>0&&(0,j.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-0.5`,children:a}),s.length>0&&(0,j.jsx)(`div`,{className:`flex shrink-0 items-center self-center`,children:s})]})})}function F({className:e,...t}){return(0,j.jsx)(`div`,{className:o(`font-medium`,e),"data-slot":`alert-title`,...t})}function I({className:e,...t}){return(0,j.jsx)(`div`,{className:o(`flex flex-col gap-2.5 text-muted-foreground`,e),"data-slot":`alert-description`,...t})}function L({className:e,...t}){return(0,j.jsx)(`div`,{className:o(`flex gap-1`,e),"data-slot":`alert-action`,...t})}F.displayName=`AlertTitle`,I.displayName=`AlertDescription`,L.displayName=`AlertAction`;function R({className:e,orientation:t=`horizontal`,...n}){return(0,j.jsx)(b,{className:o(`shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px data-[orientation=vertical]:not-[[class^='h-']]:not-[[class*='_h-']]:self-stretch`,e),"data-slot":`separator`,orientation:t,...n})}var z=A.createContext(void 0);function B(){let e=A.useContext(z);if(e===void 0)throw Error(n(63));return e}var V=function(e){return e.checked=`data-checked`,e.unchecked=`data-unchecked`,e.disabled=`data-disabled`,e.readonly=`data-readonly`,e.required=`data-required`,e.valid=`data-valid`,e.invalid=`data-invalid`,e.touched=`data-touched`,e.dirty=`data-dirty`,e.filled=`data-filled`,e.focused=`data-focused`,e}({}),H={..._,checked(e){return e?{[V.checked]:``}:{[V.unchecked]:``}}},U=A.forwardRef(function(e,t){let{checked:n,className:r,defaultChecked:o,"aria-labelledby":s,form:u,id:_,inputRef:v,name:y,nativeButton:b=!1,onCheckedChange:x,readOnly:S=!1,required:C=!1,disabled:w=!1,render:ue,uncheckedValue:T,value:E,style:de,...D}=e,{clearErrors:O}=te(),{state:k,setTouched:M,setDirty:N,validityData:P,setFilled:F,setFocused:I,validationMode:L,disabled:R,name:B,validation:V}=d(),{labelId:U}=re(),W=R||w,G=B??y,K=A.useRef(null),fe=a(K,v,V.inputRef),q=A.useRef(null),J=g(),Y=ae({id:_,implicit:!1,controlRef:q}),X=b?void 0:Y,[Z,pe]=m({controlled:n,default:!!o,name:`Switch`,state:`checked`});h(q,J,Z,void 0,!W,y),oe(()=>{K.current&&F(K.current.checked)},[K,F]),le(Z,()=>{O(G),N(Z!==P.initialValue),F(Z),V.change(Z)});let{getButtonProps:Q,buttonRef:me}=ne({disabled:W,native:b}),he=ce(s,U,K,!b,X),ge={id:b?Y:J,role:`switch`,"aria-checked":Z,"aria-readonly":S||void 0,"aria-required":C||void 0,"aria-labelledby":he,onFocus(){W||I(!0)},onBlur(){let e=K.current;!e||W||(M(!0),I(!1),L===`onBlur`&&V.commit(e.checked))},onClick(e){if(S||W)return;e.preventDefault();let t=K.current;t&&t.dispatchEvent(new(f(t)).PointerEvent(`click`,{bubbles:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,altKey:e.altKey,metaKey:e.metaKey}))}},_e=l({checked:Z,disabled:W,form:u,id:X,name:G,required:C,style:G?ie:se,tabIndex:-1,type:`checkbox`,"aria-hidden":!0,ref:fe,onChange(e){if(e.nativeEvent.defaultPrevented)return;if(S){e.preventDefault();return}let t=e.currentTarget.checked,n=p(ee,e.nativeEvent);x?.(t,n),!n.isCanceled&&pe(t)},onFocus(){q.current?.focus()}},e=>V.getValidationProps(W,e),E===void 0?c:{value:E}),$=A.useMemo(()=>({...k,checked:Z,disabled:W,readOnly:S,required:C}),[k,Z,W,S,C]),ve=i(`span`,e,{state:$,ref:[t,q,me],props:[ge,D,Q,e=>V.getValidationProps(W,e)],stateAttributesMapping:H});return(0,j.jsxs)(z.Provider,{value:$,children:[ve,!Z&&G&&T!==void 0&&(0,j.jsx)(`input`,{type:`hidden`,form:u,name:G,value:T,disabled:W}),(0,j.jsx)(`input`,{..._e,suppressHydrationWarning:!0})]})}),W=A.forwardRef(function(e,t){let{render:n,className:r,style:a,...o}=e;return i(`span`,e,{state:B(),ref:t,stateAttributesMapping:H,props:o})});function G({className:e,...t}){return(0,j.jsx)(U,{className:o(`inline-flex h-[calc(var(--thumb-size)+2px)] w-[calc(var(--thumb-size)*2-2px)] shrink-0 cursor-pointer items-center rounded-full p-px outline-none transition-[background-color,box-shadow] duration-200 [--thumb-size:--spacing(5)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input data-disabled:cursor-not-allowed data-disabled:opacity-64 sm:[--thumb-size:--spacing(4)]`,e),"data-slot":`switch`,...t,children:(0,j.jsx)(W,{className:o(`pointer-events-none block aspect-square h-full origin-left in-[[role=switch]:active,[data-slot=label]:active,[data-slot=field-label]:active]:not-data-disabled:scale-x-110 in-[[role=switch]:active,[data-slot=label]:active,[data-slot=field-label]:active]:rounded-[var(--thumb-size)/calc(var(--thumb-size)*1.1)] rounded-(--thumb-size) bg-background shadow-sm/5 will-change-transform [transition:translate_.15s,border-radius_.15s,scale_.1s_.1s,transform-origin_.15s] data-checked:origin-[var(--thumb-size)_50%] data-checked:translate-x-[calc(var(--thumb-size)-4px)]`),"data-slot":`switch-thumb`})})}function K({config:e,setConfig:t,saveStatus:n,editors:r,adapters:i,saveAppConfig:a,isSettingsFormValid:o,toolsStatus:s,toolsLoading:c,updatingToolId:l,fetchToolsStatus:d,handleUpdateTool:f}){if(!e)return null;let p=r.find(t=>t.command===e.defaultEditor),m=i.find(t=>t.name===(e.storageProvider||`local`));return(0,j.jsxs)(`div`,{className:`mx-auto max-w-4xl animate-fade-in`,children:[(0,j.jsxs)(`header`,{className:`mb-6`,children:[(0,j.jsx)(`h1`,{className:`text-xl font-semibold text-foreground`,children:`Global Settings`}),(0,j.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Configure your local directories, search parameters, and editor defaults.`})]}),n===`success`&&(0,j.jsxs)(P,{variant:`success`,className:`mb-6`,children:[(0,j.jsx)(S,{size:18}),` Settings successfully saved and updated!`]}),n===`error`&&(0,j.jsxs)(P,{variant:`error`,className:`mb-6`,children:[(0,j.jsx)(de,{size:18}),` Error: Could not save configuration details to disk.`]}),(0,j.jsx)(O,{className:`mb-6 rounded-xl p-6 shadow-sm`,children:(0,j.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 md:grid-cols-2`,children:[(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(k,{className:`text-sm`,children:`Development Directory`}),(0,j.jsx)(y,{type:`text`,value:e.devDir,onChange:n=>t({...e,devDir:n.target.value})}),(0,j.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Directory where your git projects are scanned.`})]}),(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(k,{className:`text-sm`,children:`Workspaces Directory`}),(0,j.jsx)(y,{type:`text`,value:e.workspacesDir,onChange:n=>t({...e,workspacesDir:n.target.value})}),(0,j.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Directory where unified worktree environments are spun up.`})]}),(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(k,{className:`text-sm`,children:`Repo Search Depth`}),(0,j.jsx)(y,{type:`number`,min:1,max:5,value:e.scanDepth,onChange:n=>t({...e,scanDepth:parseInt(n.target.value,10)})}),(0,j.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Max directory levels deep the system will traverse for git repos.`})]}),(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(k,{className:`text-sm`,children:`Default Assistant`}),(0,j.jsxs)(E,{value:e.defaultAssistant||``,onValueChange:n=>typeof n==`string`&&t({...e,defaultAssistant:n||null}),children:[(0,j.jsx)(C,{"aria-label":`Default Assistant`,children:(0,j.jsx)(w,{children:e.defaultAssistant===`claude`?`Claude Code`:e.defaultAssistant===`antigravity`?`Antigravity`:e.defaultAssistant===`codex`?`Codex`:e.defaultAssistant===`copilot`?`GitHub Copilot`:e.defaultAssistant===`cursor`?`Cursor`:`None (Prompt me)`})}),(0,j.jsxs)(T,{alignItemWithTrigger:!1,children:[(0,j.jsx)(x,{value:``,children:`None (Prompt me)`}),(0,j.jsx)(x,{value:`claude`,children:`Claude Code`}),(0,j.jsx)(x,{value:`antigravity`,children:`Antigravity`}),(0,j.jsx)(x,{value:`codex`,children:`Codex`}),(0,j.jsx)(x,{value:`copilot`,children:`GitHub Copilot`}),(0,j.jsx)(x,{value:`cursor`,children:`Cursor`})]})]}),(0,j.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Your preferred workspace context manager.`})]}),(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(k,{className:`text-sm`,children:`Preferred Editor`}),(0,j.jsxs)(E,{value:e.defaultEditor||``,onValueChange:n=>typeof n==`string`&&t({...e,defaultEditor:n||null}),children:[(0,j.jsx)(C,{"aria-label":`Preferred Editor`,children:(0,j.jsx)(w,{children:p?`${p.name} ${p.detected?`(Detected)`:`(Not found)`}`:`No preference`})}),(0,j.jsxs)(T,{alignItemWithTrigger:!1,children:[(0,j.jsx)(x,{value:``,children:`No preference`}),r.map(e=>(0,j.jsxs)(x,{value:e.command,children:[e.name,` `,e.detected?`(Detected)`:`(Not found)`]},e.command))]})]}),(0,j.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`Shown first in the “Open with…” workspace chooser.`})]}),(0,j.jsxs)(`div`,{className:`flex flex-col gap-4 md:col-span-2`,children:[(0,j.jsx)(R,{className:`mt-1`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:`Workspace Storage Settings`}),(0,j.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Choose where maps, plans, and knowledge files are stored.`})]}),(0,j.jsxs)(`div`,{className:`flex max-w-md flex-col gap-1.5`,children:[(0,j.jsx)(k,{htmlFor:`storageProvider`,className:`text-sm`,children:`Storage Provider`}),(0,j.jsxs)(E,{value:e.storageProvider||`local`,onValueChange:n=>{if(typeof n!=`string`)return;let r=n,a={...e,storageProvider:r},o=i.find(e=>e.name===r);o?.configFields?.length&&(a.adapterConfig||={},a.adapterConfig[r]||(a.adapterConfig[r]={}),o.configFields.forEach(e=>{a.adapterConfig[r][e.key]===void 0&&e.default!==void 0&&(a.adapterConfig[r][e.key]=e.default)})),t(a)},children:[(0,j.jsx)(C,{id:`storageProvider`,"aria-label":`Storage Provider`,children:(0,j.jsx)(w,{children:m?.displayName??`Local Workspace (Folders)`})}),(0,j.jsx)(T,{alignItemWithTrigger:!1,children:i.length>0?i.map(e=>(0,j.jsx)(x,{value:e.name,children:e.displayName},e.name)):(0,j.jsx)(x,{value:`local`,children:`Local Workspace (Folders)`})})]}),(0,j.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:m?.description||`Choose where to store maps, plans, and knowledge files. Centralized vault keeps repositories 100% clean and allows Obsidian integration.`})]}),(()=>{let n=e.storageProvider||`local`,r=i.find(e=>e.name===n);return r?.configFields?.length?(0,j.jsxs)(`div`,{className:`flex max-w-md flex-col gap-4 rounded-xl border border-border bg-muted/40 p-4`,children:[(0,j.jsxs)(`h4`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground`,children:[r.displayName,` Settings`]}),r.configFields.map(r=>{let i=e.adapterConfig?.[n]?.[r.key]??r.default??``,a=i=>{let a={...e.adapterConfig||{},[n]:{...e.adapterConfig?.[n]||{},[r.key]:i}};t({...e,adapterConfig:a})};return r.type===`boolean`?(0,j.jsxs)(k,{className:`flex cursor-pointer items-start gap-3 text-sm`,children:[(0,j.jsx)(G,{checked:!!i,onCheckedChange:e=>a(e)}),(0,j.jsxs)(`span`,{className:`flex flex-col`,children:[(0,j.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:r.label}),r.description&&(0,j.jsx)(`span`,{className:`mt-0.5 text-xs leading-normal text-muted-foreground`,children:r.description})]})]},r.key):(0,j.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,j.jsx)(k,{className:`text-sm`,children:r.label}),(0,j.jsx)(y,{type:r.type===`number`?`number`:`text`,value:i,onChange:e=>{let t=r.type===`number`?Number(e.target.value):e.target.value;a(t)}}),r.description&&(0,j.jsx)(`span`,{className:`text-xs leading-normal text-muted-foreground`,children:r.description})]},r.key)})]}):null})()]})]})}),(0,j.jsxs)(O,{className:`mt-6 rounded-xl p-6 shadow-sm`,children:[(0,j.jsxs)(`div`,{className:`mb-6 flex items-start justify-between gap-4`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{className:`text-lg font-semibold text-foreground`,children:`AI Toolchain Updates`}),(0,j.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Monitor and update the CLI packages and assistants in your workflow.`})]}),(0,j.jsxs)(u,{variant:`outline`,size:`sm`,onClick:()=>d(!0),disabled:c,children:[c?(0,j.jsx)(v,{className:`size-3`}):(0,j.jsx)(ue,{size:13}),c?`Checking...`:`Check Now`]})]}),c&&s.length===0?(0,j.jsxs)(`div`,{className:`flex flex-col items-center justify-center gap-2 py-8 text-muted-foreground`,children:[(0,j.jsx)(v,{className:`size-6`}),(0,j.jsx)(`span`,{className:`text-xs`,children:`Fetching registry version details...`})]}):s.length===0?(0,j.jsx)(`p`,{className:`py-4 text-xs text-muted-foreground`,children:`No toolchain information available.`}):(0,j.jsx)(`div`,{className:`space-y-4`,children:s.map(e=>(0,j.jsxs)(`div`,{className:`flex flex-col gap-4 rounded-xl border border-border bg-muted/30 p-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,j.jsxs)(`div`,{className:`min-w-0`,children:[(0,j.jsxs)(`h4`,{className:`flex items-center gap-2 text-sm font-semibold text-foreground`,children:[e.name,(0,j.jsx)(D,{variant:e.installed?`success`:`secondary`,size:`sm`,children:e.installed?`Installed`:`Not Installed`})]}),(0,j.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:[(0,j.jsxs)(`span`,{children:[`Installed version: `,(0,j.jsx)(`code`,{className:`font-mono text-[10px] text-foreground`,children:e.currentVersion})]}),e.installed&&(0,j.jsxs)(`span`,{children:[`Latest: `,(0,j.jsx)(`code`,{className:`font-mono text-[10px] text-foreground`,children:e.latestVersion})]})]}),(0,j.jsx)(`p`,{className:`mt-1 font-mono text-[10px] text-muted-foreground`,children:e.updateCmd})]}),(0,j.jsx)(`div`,{className:`flex shrink-0 items-center gap-3`,children:e.updateAvailable?(0,j.jsx)(u,{size:`sm`,onClick:()=>f(e.id),disabled:l!==null,children:l===e.id?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(v,{className:`size-3`}),` Updating...`]}):`Update Tool`}):e.installed?(0,j.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,j.jsxs)(D,{variant:`success`,className:`gap-1.5`,children:[(0,j.jsx)(S,{size:12}),` Up to Date`]}),(0,j.jsx)(u,{variant:`outline`,size:`sm`,onClick:()=>f(e.id),disabled:l!==null,children:l===e.id?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(v,{className:`size-3`}),` Reinstalling...`]}):`Reinstall`})]}):(0,j.jsx)(u,{variant:`outline`,size:`sm`,onClick:()=>f(e.id),disabled:l!==null,children:l===e.id?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(v,{className:`size-3`}),` Installing...`]}):`Install CLI`})})]},e.id))})]}),(0,j.jsx)(`div`,{className:`mb-10 flex justify-end pt-4`,children:(0,j.jsxs)(u,{onClick:()=>a(e),disabled:!o,children:[(0,j.jsx)(S,{size:16}),` Save Configuration`]})})]})}export{K as SettingsPage};
|