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.
Files changed (271) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +461 -0
  3. package/dist/agents/agent-detector.d.ts +21 -0
  4. package/dist/agents/agent-detector.d.ts.map +1 -0
  5. package/dist/agents/agent-detector.js +109 -0
  6. package/dist/agents/agent-detector.js.map +1 -0
  7. package/dist/agents/agent-registry.d.ts +6 -0
  8. package/dist/agents/agent-registry.d.ts.map +1 -0
  9. package/dist/agents/agent-registry.js +25 -0
  10. package/dist/agents/agent-registry.js.map +1 -0
  11. package/dist/agents/agent-session.d.ts +60 -0
  12. package/dist/agents/agent-session.d.ts.map +1 -0
  13. package/dist/agents/agent-session.js +251 -0
  14. package/dist/agents/agent-session.js.map +1 -0
  15. package/dist/agents/drivers/base-driver.d.ts +37 -0
  16. package/dist/agents/drivers/base-driver.d.ts.map +1 -0
  17. package/dist/agents/drivers/base-driver.js +18 -0
  18. package/dist/agents/drivers/base-driver.js.map +1 -0
  19. package/dist/agents/drivers/claude-driver.d.ts +23 -0
  20. package/dist/agents/drivers/claude-driver.d.ts.map +1 -0
  21. package/dist/agents/drivers/claude-driver.js +61 -0
  22. package/dist/agents/drivers/claude-driver.js.map +1 -0
  23. package/dist/agents/drivers/gemini-driver.d.ts +23 -0
  24. package/dist/agents/drivers/gemini-driver.d.ts.map +1 -0
  25. package/dist/agents/drivers/gemini-driver.js +60 -0
  26. package/dist/agents/drivers/gemini-driver.js.map +1 -0
  27. package/dist/agents/session-metadata.d.ts +33 -0
  28. package/dist/agents/session-metadata.d.ts.map +1 -0
  29. package/dist/agents/session-metadata.js +34 -0
  30. package/dist/agents/session-metadata.js.map +1 -0
  31. package/dist/agents/sideband/hook-scripts.d.ts +29 -0
  32. package/dist/agents/sideband/hook-scripts.d.ts.map +1 -0
  33. package/dist/agents/sideband/hook-scripts.js +259 -0
  34. package/dist/agents/sideband/hook-scripts.js.map +1 -0
  35. package/dist/agents/sideband/sideband-receiver.d.ts +37 -0
  36. package/dist/agents/sideband/sideband-receiver.d.ts.map +1 -0
  37. package/dist/agents/sideband/sideband-receiver.js +203 -0
  38. package/dist/agents/sideband/sideband-receiver.js.map +1 -0
  39. package/dist/agents/sideband/status-resolver.d.ts +55 -0
  40. package/dist/agents/sideband/status-resolver.d.ts.map +1 -0
  41. package/dist/agents/sideband/status-resolver.js +194 -0
  42. package/dist/agents/sideband/status-resolver.js.map +1 -0
  43. package/dist/app.d.ts +3 -0
  44. package/dist/app.d.ts.map +1 -0
  45. package/dist/app.js +94 -0
  46. package/dist/app.js.map +1 -0
  47. package/dist/cli.d.ts +3 -0
  48. package/dist/cli.d.ts.map +1 -0
  49. package/dist/cli.js +188 -0
  50. package/dist/cli.js.map +1 -0
  51. package/dist/config/config.d.ts +341 -0
  52. package/dist/config/config.d.ts.map +1 -0
  53. package/dist/config/config.js +94 -0
  54. package/dist/config/config.js.map +1 -0
  55. package/dist/config/defaults.d.ts +33 -0
  56. package/dist/config/defaults.d.ts.map +1 -0
  57. package/dist/config/defaults.js +33 -0
  58. package/dist/config/defaults.js.map +1 -0
  59. package/dist/connectors/adapters/discord-adapter.d.ts +25 -0
  60. package/dist/connectors/adapters/discord-adapter.d.ts.map +1 -0
  61. package/dist/connectors/adapters/discord-adapter.js +154 -0
  62. package/dist/connectors/adapters/discord-adapter.js.map +1 -0
  63. package/dist/connectors/adapters/slack-adapter.d.ts +38 -0
  64. package/dist/connectors/adapters/slack-adapter.d.ts.map +1 -0
  65. package/dist/connectors/adapters/slack-adapter.js +502 -0
  66. package/dist/connectors/adapters/slack-adapter.js.map +1 -0
  67. package/dist/connectors/adapters/telegram-adapter.d.ts +25 -0
  68. package/dist/connectors/adapters/telegram-adapter.d.ts.map +1 -0
  69. package/dist/connectors/adapters/telegram-adapter.js +164 -0
  70. package/dist/connectors/adapters/telegram-adapter.js.map +1 -0
  71. package/dist/connectors/connector-interface.d.ts +41 -0
  72. package/dist/connectors/connector-interface.d.ts.map +1 -0
  73. package/dist/connectors/connector-interface.js +2 -0
  74. package/dist/connectors/connector-interface.js.map +1 -0
  75. package/dist/connectors/connector-manager.d.ts +24 -0
  76. package/dist/connectors/connector-manager.d.ts.map +1 -0
  77. package/dist/connectors/connector-manager.js +82 -0
  78. package/dist/connectors/connector-manager.js.map +1 -0
  79. package/dist/connectors/debug.d.ts +3 -0
  80. package/dist/connectors/debug.d.ts.map +1 -0
  81. package/dist/connectors/debug.js +16 -0
  82. package/dist/connectors/debug.js.map +1 -0
  83. package/dist/hooks/hook-server.d.ts +27 -0
  84. package/dist/hooks/hook-server.d.ts.map +1 -0
  85. package/dist/hooks/hook-server.js +149 -0
  86. package/dist/hooks/hook-server.js.map +1 -0
  87. package/dist/hooks/hook.d.ts +10 -0
  88. package/dist/hooks/hook.d.ts.map +1 -0
  89. package/dist/hooks/hook.js +58 -0
  90. package/dist/hooks/hook.js.map +1 -0
  91. package/dist/hooks/install.d.ts +8 -0
  92. package/dist/hooks/install.d.ts.map +1 -0
  93. package/dist/hooks/install.js +160 -0
  94. package/dist/hooks/install.js.map +1 -0
  95. package/dist/hooks/notification-hook.d.ts +9 -0
  96. package/dist/hooks/notification-hook.d.ts.map +1 -0
  97. package/dist/hooks/notification-hook.js +38 -0
  98. package/dist/hooks/notification-hook.js.map +1 -0
  99. package/dist/hooks/post-tool-hook.d.ts +9 -0
  100. package/dist/hooks/post-tool-hook.d.ts.map +1 -0
  101. package/dist/hooks/post-tool-hook.js +39 -0
  102. package/dist/hooks/post-tool-hook.js.map +1 -0
  103. package/dist/hooks/stop-hook.d.ts +9 -0
  104. package/dist/hooks/stop-hook.d.ts.map +1 -0
  105. package/dist/hooks/stop-hook.js +37 -0
  106. package/dist/hooks/stop-hook.js.map +1 -0
  107. package/dist/portal/ansi-renderer.d.ts +15 -0
  108. package/dist/portal/ansi-renderer.d.ts.map +1 -0
  109. package/dist/portal/ansi-renderer.js +75 -0
  110. package/dist/portal/ansi-renderer.js.map +1 -0
  111. package/dist/portal/portal-client.d.ts +18 -0
  112. package/dist/portal/portal-client.d.ts.map +1 -0
  113. package/dist/portal/portal-client.js +335 -0
  114. package/dist/portal/portal-client.js.map +1 -0
  115. package/dist/portal/portal-picker.d.ts +8 -0
  116. package/dist/portal/portal-picker.d.ts.map +1 -0
  117. package/dist/portal/portal-picker.js +145 -0
  118. package/dist/portal/portal-picker.js.map +1 -0
  119. package/dist/portal/portal-server.d.ts +24 -0
  120. package/dist/portal/portal-server.d.ts.map +1 -0
  121. package/dist/portal/portal-server.js +330 -0
  122. package/dist/portal/portal-server.js.map +1 -0
  123. package/dist/portal/shared.d.ts +79 -0
  124. package/dist/portal/shared.d.ts.map +1 -0
  125. package/dist/portal/shared.js +5 -0
  126. package/dist/portal/shared.js.map +1 -0
  127. package/dist/relay/rate-limiter.d.ts +16 -0
  128. package/dist/relay/rate-limiter.d.ts.map +1 -0
  129. package/dist/relay/rate-limiter.js +37 -0
  130. package/dist/relay/rate-limiter.js.map +1 -0
  131. package/dist/relay/relay-auth.d.ts +29 -0
  132. package/dist/relay/relay-auth.d.ts.map +1 -0
  133. package/dist/relay/relay-auth.js +129 -0
  134. package/dist/relay/relay-auth.js.map +1 -0
  135. package/dist/relay/relay-client.d.ts +52 -0
  136. package/dist/relay/relay-client.d.ts.map +1 -0
  137. package/dist/relay/relay-client.js +1102 -0
  138. package/dist/relay/relay-client.js.map +1 -0
  139. package/dist/relay/relay-crypto.d.ts +29 -0
  140. package/dist/relay/relay-crypto.d.ts.map +1 -0
  141. package/dist/relay/relay-crypto.js +100 -0
  142. package/dist/relay/relay-crypto.js.map +1 -0
  143. package/dist/relay/relay-message-schemas.d.ts +276 -0
  144. package/dist/relay/relay-message-schemas.d.ts.map +1 -0
  145. package/dist/relay/relay-message-schemas.js +137 -0
  146. package/dist/relay/relay-message-schemas.js.map +1 -0
  147. package/dist/relay/relay-protocol.d.ts +444 -0
  148. package/dist/relay/relay-protocol.d.ts.map +1 -0
  149. package/dist/relay/relay-protocol.js +15 -0
  150. package/dist/relay/relay-protocol.js.map +1 -0
  151. package/dist/relay/relay-store.d.ts +23 -0
  152. package/dist/relay/relay-store.d.ts.map +1 -0
  153. package/dist/relay/relay-store.js +54 -0
  154. package/dist/relay/relay-store.js.map +1 -0
  155. package/dist/relay/ticket-tracker.d.ts +18 -0
  156. package/dist/relay/ticket-tracker.d.ts.map +1 -0
  157. package/dist/relay/ticket-tracker.js +58 -0
  158. package/dist/relay/ticket-tracker.js.map +1 -0
  159. package/dist/store/app-store.d.ts +66 -0
  160. package/dist/store/app-store.d.ts.map +1 -0
  161. package/dist/store/app-store.js +227 -0
  162. package/dist/store/app-store.js.map +1 -0
  163. package/dist/store/connector-store.d.ts +21 -0
  164. package/dist/store/connector-store.d.ts.map +1 -0
  165. package/dist/store/connector-store.js +591 -0
  166. package/dist/store/connector-store.js.map +1 -0
  167. package/dist/store/portal-store.d.ts +5 -0
  168. package/dist/store/portal-store.d.ts.map +1 -0
  169. package/dist/store/portal-store.js +5 -0
  170. package/dist/store/portal-store.js.map +1 -0
  171. package/dist/store/settings-store.d.ts +13 -0
  172. package/dist/store/settings-store.d.ts.map +1 -0
  173. package/dist/store/settings-store.js +59 -0
  174. package/dist/store/settings-store.js.map +1 -0
  175. package/dist/terminal/pty-manager.d.ts +19 -0
  176. package/dist/terminal/pty-manager.d.ts.map +1 -0
  177. package/dist/terminal/pty-manager.js +58 -0
  178. package/dist/terminal/pty-manager.js.map +1 -0
  179. package/dist/terminal/screen-buffer.d.ts +36 -0
  180. package/dist/terminal/screen-buffer.d.ts.map +1 -0
  181. package/dist/terminal/screen-buffer.js +109 -0
  182. package/dist/terminal/screen-buffer.js.map +1 -0
  183. package/dist/terminal/xterm-bridge.d.ts +32 -0
  184. package/dist/terminal/xterm-bridge.d.ts.map +1 -0
  185. package/dist/terminal/xterm-bridge.js +168 -0
  186. package/dist/terminal/xterm-bridge.js.map +1 -0
  187. package/dist/ui/components/adopt-agent-dialog.d.ts +10 -0
  188. package/dist/ui/components/adopt-agent-dialog.d.ts.map +1 -0
  189. package/dist/ui/components/adopt-agent-dialog.js +31 -0
  190. package/dist/ui/components/adopt-agent-dialog.js.map +1 -0
  191. package/dist/ui/components/agent-tab.d.ts +17 -0
  192. package/dist/ui/components/agent-tab.d.ts.map +1 -0
  193. package/dist/ui/components/agent-tab.js +33 -0
  194. package/dist/ui/components/agent-tab.js.map +1 -0
  195. package/dist/ui/components/agents-settings-content.d.ts +7 -0
  196. package/dist/ui/components/agents-settings-content.d.ts.map +1 -0
  197. package/dist/ui/components/agents-settings-content.js +238 -0
  198. package/dist/ui/components/agents-settings-content.js.map +1 -0
  199. package/dist/ui/components/help-modal.d.ts +7 -0
  200. package/dist/ui/components/help-modal.d.ts.map +1 -0
  201. package/dist/ui/components/help-modal.js +29 -0
  202. package/dist/ui/components/help-modal.js.map +1 -0
  203. package/dist/ui/components/new-session-dialog.d.ts +8 -0
  204. package/dist/ui/components/new-session-dialog.d.ts.map +1 -0
  205. package/dist/ui/components/new-session-dialog.js +84 -0
  206. package/dist/ui/components/new-session-dialog.js.map +1 -0
  207. package/dist/ui/components/path-input.d.ts +8 -0
  208. package/dist/ui/components/path-input.d.ts.map +1 -0
  209. package/dist/ui/components/path-input.js +151 -0
  210. package/dist/ui/components/path-input.js.map +1 -0
  211. package/dist/ui/components/settings-panel.d.ts +7 -0
  212. package/dist/ui/components/settings-panel.d.ts.map +1 -0
  213. package/dist/ui/components/settings-panel.js +134 -0
  214. package/dist/ui/components/settings-panel.js.map +1 -0
  215. package/dist/ui/components/standalone-agents.d.ts +9 -0
  216. package/dist/ui/components/standalone-agents.d.ts.map +1 -0
  217. package/dist/ui/components/standalone-agents.js +28 -0
  218. package/dist/ui/components/standalone-agents.js.map +1 -0
  219. package/dist/ui/components/terminal-view.d.ts +12 -0
  220. package/dist/ui/components/terminal-view.d.ts.map +1 -0
  221. package/dist/ui/components/terminal-view.js +53 -0
  222. package/dist/ui/components/terminal-view.js.map +1 -0
  223. package/dist/ui/components/viewer-approval-dialog.d.ts +9 -0
  224. package/dist/ui/components/viewer-approval-dialog.d.ts.map +1 -0
  225. package/dist/ui/components/viewer-approval-dialog.js +38 -0
  226. package/dist/ui/components/viewer-approval-dialog.js.map +1 -0
  227. package/dist/ui/hooks/use-git-info.d.ts +8 -0
  228. package/dist/ui/hooks/use-git-info.d.ts.map +1 -0
  229. package/dist/ui/hooks/use-git-info.js +72 -0
  230. package/dist/ui/hooks/use-git-info.js.map +1 -0
  231. package/dist/ui/hooks/use-keybindings.d.ts +10 -0
  232. package/dist/ui/hooks/use-keybindings.d.ts.map +1 -0
  233. package/dist/ui/hooks/use-keybindings.js +91 -0
  234. package/dist/ui/hooks/use-keybindings.js.map +1 -0
  235. package/dist/ui/hooks/use-portal-connected.d.ts +2 -0
  236. package/dist/ui/hooks/use-portal-connected.d.ts.map +1 -0
  237. package/dist/ui/hooks/use-portal-connected.js +10 -0
  238. package/dist/ui/hooks/use-portal-connected.js.map +1 -0
  239. package/dist/ui/hooks/use-raw-input.d.ts +8 -0
  240. package/dist/ui/hooks/use-raw-input.d.ts.map +1 -0
  241. package/dist/ui/hooks/use-raw-input.js +106 -0
  242. package/dist/ui/hooks/use-raw-input.js.map +1 -0
  243. package/dist/ui/hooks/use-spinner.d.ts +2 -0
  244. package/dist/ui/hooks/use-spinner.d.ts.map +1 -0
  245. package/dist/ui/hooks/use-spinner.js +13 -0
  246. package/dist/ui/hooks/use-spinner.js.map +1 -0
  247. package/dist/ui/hooks/use-terminal-size.d.ts +5 -0
  248. package/dist/ui/hooks/use-terminal-size.d.ts.map +1 -0
  249. package/dist/ui/hooks/use-terminal-size.js +22 -0
  250. package/dist/ui/hooks/use-terminal-size.js.map +1 -0
  251. package/dist/ui/hooks/use-update-check.d.ts +6 -0
  252. package/dist/ui/hooks/use-update-check.d.ts.map +1 -0
  253. package/dist/ui/hooks/use-update-check.js +62 -0
  254. package/dist/ui/hooks/use-update-check.js.map +1 -0
  255. package/dist/ui/layout/main-pane.d.ts +13 -0
  256. package/dist/ui/layout/main-pane.d.ts.map +1 -0
  257. package/dist/ui/layout/main-pane.js +36 -0
  258. package/dist/ui/layout/main-pane.js.map +1 -0
  259. package/dist/ui/layout/shell.d.ts +17 -0
  260. package/dist/ui/layout/shell.d.ts.map +1 -0
  261. package/dist/ui/layout/shell.js +24 -0
  262. package/dist/ui/layout/shell.js.map +1 -0
  263. package/dist/ui/layout/sidebar.d.ts +12 -0
  264. package/dist/ui/layout/sidebar.d.ts.map +1 -0
  265. package/dist/ui/layout/sidebar.js +9 -0
  266. package/dist/ui/layout/sidebar.js.map +1 -0
  267. package/dist/ui/layout/status-bar.d.ts +9 -0
  268. package/dist/ui/layout/status-bar.d.ts.map +1 -0
  269. package/dist/ui/layout/status-bar.js +138 -0
  270. package/dist/ui/layout/status-bar.js.map +1 -0
  271. 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":";AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAI1C,MAAM,UAAU,GAAG;IACjB,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,2BAA2B,EAAE,WAAW,EAAE,aAAa,EAAE;IAC5I,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,YAAY,EAAE;CAC3H,CAAC;AAgBX,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC,SAAS,UAAU;IACjB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,aAAa,EAAE,KAAK;QACpB,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,IAAI;QACnB,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;aACnE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAqD,CAAC;YACpF,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;QACnD,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;SAC/D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACnC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB;IAC3C,IAAI,KAAK,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACnC,+CAA+C;QAC/C,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;aAC/E,KAAK,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,aAAa,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACzF,CAAC;AAQD,MAAM,UAAU,qBAAqB,CAAC,EAAE,QAAQ,EAA8B;IAC5E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,UAAU,CAAC,CAAC;IACrE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAA+C,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACzI,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,aAAiC,EAAE,EAAE;QACtE,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAE,CAAC;YAClC,MAAM,CAAC,GAAG,GAAG,CAAC;YAEd,oBAAoB;YACpB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,UAAmB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/G,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;iBAC7D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAErB,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAE1C,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClE,IAAI,SAAS;oBAAE,OAAO;gBAEtB,IAAI,MAA0B,CAAC;gBAC/B,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,GAAG,eAAe,CAAC;gBAC3B,CAAC;qBAAM,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBAC1C,MAAM,GAAG,YAAY,CAAC;gBACxB,CAAC;qBAAM,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;oBAC1C,MAAM,GAAG,kBAAkB,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,YAAY,CAAC;gBACxB,CAAC;gBAED,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACnF,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7B,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,8BAA8B;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,CAAC,wBAAwB,EAAE,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,IAAI,CACxE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;YACnB,cAAc,CAAC;gBACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;gBAChD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB;aACjD,CAAC,CAAC;QACL,CAAC,CACF,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACpF,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAEhE,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,yBAAyB,CAAC,cAAc,CAAC,CAAC;YAChE,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,GAAG,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC;YAE/E,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;YAEvD,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,aAAa,CAAC,GAAG,CAAC,CAAC;YACnB,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACxB,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;gBAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;aAC7D,CAAC,CAAC,CAAC;QACN,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,KAAK,CAAC,MAAM,KAAK,eAAe,IAAI,KAAK,CAAC,MAAM,KAAK,kBAAkB,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;YAAE,OAAO;QAEhH,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,YAAqB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnH,YAAY,CAAC,KAAK,CAAC;aAChB,IAAI,CAAC,GAAG,EAAE;YACT,iCAAiC;YACjC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;iBAC7D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YAErB,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAE1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE;YAC5B,IAAI,MAA0B,CAAC;YAC/B,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,GAAG,eAAe,CAAC;YAC3B,CAAC;iBAAM,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAC1C,MAAM,GAAG,YAAY,CAAC;YACxB,CAAC;iBAAM,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBAC1C,MAAM,GAAG,kBAAkB,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,YAAY,CAAC;YACxB,CAAC;YACD,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACrF,CACF,CAAC;QACJ,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChB,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,OAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAC/D,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC/C,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAChC,IAAI,CAAC,KAAK,GAAG;oBAAE,OAAO,CAAC,CAAC;gBACxB,MAAM,SAAS,GAAkB,CAAC,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC5E,OAAO,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,UAAmB,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACxI,CAAC,CAAC,CAAC;YACH,0CAA0C;YAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,CAAC;iBAC7D,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;gBACnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClE,IAAI,MAA0B,CAAC;gBAC/B,IAAI,SAAS,KAAK,IAAI;oBAAE,MAAM,GAAG,eAAe,CAAC;qBAC5C,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM;oBAAE,MAAM,GAAG,YAAY,CAAC;qBAC1D,IAAI,MAAM,IAAI,SAAS,KAAK,MAAM;oBAAE,MAAM,GAAG,kBAAkB,CAAC;;oBAChE,MAAM,GAAG,YAAY,CAAC;gBAC3B,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,CAAC,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,gBAAgB,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,YAAY,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAE,CAAC;IAE9B,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aAEzB,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YACjB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,MAAC,KAAK,CAAC,QAAQ,eACZ,CAAC,GAAG,CAAC,IAAI,KAAC,IAAI,sBAAW,EAC1B,KAAC,IAAI,IACH,IAAI,EAAE,MAAM,KAAK,CAAC,EAClB,SAAS,EAAE,MAAM,KAAK,CAAC,EACvB,KAAK,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YAEvC,GAAG,CAAC,WAAW,GACX,KARY,GAAG,CAAC,UAAU,CASlB,CAClB,CAAC,GACE,EAGN,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,EACX,QAAQ,EAAE,CAAC,aAEX,KAAC,IAAI,IAAC,IAAI,kBAAE,KAAK,CAAC,WAAW,GAAQ,EACrC,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,MAAC,IAAI,+BACS,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,kBAAE,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAQ,EAClG,KAAC,IAAI,IAAC,QAAQ,sCAAuB,IAChC,EACP,MAAC,IAAI,+BACU,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,IAAI,eAAe,IACvF,EACP,MAAC,IAAI,+BACU,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS,IAC9E,IACH,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACd,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,CAC9B,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,qCAA4B,CACjD,EACA,KAAK,CAAC,MAAM,KAAK,eAAe,IAAI,CACnC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,2CAA4B,CACpD,EACA,KAAK,CAAC,MAAM,KAAK,kBAAkB,IAAI,CACtC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,0CAA2B,CACrD,EACA,KAAK,CAAC,MAAM,KAAK,YAAY,IAAI,CAChC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,2BAAkB,CACtC,EACA,KAAK,CAAC,MAAM,KAAK,YAAY,IAAI,CAChC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,8BAAqB,CAC1C,EACA,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,CAC3B,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,KAAK,CAAC,KAAK,GAAQ,EACtC,KAAC,IAAI,IAAC,QAAQ,uCAAwB,IAClC,CACP,IACG,EAGN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,QAAQ,2EAA8B,EAC3C,CAAC,GAAG,EAAE;gCACL,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;gCAChF,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,MAAC,IAAI,+BACU,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,4BAAmB;gDACtE,CAAC,CAAC,EAAE,KAAK,YAAY,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,2BAAkB;oDAC9E,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,8BAAqB;wDACjE,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,sBAAa;4DACjD,CAAC,CAAC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,+BAAsB,IACvC,GACH,CACP,CAAC;4BACJ,CAAC,CAAC,EAAE,EACH,CAAC,GAAG,EAAE;gCACL,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;gCAChF,IAAI,EAAE,KAAK,gBAAgB,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;oCAC9C,OAAO,CACL,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,2CAA4B,GAC/C,CACP,CAAC;gCACJ,CAAC;gCACD,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;oCAClB,OAAO,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,6CAAoC,CAAC;gCACjE,CAAC;gCACD,OAAO,IAAI,CAAC;4BACd,CAAC,CAAC,EAAE,EACH,UAAU,IAAI,CACb,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,YAAE,UAAU,GAAQ,CACtC,IACG,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface HelpModalProps {
3
+ onClose: () => void;
4
+ }
5
+ export declare function HelpModal({ onClose }: HelpModalProps): React.ReactElement;
6
+ export {};
7
+ //# sourceMappingURL=help-modal.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ interface SettingsPanelProps {
3
+ onClose: () => void;
4
+ }
5
+ export declare function SettingsPanel({ onClose, }: SettingsPanelProps): React.ReactElement;
6
+ export {};
7
+ //# sourceMappingURL=settings-panel.d.ts.map
@@ -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"}