osagent-cli 0.1.39 → 0.1.87

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 (264) hide show
  1. package/dist/package.json +4 -3
  2. package/dist/src/commands/doctor.js +27 -4
  3. package/dist/src/commands/doctor.js.map +1 -1
  4. package/dist/src/config/keyBindings.d.ts +2 -1
  5. package/dist/src/config/keyBindings.js +4 -0
  6. package/dist/src/config/keyBindings.js.map +1 -1
  7. package/dist/src/config/settings.d.ts +1 -1
  8. package/dist/src/config/settings.js +1 -1
  9. package/dist/src/config/settings.js.map +1 -1
  10. package/dist/src/config/settingsSchema.d.ts +9 -0
  11. package/dist/src/config/settingsSchema.js +9 -0
  12. package/dist/src/config/settingsSchema.js.map +1 -1
  13. package/dist/src/config/trustedFolders.d.ts +1 -1
  14. package/dist/src/config/trustedFolders.js +1 -1
  15. package/dist/src/config/trustedFolders.js.map +1 -1
  16. package/dist/src/core/initializer.js +24 -0
  17. package/dist/src/core/initializer.js.map +1 -1
  18. package/dist/src/gemini.js +6 -3
  19. package/dist/src/gemini.js.map +1 -1
  20. package/dist/src/generated/git-commit.d.ts +2 -2
  21. package/dist/src/generated/git-commit.js +2 -2
  22. package/dist/src/services/SystemDetectionService.d.ts +56 -0
  23. package/dist/src/services/SystemDetectionService.js +248 -0
  24. package/dist/src/services/SystemDetectionService.js.map +1 -0
  25. package/dist/src/ui/App.js +2 -1
  26. package/dist/src/ui/App.js.map +1 -1
  27. package/dist/src/ui/AppContainer.js +156 -17
  28. package/dist/src/ui/AppContainer.js.map +1 -1
  29. package/dist/src/ui/IdeIntegrationNudge.d.ts +3 -1
  30. package/dist/src/ui/IdeIntegrationNudge.js +6 -7
  31. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  32. package/dist/src/ui/auth/AuthDialog.js +9 -6
  33. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  34. package/dist/src/ui/auth/AuthInProgress.d.ts +3 -1
  35. package/dist/src/ui/auth/AuthInProgress.js +5 -6
  36. package/dist/src/ui/auth/AuthInProgress.js.map +1 -1
  37. package/dist/src/ui/auth/useAuth.js +48 -10
  38. package/dist/src/ui/auth/useAuth.js.map +1 -1
  39. package/dist/src/ui/commands/doctorCommand.js +282 -108
  40. package/dist/src/ui/commands/doctorCommand.js.map +1 -1
  41. package/dist/src/ui/commands/initCommand.js +80 -28
  42. package/dist/src/ui/commands/initCommand.js.map +1 -1
  43. package/dist/src/ui/commands/viewCommand.js +1 -1
  44. package/dist/src/ui/commands/viewCommand.js.map +1 -1
  45. package/dist/src/ui/components/ApprovalModeDialog.d.ts +2 -0
  46. package/dist/src/ui/components/ApprovalModeDialog.js +10 -7
  47. package/dist/src/ui/components/ApprovalModeDialog.js.map +1 -1
  48. package/dist/src/ui/components/AsciiArt.d.ts +12 -0
  49. package/dist/src/ui/components/AsciiArt.js +41 -30
  50. package/dist/src/ui/components/AsciiArt.js.map +1 -1
  51. package/dist/src/ui/components/CollapsibleOutput.d.ts +31 -0
  52. package/dist/src/ui/components/CollapsibleOutput.js +49 -0
  53. package/dist/src/ui/components/CollapsibleOutput.js.map +1 -0
  54. package/dist/src/ui/components/CompactionStatusDisplay.d.ts +22 -0
  55. package/dist/src/ui/components/CompactionStatusDisplay.js +49 -0
  56. package/dist/src/ui/components/CompactionStatusDisplay.js.map +1 -0
  57. package/dist/src/ui/components/Composer.js +1 -1
  58. package/dist/src/ui/components/Composer.js.map +1 -1
  59. package/dist/src/ui/components/ContextCompactionIndicator.d.ts +17 -0
  60. package/dist/src/ui/components/ContextCompactionIndicator.js +47 -0
  61. package/dist/src/ui/components/ContextCompactionIndicator.js.map +1 -0
  62. package/dist/src/ui/components/ContextUsageDisplay.js +5 -4
  63. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
  64. package/dist/src/ui/components/DebugProfiler.d.ts +6 -1
  65. package/dist/src/ui/components/DebugProfiler.js +2 -2
  66. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  67. package/dist/src/ui/components/EditorSettingsDialog.d.ts +2 -0
  68. package/dist/src/ui/components/EditorSettingsDialog.js +10 -7
  69. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  70. package/dist/src/ui/components/FolderTrustDialog.js +8 -6
  71. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  72. package/dist/src/ui/components/Footer.js +6 -3
  73. package/dist/src/ui/components/Footer.js.map +1 -1
  74. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +3 -1
  75. package/dist/src/ui/components/IdeTrustChangeDialog.js +5 -6
  76. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -1
  77. package/dist/src/ui/components/InitDisplay.d.ts +26 -0
  78. package/dist/src/ui/components/InitDisplay.js +82 -0
  79. package/dist/src/ui/components/InitDisplay.js.map +1 -0
  80. package/dist/src/ui/components/InputPrompt.d.ts +1 -1
  81. package/dist/src/ui/components/InputPrompt.js +44 -13
  82. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  83. package/dist/src/ui/components/LoadingIndicator.js +5 -2
  84. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  85. package/dist/src/ui/components/LoopDetectionConfirmation.js +8 -6
  86. package/dist/src/ui/components/LoopDetectionConfirmation.js.map +1 -1
  87. package/dist/src/ui/components/MainContent.js +21 -4
  88. package/dist/src/ui/components/MainContent.js.map +1 -1
  89. package/dist/src/ui/components/ModelDialog.js +28 -13
  90. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  91. package/dist/src/ui/components/ModelSwitchDialog.d.ts +2 -0
  92. package/dist/src/ui/components/ModelSwitchDialog.js +8 -6
  93. package/dist/src/ui/components/ModelSwitchDialog.js.map +1 -1
  94. package/dist/src/ui/components/OpenAIKeyPrompt.d.ts +3 -1
  95. package/dist/src/ui/components/OpenAIKeyPrompt.js +18 -53
  96. package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
  97. package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +2 -0
  98. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +9 -7
  99. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -1
  100. package/dist/src/ui/components/PlanApprovalDisplay.d.ts +18 -0
  101. package/dist/src/ui/components/PlanApprovalDisplay.js +97 -0
  102. package/dist/src/ui/components/PlanApprovalDisplay.js.map +1 -0
  103. package/dist/src/ui/components/PrepareLabel.d.ts +1 -0
  104. package/dist/src/ui/components/PrepareLabel.js +4 -4
  105. package/dist/src/ui/components/PrepareLabel.js.map +1 -1
  106. package/dist/src/ui/components/ProQuotaDialog.js +8 -6
  107. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  108. package/dist/src/ui/components/QuitConfirmationDialog.js +8 -6
  109. package/dist/src/ui/components/QuitConfirmationDialog.js.map +1 -1
  110. package/dist/src/ui/components/QwenOAuthProgress.d.ts +3 -1
  111. package/dist/src/ui/components/QwenOAuthProgress.js +5 -6
  112. package/dist/src/ui/components/QwenOAuthProgress.js.map +1 -1
  113. package/dist/src/ui/components/SettingsDialog.js +30 -35
  114. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  115. package/dist/src/ui/components/ShellConfirmationDialog.js +8 -6
  116. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  117. package/dist/src/ui/components/StatusBar.js +40 -13
  118. package/dist/src/ui/components/StatusBar.js.map +1 -1
  119. package/dist/src/ui/components/SuggestionsDisplay.js +5 -4
  120. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
  121. package/dist/src/ui/components/TaskMasterPanel.js +73 -37
  122. package/dist/src/ui/components/TaskMasterPanel.js.map +1 -1
  123. package/dist/src/ui/components/ThemeDialog.js +11 -8
  124. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  125. package/dist/src/ui/components/TodoDisplay.js +9 -6
  126. package/dist/src/ui/components/TodoDisplay.js.map +1 -1
  127. package/dist/src/ui/components/TreeToolDisplay.d.ts +37 -0
  128. package/dist/src/ui/components/TreeToolDisplay.js +179 -0
  129. package/dist/src/ui/components/TreeToolDisplay.js.map +1 -0
  130. package/dist/src/ui/components/WelcomeBackDialog.js +8 -6
  131. package/dist/src/ui/components/WelcomeBackDialog.js.map +1 -1
  132. package/dist/src/ui/components/WorkspaceMigrationDialog.js +8 -6
  133. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
  134. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +5 -5
  135. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  136. package/dist/src/ui/components/messages/ToolGroupMessage.js +120 -12
  137. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  138. package/dist/src/ui/components/messages/ToolMessage.js +45 -9
  139. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  140. package/dist/src/ui/components/messages/UserMessage.d.ts +4 -0
  141. package/dist/src/ui/components/messages/UserMessage.js +96 -2
  142. package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
  143. package/dist/src/ui/components/subagents/create/AgentCreationWizard.d.ts +2 -0
  144. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js +9 -6
  145. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js.map +1 -1
  146. package/dist/src/ui/components/subagents/create/ColorSelector.d.ts +3 -1
  147. package/dist/src/ui/components/subagents/create/ColorSelector.js +2 -2
  148. package/dist/src/ui/components/subagents/create/ColorSelector.js.map +1 -1
  149. package/dist/src/ui/components/subagents/create/CreationSummary.d.ts +1 -1
  150. package/dist/src/ui/components/subagents/create/CreationSummary.js +6 -7
  151. package/dist/src/ui/components/subagents/create/CreationSummary.js.map +1 -1
  152. package/dist/src/ui/components/subagents/create/DescriptionInput.js +4 -10
  153. package/dist/src/ui/components/subagents/create/DescriptionInput.js.map +1 -1
  154. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.d.ts +1 -1
  155. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js +2 -2
  156. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js.map +1 -1
  157. package/dist/src/ui/components/subagents/create/LocationSelector.d.ts +1 -1
  158. package/dist/src/ui/components/subagents/create/LocationSelector.js +2 -2
  159. package/dist/src/ui/components/subagents/create/LocationSelector.js.map +1 -1
  160. package/dist/src/ui/components/subagents/create/ToolSelector.d.ts +3 -1
  161. package/dist/src/ui/components/subagents/create/ToolSelector.js +2 -2
  162. package/dist/src/ui/components/subagents/create/ToolSelector.js.map +1 -1
  163. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.d.ts +3 -1
  164. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js +2 -2
  165. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js.map +1 -1
  166. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.d.ts +3 -1
  167. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.js +15 -14
  168. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.js.map +1 -1
  169. package/dist/src/ui/components/subagents/manage/AgentEditStep.d.ts +3 -1
  170. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +2 -2
  171. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
  172. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.d.ts +3 -1
  173. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +7 -9
  174. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
  175. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.d.ts +2 -0
  176. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js +11 -8
  177. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js.map +1 -1
  178. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.d.ts +2 -0
  179. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js +6 -7
  180. package/dist/src/ui/components/subagents/runtime/AgentExecutionDisplay.js.map +1 -1
  181. package/dist/src/ui/components/subagents/runtime/MultiAgentSummary.d.ts +51 -0
  182. package/dist/src/ui/components/subagents/runtime/MultiAgentSummary.js +126 -0
  183. package/dist/src/ui/components/subagents/runtime/MultiAgentSummary.js.map +1 -0
  184. package/dist/src/ui/components/subagents/types.d.ts +4 -0
  185. package/dist/src/ui/components/subagents/types.js.map +1 -1
  186. package/dist/src/ui/contexts/ConsultationContext.js +38 -13
  187. package/dist/src/ui/contexts/ConsultationContext.js.map +1 -1
  188. package/dist/src/ui/contexts/FocusContext.d.ts +114 -0
  189. package/dist/src/ui/contexts/FocusContext.js +129 -0
  190. package/dist/src/ui/contexts/FocusContext.js.map +1 -0
  191. package/dist/src/ui/contexts/KeypressContext.js +23 -2
  192. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  193. package/dist/src/ui/contexts/RoadmapContext.js +21 -3
  194. package/dist/src/ui/contexts/RoadmapContext.js.map +1 -1
  195. package/dist/src/ui/contexts/TodoContext.d.ts +4 -0
  196. package/dist/src/ui/contexts/TodoContext.js +7 -1
  197. package/dist/src/ui/contexts/TodoContext.js.map +1 -1
  198. package/dist/src/ui/contexts/UIActionsContext.d.ts +1 -0
  199. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  200. package/dist/src/ui/contexts/UIStateContext.d.ts +2 -0
  201. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  202. package/dist/src/ui/contexts/VimModeContext.js +18 -8
  203. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  204. package/dist/src/ui/hooks/useAutoCompaction.d.ts +44 -0
  205. package/dist/src/ui/hooks/useAutoCompaction.js +141 -0
  206. package/dist/src/ui/hooks/useAutoCompaction.js.map +1 -0
  207. package/dist/src/ui/hooks/useAutoProjectContext.d.ts +34 -0
  208. package/dist/src/ui/hooks/useAutoProjectContext.js +194 -0
  209. package/dist/src/ui/hooks/useAutoProjectContext.js.map +1 -0
  210. package/dist/src/ui/hooks/useEpisodicMemory.d.ts +33 -0
  211. package/dist/src/ui/hooks/useEpisodicMemory.js +182 -0
  212. package/dist/src/ui/hooks/useEpisodicMemory.js.map +1 -0
  213. package/dist/src/ui/hooks/useFocusScope.d.ts +69 -0
  214. package/dist/src/ui/hooks/useFocusScope.js +121 -0
  215. package/dist/src/ui/hooks/useFocusScope.js.map +1 -0
  216. package/dist/src/ui/hooks/useGeminiStream.js +34 -5
  217. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  218. package/dist/src/ui/hooks/useHistoryManager.js +35 -6
  219. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -1
  220. package/dist/src/ui/hooks/useKeypress.d.ts +6 -0
  221. package/dist/src/ui/hooks/useKeypress.js +27 -4
  222. package/dist/src/ui/hooks/useKeypress.js.map +1 -1
  223. package/dist/src/ui/hooks/useMessageQueue.js +16 -5
  224. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -1
  225. package/dist/src/ui/hooks/useOrchestrationTracker.d.ts +24 -0
  226. package/dist/src/ui/hooks/useOrchestrationTracker.js +50 -0
  227. package/dist/src/ui/hooks/useOrchestrationTracker.js.map +1 -0
  228. package/dist/src/ui/hooks/useOrchestratorExecutor.d.ts +21 -0
  229. package/dist/src/ui/hooks/useOrchestratorExecutor.js +110 -0
  230. package/dist/src/ui/hooks/useOrchestratorExecutor.js.map +1 -0
  231. package/dist/src/ui/hooks/useSelectionList.js +10 -8
  232. package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
  233. package/dist/src/ui/hooks/useSkillPlugins.d.ts +26 -0
  234. package/dist/src/ui/hooks/useSkillPlugins.js +72 -0
  235. package/dist/src/ui/hooks/useSkillPlugins.js.map +1 -0
  236. package/dist/src/ui/hooks/useSubagentHooksRegistration.d.ts +16 -0
  237. package/dist/src/ui/hooks/useSubagentHooksRegistration.js +53 -0
  238. package/dist/src/ui/hooks/useSubagentHooksRegistration.js.map +1 -0
  239. package/dist/src/ui/hooks/useVectorMemory.d.ts +33 -0
  240. package/dist/src/ui/hooks/useVectorMemory.js +92 -0
  241. package/dist/src/ui/hooks/useVectorMemory.js.map +1 -0
  242. package/dist/src/ui/keyMatchers.test.js +1 -0
  243. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  244. package/dist/src/ui/models/availableModels.d.ts +3 -1
  245. package/dist/src/ui/models/availableModels.js +14 -7
  246. package/dist/src/ui/models/availableModels.js.map +1 -1
  247. package/dist/src/ui/themes/theme.js +2 -2
  248. package/dist/src/ui/themes/theme.js.map +1 -1
  249. package/dist/src/ui/types.d.ts +20 -0
  250. package/dist/src/ui/types.js.map +1 -1
  251. package/dist/src/validateNonInterActiveAuth.js +12 -0
  252. package/dist/src/validateNonInterActiveAuth.js.map +1 -1
  253. package/dist/src/zed-integration/schema.d.ts +306 -306
  254. package/dist/tsconfig.tsbuildinfo +1 -1
  255. package/package.json +4 -3
  256. package/dist/src/ui/contexts/IntelligentOrchestratorContext.d.ts +0 -87
  257. package/dist/src/ui/contexts/IntelligentOrchestratorContext.js +0 -336
  258. package/dist/src/ui/contexts/IntelligentOrchestratorContext.js.map +0 -1
  259. package/dist/src/ui/contexts/TaskmasterContext.d.ts +0 -87
  260. package/dist/src/ui/contexts/TaskmasterContext.js +0 -184
  261. package/dist/src/ui/contexts/TaskmasterContext.js.map +0 -1
  262. package/dist/src/ui/hooks/useTaskmasterOrchestrator.d.ts +0 -35
  263. package/dist/src/ui/hooks/useTaskmasterOrchestrator.js +0 -177
  264. package/dist/src/ui/hooks/useTaskmasterOrchestrator.js.map +0 -1
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo, useCallback } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { theme } from '../../../semantic-colors.js';
5
+ import { Colors } from '../../../colors.js';
6
+ import { useKeypress } from '../../../hooks/useKeypress.js';
7
+ /**
8
+ * Displays a summary of multiple parallel agent executions.
9
+ * Shows a collapsed view with count and expand hint, or expanded view with details.
10
+ *
11
+ * Example collapsed:
12
+ * ● 3 Explore agents finished (ctrl+o to expand)
13
+ *
14
+ * Example expanded:
15
+ * ● 3 Explore agents finished (ctrl+o to expand)
16
+ * ├─ Audit core backend services · 38 tool uses · 94.0k tokens
17
+ * │ └ Done
18
+ * ├─ Explore orchestration system · 14 tool uses · 50.0k tokens
19
+ * │ └ Done
20
+ * └─ Explore CLI frontend architecture · 44 tool uses · 74.0k tokens
21
+ * └ Done
22
+ */
23
+ export const MultiAgentSummary = ({ agents, groupLabel = 'agents', expandable = true, defaultExpanded = false, isFocused = true, }) => {
24
+ const [expanded, setExpanded] = useState(defaultExpanded);
25
+ const completedCount = useMemo(() => agents.filter(a => a.status === 'completed').length, [agents]);
26
+ const runningCount = useMemo(() => agents.filter(a => a.status === 'running').length, [agents]);
27
+ const failedCount = useMemo(() => agents.filter(a => a.status === 'failed').length, [agents]);
28
+ const allDone = runningCount === 0;
29
+ const hasFailures = failedCount > 0;
30
+ // Determine status color
31
+ const statusColor = useMemo(() => {
32
+ if (runningCount > 0)
33
+ return Colors.AccentYellow;
34
+ if (hasFailures)
35
+ return Colors.AccentRed;
36
+ return Colors.AccentBlue;
37
+ }, [runningCount, hasFailures]);
38
+ // Format token count (e.g., 94000 -> "94.0k")
39
+ const formatTokens = (count) => {
40
+ if (count >= 1000) {
41
+ return `${(count / 1000).toFixed(1)}k`;
42
+ }
43
+ return String(count);
44
+ };
45
+ // Generate summary text
46
+ const summaryText = useMemo(() => {
47
+ if (runningCount > 0) {
48
+ return `${agents.length} ${groupLabel} running`;
49
+ }
50
+ if (allDone && !hasFailures) {
51
+ return `${completedCount} ${groupLabel} finished`;
52
+ }
53
+ if (hasFailures) {
54
+ return `${completedCount} finished, ${failedCount} failed`;
55
+ }
56
+ return `${agents.length} ${groupLabel}`;
57
+ }, [agents.length, groupLabel, runningCount, allDone, hasFailures, completedCount, failedCount]);
58
+ // Handle keyboard shortcut for expand/collapse
59
+ const handleKeypress = useCallback((key) => {
60
+ if (expandable && key.ctrl && key.name === 'o') {
61
+ setExpanded(prev => !prev);
62
+ }
63
+ }, [expandable]);
64
+ // Use focus-aware keypress to prevent conflicts with dialogs
65
+ useKeypress(handleKeypress, { isActive: isFocused && expandable });
66
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(Text, { color: statusColor, children: "\u25CF " }), _jsx(Text, { bold: true, color: statusColor, children: summaryText }), expandable && (_jsxs(Text, { color: theme.text.secondary, children: [' ', "(ctrl+o to ", expanded ? 'collapse' : 'expand', ")"] }))] }), expanded && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: agents.map((agent, index) => {
67
+ const isLast = index === agents.length - 1;
68
+ const prefix = isLast ? '└─' : '├─';
69
+ const statusPrefix = isLast ? ' ' : '│ ';
70
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.text.secondary, children: [prefix, " "] }), _jsx(Text, { bold: true, children: agent.description || agent.name }), _jsxs(Text, { color: theme.text.secondary, children: [' ', "\u00B7 ", agent.toolUses, " tool uses \u00B7 ", formatTokens(agent.tokenCount), " tokens"] })] }), _jsxs(Box, { flexDirection: "row", children: [_jsxs(Text, { color: theme.text.secondary, children: [statusPrefix, "\u2514 "] }), _jsx(AgentStatusText, { status: agent.status, error: agent.error })] })] }, agent.id));
71
+ }) })), !expanded && allDone && (_jsx(Box, { flexDirection: "row", marginLeft: 2, children: _jsxs(Text, { color: theme.text.secondary, children: ["Total: ", agents.reduce((sum, a) => sum + a.toolUses, 0), " tool uses \u00B7 ", ' ', formatTokens(agents.reduce((sum, a) => sum + a.tokenCount, 0)), " tokens"] }) }))] }));
72
+ };
73
+ /**
74
+ * Status text component for individual agents
75
+ */
76
+ const AgentStatusText = ({ status, error }) => {
77
+ switch (status) {
78
+ case 'running':
79
+ return _jsx(Text, { color: Colors.AccentYellow, children: "Running..." });
80
+ case 'completed':
81
+ return _jsx(Text, { color: Colors.AccentGreen, children: "Done" });
82
+ case 'failed':
83
+ return (_jsxs(Text, { color: Colors.AccentRed, children: ["Failed", error ? `: ${error}` : ''] }));
84
+ case 'cancelled':
85
+ return _jsx(Text, { color: Colors.AccentYellow, children: "Cancelled" });
86
+ default:
87
+ return _jsx(Text, { color: theme.text.secondary, children: "Unknown" });
88
+ }
89
+ };
90
+ /**
91
+ * Hook to track multiple parallel agent executions
92
+ */
93
+ export function useMultiAgentTracking() {
94
+ const [agents, setAgents] = useState(new Map());
95
+ const addAgent = (agent) => {
96
+ setAgents(prev => new Map(prev).set(agent.id, agent));
97
+ };
98
+ const updateAgent = (id, updates) => {
99
+ setAgents(prev => {
100
+ const updated = new Map(prev);
101
+ const existing = updated.get(id);
102
+ if (existing) {
103
+ updated.set(id, { ...existing, ...updates });
104
+ }
105
+ return updated;
106
+ });
107
+ };
108
+ const removeAgent = (id) => {
109
+ setAgents(prev => {
110
+ const updated = new Map(prev);
111
+ updated.delete(id);
112
+ return updated;
113
+ });
114
+ };
115
+ const clearAgents = () => {
116
+ setAgents(new Map());
117
+ };
118
+ return {
119
+ agents: Array.from(agents.values()),
120
+ addAgent,
121
+ updateAgent,
122
+ removeAgent,
123
+ clearAgents,
124
+ };
125
+ }
126
+ //# sourceMappingURL=MultiAgentSummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiAgentSummary.js","sourceRoot":"","sources":["../../../../../../src/ui/components/subagents/runtime/MultiAgentSummary.tsx"],"names":[],"mappings":"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"}
@@ -107,6 +107,8 @@ export interface WizardStepProps {
107
107
  onPrevious: () => void;
108
108
  onCancel: () => void;
109
109
  config: Config | null;
110
+ /** Whether this step should respond to keyboard input. */
111
+ isFocused?: boolean;
110
112
  }
111
113
  /**
112
114
  * Result of the wizard completion.
@@ -134,4 +136,6 @@ export declare const MANAGEMENT_STEPS: {
134
136
  export interface StepNavigationProps {
135
137
  onNavigateToStep: (step: string) => void;
136
138
  onNavigateBack: () => void;
139
+ /** Whether this step should respond to keyboard input. */
140
+ isFocused?: boolean;
137
141
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/ui/components/subagents/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgHH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;CAClC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/ui/components/subagents/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkHH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;CAClC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useState, useCallback, } from 'react';
2
+ import { createContext, useContext, useState, useCallback, useRef, useMemo, } from 'react';
3
3
  const ConsultationContext = createContext(null);
4
4
  export function useConsultation() {
5
5
  const context = useContext(ConsultationContext);
@@ -23,6 +23,12 @@ export function ConsultationProvider({ children }) {
23
23
  userPreferences: {},
24
24
  });
25
25
  const generateId = () => `q_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
26
+ // Use refs to avoid unstable callback identities that cause infinite loops
27
+ // These refs allow callbacks to access current values without being dependencies
28
+ const currentQuestionRef = useRef(currentQuestion);
29
+ currentQuestionRef.current = currentQuestion;
30
+ const consultationModeRef = useRef(consultationMode);
31
+ consultationModeRef.current = consultationMode;
26
32
  const addQuestion = useCallback((question) => {
27
33
  const newQuestion = {
28
34
  ...question,
@@ -43,14 +49,15 @@ export function ConsultationProvider({ children }) {
43
49
  questions: [...prev.questions, newQuestion],
44
50
  }));
45
51
  // If no current question, set this as current
46
- if (!currentQuestion) {
52
+ // Use refs to access current state without adding to dependencies
53
+ if (!currentQuestionRef.current) {
47
54
  setCurrentQuestion(newQuestion);
48
55
  // In blocking mode, high-priority questions pause the agent
49
- if (consultationMode === 'blocking' && newQuestion.priority === 'high') {
56
+ if (consultationModeRef.current === 'blocking' && newQuestion.priority === 'high') {
50
57
  setIsBlocking(true);
51
58
  }
52
59
  }
53
- }, [currentQuestion, consultationMode]);
60
+ }, []); // Empty deps - use refs for state access
54
61
  const answerQuestion = useCallback((questionId, answer) => {
55
62
  setCollectedContext(prev => {
56
63
  const newAnswers = new Map(prev.answers);
@@ -68,14 +75,14 @@ export function ConsultationProvider({ children }) {
68
75
  };
69
76
  });
70
77
  setQuestionQueue(prev => prev.filter(q => q.id !== questionId));
71
- // Move to next question
78
+ // Move to next question - use ref to access consultationMode
72
79
  setQuestionQueue(prev => {
73
80
  const next = prev[0] || null;
74
81
  setCurrentQuestion(next);
75
82
  if (!next) {
76
83
  setIsBlocking(false);
77
84
  }
78
- else if (consultationMode === 'blocking' && next.priority === 'high') {
85
+ else if (consultationModeRef.current === 'blocking' && next.priority === 'high') {
79
86
  setIsBlocking(true);
80
87
  }
81
88
  else {
@@ -83,7 +90,7 @@ export function ConsultationProvider({ children }) {
83
90
  }
84
91
  return prev.slice(1);
85
92
  });
86
- }, [consultationMode]);
93
+ }, []); // Empty deps - use ref for consultationMode
87
94
  const skipQuestion = useCallback((questionId) => {
88
95
  setQuestionQueue(prev => {
89
96
  const filtered = prev.filter(q => q.id !== questionId);
@@ -92,7 +99,7 @@ export function ConsultationProvider({ children }) {
92
99
  if (!next) {
93
100
  setIsBlocking(false);
94
101
  }
95
- else if (consultationMode === 'blocking' && next.priority === 'high') {
102
+ else if (consultationModeRef.current === 'blocking' && next.priority === 'high') {
96
103
  setIsBlocking(true);
97
104
  }
98
105
  else {
@@ -100,17 +107,18 @@ export function ConsultationProvider({ children }) {
100
107
  }
101
108
  return filtered.slice(1);
102
109
  });
103
- }, [consultationMode]);
110
+ }, []); // Empty deps - use ref for consultationMode
104
111
  const setConsultationMode = useCallback((mode) => {
105
112
  setConsultationModeState(mode);
106
113
  // In blocking mode, check if current question should block
107
- if (mode === 'blocking' && currentQuestion?.priority === 'high') {
114
+ // Use ref to access currentQuestion without adding to dependencies
115
+ if (mode === 'blocking' && currentQuestionRef.current?.priority === 'high') {
108
116
  setIsBlocking(true);
109
117
  }
110
118
  else if (mode === 'active') {
111
119
  setIsBlocking(false);
112
120
  }
113
- }, [currentQuestion]);
121
+ }, []); // Empty deps - use ref for currentQuestion
114
122
  const getContextForAgent = useCallback(() => {
115
123
  const contextParts = [];
116
124
  if (collectedContext.projectContext.length > 0) {
@@ -165,7 +173,9 @@ export function ConsultationProvider({ children }) {
165
173
  };
166
174
  });
167
175
  }, []);
168
- const value = {
176
+ // CRITICAL: Memoize context value to prevent unnecessary re-renders of all consumers
177
+ // Without this, every render creates a new object, causing infinite re-render loops
178
+ const value = useMemo(() => ({
169
179
  isActive,
170
180
  currentQuestion,
171
181
  questionQueue,
@@ -180,7 +190,22 @@ export function ConsultationProvider({ children }) {
180
190
  clearContext,
181
191
  setBlocking,
182
192
  addUserContext,
183
- };
193
+ }), [
194
+ isActive,
195
+ currentQuestion,
196
+ questionQueue,
197
+ collectedContext,
198
+ isBlocking,
199
+ consultationMode,
200
+ addQuestion,
201
+ answerQuestion,
202
+ skipQuestion,
203
+ setConsultationMode,
204
+ getContextForAgent,
205
+ clearContext,
206
+ setBlocking,
207
+ addUserContext,
208
+ ]);
184
209
  return (_jsx(ConsultationContext.Provider, { value: value, children: children }));
185
210
  }
186
211
  //# sourceMappingURL=ConsultationContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConsultationContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/ConsultationContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConsultationContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/ConsultationContext.tsx"],"names":[],"mappings":";AAOA,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,GAER,MAAM,OAAO,CAAC;AA0Df,MAAM,mBAAmB,GAAG,aAAa,CAAiC,IAAI,CAAC,CAAC;AAEhF,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAMD,MAAM,UAAU,oBAAoB,CAAC,EAAE,QAAQ,EAA6B;IAC1E,sDAAsD;IACtD,MAAM,QAAQ,GAAG,IAAa,CAAC;IAC/B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAA8B,IAAI,CAAC,CAAC;IAC1F,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAyB,EAAE,CAAC,CAAC;IAC/E,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,wEAAwE;IACxE,MAAM,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAmB,UAAU,CAAC,CAAC;IAC5F,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAmB;QACzE,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,EAAE;KACpB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAErF,2EAA2E;IAC3E,iFAAiF;IACjF,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IACnD,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;IAE7C,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAE/C,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,QAAqE,EAAE,EAAE;QACxG,MAAM,WAAW,GAAyB;YACxC,GAAG,QAAQ;YACX,EAAE,EAAE,UAAU,EAAE;YAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,KAAK;SAChB,CAAC;QAEF,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC;YACvC,yCAAyC;YACzC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACrD,OAAO,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,GAAG,IAAI;YACP,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;SAC5C,CAAC,CAAC,CAAC;QAEJ,8CAA8C;QAC9C,kEAAkE;QAClE,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAChC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAChC,4DAA4D;YAC5D,IAAI,mBAAmB,CAAC,OAAO,KAAK,UAAU,IAAI,WAAW,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAClF,aAAa,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,yCAAyC;IAEjD,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,UAAkB,EAAE,MAAc,EAAE,EAAE;QACxE,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACzB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;YACvE,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC9C,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAC3D,CAAC;YAEF,OAAO;gBACL,GAAG,IAAI;gBACP,OAAO,EAAE,UAAU;gBACnB,SAAS,EAAE,gBAAgB;gBAC3B,cAAc,EAAE;oBACd,GAAG,IAAI,CAAC,cAAc;oBACtB,MAAM,gBAAgB,EAAE,QAAQ,QAAQ,MAAM,EAAE;iBACjD;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC;QAEhE,6DAA6D;QAC7D,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,mBAAmB,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAClF,aAAa,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4CAA4C;IAEpD,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,UAAkB,EAAE,EAAE;QACtD,gBAAgB,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACjC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,IAAI,mBAAmB,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAClF,aAAa,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,4CAA4C;IAEpD,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,IAAsB,EAAE,EAAE;QACjE,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC/B,2DAA2D;QAC3D,mEAAmE;QACnE,IAAI,IAAI,KAAK,UAAU,IAAI,kBAAkB,CAAC,OAAO,EAAE,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC3E,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,2CAA2C;IAEnD,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAW,EAAE;QAClD,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,IAAI,gBAAgB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,YAAY,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAChD,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC5E,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,YAAY,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC;gBACpC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,mBAAmB,CAAC;YAClB,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,EAAE;SACpB,CAAC,CAAC;QACH,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACrB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzB,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,QAAiB,EAAE,EAAE;QACpD,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,4DAA4D;IAC5D,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,OAAe,EAAE,QAAiB,EAAE,EAAE;QACxE,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;oBACL,GAAG,IAAI;oBACP,eAAe,EAAE;wBACf,GAAG,IAAI,CAAC,eAAe;wBACvB,CAAC,QAAQ,CAAC,EAAE,OAAO;qBACpB;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,GAAG,IAAI;gBACP,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;aAClD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,qFAAqF;IACrF,oFAAoF;IACpF,MAAM,KAAK,GAA4B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,QAAQ;QACR,eAAe;QACf,aAAa;QACb,gBAAgB;QAChB,UAAU;QACV,gBAAgB;QAChB,WAAW;QACX,cAAc;QACd,YAAY;QACZ,mBAAmB;QACnB,kBAAkB;QAClB,YAAY;QACZ,WAAW;QACX,cAAc;KACf,CAAC,EAAE;QACF,QAAQ;QACR,eAAe;QACf,aAAa;QACb,gBAAgB;QAChB,UAAU;QACV,gBAAgB;QAChB,WAAW;QACX,cAAc;QACd,YAAY;QACZ,mBAAmB;QACnB,kBAAkB;QAClB,YAAY;QACZ,WAAW;QACX,cAAc;KACf,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACvC,QAAQ,GACoB,CAChC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 OSAgent OC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import React from 'react';
7
+ /**
8
+ * FocusContext provides centralized focus management for the entire UI.
9
+ *
10
+ * This solves the problem of multiple conflicting focus mechanisms
11
+ * (useKeypress, useSelectionList, etc.) by providing
12
+ * a single source of truth for which component currently has focus.
13
+ *
14
+ * Architecture:
15
+ * - Uses a stack-based model for nested dialogs
16
+ * - Last item on stack has focus, all others are paused
17
+ * - Components auto-register on mount, auto-unregister on unmount
18
+ * - Backward compatible with existing isFocused props
19
+ */
20
+ export interface FocusContextValue {
21
+ /**
22
+ * Stack of focused component IDs. The last item has focus.
23
+ * When empty, 'main-input' (the InputPrompt) has implicit focus.
24
+ */
25
+ focusStack: readonly string[];
26
+ /**
27
+ * Push a component onto the focus stack.
28
+ * Called when a dialog mounts.
29
+ */
30
+ pushFocus: (id: string) => void;
31
+ /**
32
+ * Remove a component from the focus stack.
33
+ * Called when a dialog unmounts.
34
+ * Idempotent - safe to call multiple times.
35
+ */
36
+ popFocus: (id: string) => void;
37
+ /**
38
+ * Check if a specific component currently has focus.
39
+ * Returns true only if the id is at the top of the stack.
40
+ */
41
+ hasFocus: (id: string) => boolean;
42
+ /**
43
+ * The currently focused component ID, or null if stack is empty.
44
+ * When null, 'main-input' has implicit focus.
45
+ */
46
+ currentFocus: string | null;
47
+ }
48
+ /**
49
+ * Hook to access the FocusContext.
50
+ * Throws if used outside of FocusProvider.
51
+ */
52
+ export declare function useFocusContext(): FocusContextValue;
53
+ /**
54
+ * Optional hook that returns null if not within FocusProvider.
55
+ * Useful for backward compatibility during migration.
56
+ */
57
+ export declare function useFocusContextOptional(): FocusContextValue | null;
58
+ interface FocusProviderProps {
59
+ children: React.ReactNode;
60
+ }
61
+ /**
62
+ * FocusProvider manages the focus stack for the entire application.
63
+ *
64
+ * Usage:
65
+ * ```tsx
66
+ * <FocusProvider>
67
+ * <App />
68
+ * </FocusProvider>
69
+ * ```
70
+ *
71
+ * Then in dialogs:
72
+ * ```tsx
73
+ * function MyDialog() {
74
+ * const { isFocused } = useFocusScope('my-dialog');
75
+ * // isFocused is true when this dialog is at top of stack
76
+ * }
77
+ * ```
78
+ */
79
+ export declare function FocusProvider({ children }: FocusProviderProps): import("react/jsx-runtime").JSX.Element;
80
+ /**
81
+ * Special focus ID for the main input prompt.
82
+ * This component has focus when the focus stack is empty.
83
+ */
84
+ export declare const MAIN_INPUT_FOCUS_ID = "main-input";
85
+ /**
86
+ * Predefined focus IDs for dialogs.
87
+ * Using constants prevents typos and enables autocomplete.
88
+ */
89
+ export declare const FocusIds: {
90
+ readonly MAIN_INPUT: "main-input";
91
+ readonly AUTH_DIALOG: "auth-dialog";
92
+ readonly MODEL_DIALOG: "model-dialog";
93
+ readonly THEME_DIALOG: "theme-dialog";
94
+ readonly SETTINGS_DIALOG: "settings-dialog";
95
+ readonly FOLDER_TRUST_DIALOG: "folder-trust-dialog";
96
+ readonly APPROVAL_MODE_DIALOG: "approval-mode-dialog";
97
+ readonly EDITOR_SETTINGS_DIALOG: "editor-settings-dialog";
98
+ readonly PRO_QUOTA_DIALOG: "pro-quota-dialog";
99
+ readonly QUIT_CONFIRMATION_DIALOG: "quit-confirmation-dialog";
100
+ readonly SHELL_CONFIRMATION_DIALOG: "shell-confirmation-dialog";
101
+ readonly WELCOME_BACK_DIALOG: "welcome-back-dialog";
102
+ readonly WORKSPACE_MIGRATION_DIALOG: "workspace-migration-dialog";
103
+ readonly PERMISSIONS_DIALOG: "permissions-dialog";
104
+ readonly MODEL_SWITCH_DIALOG: "model-switch-dialog";
105
+ readonly LOOP_DETECTION_DIALOG: "loop-detection-dialog";
106
+ readonly AGENTS_MANAGER_DIALOG: "agents-manager-dialog";
107
+ readonly AGENT_CREATION_DIALOG: "agent-creation-dialog";
108
+ readonly IDE_INTEGRATION_NUDGE: "ide-integration-nudge";
109
+ readonly IDE_TRUST_CHANGE_DIALOG: "ide-trust-change-dialog";
110
+ readonly OPENAI_KEY_PROMPT: "openai-key-prompt";
111
+ readonly CONSENT_PROMPT: "consent-prompt";
112
+ };
113
+ export type FocusId = (typeof FocusIds)[keyof typeof FocusIds];
114
+ export {};
@@ -0,0 +1,129 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 OSAgent OC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ import React, { createContext, useContext, useCallback, useMemo, useRef, useState, } from 'react';
8
+ const FocusContext = createContext(null);
9
+ /**
10
+ * Hook to access the FocusContext.
11
+ * Throws if used outside of FocusProvider.
12
+ */
13
+ export function useFocusContext() {
14
+ const context = useContext(FocusContext);
15
+ if (!context) {
16
+ throw new Error('useFocusContext must be used within a FocusProvider');
17
+ }
18
+ return context;
19
+ }
20
+ /**
21
+ * Optional hook that returns null if not within FocusProvider.
22
+ * Useful for backward compatibility during migration.
23
+ */
24
+ export function useFocusContextOptional() {
25
+ return useContext(FocusContext);
26
+ }
27
+ /**
28
+ * FocusProvider manages the focus stack for the entire application.
29
+ *
30
+ * Usage:
31
+ * ```tsx
32
+ * <FocusProvider>
33
+ * <App />
34
+ * </FocusProvider>
35
+ * ```
36
+ *
37
+ * Then in dialogs:
38
+ * ```tsx
39
+ * function MyDialog() {
40
+ * const { isFocused } = useFocusScope('my-dialog');
41
+ * // isFocused is true when this dialog is at top of stack
42
+ * }
43
+ * ```
44
+ */
45
+ export function FocusProvider({ children }) {
46
+ const [focusStack, setFocusStack] = useState([]);
47
+ // Use ref for immediate access in callbacks (prevents stale closure issues)
48
+ const focusStackRef = useRef([]);
49
+ focusStackRef.current = focusStack;
50
+ const pushFocus = useCallback((id) => {
51
+ setFocusStack((prev) => {
52
+ // Don't add duplicates
53
+ if (prev.includes(id)) {
54
+ return prev;
55
+ }
56
+ const newStack = [...prev, id];
57
+ focusStackRef.current = newStack;
58
+ return newStack;
59
+ });
60
+ }, []);
61
+ const popFocus = useCallback((id) => {
62
+ setFocusStack((prev) => {
63
+ // Remove the id from anywhere in the stack (handles out-of-order unmounts)
64
+ const newStack = prev.filter((item) => item !== id);
65
+ if (newStack.length === prev.length) {
66
+ // Id wasn't in stack, no change needed
67
+ return prev;
68
+ }
69
+ focusStackRef.current = newStack;
70
+ return newStack;
71
+ });
72
+ }, []);
73
+ const hasFocus = useCallback((id) => {
74
+ // Use ref for synchronous access (important for keypress handlers)
75
+ const stack = focusStackRef.current;
76
+ if (stack.length === 0) {
77
+ // When stack is empty, main-input has focus
78
+ return id === 'main-input';
79
+ }
80
+ // Only the top of the stack has focus
81
+ return stack[stack.length - 1] === id;
82
+ }, []);
83
+ const currentFocus = useMemo(() => {
84
+ return focusStack.length > 0 ? focusStack[focusStack.length - 1] ?? null : null;
85
+ }, [focusStack]);
86
+ // Memoize context value to prevent unnecessary re-renders
87
+ const contextValue = useMemo(() => ({
88
+ focusStack,
89
+ pushFocus,
90
+ popFocus,
91
+ hasFocus,
92
+ currentFocus,
93
+ }), [focusStack, pushFocus, popFocus, hasFocus, currentFocus]);
94
+ return (_jsx(FocusContext.Provider, { value: contextValue, children: children }));
95
+ }
96
+ /**
97
+ * Special focus ID for the main input prompt.
98
+ * This component has focus when the focus stack is empty.
99
+ */
100
+ export const MAIN_INPUT_FOCUS_ID = 'main-input';
101
+ /**
102
+ * Predefined focus IDs for dialogs.
103
+ * Using constants prevents typos and enables autocomplete.
104
+ */
105
+ export const FocusIds = {
106
+ MAIN_INPUT: 'main-input',
107
+ AUTH_DIALOG: 'auth-dialog',
108
+ MODEL_DIALOG: 'model-dialog',
109
+ THEME_DIALOG: 'theme-dialog',
110
+ SETTINGS_DIALOG: 'settings-dialog',
111
+ FOLDER_TRUST_DIALOG: 'folder-trust-dialog',
112
+ APPROVAL_MODE_DIALOG: 'approval-mode-dialog',
113
+ EDITOR_SETTINGS_DIALOG: 'editor-settings-dialog',
114
+ PRO_QUOTA_DIALOG: 'pro-quota-dialog',
115
+ QUIT_CONFIRMATION_DIALOG: 'quit-confirmation-dialog',
116
+ SHELL_CONFIRMATION_DIALOG: 'shell-confirmation-dialog',
117
+ WELCOME_BACK_DIALOG: 'welcome-back-dialog',
118
+ WORKSPACE_MIGRATION_DIALOG: 'workspace-migration-dialog',
119
+ PERMISSIONS_DIALOG: 'permissions-dialog',
120
+ MODEL_SWITCH_DIALOG: 'model-switch-dialog',
121
+ LOOP_DETECTION_DIALOG: 'loop-detection-dialog',
122
+ AGENTS_MANAGER_DIALOG: 'agents-manager-dialog',
123
+ AGENT_CREATION_DIALOG: 'agent-creation-dialog',
124
+ IDE_INTEGRATION_NUDGE: 'ide-integration-nudge',
125
+ IDE_TRUST_CHANGE_DIALOG: 'ide-trust-change-dialog',
126
+ OPENAI_KEY_PROMPT: 'openai-key-prompt',
127
+ CONSENT_PROMPT: 'consent-prompt',
128
+ };
129
+ //# sourceMappingURL=FocusContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FocusContext.js","sourceRoot":"","sources":["../../../../src/ui/contexts/FocusContext.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { KittySequenceOverflowEvent, logKittySequenceOverflow, } from 'osagent-core';
3
3
  import { useStdin } from 'ink';
4
- import { createContext, useCallback, useContext, useEffect, useRef, } from 'react';
4
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, } from 'react';
5
5
  import readline from 'node:readline';
6
6
  import { PassThrough } from 'node:stream';
7
7
  import { BACKSLASH_ENTER_DETECTION_WINDOW_MS, CHAR_CODE_ESC, KITTY_CTRL_C, KITTY_KEYCODE_BACKSPACE, KITTY_KEYCODE_ENTER, KITTY_KEYCODE_NUMPAD_ENTER, KITTY_KEYCODE_TAB, MAX_KITTY_SEQUENCE_LENGTH, KITTY_MODIFIER_BASE, KITTY_MODIFIER_EVENT_TYPES_OFFSET, MODIFIER_SHIFT_BIT, MODIFIER_ALT_BIT, MODIFIER_CTRL_BIT, } from '../utils/platformConstants.js';
@@ -558,6 +558,20 @@ export function KeypressProvider({ children, kittyProtocolEnabled, pasteWorkarou
558
558
  flushRawBuffer();
559
559
  }
560
560
  };
561
+ // Handle stdin errors gracefully - EIO and EBADF are recoverable TTY errors
562
+ // that occur when terminal has I/O issues (SSH disconnect, rapid resize, etc.)
563
+ const handleStdinError = (err) => {
564
+ if (err.code === 'EIO' || err.code === 'EBADF') {
565
+ // Recoverable TTY errors - don't crash the application
566
+ if (debugKeystrokeLogging) {
567
+ // eslint-disable-next-line no-console
568
+ console.warn('[DEBUG] stdin error (recoverable):', err.code, err.message);
569
+ }
570
+ return;
571
+ }
572
+ // Re-throw non-recoverable errors
573
+ throw err;
574
+ };
561
575
  let rl;
562
576
  if (usePassthrough) {
563
577
  rl = readline.createInterface({
@@ -567,13 +581,17 @@ export function KeypressProvider({ children, kittyProtocolEnabled, pasteWorkarou
567
581
  readline.emitKeypressEvents(keypressStream, rl);
568
582
  keypressStream.on('keypress', handleKeypress);
569
583
  stdin.on('data', handleRawKeypress);
584
+ stdin.on('error', handleStdinError);
570
585
  }
571
586
  else {
572
587
  rl = readline.createInterface({ input: stdin, escapeCodeTimeout: 0 });
573
588
  readline.emitKeypressEvents(stdin, rl);
574
589
  stdin.on('keypress', handleKeypress);
590
+ stdin.on('error', handleStdinError);
575
591
  }
576
592
  return () => {
593
+ // Remove stdin error handler first
594
+ stdin.removeListener('error', handleStdinError);
577
595
  if (usePassthrough) {
578
596
  keypressStream.removeListener('keypress', handleKeypress);
579
597
  stdin.removeListener('data', handleRawKeypress);
@@ -632,6 +650,9 @@ export function KeypressProvider({ children, kittyProtocolEnabled, pasteWorkarou
632
650
  config,
633
651
  subscribers,
634
652
  ]);
635
- return (_jsx(KeypressContext.Provider, { value: { subscribe, unsubscribe }, children: children }));
653
+ // Memoize context value to prevent infinite render loops
654
+ // (inline object creates new reference every render)
655
+ const contextValue = useMemo(() => ({ subscribe, unsubscribe }), [subscribe, unsubscribe]);
656
+ return (_jsx(KeypressContext.Provider, { value: contextValue, children: children }));
636
657
  }
637
658
  //# sourceMappingURL=KeypressContext.js.map