@parhelia/core 0.1.12888 → 0.1.12890

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 (342) hide show
  1. package/dist/agents-view/AgentCard.d.ts +2 -1
  2. package/dist/agents-view/AgentCard.js +14 -38
  3. package/dist/agents-view/AgentCard.js.map +1 -1
  4. package/dist/agents-view/AgentGalleryCard.d.ts +12 -0
  5. package/dist/agents-view/AgentGalleryCard.js +12 -0
  6. package/dist/agents-view/AgentGalleryCard.js.map +1 -0
  7. package/dist/agents-view/AgentGalleryView.d.ts +18 -0
  8. package/dist/agents-view/AgentGalleryView.js +88 -0
  9. package/dist/agents-view/AgentGalleryView.js.map +1 -0
  10. package/dist/agents-view/AgentProfileIcon.d.ts +9 -0
  11. package/dist/agents-view/AgentProfileIcon.js +28 -0
  12. package/dist/agents-view/AgentProfileIcon.js.map +1 -0
  13. package/dist/agents-view/AgentsView.d.ts +6 -1
  14. package/dist/agents-view/AgentsView.js +40 -12
  15. package/dist/agents-view/AgentsView.js.map +1 -1
  16. package/dist/agents-view/AgentsWorkspaceView.js +40 -21
  17. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  18. package/dist/agents-view/DateAgentsGroup.d.ts +2 -1
  19. package/dist/agents-view/DateAgentsGroup.js +2 -2
  20. package/dist/agents-view/DateAgentsGroup.js.map +1 -1
  21. package/dist/agents-view/ProfileAgentsGroup.d.ts +2 -1
  22. package/dist/agents-view/ProfileAgentsGroup.js +5 -8
  23. package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
  24. package/dist/agents-view/RenameAgentDialog.d.ts +12 -0
  25. package/dist/agents-view/RenameAgentDialog.js +40 -0
  26. package/dist/agents-view/RenameAgentDialog.js.map +1 -0
  27. package/dist/components/FilterInput.d.ts +2 -0
  28. package/dist/components/FilterInput.js +4 -2
  29. package/dist/components/FilterInput.js.map +1 -1
  30. package/dist/components/ui/alert-dialog.d.ts +1 -1
  31. package/dist/components/ui/alert-dialog.js +5 -5
  32. package/dist/components/ui/alert-dialog.js.map +1 -1
  33. package/dist/components/ui/alert.d.ts +3 -2
  34. package/dist/components/ui/alert.js +9 -4
  35. package/dist/components/ui/alert.js.map +1 -1
  36. package/dist/components/ui/badge.d.ts +1 -1
  37. package/dist/components/ui/button.d.ts +9 -4
  38. package/dist/components/ui/button.js +16 -9
  39. package/dist/components/ui/button.js.map +1 -1
  40. package/dist/components/ui/dialog.d.ts +1 -1
  41. package/dist/components/ui/dialog.js +4 -3
  42. package/dist/components/ui/dialog.js.map +1 -1
  43. package/dist/components/ui/styled-dialog-title.js +1 -1
  44. package/dist/components/ui/styled-dialog-title.js.map +1 -1
  45. package/dist/config/config.js +4 -3
  46. package/dist/config/config.js.map +1 -1
  47. package/dist/editor/FieldListField.js +6 -2
  48. package/dist/editor/FieldListField.js.map +1 -1
  49. package/dist/editor/GlobalMenuBar.js +3 -1
  50. package/dist/editor/GlobalMenuBar.js.map +1 -1
  51. package/dist/editor/LinkEditorDialog.js +3 -3
  52. package/dist/editor/LinkEditorDialog.js.map +1 -1
  53. package/dist/editor/MainLayout.js +11 -9
  54. package/dist/editor/MainLayout.js.map +1 -1
  55. package/dist/editor/WorkspaceTitleSwitcher.d.ts +5 -0
  56. package/dist/editor/WorkspaceTitleSwitcher.js +86 -0
  57. package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -0
  58. package/dist/editor/ai/AgentInlineDialogContent.js +1 -1
  59. package/dist/editor/ai/AgentInlineDialogContent.js.map +1 -1
  60. package/dist/editor/ai/Agents.js +155 -43
  61. package/dist/editor/ai/Agents.js.map +1 -1
  62. package/dist/editor/ai/InlineAiDialog.js +1 -1
  63. package/dist/editor/ai/InlineAiDialog.js.map +1 -1
  64. package/dist/editor/ai/dialogs/QuestionnaireInline.js +52 -82
  65. package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
  66. package/dist/editor/ai/terminal/agentQuestionnaireRecap.d.ts +82 -0
  67. package/dist/editor/ai/terminal/agentQuestionnaireRecap.js +277 -0
  68. package/dist/editor/ai/terminal/agentQuestionnaireRecap.js.map +1 -0
  69. package/dist/editor/ai/terminal/agentQuestionnaireTranscriptRecovery.d.ts +3 -0
  70. package/dist/editor/ai/terminal/agentQuestionnaireTranscriptRecovery.js +3 -3
  71. package/dist/editor/ai/terminal/agentQuestionnaireTranscriptRecovery.js.map +1 -1
  72. package/dist/editor/ai/terminal/agentSessionLiveTotals.d.ts +5 -0
  73. package/dist/editor/ai/terminal/agentSessionLiveTotals.js +14 -0
  74. package/dist/editor/ai/terminal/agentSessionLiveTotals.js.map +1 -1
  75. package/dist/editor/ai/terminal/agentSessionSnapshot.js +2 -0
  76. package/dist/editor/ai/terminal/agentSessionSnapshot.js.map +1 -1
  77. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
  78. package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
  79. package/dist/editor/ai/terminal/components/AgentGreeting.js +5 -2
  80. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  81. package/dist/editor/ai/terminal/components/AgentProjectProgress.d.ts +12 -0
  82. package/dist/editor/ai/terminal/components/AgentProjectProgress.js +207 -0
  83. package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -0
  84. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +3 -3
  85. package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
  86. package/dist/editor/ai/terminal/components/AgentPromptComposer.d.ts +2 -1
  87. package/dist/editor/ai/terminal/components/AgentPromptComposer.js +5 -2
  88. package/dist/editor/ai/terminal/components/AgentPromptComposer.js.map +1 -1
  89. package/dist/editor/ai/terminal/components/AgentPromptInputArea.d.ts +2 -1
  90. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +5 -3
  91. package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
  92. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.d.ts +4 -3
  93. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +6 -19
  94. package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
  95. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +5 -1
  96. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +33 -2
  97. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  98. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.d.ts +2 -0
  99. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +20 -1
  100. package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
  101. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -1
  102. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  103. package/dist/editor/ai/terminal/components/AgentTerminalView.d.ts +3 -2
  104. package/dist/editor/ai/terminal/components/AgentTerminalView.js +11 -2
  105. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  106. package/dist/editor/ai/terminal/components/AiResponseMessage.js +59 -7
  107. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  108. package/dist/editor/ai/terminal/components/QuestionnaireRecap.d.ts +9 -0
  109. package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +56 -0
  110. package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -0
  111. package/dist/editor/ai/terminal/contextBreakdown.d.ts +17 -0
  112. package/dist/editor/ai/terminal/contextBreakdown.js +58 -0
  113. package/dist/editor/ai/terminal/contextBreakdown.js.map +1 -0
  114. package/dist/editor/ai/terminal/types.d.ts +2 -0
  115. package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.d.ts +29 -0
  116. package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js +68 -0
  117. package/dist/editor/ai/terminal/useAgentAutoStartOnCreate.js.map +1 -0
  118. package/dist/editor/ai/terminal/useAgentInlineDialogEvents.js +8 -3
  119. package/dist/editor/ai/terminal/useAgentInlineDialogEvents.js.map +1 -1
  120. package/dist/editor/ai/terminal/useAgentInlineDialogState.d.ts +10 -3
  121. package/dist/editor/ai/terminal/useAgentInlineDialogState.js +33 -4
  122. package/dist/editor/ai/terminal/useAgentInlineDialogState.js.map +1 -1
  123. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js +16 -2
  124. package/dist/editor/ai/terminal/useAgentRunResyncSocketHandler.js.map +1 -1
  125. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +3 -1
  126. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  127. package/dist/editor/ai/terminal/useAgentSession.js +12 -1
  128. package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
  129. package/dist/editor/ai/terminal/useAgentSubmitLifecycle.d.ts +3 -0
  130. package/dist/editor/ai/terminal/useAgentSubmitLifecycle.js +6 -1
  131. package/dist/editor/ai/terminal/useAgentSubmitLifecycle.js.map +1 -1
  132. package/dist/editor/ai/terminal/useAgentTerminalController.js +48 -4
  133. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  134. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -0
  135. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js +2 -1
  136. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  137. package/dist/editor/ai/terminal/useAgentToolCallHandler.js +13 -1
  138. package/dist/editor/ai/terminal/useAgentToolCallHandler.js.map +1 -1
  139. package/dist/editor/ai/terminal/useAgentToolResultHandler.js +31 -7
  140. package/dist/editor/ai/terminal/useAgentToolResultHandler.js.map +1 -1
  141. package/dist/editor/bridge/BridgeClient.d.ts +1 -8
  142. package/dist/editor/bridge/BridgeClient.js +2 -4
  143. package/dist/editor/bridge/BridgeClient.js.map +1 -1
  144. package/dist/editor/bridge/protocol.d.ts +512 -0
  145. package/dist/editor/bridge/protocol.js +188 -0
  146. package/dist/editor/bridge/protocol.js.map +1 -0
  147. package/dist/editor/client/AboutDialog.js +15 -4
  148. package/dist/editor/client/AboutDialog.js.map +1 -1
  149. package/dist/editor/client/EditorShell.js +50 -13
  150. package/dist/editor/client/EditorShell.js.map +1 -1
  151. package/dist/editor/client/editContext.d.ts +6 -0
  152. package/dist/editor/client/editContext.js.map +1 -1
  153. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +3 -0
  154. package/dist/editor/client/hooks/useSocketMessageHandler.js +57 -25
  155. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  156. package/dist/editor/client/hooks/useWorkbox.d.ts +1 -0
  157. package/dist/editor/client/hooks/useWorkbox.js +14 -1
  158. package/dist/editor/client/hooks/useWorkbox.js.map +1 -1
  159. package/dist/editor/client/operationToasts.d.ts +2 -0
  160. package/dist/editor/client/operationToasts.js +35 -0
  161. package/dist/editor/client/operationToasts.js.map +1 -0
  162. package/dist/editor/client/operations.d.ts +4 -0
  163. package/dist/editor/client/operations.js +134 -74
  164. package/dist/editor/client/operations.js.map +1 -1
  165. package/dist/editor/client/pageModelBuilder.d.ts +1 -0
  166. package/dist/editor/client/pageModelBuilder.js +22 -13
  167. package/dist/editor/client/pageModelBuilder.js.map +1 -1
  168. package/dist/editor/client/waitForEditOperationTerminal.d.ts +1 -0
  169. package/dist/editor/client/waitForEditOperationTerminal.js +1 -1
  170. package/dist/editor/client/waitForEditOperationTerminal.js.map +1 -1
  171. package/dist/editor/commands/itemCommands.js +5 -16
  172. package/dist/editor/commands/itemCommands.js.map +1 -1
  173. package/dist/editor/content-tree/IndicatorSettings.js +3 -2
  174. package/dist/editor/content-tree/IndicatorSettings.js.map +1 -1
  175. package/dist/editor/field-types/CheckboxEditor.js +3 -1
  176. package/dist/editor/field-types/CheckboxEditor.js.map +1 -1
  177. package/dist/editor/field-types/MultiLineText.js +24 -7
  178. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  179. package/dist/editor/field-types/SingleLineText.js +19 -2
  180. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  181. package/dist/editor/field-types/useTextCompletion.d.ts +20 -0
  182. package/dist/editor/field-types/useTextCompletion.js +166 -0
  183. package/dist/editor/field-types/useTextCompletion.js.map +1 -0
  184. package/dist/editor/menubar/ItemLanguageVersion.js +3 -14
  185. package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
  186. package/dist/editor/menubar/OperationsIndicator.d.ts +7 -0
  187. package/dist/editor/menubar/OperationsIndicator.js +87 -0
  188. package/dist/editor/menubar/OperationsIndicator.js.map +1 -0
  189. package/dist/editor/menubar/ToolbarFactory.js +4 -1
  190. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  191. package/dist/editor/menubar/VersionSelector.d.ts +3 -2
  192. package/dist/editor/menubar/VersionSelector.js +28 -12
  193. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  194. package/dist/editor/menubar/WorkflowButton.js +7 -4
  195. package/dist/editor/menubar/WorkflowButton.js.map +1 -1
  196. package/dist/editor/menubar/toolbar-sections/EditControls.js +7 -3
  197. package/dist/editor/menubar/toolbar-sections/EditControls.js.map +1 -1
  198. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +4 -1
  199. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  200. package/dist/editor/notifications/NotificationCenter.js +28 -27
  201. package/dist/editor/notifications/NotificationCenter.js.map +1 -1
  202. package/dist/editor/notifications/NotificationItem.js +100 -15
  203. package/dist/editor/notifications/NotificationItem.js.map +1 -1
  204. package/dist/editor/notifications/watchEventOptions.js +3 -2
  205. package/dist/editor/notifications/watchEventOptions.js.map +1 -1
  206. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.d.ts +1 -1
  207. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +8 -2
  208. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  209. package/dist/editor/page-editor-chrome/PageEditorChrome.d.ts +1 -1
  210. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +7 -1
  211. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  212. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +3 -10
  213. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  214. package/dist/editor/page-editor-chrome/overlay/geometry.d.ts +2 -2
  215. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +1 -1
  216. package/dist/editor/page-viewer/MiniMap.d.ts +21 -0
  217. package/dist/editor/page-viewer/MiniMap.js +113 -11
  218. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  219. package/dist/editor/page-viewer/PageViewerFrame.js +155 -22
  220. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  221. package/dist/editor/page-viewer/bridgeFieldPatch.d.ts +1 -2
  222. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  223. package/dist/editor/page-viewer/pageViewContext.d.ts +1 -1
  224. package/dist/editor/reviews/DecisionsMatrix.js +5 -1
  225. package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
  226. package/dist/editor/reviews/SuggestedEdit.js +12 -2
  227. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  228. package/dist/editor/reviews/latestFeedbackData.js +7 -1
  229. package/dist/editor/reviews/latestFeedbackData.js.map +1 -1
  230. package/dist/editor/reviews/suggestedEditState.d.ts +2 -0
  231. package/dist/editor/reviews/suggestedEditState.js +20 -0
  232. package/dist/editor/reviews/suggestedEditState.js.map +1 -1
  233. package/dist/editor/reviews/suggestionContentChange.d.ts +1 -1
  234. package/dist/editor/reviews/suggestionContentChange.js +23 -3
  235. package/dist/editor/reviews/suggestionContentChange.js.map +1 -1
  236. package/dist/editor/services/agentService.d.ts +6 -0
  237. package/dist/editor/services/agentService.js +14 -0
  238. package/dist/editor/services/agentService.js.map +1 -1
  239. package/dist/editor/services/aiService.d.ts +5 -0
  240. package/dist/editor/services/aiService.js.map +1 -1
  241. package/dist/editor/settings/About.js +1 -1
  242. package/dist/editor/settings/About.js.map +1 -1
  243. package/dist/editor/settings/panels/AgentProfileConfigPanel.js +4 -2
  244. package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
  245. package/dist/editor/settings/panels/AgentToolsPanel.js +61 -33
  246. package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
  247. package/dist/editor/settings/panels/ClusterInstancesPanel.js +2 -1
  248. package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
  249. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +3 -2
  250. package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
  251. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +3 -2
  252. package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
  253. package/dist/editor/settings/panels/StatusPanel.js +10 -7
  254. package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
  255. package/dist/editor/sidebar/Completions.js +1 -1
  256. package/dist/editor/sidebar/Completions.js.map +1 -1
  257. package/dist/editor/sidebar/ComponentTree.js +1 -1
  258. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  259. package/dist/editor/sidebar/OperationItem.js +1 -1
  260. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  261. package/dist/editor/sidebar/Workbox.js +18 -4
  262. package/dist/editor/sidebar/Workbox.js.map +1 -1
  263. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +3 -2
  264. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
  265. package/dist/editor/tree-indicators/GutterColumns.js +3 -2
  266. package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
  267. package/dist/editor/ui/DialogButtons.d.ts +3 -1
  268. package/dist/editor/ui/DialogButtons.js +3 -2
  269. package/dist/editor/ui/DialogButtons.js.map +1 -1
  270. package/dist/editor/ui/Icons.js +1 -1
  271. package/dist/editor/ui/Icons.js.map +1 -1
  272. package/dist/editor/ui/ItemCollectionEditor.js +2 -2
  273. package/dist/editor/ui/ItemCollectionEditor.js.map +1 -1
  274. package/dist/editor/ui/PublishItemDialog.js +4 -6
  275. package/dist/editor/ui/PublishItemDialog.js.map +1 -1
  276. package/dist/editor/ui/SimpleTabs.d.ts +2 -1
  277. package/dist/editor/ui/SimpleTabs.js +23 -5
  278. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  279. package/dist/editor/ui/Splitter.js +120 -3
  280. package/dist/editor/ui/Splitter.js.map +1 -1
  281. package/dist/editor/ui/splitterResizeEvent.d.ts +7 -0
  282. package/dist/editor/ui/splitterResizeEvent.js +6 -0
  283. package/dist/editor/ui/splitterResizeEvent.js.map +1 -1
  284. package/dist/editor/version-diff/versionDiffTargets.d.ts +1 -1
  285. package/dist/editor/workflowFields.d.ts +1 -0
  286. package/dist/editor/workflowFields.js +16 -0
  287. package/dist/editor/workflowFields.js.map +1 -0
  288. package/dist/index.d.ts +4 -2
  289. package/dist/index.js +3 -2
  290. package/dist/index.js.map +1 -1
  291. package/dist/revision.d.ts +2 -2
  292. package/dist/revision.js +2 -2
  293. package/dist/splash-screen/ModernSplashScreen.js +20 -11
  294. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  295. package/dist/splash-screen/NewPage.js +26 -7
  296. package/dist/splash-screen/NewPage.js.map +1 -1
  297. package/dist/task-board/TaskBoardWorkspace.js +154 -121
  298. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  299. package/dist/task-board/components/CreateTaskDialog.js +1 -1
  300. package/dist/task-board/components/CreateTaskDialog.js.map +1 -1
  301. package/dist/task-board/components/ProjectDashboard.d.ts +12 -22
  302. package/dist/task-board/components/ProjectDashboard.js +120 -108
  303. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  304. package/dist/task-board/components/ProjectOverviewContent.js +3 -0
  305. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
  306. package/dist/task-board/components/ProjectPropertiesPanel.d.ts +2 -0
  307. package/dist/task-board/components/ProjectPropertiesPanel.js +7 -4
  308. package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
  309. package/dist/task-board/components/ProjectSettingsDialog.d.ts +16 -0
  310. package/dist/task-board/components/ProjectSettingsDialog.js +55 -47
  311. package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
  312. package/dist/task-board/components/TaskAgentPanel.js +6 -5
  313. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  314. package/dist/task-board/components/TaskAssigneePicker.js +3 -2
  315. package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
  316. package/dist/task-board/components/TaskAttachmentsSection.js +1 -1
  317. package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
  318. package/dist/task-board/components/TaskBoardHomeView.d.ts +7 -0
  319. package/dist/task-board/components/TaskBoardHomeView.js +21 -0
  320. package/dist/task-board/components/TaskBoardHomeView.js.map +1 -0
  321. package/dist/task-board/components/TaskBoardProjectListSidebar.js +74 -12
  322. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  323. package/dist/task-board/components/TaskBoardTitlebar.js +9 -52
  324. package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
  325. package/dist/task-board/components/TaskCard.js +5 -13
  326. package/dist/task-board/components/TaskCard.js.map +1 -1
  327. package/dist/task-board/components/TaskRow.js +3 -2
  328. package/dist/task-board/components/TaskRow.js.map +1 -1
  329. package/dist/task-board/taskBoardNavStore.d.ts +0 -2
  330. package/dist/task-board/taskBoardNavStore.js +0 -2
  331. package/dist/task-board/taskBoardNavStore.js.map +1 -1
  332. package/dist/task-board/views/DependencyGraphView.js +3 -2
  333. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  334. package/dist/task-board/views/KanbanView.js +161 -38
  335. package/dist/task-board/views/KanbanView.js.map +1 -1
  336. package/dist/task-board/views/ListView.js +1 -2
  337. package/dist/task-board/views/ListView.js.map +1 -1
  338. package/dist/task-board/views/WizardView.d.ts +2 -0
  339. package/dist/task-board/views/WizardView.js +7 -4
  340. package/dist/task-board/views/WizardView.js.map +1 -1
  341. package/package.json +1 -2
  342. package/styles.css +4 -3
@@ -0,0 +1,207 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useMemo, useState } from "react";
4
+ import { ExternalLink } from "lucide-react";
5
+ import { getProject, getTasks, } from "../../../../task-board/services/taskService";
6
+ import { useEditContext } from "../../../client/editContext";
7
+ import { useParheliaSettings } from "../../../hooks/useParheliaSettings";
8
+ import { getAgent as fetchAgent, } from "../../../services/agentService";
9
+ const REFRESH_INTERVAL_MS = 10_000;
10
+ function asRecord(value) {
11
+ return value && typeof value === "object" && !Array.isArray(value)
12
+ ? value
13
+ : undefined;
14
+ }
15
+ function getString(record, ...keys) {
16
+ if (!record)
17
+ return undefined;
18
+ for (const key of keys) {
19
+ const value = record[key];
20
+ if (typeof value === "string" && value.trim())
21
+ return value;
22
+ }
23
+ return undefined;
24
+ }
25
+ function getTrackedProjectFromAdditionalData(additionalData) {
26
+ const data = asRecord(additionalData);
27
+ const projectId = getString(data, "createdProjectId", "CreatedProjectId");
28
+ if (!projectId)
29
+ return null;
30
+ return {
31
+ projectId,
32
+ title: getString(data, "createdProjectTitle", "CreatedProjectTitle"),
33
+ };
34
+ }
35
+ function getTrackedProjectFromAgentContext(agentContext) {
36
+ if (!agentContext)
37
+ return null;
38
+ try {
39
+ const context = typeof agentContext === "string"
40
+ ? JSON.parse(agentContext)
41
+ : agentContext;
42
+ const record = asRecord(context);
43
+ return getTrackedProjectFromAdditionalData(record?.additionalData ?? record?.AdditionalData);
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ }
49
+ function getTrackedProjectFromMessages(messages) {
50
+ if (!messages?.length)
51
+ return null;
52
+ for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {
53
+ const toolCalls = messages[messageIndex]?.toolCalls;
54
+ if (!toolCalls?.length)
55
+ continue;
56
+ for (let callIndex = toolCalls.length - 1; callIndex >= 0; callIndex -= 1) {
57
+ const toolCall = toolCalls[callIndex];
58
+ if (toolCall?.functionName !== "create-project" ||
59
+ toolCall.functionError ||
60
+ !toolCall.functionResult) {
61
+ continue;
62
+ }
63
+ try {
64
+ const result = JSON.parse(toolCall.functionResult);
65
+ const record = asRecord(result);
66
+ const projectId = getString(record, "projectId", "ProjectId");
67
+ if (projectId) {
68
+ return {
69
+ projectId,
70
+ title: getString(record, "title", "Title"),
71
+ };
72
+ }
73
+ }
74
+ catch {
75
+ // Ignore non-JSON results; the context fallback can still find the project.
76
+ }
77
+ }
78
+ }
79
+ return null;
80
+ }
81
+ function ProjectProgressBar({ done, total, className, }) {
82
+ const percent = total > 0 ? Math.min((done / total) * 100, 100) : 0;
83
+ return (_jsx("div", { className: `bg-neutral-grey-10 h-2 w-full overflow-hidden rounded-full ${className || ""}`, children: _jsx("div", { className: "bg-feedback-green h-full rounded-full transition-all duration-300", style: { width: `${percent}%` } }) }));
84
+ }
85
+ /**
86
+ * Progress header for the taskboard project created by this agent (tracked in
87
+ * the agent context as additionalData.createdProjectId). Rendered directly
88
+ * above the prompt composer; the expand button opens the project in the
89
+ * taskboard workspace.
90
+ */
91
+ export function AgentProjectProgress({ agent, agentMetadata, messages, }) {
92
+ const additionalData = agentMetadata?.additionalData;
93
+ const metadataTrackedProject = getTrackedProjectFromAdditionalData(additionalData);
94
+ const messageTrackedProject = useMemo(() => getTrackedProjectFromMessages(messages), [messages]);
95
+ const [loadedTrackedProject, setLoadedTrackedProject] = useState(null);
96
+ const agentId = agent?.id;
97
+ const metadataProjectId = metadataTrackedProject?.projectId;
98
+ const messageProjectId = messageTrackedProject?.projectId;
99
+ const loadedProjectId = loadedTrackedProject?.projectId;
100
+ const projectId = metadataProjectId ?? messageProjectId ?? loadedProjectId;
101
+ const trackedTitle = metadataTrackedProject?.title ??
102
+ messageTrackedProject?.title ??
103
+ loadedTrackedProject?.title;
104
+ const editContext = useEditContext();
105
+ const parheliaSettings = useParheliaSettings();
106
+ const currency = parheliaSettings?.currency || "USD";
107
+ const [project, setProject] = useState(null);
108
+ const [tasks, setTasks] = useState(null);
109
+ useEffect(() => {
110
+ setLoadedTrackedProject(null);
111
+ }, [agentId]);
112
+ useEffect(() => {
113
+ if (projectId || !agentId)
114
+ return;
115
+ let disposed = false;
116
+ const loadTrackedProject = async () => {
117
+ try {
118
+ const details = await fetchAgent(agentId);
119
+ const trackedProject = getTrackedProjectFromAgentContext(details.agentContext) ??
120
+ getTrackedProjectFromMessages(details.messages);
121
+ if (!disposed && trackedProject?.projectId) {
122
+ setLoadedTrackedProject(trackedProject);
123
+ }
124
+ }
125
+ catch {
126
+ // The regular interval will retry; absence of this header is non-fatal.
127
+ }
128
+ };
129
+ void loadTrackedProject();
130
+ const interval = window.setInterval(() => void loadTrackedProject(), REFRESH_INTERVAL_MS);
131
+ return () => {
132
+ disposed = true;
133
+ window.clearInterval(interval);
134
+ };
135
+ }, [agentId, projectId]);
136
+ const refresh = useCallback(async () => {
137
+ if (!projectId)
138
+ return;
139
+ try {
140
+ const [projectResult, tasksResult] = await Promise.all([
141
+ getProject(projectId),
142
+ getTasks(projectId),
143
+ ]);
144
+ if (projectResult.type === "success" && projectResult.data) {
145
+ const data = projectResult.data;
146
+ setProject(data.project ?? data);
147
+ }
148
+ if (tasksResult.type === "success" && Array.isArray(tasksResult.data)) {
149
+ setTasks(tasksResult.data);
150
+ }
151
+ }
152
+ catch {
153
+ // Keep the last known data; the next poll may succeed again.
154
+ }
155
+ }, [projectId]);
156
+ useEffect(() => {
157
+ setProject(null);
158
+ setTasks(null);
159
+ if (!projectId)
160
+ return;
161
+ void refresh();
162
+ const interval = setInterval(() => void refresh(), REFRESH_INTERVAL_MS);
163
+ return () => clearInterval(interval);
164
+ }, [projectId, refresh]);
165
+ const openInTaskboard = useCallback(() => {
166
+ if (!projectId || typeof window === "undefined")
167
+ return;
168
+ if (editContext?.workspaceId !== "taskboard") {
169
+ editContext?.switchWorkspace?.("taskboard", {
170
+ skipNavigationHistory: true,
171
+ });
172
+ }
173
+ // Mirror the notification-route deep link: workspace + tbProjectId, with
174
+ // editor/task params cleared (see config/notificationRoutes.ts).
175
+ const params = new URLSearchParams(window.location.search);
176
+ params.set("workspace", "taskboard");
177
+ params.set("tbProjectId", projectId);
178
+ for (const key of [
179
+ "tbTaskId",
180
+ "tbView",
181
+ "tbWizard",
182
+ "itemid",
183
+ "lang",
184
+ "language",
185
+ "version",
186
+ "reviewId",
187
+ ]) {
188
+ params.delete(key);
189
+ }
190
+ const queryString = params.toString();
191
+ window.history.replaceState(null, "", queryString
192
+ ? `${window.location.pathname}?${queryString}`
193
+ : window.location.pathname);
194
+ window.dispatchEvent(new PopStateEvent("popstate"));
195
+ }, [editContext, projectId]);
196
+ if (!projectId)
197
+ return null;
198
+ const title = project?.title || trackedTitle || "Project";
199
+ const total = tasks?.length ?? 0;
200
+ const done = tasks?.filter((t) => t.status === "Done").length ?? 0;
201
+ const costUsed = project?.costUsed ?? null;
202
+ const costLimit = project?.costLimit ?? null;
203
+ return (_jsxs("div", { "data-testid": "agent-project-progress", className: "shrink-0 px-4 pt-3 pb-2", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "text-neutral-grey-100 truncate text-sm font-semibold", title: title, children: title }), costUsed != null && (_jsxs("span", { className: "text-neutral-grey-50 hidden truncate text-xs sm:block", children: ["Current total cost:", " ", _jsxs("span", { className: "font-semibold", children: [costUsed.toFixed(2), " ", currency] }), costLimit != null &&
204
+ costLimit > 0 &&
205
+ ` / ${costLimit.toFixed(2)} ${currency}`] })), _jsxs("div", { className: "ml-auto flex shrink-0 items-center gap-1.5", children: [_jsx("span", { "data-testid": "agent-project-progress-counts", className: "bg-neutral-grey-5 text-neutral-grey-100 rounded-md px-2 py-0.5 text-xs font-medium tabular-nums", children: tasks ? `${done}/${total} done` : "..." }), _jsx("button", { type: "button", "data-testid": "agent-project-progress-expand", title: "Open in Taskboard", "aria-label": "Open in Taskboard", onClick: openInTaskboard, className: "text-neutral-grey-50 hover:text-neutral-grey-100 hover:bg-neutral-grey-5 rounded-md p-1.5 transition-colors", children: _jsx(ExternalLink, { className: "h-4 w-4" }) })] })] }), _jsx(ProjectProgressBar, { done: done, total: total, className: "mt-2" })] }));
206
+ }
207
+ //# sourceMappingURL=AgentProjectProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentProjectProgress.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentProjectProgress.tsx"],"names":[],"mappings":"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"}
@@ -2,16 +2,16 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ArrowUp, Mic, MicOff, Square } from "lucide-react";
3
3
  import { Button } from "../../../../components/ui/button";
4
4
  export function AgentPromptActionButtons({ isVoiceDisabled, isListening, isExecuting, sendDisabled, sendTitle, onVoicePointerDown, onVoicePointerUp, onVoicePointerCancel, onSubmit, onStop, }) {
5
- return (_jsxs("div", { className: "pointer-events-auto flex items-center gap-1 self-end", children: [_jsx("span", { title: isVoiceDisabled
5
+ return (_jsxs("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1 self-end", children: [_jsx("span", { title: isVoiceDisabled
6
6
  ? "Your browser does not support Speech Recognition"
7
7
  : isListening
8
8
  ? "Stop voice input"
9
- : "Click to toggle, hold to record", children: _jsx(Button, { onPointerDown: isVoiceDisabled ? undefined : onVoicePointerDown, onPointerUp: isVoiceDisabled ? undefined : onVoicePointerUp, onPointerCancel: isVoiceDisabled ? undefined : onVoicePointerCancel, onContextMenu: (event) => event.preventDefault(), disabled: isVoiceDisabled, size: "sm", className: `text-neutral-grey-100 hover:bg-neutral-grey-20 h-8 w-8 touch-none rounded-md border-0 bg-transparent select-none ${isVoiceDisabled
9
+ : "Click to toggle, hold to record", children: _jsx(Button, { onPointerDown: isVoiceDisabled ? undefined : onVoicePointerDown, onPointerUp: isVoiceDisabled ? undefined : onVoicePointerUp, onPointerCancel: isVoiceDisabled ? undefined : onVoicePointerCancel, onContextMenu: (event) => event.preventDefault(), disabled: isVoiceDisabled, size: "iconSm", className: `text-neutral-grey-100 hover:bg-neutral-grey-20 touch-none rounded-md border-0 bg-transparent select-none ${isVoiceDisabled
10
10
  ? "pointer-events-none cursor-not-allowed opacity-40"
11
11
  : "cursor-pointer"}`, "aria-label": isVoiceDisabled
12
12
  ? "Your browser does not support Speech Recognition"
13
13
  : isListening
14
14
  ? "Stop voice input"
15
- : "Start voice input", "aria-pressed": isListening, "aria-disabled": isVoiceDisabled, children: isListening ? (_jsx(MicOff, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(Mic, { className: "size-4", strokeWidth: 1.75 })) }) }), _jsx(Button, { onClick: isExecuting ? onStop : onSubmit, disabled: sendDisabled, size: "sm", className: "bg-neutral-grey-100 hover:bg-neutral-grey-80 h-8 w-8 cursor-pointer rounded-md text-white", title: sendTitle, "aria-label": isExecuting ? "Stop" : "Send", "data-testid": "agent-send-stop-button", "data-executing": isExecuting ? "true" : "false", children: isExecuting ? (_jsx(Square, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(ArrowUp, { className: "size-4", strokeWidth: 1.75 })) })] }));
15
+ : "Start voice input", "aria-pressed": isListening, "aria-disabled": isVoiceDisabled, children: isListening ? (_jsx(MicOff, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(Mic, { className: "size-4", strokeWidth: 1.75 })) }) }), _jsx(Button, { onClick: isExecuting ? onStop : onSubmit, disabled: sendDisabled, size: "iconSm", className: "bg-neutral-grey-100 hover:bg-neutral-grey-80 cursor-pointer rounded-md text-white", title: sendTitle, "aria-label": isExecuting ? "Stop" : "Send", "data-testid": "agent-send-stop-button", "data-executing": isExecuting ? "true" : "false", children: isExecuting ? (_jsx(Square, { className: "size-4", strokeWidth: 1.75 })) : (_jsx(ArrowUp, { className: "size-4", strokeWidth: 1.75 })) })] }));
16
16
  }
17
17
  //# sourceMappingURL=AgentPromptActionButtons.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPromptActionButtons.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptActionButtons.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAe1D,MAAM,UAAU,wBAAwB,CAAC,EACvC,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,MAAM,GACwB;IAC9B,OAAO,CACL,eAAK,SAAS,EAAC,sDAAsD,aACnE,eACE,KAAK,EACH,eAAe;oBACb,CAAC,CAAC,kDAAkD;oBACpD,CAAC,CAAC,WAAW;wBACX,CAAC,CAAC,kBAAkB;wBACpB,CAAC,CAAC,iCAAiC,YAGzC,KAAC,MAAM,IACL,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,EAC/D,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAC3D,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,EACnE,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAChD,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,oHACT,eAAe;wBACb,CAAC,CAAC,mDAAmD;wBACrD,CAAC,CAAC,gBACN,EAAE,gBAEA,eAAe;wBACb,CAAC,CAAC,kDAAkD;wBACpD,CAAC,CAAC,WAAW;4BACX,CAAC,CAAC,kBAAkB;4BACpB,CAAC,CAAC,mBAAmB,kBAEb,WAAW,mBACV,eAAe,YAE7B,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CAC9C,GACM,GACJ,EACP,KAAC,MAAM,IACL,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EACxC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,2FAA2F,EACrG,KAAK,EAAE,SAAS,gBACJ,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,iBAC7B,wBAAwB,oBACpB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7C,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CAClD,GACM,IACL,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"AgentPromptActionButtons.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptActionButtons.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAe1D,MAAM,UAAU,wBAAwB,CAAC,EACvC,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,EACR,MAAM,GACwB;IAC9B,OAAO,CACL,eAAK,SAAS,EAAC,+DAA+D,aAC5E,eACE,KAAK,EACH,eAAe;oBACb,CAAC,CAAC,kDAAkD;oBACpD,CAAC,CAAC,WAAW;wBACX,CAAC,CAAC,kBAAkB;wBACpB,CAAC,CAAC,iCAAiC,YAGzC,KAAC,MAAM,IACL,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,EAC/D,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,EAC3D,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,EACnE,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,EAChD,QAAQ,EAAE,eAAe,EACzB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,4GACT,eAAe;wBACb,CAAC,CAAC,mDAAmD;wBACrD,CAAC,CAAC,gBACN,EAAE,gBAEA,eAAe;wBACb,CAAC,CAAC,kDAAkD;wBACpD,CAAC,CAAC,WAAW;4BACX,CAAC,CAAC,kBAAkB;4BACpB,CAAC,CAAC,mBAAmB,kBAEb,WAAW,mBACV,eAAe,YAE7B,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CAC9C,GACM,GACJ,EACP,KAAC,MAAM,IACL,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EACxC,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,mFAAmF,EAC7F,KAAK,EAAE,SAAS,gBACJ,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,iBAC7B,wBAAwB,oBACpB,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,YAE7C,WAAW,CAAC,CAAC,CAAC,CACb,KAAC,MAAM,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CACjD,CAAC,CAAC,CAAC,CACF,KAAC,OAAO,IAAC,SAAS,EAAC,QAAQ,EAAC,WAAW,EAAE,IAAI,GAAI,CAClD,GACM,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -3,5 +3,6 @@ import { type AgentPromptInputAreaProps } from "./AgentPromptInputArea";
3
3
  export interface AgentPromptComposerProps extends AgentPromptInputAreaProps {
4
4
  className?: string;
5
5
  children?: React.ReactNode;
6
+ surface?: "default" | "project";
6
7
  }
7
- export declare function AgentPromptComposer({ className, children, ...inputProps }: AgentPromptComposerProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function AgentPromptComposer({ className, children, surface, inputSurface, ...inputProps }: AgentPromptComposerProps): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from "../../../../lib/utils";
3
3
  import { AgentPromptInputArea, } from "./AgentPromptInputArea";
4
- export function AgentPromptComposer({ className, children, ...inputProps }) {
5
- return (_jsxs("div", { className: cn("border-border-default border-t bg-white/95 px-4 pt-3 pb-2", className), children: [_jsx(AgentPromptInputArea, { ...inputProps }), children] }));
4
+ export function AgentPromptComposer({ className, children, surface = "default", inputSurface, ...inputProps }) {
5
+ const isProjectSurface = surface === "project";
6
+ return (_jsxs("div", { className: cn(isProjectSurface
7
+ ? "bg-neutral-grey-5 px-5 pt-5 pb-4"
8
+ : "border-border-default border-t bg-white/95 px-4 pt-3 pb-2", className), children: [_jsx(AgentPromptInputArea, { ...inputProps, inputSurface: isProjectSurface ? "flat" : inputSurface }), children] }));
6
9
  }
7
10
  //# sourceMappingURL=AgentPromptComposer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPromptComposer.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptComposer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EACL,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAOhC,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,QAAQ,EACR,GAAG,UAAU,EACY;IACzB,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,SAAS,CACV,aAED,KAAC,oBAAoB,OAAK,UAAU,GAAI,EACvC,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"AgentPromptComposer.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptComposer.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EACL,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAQhC,MAAM,UAAU,mBAAmB,CAAC,EAClC,SAAS,EACT,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,YAAY,EACZ,GAAG,UAAU,EACY;IACzB,MAAM,gBAAgB,GAAG,OAAO,KAAK,SAAS,CAAC;IAC/C,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,gBAAgB;YACd,CAAC,CAAC,kCAAkC;YACpC,CAAC,CAAC,2DAA2D,EAC/D,SAAS,CACV,aAED,KAAC,oBAAoB,OACf,UAAU,EACd,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,GACtD,EACD,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
@@ -27,6 +27,7 @@ export interface AgentPromptInputAreaProps {
27
27
  onBlur: () => void;
28
28
  trayOverlay?: React.ReactNode;
29
29
  attachmentsContent?: React.ReactNode;
30
+ inputSurface?: "default" | "flat";
30
31
  dropHandlers?: {
31
32
  isDragOver: boolean;
32
33
  onDragOver: (e: React.DragEvent) => void;
@@ -35,4 +36,4 @@ export interface AgentPromptInputAreaProps {
35
36
  onDrop: (e: React.DragEvent) => void;
36
37
  };
37
38
  }
38
- export declare function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, dropHandlers, }: AgentPromptInputAreaProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, inputSurface, dropHandlers, }: AgentPromptInputAreaProps): import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useLayoutEffect, useRef, useState } from "react";
3
3
  import { Textarea } from "../../../../components/ui/textarea";
4
+ import { cn } from "../../../../lib/utils";
4
5
  import { PlaceholderInput, } from "../../../../components/ui/PlaceholderInput";
5
6
  import { hasPromptPlaceholders } from "../agentPromptPlaceholders";
6
- export function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, dropHandlers, }) {
7
+ export function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBottomControls, effectiveIsFocused, readOnly, inputPlaceholder, isSubmitting, placeholderInputRef, promptPlaceholderInputRef, textareaRef, onFilledChange, onActivePlaceholderComplete, onActivePlaceholderCancel, onPromptPlaceholderComplete, onPromptPlaceholderCancel, onPromptChange, onKeyDown, onPaste, onFocus, onBlur, trayOverlay, attachmentsContent, inputSurface = "default", dropHandlers, }) {
7
8
  const isDragOver = dropHandlers?.isDragOver ?? false;
9
+ const isFlatSurface = inputSurface === "flat";
8
10
  const trayRef = useRef(null);
9
11
  const [trayWidth, setTrayWidth] = useState(0);
10
12
  useLayoutEffect(() => {
@@ -39,9 +41,9 @@ export function AgentPromptInputArea({ activePlaceholderInput, prompt, hideBotto
39
41
  : {}),
40
42
  ...(trayOverlay && trayWidth > 0 ? { paddingBottom: "42px" } : {}),
41
43
  };
42
- return (_jsx("div", { className: "flex items-stretch gap-2", children: _jsxs("div", { className: `relative flex-1 rounded-[10px] transition-shadow ${isDragOver ? "ring-highlight-100 ring-2 ring-offset-1" : ""}`, onDragOver: dropHandlers?.onDragOver, onDragEnter: dropHandlers?.onDragEnter, onDragLeave: dropHandlers?.onDragLeave, onDrop: dropHandlers?.onDrop, children: [trayOverlay && (_jsx("div", { ref: trayRef, className: "pointer-events-auto absolute bottom-2 left-2 z-10 flex items-center gap-1", children: trayOverlay })), _jsxs("div", { className: "border-border-default bg-neutral-grey-5 overflow-hidden rounded-[10px] border", children: [_jsx(Textarea, { ref: textareaRef, style: textareaStyle, value: prompt, onChange: (event) => onPromptChange(event.target.value), onKeyDown: onKeyDown, onPaste: onPaste, onFocus: onFocus, onBlur: onBlur, placeholder: readOnly
44
+ return (_jsx("div", { className: cn("flex items-stretch gap-2", !isFlatSurface && "mx-2"), children: _jsxs("div", { className: cn("relative flex-1 transition-shadow", isFlatSurface ? "rounded-none" : "rounded-[10px]", isDragOver && "ring-highlight-100 ring-2 ring-offset-1"), onDragOver: dropHandlers?.onDragOver, onDragEnter: dropHandlers?.onDragEnter, onDragLeave: dropHandlers?.onDragLeave, onDrop: dropHandlers?.onDrop, children: [trayOverlay && (_jsx("div", { ref: trayRef, className: "pointer-events-auto absolute bottom-2 left-2 z-10 flex items-center gap-1", children: trayOverlay })), _jsxs("div", { className: cn("bg-neutral-grey-5 overflow-hidden", !isFlatSurface && "border-border-default rounded-[10px] border"), children: [_jsx(Textarea, { ref: textareaRef, style: textareaStyle, value: prompt, onChange: (event) => onPromptChange(event.target.value), onKeyDown: onKeyDown, onPaste: onPaste, onFocus: onFocus, onBlur: onBlur, placeholder: readOnly
43
45
  ? "Read-only access - ask the owner for Full access to chat with this agent."
44
- : inputPlaceholder, className: "max-h-[250px] min-h-[86px] w-full resize-y overflow-y-auto border-0 bg-transparent px-3 pt-3 text-[13px] shadow-none focus-visible:shadow-none focus-visible:ring-0 lg:max-h-[450px]", "data-testid": "agent-terminal-prompt", disabled: isSubmitting || readOnly, readOnly: !effectiveIsFocused, title: !effectiveIsFocused
46
+ : inputPlaceholder, className: cn("max-h-[250px] min-h-[86px] w-full resize-y overflow-y-auto border-0 bg-transparent text-[13px] shadow-none focus-visible:shadow-none focus-visible:ring-0 lg:max-h-[450px]", isFlatSurface ? "px-0 pt-0" : "px-3 pt-3"), "data-testid": "agent-terminal-prompt", disabled: isSubmitting || readOnly, readOnly: !effectiveIsFocused, title: !effectiveIsFocused
45
47
  ? "Editing in another pane - click here to take over"
46
48
  : undefined }), attachmentsContent] }), isDragOver && (_jsx("div", { className: "bg-highlight-10/70 text-highlight-100 pointer-events-none absolute inset-0 flex items-center justify-center rounded-[10px] text-xs font-medium", children: "Drop to add to context or upload" }))] }) }));
47
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AgentPromptInputArea.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptInputArea.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentPromptInputArea.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentPromptInputArea.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EACL,gBAAgB,GAEjB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAwCnE,MAAM,UAAU,oBAAoB,CAAC,EACnC,sBAAsB,EACtB,MAAM,EACN,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,yBAAyB,EACzB,WAAW,EACX,cAAc,EACd,2BAA2B,EAC3B,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,cAAc,EACd,SAAS,EACT,OAAO,EACP,OAAO,EACP,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,GAAG,SAAS,EACxB,YAAY,GACc;IAC1B,MAAM,UAAU,GAAG,YAAY,EAAE,UAAU,IAAI,KAAK,CAAC;IACrD,MAAM,aAAa,GAAG,YAAY,KAAK,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE9C,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,OAAO,cAAc,KAAK,WAAW;YAAE,OAAO;QAClD,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,EAAE;YACxC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACf,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO,CACL,KAAC,gBAAgB,IACf,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,sBAAsB,CAAC,IAAI,EACjC,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EACzD,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,2BAA2B,EACvC,QAAQ,EAAE,yBAAyB,GACnC,CACH,CAAC;IACJ,CAAC;IAED,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,CACL,KAAC,gBAAgB,IACf,GAAG,EAAE,yBAAyB,EAC9B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EACzD,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,2BAA2B,EACvC,QAAQ,EAAE,yBAAyB,GACnC,CACH,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,MAAM,aAAa,GAAwB;QACzC,GAAG,CAAC,kBAAkB;YACpB,CAAC,CAAC,EAAE,kBAAkB,EAAE,sBAAsB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,WAAW,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnE,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,0BAA0B,EAC1B,CAAC,aAAa,IAAI,MAAM,CACzB,YAED,eACE,SAAS,EAAE,EAAE,CACX,mCAAmC,EACnC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,EACjD,UAAU,IAAI,yCAAyC,CACxD,EACD,UAAU,EAAE,YAAY,EAAE,UAAU,EACpC,WAAW,EAAE,YAAY,EAAE,WAAW,EACtC,WAAW,EAAE,YAAY,EAAE,WAAW,EACtC,MAAM,EAAE,YAAY,EAAE,MAAM,aAE3B,WAAW,IAAI,CACd,cACE,GAAG,EAAE,OAAO,EACZ,SAAS,EAAC,2EAA2E,YAEpF,WAAW,GACR,CACP,EACD,eACE,SAAS,EAAE,EAAE,CACX,mCAAmC,EACnC,CAAC,aAAa,IAAI,6CAA6C,CAChE,aAED,KAAC,QAAQ,IACP,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACvD,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EACT,QAAQ;gCACN,CAAC,CAAC,2EAA2E;gCAC7E,CAAC,CAAC,gBAAgB,EAEtB,SAAS,EAAE,EAAE,CACX,4KAA4K,EAC5K,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAC1C,iBACW,uBAAuB,EACnC,QAAQ,EAAE,YAAY,IAAI,QAAQ,EAClC,QAAQ,EAAE,CAAC,kBAAkB,EAC7B,KAAK,EACH,CAAC,kBAAkB;gCACjB,CAAC,CAAC,mDAAmD;gCACrD,CAAC,CAAC,SAAS,GAEf,EACD,kBAAkB,IACf,EACL,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,gJAAgJ,iDAEzJ,CACP,IACG,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -7,9 +7,10 @@ export interface AgentTerminalFullLayoutProps {
7
7
  onBackToParent: () => void;
8
8
  readOnlyAccessNotice: React.ReactNode;
9
9
  upperContent: React.ReactNode;
10
+ /** Inline dialog panel for non-questionnaire dialogs (stacked above the composer). */
10
11
  inlineDialog: React.ReactNode;
11
- isQuestionnaireDialogOpen: boolean;
12
- compact: boolean;
12
+ /** Persistent strip rendered directly above the prompt composer (e.g. project progress). */
13
+ aboveComposer?: React.ReactNode;
13
14
  promptComposerProps: Omit<AgentPromptComposerProps, "className" | "children">;
14
15
  promptControls: React.ReactNode;
15
16
  showStatusBar?: boolean;
@@ -20,4 +21,4 @@ export interface AgentTerminalFullLayoutProps {
20
21
  attachmentsContent?: React.ReactNode;
21
22
  dropHandlers?: AgentPromptComposerProps["dropHandlers"];
22
23
  }
23
- export declare function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog, isQuestionnaireDialogOpen, compact, promptComposerProps, promptControls, trayOverlay, attachmentsContent, dropHandlers, }: AgentTerminalFullLayoutProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog, aboveComposer, promptComposerProps, promptControls, trayOverlay, attachmentsContent, dropHandlers, }: AgentTerminalFullLayoutProps): import("react/jsx-runtime").JSX.Element;
@@ -1,23 +1,10 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Splitter } from "../../../ui/Splitter";
1
+ import { Fragment as _Fragment, jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../../../../lib/utils";
3
3
  import { AgentParentLink } from "./AgentParentLink";
4
4
  import { AgentPromptComposer, } from "./AgentPromptComposer";
5
- export function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog, isQuestionnaireDialogOpen, compact, promptComposerProps, promptControls, trayOverlay, attachmentsContent, dropHandlers, }) {
6
- const showQuestionnaireSplitter = isQuestionnaireDialogOpen && !!inlineDialog;
7
- const content = showQuestionnaireSplitter ? (_jsx(Splitter, { panels: [
8
- {
9
- name: "conversation",
10
- defaultSize: 65,
11
- content: upperContent,
12
- },
13
- {
14
- name: "questionnaire",
15
- defaultSize: 35,
16
- content: inlineDialog,
17
- },
18
- ], direction: "vertical", localStorageKey: compact
19
- ? "agent-terminal-compact-questionnaire-splitter"
20
- : "agent-terminal-questionnaire-splitter", className: "min-h-0 flex-1", splitterClassName: "bg-neutral-grey-10 hover:bg-neutral-grey-10" })) : (_jsxs(_Fragment, { children: [upperContent, inlineDialog] }));
21
- return (_jsxs("div", { className: `flex h-full min-h-0 flex-col ${className || ""}`, children: [_jsx(AgentParentLink, { parentAgentId: parentAgentId, simpleMode: simpleMode, onBack: onBackToParent }), readOnlyAccessNotice, content, _jsx(AgentPromptComposer, { ...promptComposerProps, trayOverlay: trayOverlay, attachmentsContent: attachmentsContent, dropHandlers: dropHandlers, className: simpleMode ? "pb-10" : undefined, children: promptControls })] }));
5
+ export function AgentTerminalFullLayout({ className, parentAgentId, simpleMode, onBackToParent, readOnlyAccessNotice, upperContent, inlineDialog, aboveComposer, promptComposerProps, promptControls, trayOverlay, attachmentsContent, dropHandlers, }) {
6
+ const content = (_jsxs(_Fragment, { children: [upperContent, inlineDialog] }));
7
+ const promptComposer = (_jsx(AgentPromptComposer, { ...promptComposerProps, trayOverlay: trayOverlay, attachmentsContent: attachmentsContent, dropHandlers: dropHandlers, className: cn(simpleMode ? "pb-10" : undefined), surface: aboveComposer ? "project" : "default", children: aboveComposer ? null : promptControls }));
8
+ return (_jsxs("div", { className: cn("mx-auto flex h-full min-h-0 w-full max-w-[750px] flex-col", className), children: [_jsx(AgentParentLink, { parentAgentId: parentAgentId, simpleMode: simpleMode, onBack: onBackToParent }), readOnlyAccessNotice, content, aboveComposer ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "border-border-default mx-3 shrink-0 overflow-hidden rounded-[16px] border bg-white sm:mx-4", children: [aboveComposer, promptComposer] }), _jsx("div", { className: "shrink-0 px-4 pb-2", children: promptControls })] })) : (promptComposer)] }));
22
9
  }
23
10
  //# sourceMappingURL=AgentTerminalFullLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTerminalFullLayout.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullLayout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAuB/B,MAAM,UAAU,uBAAuB,CAAC,EACtC,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,yBAAyB,EACzB,OAAO,EACP,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,GACiB;IAC7B,MAAM,yBAAyB,GAAG,yBAAyB,IAAI,CAAC,CAAC,YAAY,CAAC;IAC9E,MAAM,OAAO,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAC1C,KAAC,QAAQ,IACP,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,YAAY;aACtB;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE,YAAY;aACtB;SACF,EACD,SAAS,EAAC,UAAU,EACpB,eAAe,EACb,OAAO;YACL,CAAC,CAAC,+CAA+C;YACjD,CAAC,CAAC,uCAAuC,EAE7C,SAAS,EAAC,gBAAgB,EAC1B,iBAAiB,EAAC,6CAA6C,GAC/D,CACH,CAAC,CAAC,CAAC,CACF,8BACG,YAAY,EACZ,YAAY,IACZ,CACJ,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,gCAAgC,SAAS,IAAI,EAAE,EAAE,aAC/D,KAAC,eAAe,IACd,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,cAAc,GACtB,EACD,oBAAoB,EACpB,OAAO,EACR,KAAC,mBAAmB,OACd,mBAAmB,EACvB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,YAE1C,cAAc,GACK,IAClB,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"AgentTerminalFullLayout.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullLayout.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAwB/B,MAAM,UAAU,uBAAuB,CAAC,EACtC,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,YAAY,GACiB;IAC7B,MAAM,OAAO,GAAG,CACd,8BACG,YAAY,EACZ,YAAY,IACZ,CACJ,CAAC;IAEF,MAAM,cAAc,GAAG,CACrB,KAAC,mBAAmB,OACd,mBAAmB,EACvB,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAC/C,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,YAE7C,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,GAClB,CACvB,CAAC;IAEF,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,2DAA2D,EAC3D,SAAS,CACV,aAED,KAAC,eAAe,IACd,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,cAAc,GACtB,EACD,oBAAoB,EACpB,OAAO,EACP,aAAa,CAAC,CAAC,CAAC,CACf,8BACE,eAAK,SAAS,EAAC,4FAA4F,aACxG,aAAa,EACb,cAAc,IACX,EACN,cAAK,SAAS,EAAC,oBAAoB,YAAE,cAAc,GAAO,IACzD,CACJ,CAAC,CAAC,CAAC,CACF,cAAc,CACf,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -48,5 +48,9 @@ export interface AgentTerminalFullUpperContentProps {
48
48
  onDeleteQueuedPrompt?: (queuedPrompt: QueuedPrompt) => void | Promise<void>;
49
49
  queuePushDisabled?: boolean;
50
50
  queueDeleteDisabled?: boolean;
51
+ /** Active questionnaire dialog rendered inline at the end of the conversation. */
52
+ conversationInlineDialog?: React.ReactNode;
53
+ /** Identifier (callbackId) of the active inline dialog; scrolls it into view when it changes. */
54
+ conversationInlineDialogKey?: string;
51
55
  }
52
- export declare function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, }: AgentTerminalFullUpperContentProps): import("react/jsx-runtime").JSX.Element;
56
+ export declare function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, conversationInlineDialog, conversationInlineDialogKey, }: AgentTerminalFullUpperContentProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useLayoutEffect, useRef } from "react";
2
3
  import { Loader2 } from "lucide-react";
3
4
  import { AgentGreeting } from "./AgentGreeting";
4
5
  import { InitialThinkingSplash } from "./InitialThinkingSplash";
@@ -7,7 +8,37 @@ import { AgentRunStatusBanners } from "./AgentRunStatusBanners";
7
8
  import { AgentTerminalMessageGroups, } from "./AgentTerminalMessageGroups";
8
9
  import { AgentThinkingDots } from "./AgentThinkingDots";
9
10
  import { AgentTerminalContextPanels } from "./AgentTerminalContextPanels";
10
- export function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, }) {
11
- return (_jsxs("div", { className: "flex h-full min-h-0 flex-1 flex-col", children: [fixedBrowserClaimBanner, _jsx(AgentRunStatusBanners, { agent: agent, agentStub: agentStub, error: error, lastRunStatusReason: lastRunStatusReason }), _jsxs("div", { ref: messagesContainerRef, className: "flex-1 overflow-y-auto", onScroll: onScroll, children: [messages.length === 0 && !error && !hideGreeting && !isLoading ? (_jsx("div", { className: "flex h-full items-center justify-center", children: !activeProfile ? (_jsx(Loader2, { className: "text-neutral-grey-50 mx-auto h-8 w-8 animate-spin" })) : (_jsx(AgentGreeting, { profile: activeProfile, onPromptClick: onGreetingPromptClick })) })) : null, showInitialThinkingSplash ? (_jsx(InitialThinkingSplash, {})) : null, inlineBrowserClaimBanner, _jsxs("div", { className: "space-y-0 select-text", children: [_jsx(AgentTerminalMessageGroups, { messages: messages, operations: operations, isExecuting: isExecuting, defaultCollapseJson: defaultCollapseJson, profile: activeProfile, agentId: agent?.id || agentStub.id, allPendingApprovals: allPendingApprovals, onSwitchToAutonomous: onSwitchToAutonomous, browserCaptureInlinePrompt: browserCaptureInlinePrompt, readOnly: readOnly, onQuickAction: onQuickAction }), shouldShowThinkingDots ? (_jsx(AgentThinkingDots, { profile: activeProfile })) : null] }), !simpleMode && costLimitBanner, _jsx("div", { ref: messagesEndRef })] }), _jsx(AgentTerminalContextPanels, { hideContext: hideContext, simpleMode: simpleMode, isMobile: isMobile, contextChrome: contextChrome, agent: agent, activeProfile: activeProfile, documentListRef: documentListRef, hasTodoContent: hasTodoContent, hasSpawnedAgents: hasSpawnedAgents, hasHistoryContent: hasHistoryContent, messages: messages, agentMetadata: agentMetadata, operations: operations, activeTab: contextPanelsActiveTab, setActiveTab: setContextPanelsActiveTab }), !simpleMode ? (_jsx(QueuedPromptsPanel, { queuedPrompts: queuedPrompts, onPushQueuedPrompt: onPushQueuedPrompt, onDeleteQueuedPrompt: onDeleteQueuedPrompt, pushDisabled: queuePushDisabled, deleteDisabled: queueDeleteDisabled })) : null] }));
11
+ export function AgentTerminalFullUpperContent({ fixedBrowserClaimBanner, agent, agentStub, error, lastRunStatusReason, messagesContainerRef, onScroll, messages, hideGreeting, isLoading, activeProfile, onGreetingPromptClick, showInitialThinkingSplash, inlineBrowserClaimBanner, operations, isExecuting, defaultCollapseJson, allPendingApprovals, onSwitchToAutonomous, browserCaptureInlinePrompt, readOnly, onQuickAction, shouldShowThinkingDots, simpleMode, costLimitBanner, messagesEndRef, hideContext, isMobile, contextChrome, documentListRef, hasTodoContent, hasSpawnedAgents, hasHistoryContent, agentMetadata, contextPanelsActiveTab, setContextPanelsActiveTab, queuedPrompts, onPushQueuedPrompt, onDeleteQueuedPrompt, queuePushDisabled, queueDeleteDisabled, conversationInlineDialog, conversationInlineDialogKey, }) {
12
+ // Scroll the conversation so the questionnaire's TOP is in view once per
13
+ // dialog (title and first question visible — a tall form scrolled to the
14
+ // bottom would open on its footer). Covers both the live request path and
15
+ // recovery after reload. Re-renders while the same dialog stays open must
16
+ // not yank a user who scrolled away.
17
+ const conversationInlineDialogRef = useRef(null);
18
+ const lastScrolledDialogKeyRef = useRef(null);
19
+ useLayoutEffect(() => {
20
+ if (!conversationInlineDialogKey) {
21
+ lastScrolledDialogKeyRef.current = null;
22
+ return;
23
+ }
24
+ if (lastScrolledDialogKeyRef.current === conversationInlineDialogKey) {
25
+ return;
26
+ }
27
+ lastScrolledDialogKeyRef.current = conversationInlineDialogKey;
28
+ const scrollDialogIntoView = () => {
29
+ const container = messagesContainerRef.current;
30
+ const dialogElement = conversationInlineDialogRef.current;
31
+ if (!container || !dialogElement) {
32
+ return;
33
+ }
34
+ const containerRect = container.getBoundingClientRect();
35
+ const dialogRect = dialogElement.getBoundingClientRect();
36
+ container.scrollTop += dialogRect.top - containerRect.top - 8;
37
+ };
38
+ scrollDialogIntoView();
39
+ const animationFrameId = window.requestAnimationFrame(scrollDialogIntoView);
40
+ return () => window.cancelAnimationFrame(animationFrameId);
41
+ }, [conversationInlineDialogKey, messagesContainerRef]);
42
+ return (_jsxs("div", { className: "flex h-full min-h-0 flex-1 flex-col", children: [fixedBrowserClaimBanner, _jsx(AgentRunStatusBanners, { agent: agent, agentStub: agentStub, error: error, lastRunStatusReason: lastRunStatusReason }), _jsxs("div", { ref: messagesContainerRef, className: "flex-1 overflow-y-auto", onScroll: onScroll, children: [messages.length === 0 && !error && !hideGreeting && !isLoading ? (_jsx("div", { className: "flex h-full items-center justify-center", children: !activeProfile ? (_jsx(Loader2, { className: "text-neutral-grey-50 mx-auto h-8 w-8 animate-spin" })) : (_jsx(AgentGreeting, { profile: activeProfile, onPromptClick: onGreetingPromptClick })) })) : null, showInitialThinkingSplash ? _jsx(InitialThinkingSplash, {}) : null, inlineBrowserClaimBanner, _jsxs("div", { className: "space-y-0 select-text", children: [_jsx(AgentTerminalMessageGroups, { messages: messages, operations: operations, isExecuting: isExecuting, defaultCollapseJson: defaultCollapseJson, profile: activeProfile, agentId: agent?.id || agentStub.id, allPendingApprovals: allPendingApprovals, onSwitchToAutonomous: onSwitchToAutonomous, browserCaptureInlinePrompt: browserCaptureInlinePrompt, readOnly: readOnly, onQuickAction: onQuickAction }), shouldShowThinkingDots ? (_jsx(AgentThinkingDots, { profile: activeProfile })) : null] }), conversationInlineDialog ? (_jsx("div", { ref: conversationInlineDialogRef, "data-testid": "agent-conversation-inline-dialog", className: "px-4 py-3", children: conversationInlineDialog })) : null, !simpleMode && costLimitBanner, _jsx("div", { ref: messagesEndRef })] }), _jsx(AgentTerminalContextPanels, { hideContext: hideContext, simpleMode: simpleMode, isMobile: isMobile, contextChrome: contextChrome, agent: agent, activeProfile: activeProfile, documentListRef: documentListRef, hasTodoContent: hasTodoContent, hasSpawnedAgents: hasSpawnedAgents, hasHistoryContent: hasHistoryContent, messages: messages, agentMetadata: agentMetadata, operations: operations, activeTab: contextPanelsActiveTab, setActiveTab: setContextPanelsActiveTab }), !simpleMode ? (_jsx(QueuedPromptsPanel, { queuedPrompts: queuedPrompts, onPushQueuedPrompt: onPushQueuedPrompt, onDeleteQueuedPrompt: onDeleteQueuedPrompt, pushDisabled: queuePushDisabled, deleteDisabled: queueDeleteDisabled })) : null] }));
12
43
  }
13
44
  //# sourceMappingURL=AgentTerminalFullUpperContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentTerminalFullUpperContent.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullUpperContent.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentTerminalFullUpperContent.js","sourceRoot":"","sources":["../../../../../src/editor/ai/terminal/components/AgentTerminalFullUpperContent.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAUvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAmD1E,MAAM,UAAU,6BAA6B,CAAC,EAC5C,uBAAuB,EACvB,KAAK,EACL,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,oBAAoB,EACpB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,aAAa,EACb,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,QAAQ,EACR,aAAa,EACb,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,QAAQ,EACR,aAAa,EACb,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,GACQ;IACnC,yEAAyE;IACzE,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,qCAAqC;IACrC,MAAM,2BAA2B,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IACxE,MAAM,wBAAwB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAC7D,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACjC,wBAAwB,CAAC,OAAO,GAAG,IAAI,CAAC;YACxC,OAAO;QACT,CAAC;QACD,IAAI,wBAAwB,CAAC,OAAO,KAAK,2BAA2B,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,wBAAwB,CAAC,OAAO,GAAG,2BAA2B,CAAC;QAE/D,MAAM,oBAAoB,GAAG,GAAG,EAAE;YAChC,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC;YAC/C,MAAM,aAAa,GAAG,2BAA2B,CAAC,OAAO,CAAC;YAC1D,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjC,OAAO;YACT,CAAC;YACD,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;YACxD,MAAM,UAAU,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;YACzD,SAAS,CAAC,SAAS,IAAI,UAAU,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;QAChE,CAAC,CAAC;QACF,oBAAoB,EAAE,CAAC;QACvB,MAAM,gBAAgB,GAAG,MAAM,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;QAC5E,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;IAC7D,CAAC,EAAE,CAAC,2BAA2B,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAExD,OAAO,CACL,eAAK,SAAS,EAAC,qCAAqC,aACjD,uBAAuB,EACxB,KAAC,qBAAqB,IACpB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,mBAAmB,GACxC,EACF,eACE,GAAG,EAAE,oBAAoB,EACzB,SAAS,EAAC,wBAAwB,EAClC,QAAQ,EAAE,QAAQ,aAEjB,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAChE,cAAK,SAAS,EAAC,yCAAyC,YACrD,CAAC,aAAa,CAAC,CAAC,CAAC,CAChB,KAAC,OAAO,IAAC,SAAS,EAAC,mDAAmD,GAAG,CAC1E,CAAC,CAAC,CAAC,CACF,KAAC,aAAa,IACZ,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,qBAAqB,GACpC,CACH,GACG,CACP,CAAC,CAAC,CAAC,IAAI,EACP,yBAAyB,CAAC,CAAC,CAAC,KAAC,qBAAqB,KAAG,CAAC,CAAC,CAAC,IAAI,EAC5D,wBAAwB,EACzB,eAAK,SAAS,EAAC,uBAAuB,aACpC,KAAC,0BAA0B,IACzB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,SAAS,CAAC,EAAE,EAClC,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,EAC1C,0BAA0B,EAAE,0BAA0B,EACtD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,GAC5B,EACD,sBAAsB,CAAC,CAAC,CAAC,CACxB,KAAC,iBAAiB,IAAC,OAAO,EAAE,aAAa,GAAI,CAC9C,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,wBAAwB,CAAC,CAAC,CAAC,CAC1B,cACE,GAAG,EAAE,2BAA2B,iBACpB,kCAAkC,EAC9C,SAAS,EAAC,WAAW,YAEpB,wBAAwB,GACrB,CACP,CAAC,CAAC,CAAC,IAAI,EACP,CAAC,UAAU,IAAI,eAAe,EAC/B,cAAK,GAAG,EAAE,cAAc,GAAI,IACxB,EACN,KAAC,0BAA0B,IACzB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,iBAAiB,EAAE,iBAAiB,EACpC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,sBAAsB,EACjC,YAAY,EAAE,yBAAyB,GACvC,EACD,CAAC,UAAU,CAAC,CAAC,CAAC,CACb,KAAC,kBAAkB,IACjB,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,oBAAoB,EAAE,oBAAoB,EAC1C,YAAY,EAAE,iBAAiB,EAC/B,cAAc,EAAE,mBAAmB,GACnC,CACH,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -10,6 +10,8 @@ export type ContextWindowStatus = {
10
10
  estimatedInputTokens: number;
11
11
  contextUsedPercent: number;
12
12
  model?: string;
13
+ /** Estimated split of the used context by category (category key → tokens) */
14
+ breakdown?: Record<string, number>;
13
15
  } | null;
14
16
  export type LiveTotals = {
15
17
  input: number;
@@ -7,6 +7,7 @@ import { AgentCostDisplay } from "./AgentCostDisplay";
7
7
  import { ContentInspectorPopover, } from "../../ContentInspectorPopover";
8
8
  import { formatAgentDiagnosticsEvent, formatSeqRanges, interpretAgentRunDiagnostics, } from "../../agentDiagnostics";
9
9
  import { HeartbeatDiagnosticsPanel } from "../../HeartbeatDiagnosticsPanel";
10
+ import { buildContextBreakdownRows } from "../contextBreakdown";
10
11
  function formatDiagnosticTime(value) {
11
12
  if (!value)
12
13
  return "—";
@@ -396,6 +397,9 @@ function buildTokensSection(params) {
396
397
  ]),
397
398
  },
398
399
  ]);
400
+ const contextBreakdownLines = contextWindowStatus
401
+ ? buildContextBreakdownRows(contextWindowStatus).map((row) => ` ${row.label}: ${formatNumber(Math.round(row.tokens))} tokens (${formatPercent(row.percent)})`)
402
+ : [];
399
403
  const contextSection = contextWindowStatus
400
404
  ? joinSubsections([
401
405
  {
@@ -411,6 +415,8 @@ function buildTokensSection(params) {
411
415
  agent?.contextWindowTokens != null
412
416
  ? `Persisted window size: ${formatNumber(agent.contextWindowTokens)}`
413
417
  : null,
418
+ contextBreakdownLines.length > 0 ? "Breakdown (estimated):" : null,
419
+ ...contextBreakdownLines,
414
420
  ]),
415
421
  },
416
422
  ])
@@ -822,17 +828,30 @@ export function AgentTerminalStatusBar({ agent, contextWindowStatus, effectiveMo
822
828
  : "var(--color-neutral-grey-50)";
823
829
  const radius = 15.915;
824
830
  const formatTokens = (tokens) => {
831
+ if (tokens >= 1_000_000) {
832
+ return `${(tokens / 1_000_000).toFixed(1)}M`;
833
+ }
825
834
  if (tokens >= 1000) {
826
835
  return `${(tokens / 1000).toFixed(1)}k`;
827
836
  }
828
837
  return tokens.toString();
829
838
  };
839
+ const breakdownRows = useMemo(() => hasData && contextWindowStatus
840
+ ? buildContextBreakdownRows(contextWindowStatus)
841
+ : [], [hasData, contextWindowStatus]);
830
842
  const hasAssistantMessages = messages.some((m) => m.role === "assistant");
831
843
  const canOpenDiagnostics = Boolean(agent?.id) && agent?.status !== "new";
832
844
  return (_jsxs("div", { className: "text-neutral-grey-50 mt-1 flex items-center gap-2 text-[11px]", children: [agent?.id && (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { className: "flex cursor-help items-center justify-center", children: _jsxs("svg", { className: "h-3 w-3 shrink-0", viewBox: "0 0 36 36", "aria-hidden": "true", children: [_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: "var(--color-border-default)", strokeWidth: "4" }), hasData && (_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: contextColor, strokeWidth: "4", strokeDasharray: `${percentValue} 100`, strokeLinecap: "round", style: {
833
845
  transformOrigin: "center",
834
846
  transform: "rotate(-90deg)",
835
- } })), !hasData && (_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: contextColor, strokeWidth: "4", strokeDasharray: "0 100", strokeLinecap: "round", opacity: 0.5 }))] }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: hasData && contextWindowStatus ? (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Context window:" }), " ", formatTokens(contextWindowStatus.estimatedInputTokens || 0), " ", "/ ", formatTokens(contextWindowStatus.contextWindowTokens), " ", "tokens"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Used:" }), " ", pct] })] })) : (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsx("div", { children: "Context window usage will appear here when the agent starts processing." })] })) })] })), agent?.compressionMarkerIndex != null && (_jsxs(Popover, { open: showCompressionPopover, onOpenChange: setShowCompressionPopover, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "border-highlight-100/20 bg-highlight-10/50 text-highlight-100 hover:bg-highlight-10 badge-pad-sm flex cursor-pointer items-center rounded border text-[11px] transition-colors", onClick: () => setShowCompressionPopover(!showCompressionPopover), children: "Compressed" }) }), _jsx(PopoverContent, { className: "w-96 p-4", align: "start", side: "top", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-neutral-grey-100 text-[10px] font-semibold", children: "Conversation Compressed" }), _jsxs("p", { className: "text-neutral-grey-50 mt-1 text-[11px]", children: ["First ", agent.compressionMarkerIndex, " messages have been summarized to reduce context usage."] })] }), agent.compressedSummary && (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "text-neutral-grey-100 text-[11px] font-medium", children: "Summary:" }), _jsx("div", { className: "border-border-default bg-neutral-grey-5 text-neutral-grey-100 max-h-64 overflow-y-auto rounded border p-3 text-[11px] whitespace-pre-wrap", children: agent.compressedSummary })] }))] }) })] })), _jsx(AgentCostDisplay, { totalTokens: liveTotals
847
+ } })), !hasData && (_jsx("circle", { cx: "18", cy: "18", r: radius, fill: "none", stroke: contextColor, strokeWidth: "4", strokeDasharray: "0 100", strokeLinecap: "round", opacity: 0.5 }))] }) }) }), _jsx(TooltipContent, { side: "top", sideOffset: 6, children: hasData && contextWindowStatus ? (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Context window:" }), " ", formatTokens(contextWindowStatus.estimatedInputTokens || 0), " ", "/ ", formatTokens(contextWindowStatus.contextWindowTokens), " ", "tokens"] }), _jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Used:" }), " ", pct] }), breakdownRows.length > 0 && (_jsx("div", { className: "border-border-default mt-1.5 min-w-44 space-y-0.5 border-t pt-1.5", children: breakdownRows.map((row, index) => (_jsxs("div", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "h-2 w-2 shrink-0 rounded-[2px]", style: row.isFree
848
+ ? {
849
+ backgroundColor: "var(--color-border-default)",
850
+ }
851
+ : {
852
+ backgroundColor: "var(--color-highlight-100)",
853
+ opacity: Math.max(0.18, 1 - index * 0.16),
854
+ } }), _jsx("span", { className: "flex-1 pr-3", children: row.label }), _jsxs("span", { className: "tabular-nums whitespace-nowrap", children: [formatTokens(Math.round(row.tokens)), " \u00B7", " ", row.percent.toFixed(1), "%"] })] }, row.key))) }))] })) : (_jsxs("div", { className: "max-w-[320px] space-y-1 text-[11px]", children: [resolvedModelName && (_jsxs("div", { children: [_jsx("span", { className: "font-semibold", children: "Model:" }), " ", resolvedModelName] })), _jsx("div", { children: "Context window usage will appear here when the agent starts processing." })] })) })] })), agent?.compressionMarkerIndex != null && (_jsxs(Popover, { open: showCompressionPopover, onOpenChange: setShowCompressionPopover, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx("button", { type: "button", className: "border-highlight-100/20 bg-highlight-10/50 text-highlight-100 hover:bg-highlight-10 badge-pad-sm flex cursor-pointer items-center rounded border text-[11px] transition-colors", onClick: () => setShowCompressionPopover(!showCompressionPopover), children: "Compressed" }) }), _jsx(PopoverContent, { className: "w-96 p-4", align: "start", side: "top", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("h3", { className: "text-neutral-grey-100 text-[10px] font-semibold", children: "Conversation Compressed" }), _jsxs("p", { className: "text-neutral-grey-50 mt-1 text-[11px]", children: ["First ", agent.compressionMarkerIndex, " messages have been summarized to reduce context usage."] })] }), agent.compressedSummary && (_jsxs("div", { className: "space-y-1", children: [_jsx("div", { className: "text-neutral-grey-100 text-[11px] font-medium", children: "Summary:" }), _jsx("div", { className: "border-border-default bg-neutral-grey-5 text-neutral-grey-100 max-h-64 overflow-y-auto rounded border p-3 text-[11px] whitespace-pre-wrap", children: agent.compressedSummary })] }))] }) })] })), _jsx(AgentCostDisplay, { totalTokens: liveTotals
836
855
  ? {
837
856
  input: liveTotals.input,
838
857
  output: liveTotals.output,