@parhelia/core 0.4.12800 → 0.4.12825

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 (620) hide show
  1. package/dist/agents-view/AgentsWorkspaceView.d.ts +2 -0
  2. package/dist/agents-view/AgentsWorkspaceView.js +12 -3
  3. package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
  4. package/dist/components/WorkspaceHomeView.d.ts +14 -3
  5. package/dist/components/WorkspaceHomeView.js +7 -4
  6. package/dist/components/WorkspaceHomeView.js.map +1 -1
  7. package/dist/components/ui/dialog.d.ts +7 -1
  8. package/dist/components/ui/dialog.js +6 -3
  9. package/dist/components/ui/dialog.js.map +1 -1
  10. package/dist/components/ui/popover.d.ts +8 -0
  11. package/dist/components/ui/popover.js +40 -6
  12. package/dist/components/ui/popover.js.map +1 -1
  13. package/dist/components/ui/tooltip.d.ts +2 -2
  14. package/dist/components/ui/tooltip.js +9 -4
  15. package/dist/components/ui/tooltip.js.map +1 -1
  16. package/dist/config/config.js +5 -2
  17. package/dist/config/config.js.map +1 -1
  18. package/dist/editor/ConfirmationDialog.d.ts +1 -0
  19. package/dist/editor/ConfirmationDialog.js +9 -2
  20. package/dist/editor/ConfirmationDialog.js.map +1 -1
  21. package/dist/editor/ContentTree.d.ts +9 -1
  22. package/dist/editor/ContentTree.js +50 -23
  23. package/dist/editor/ContentTree.js.map +1 -1
  24. package/dist/editor/FieldList.js +41 -4
  25. package/dist/editor/FieldList.js.map +1 -1
  26. package/dist/editor/FieldListField.js +156 -123
  27. package/dist/editor/FieldListField.js.map +1 -1
  28. package/dist/editor/LinkEditorDialog.d.ts +3 -0
  29. package/dist/editor/LinkEditorDialog.js +9 -4
  30. package/dist/editor/LinkEditorDialog.js.map +1 -1
  31. package/dist/editor/MainLayout.js +9 -2
  32. package/dist/editor/MainLayout.js.map +1 -1
  33. package/dist/editor/SetupWizard.js +1 -1
  34. package/dist/editor/SetupWizard.js.map +1 -1
  35. package/dist/editor/UsedBy.d.ts +2 -0
  36. package/dist/editor/UsedBy.js +50 -10
  37. package/dist/editor/UsedBy.js.map +1 -1
  38. package/dist/editor/agent-changes/agentChangeTargets.d.ts +58 -0
  39. package/dist/editor/agent-changes/agentChangeTargets.js +174 -0
  40. package/dist/editor/agent-changes/agentChangeTargets.js.map +1 -0
  41. package/dist/editor/agent-changes/agentChangeTextHighlight.d.ts +57 -0
  42. package/dist/editor/agent-changes/agentChangeTextHighlight.js +109 -0
  43. package/dist/editor/agent-changes/agentChangeTextHighlight.js.map +1 -0
  44. package/dist/editor/ai/AgentImagePreview.d.ts +13 -0
  45. package/dist/editor/ai/AgentImagePreview.js +41 -0
  46. package/dist/editor/ai/AgentImagePreview.js.map +1 -0
  47. package/dist/editor/ai/AgentStatusBadge.js +11 -9
  48. package/dist/editor/ai/AgentStatusBadge.js.map +1 -1
  49. package/dist/editor/ai/Agents.js +2 -2
  50. package/dist/editor/ai/Agents.js.map +1 -1
  51. package/dist/editor/ai/ContentInspectorPopover.d.ts +2 -1
  52. package/dist/editor/ai/ContentInspectorPopover.js +3 -3
  53. package/dist/editor/ai/ContentInspectorPopover.js.map +1 -1
  54. package/dist/editor/ai/MediaImage.js +2 -1
  55. package/dist/editor/ai/MediaImage.js.map +1 -1
  56. package/dist/editor/ai/activityRowNavigation.d.ts +28 -0
  57. package/dist/editor/ai/activityRowNavigation.js +53 -0
  58. package/dist/editor/ai/activityRowNavigation.js.map +1 -0
  59. package/dist/editor/ai/agentDiagnostics.d.ts +1 -1
  60. package/dist/editor/ai/agentDiagnostics.js +8 -0
  61. package/dist/editor/ai/agentDiagnostics.js.map +1 -1
  62. package/dist/editor/ai/agentMessageGrouping.d.ts +1 -1
  63. package/dist/editor/ai/agentMessageGrouping.js +2 -13
  64. package/dist/editor/ai/agentMessageGrouping.js.map +1 -1
  65. package/dist/editor/ai/agentMessageHelpers.js +21 -1
  66. package/dist/editor/ai/agentMessageHelpers.js.map +1 -1
  67. package/dist/editor/ai/terminal/agentSessionSelectors.js +0 -4
  68. package/dist/editor/ai/terminal/agentSessionSelectors.js.map +1 -1
  69. package/dist/editor/ai/terminal/agentSessionSnapshot.d.ts +15 -0
  70. package/dist/editor/ai/terminal/agentSessionSnapshot.js +103 -3
  71. package/dist/editor/ai/terminal/agentSessionSnapshot.js.map +1 -1
  72. package/dist/editor/ai/terminal/agentSessionState.d.ts +0 -2
  73. package/dist/editor/ai/terminal/agentSessionState.js +13 -13
  74. package/dist/editor/ai/terminal/agentSessionState.js.map +1 -1
  75. package/dist/editor/ai/terminal/agentTurnTiming.d.ts +2 -0
  76. package/dist/editor/ai/terminal/agentTurnTiming.js +26 -1
  77. package/dist/editor/ai/terminal/agentTurnTiming.js.map +1 -1
  78. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.d.ts +3 -1
  79. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js +53 -11
  80. package/dist/editor/ai/terminal/components/AgentActivityOverviewPanel.js.map +1 -1
  81. package/dist/editor/ai/terminal/components/AgentBanners.d.ts +2 -1
  82. package/dist/editor/ai/terminal/components/AgentBanners.js +3 -2
  83. package/dist/editor/ai/terminal/components/AgentBanners.js.map +1 -1
  84. package/dist/editor/ai/terminal/components/AgentCostDisplay.js +6 -5
  85. package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
  86. package/dist/editor/ai/terminal/components/AgentDocumentList.js +20 -10
  87. package/dist/editor/ai/terminal/components/AgentDocumentList.js.map +1 -1
  88. package/dist/editor/ai/terminal/components/AgentGreeting.js +1 -1
  89. package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
  90. package/dist/editor/ai/terminal/components/AgentMemoryPanel.d.ts +2 -1
  91. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js +12 -9
  92. package/dist/editor/ai/terminal/components/AgentMemoryPanel.js.map +1 -1
  93. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.d.ts +9 -0
  94. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js +75 -0
  95. package/dist/editor/ai/terminal/components/AgentMemorySettingsSection.js.map +1 -0
  96. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.d.ts +1 -1
  97. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js +4 -72
  98. package/dist/editor/ai/terminal/components/AgentPromptTrayPopovers.js.map +1 -1
  99. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.d.ts +2 -1
  100. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js +2 -2
  101. package/dist/editor/ai/terminal/components/AgentRunStatusBanners.js.map +1 -1
  102. package/dist/editor/ai/terminal/components/AgentSettingsContent.js +2 -1
  103. package/dist/editor/ai/terminal/components/AgentSettingsContent.js.map +1 -1
  104. package/dist/editor/ai/terminal/components/AgentSettingsSections.d.ts +1 -0
  105. package/dist/editor/ai/terminal/components/AgentSettingsSections.js +1 -1
  106. package/dist/editor/ai/terminal/components/AgentSettingsSections.js.map +1 -1
  107. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js +2 -2
  108. package/dist/editor/ai/terminal/components/AgentSkillSettingsSection.js.map +1 -1
  109. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.d.ts +2 -1
  110. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js +2 -2
  111. package/dist/editor/ai/terminal/components/AgentSummaryAssistantResponse.js.map +1 -1
  112. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.d.ts +2 -1
  113. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js +9 -3
  114. package/dist/editor/ai/terminal/components/AgentTerminalFullUpperContent.js.map +1 -1
  115. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.d.ts +2 -1
  116. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js +2 -6
  117. package/dist/editor/ai/terminal/components/AgentTerminalMessageGroups.js.map +1 -1
  118. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.d.ts +2 -1
  119. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +8 -2
  120. package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
  121. package/dist/editor/ai/terminal/components/AgentTerminalView.js +1 -1
  122. package/dist/editor/ai/terminal/components/AgentTerminalView.js.map +1 -1
  123. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.d.ts +6 -1
  124. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js +5 -3
  125. package/dist/editor/ai/terminal/components/AgentThinkingIndicator.js.map +1 -1
  126. package/dist/editor/ai/terminal/components/AiResponseMessage.d.ts +2 -1
  127. package/dist/editor/ai/terminal/components/AiResponseMessage.js +20 -16
  128. package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
  129. package/dist/editor/ai/terminal/components/ContextInfoBar.js +2 -2
  130. package/dist/editor/ai/terminal/components/ContextInfoBar.js.map +1 -1
  131. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.d.ts +3 -0
  132. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js +47 -0
  133. package/dist/editor/ai/terminal/components/CreateItemToolCallContent.js.map +1 -0
  134. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js +15 -4
  135. package/dist/editor/ai/terminal/components/ResponseTurnDuration.js.map +1 -1
  136. package/dist/editor/ai/terminal/components/ToolCallDisplay.d.ts +2 -1
  137. package/dist/editor/ai/terminal/components/ToolCallDisplay.js +22 -54
  138. package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
  139. package/dist/editor/ai/terminal/components/UserMessage.d.ts +6 -0
  140. package/dist/editor/ai/terminal/components/UserMessage.js +17 -4
  141. package/dist/editor/ai/terminal/components/UserMessage.js.map +1 -1
  142. package/dist/editor/ai/terminal/components/agentThinkingStyles.d.ts +5 -0
  143. package/dist/editor/ai/terminal/components/agentThinkingStyles.js +5 -0
  144. package/dist/editor/ai/terminal/components/agentThinkingStyles.js.map +1 -1
  145. package/dist/editor/ai/terminal/components/toolCallContentRenderers.d.ts +2 -0
  146. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js +6 -0
  147. package/dist/editor/ai/terminal/components/toolCallContentRenderers.js.map +1 -1
  148. package/dist/editor/ai/terminal/components/toolCallResultJson.d.ts +1 -0
  149. package/dist/editor/ai/terminal/components/toolCallResultJson.js +46 -0
  150. package/dist/editor/ai/terminal/components/toolCallResultJson.js.map +1 -0
  151. package/dist/editor/ai/terminal/types.d.ts +2 -0
  152. package/dist/editor/ai/terminal/useAgentDraftInitializer.d.ts +2 -0
  153. package/dist/editor/ai/terminal/useAgentDraftInitializer.js +51 -14
  154. package/dist/editor/ai/terminal/useAgentDraftInitializer.js.map +1 -1
  155. package/dist/editor/ai/terminal/useAgentEditorContext.js +13 -3
  156. package/dist/editor/ai/terminal/useAgentEditorContext.js.map +1 -1
  157. package/dist/editor/ai/terminal/useAgentLoadPipeline.d.ts +2 -0
  158. package/dist/editor/ai/terminal/useAgentLoadPipeline.js +3 -1
  159. package/dist/editor/ai/terminal/useAgentLoadPipeline.js.map +1 -1
  160. package/dist/editor/ai/terminal/useAgentOperationHistoryLoader.js +5 -1
  161. package/dist/editor/ai/terminal/useAgentOperationHistoryLoader.js.map +1 -1
  162. package/dist/editor/ai/terminal/useAgentOperationSocketHandler.js +33 -1
  163. package/dist/editor/ai/terminal/useAgentOperationSocketHandler.js.map +1 -1
  164. package/dist/editor/ai/terminal/useAgentProviderWait.d.ts +18 -0
  165. package/dist/editor/ai/terminal/useAgentProviderWait.js +23 -0
  166. package/dist/editor/ai/terminal/useAgentProviderWait.js.map +1 -0
  167. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.d.ts +1 -1
  168. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.js +3 -3
  169. package/dist/editor/ai/terminal/useAgentRunCompletionSocketHandler.js.map +1 -1
  170. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.d.ts +2 -2
  171. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.js +5 -5
  172. package/dist/editor/ai/terminal/useAgentRunDeltaRouter.js.map +1 -1
  173. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js +14 -10
  174. package/dist/editor/ai/terminal/useAgentRunDeltaSocketHandler.js.map +1 -1
  175. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.d.ts +6 -7
  176. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.js +5 -5
  177. package/dist/editor/ai/terminal/useAgentRunMessagePipeline.js.map +1 -1
  178. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.d.ts +1 -1
  179. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js +23 -16
  180. package/dist/editor/ai/terminal/useAgentRunStatusSocketHandler.js.map +1 -1
  181. package/dist/editor/ai/terminal/useAgentServerReconciler.js +11 -0
  182. package/dist/editor/ai/terminal/useAgentServerReconciler.js.map +1 -1
  183. package/dist/editor/ai/terminal/useAgentSession.d.ts +0 -2
  184. package/dist/editor/ai/terminal/useAgentSession.js +8 -15
  185. package/dist/editor/ai/terminal/useAgentSession.js.map +1 -1
  186. package/dist/editor/ai/terminal/useAgentSessionFacade.d.ts +1 -0
  187. package/dist/editor/ai/terminal/useAgentSessionFacade.js +2 -0
  188. package/dist/editor/ai/terminal/useAgentSessionFacade.js.map +1 -1
  189. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.d.ts +1 -1
  190. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js +3 -3
  191. package/dist/editor/ai/terminal/useAgentSettleCompletedRun.js.map +1 -1
  192. package/dist/editor/ai/terminal/useAgentStreamPipeline.d.ts +2 -2
  193. package/dist/editor/ai/terminal/useAgentStreamPipeline.js +5 -5
  194. package/dist/editor/ai/terminal/useAgentStreamPipeline.js.map +1 -1
  195. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.d.ts +0 -1
  196. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js +3 -12
  197. package/dist/editor/ai/terminal/useAgentSubmitContextBuilder.js.map +1 -1
  198. package/dist/editor/ai/terminal/useAgentSubmitHandlers.d.ts +1 -0
  199. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js +24 -7
  200. package/dist/editor/ai/terminal/useAgentSubmitHandlers.js.map +1 -1
  201. package/dist/editor/ai/terminal/useAgentSubmitResponseHandler.js +6 -1
  202. package/dist/editor/ai/terminal/useAgentSubmitResponseHandler.js.map +1 -1
  203. package/dist/editor/ai/terminal/useAgentTerminalController.js +13 -10
  204. package/dist/editor/ai/terminal/useAgentTerminalController.js.map +1 -1
  205. package/dist/editor/ai/terminal/useAgentTerminalViewProps.d.ts +1 -1
  206. package/dist/editor/ai/terminal/useAgentTerminalViewProps.js.map +1 -1
  207. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +1 -1
  208. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  209. package/dist/editor/bridge/bridgeKeys.d.ts +5 -0
  210. package/dist/editor/bridge/bridgeKeys.js +8 -0
  211. package/dist/editor/bridge/bridgeKeys.js.map +1 -0
  212. package/dist/editor/bridge/linkDownload.d.ts +3 -0
  213. package/dist/editor/bridge/linkDownload.js +52 -0
  214. package/dist/editor/bridge/linkDownload.js.map +1 -0
  215. package/dist/editor/bridge/protocol.d.ts +39 -0
  216. package/dist/editor/bridge/protocol.js +3 -1
  217. package/dist/editor/bridge/protocol.js.map +1 -1
  218. package/dist/editor/client/EditorShell.js +34 -24
  219. package/dist/editor/client/EditorShell.js.map +1 -1
  220. package/dist/editor/client/OperationDialogContent.d.ts +10 -3
  221. package/dist/editor/client/OperationDialogContent.js +27 -4
  222. package/dist/editor/client/OperationDialogContent.js.map +1 -1
  223. package/dist/editor/client/agentLoadItemPolicy.d.ts +22 -0
  224. package/dist/editor/client/agentLoadItemPolicy.js +60 -0
  225. package/dist/editor/client/agentLoadItemPolicy.js.map +1 -0
  226. package/dist/editor/client/editContext.d.ts +16 -0
  227. package/dist/editor/client/editContext.js.map +1 -1
  228. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +5 -0
  229. package/dist/editor/client/hooks/useSocketMessageHandler.js +56 -14
  230. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  231. package/dist/editor/client/itemsRepository.js +26 -7
  232. package/dist/editor/client/itemsRepository.js.map +1 -1
  233. package/dist/editor/client/localUserEditActivity.d.ts +3 -0
  234. package/dist/editor/client/localUserEditActivity.js +12 -0
  235. package/dist/editor/client/localUserEditActivity.js.map +1 -0
  236. package/dist/editor/client/operations.js +60 -15
  237. package/dist/editor/client/operations.js.map +1 -1
  238. package/dist/editor/commands/commands.d.ts +6 -0
  239. package/dist/editor/commands/commands.js.map +1 -1
  240. package/dist/editor/commands/undo.js +8 -2
  241. package/dist/editor/commands/undo.js.map +1 -1
  242. package/dist/editor/componentVisualMode.d.ts +14 -0
  243. package/dist/editor/componentVisualMode.js +43 -0
  244. package/dist/editor/componentVisualMode.js.map +1 -0
  245. package/dist/editor/field-types/ImageFieldEditor.js +1 -1
  246. package/dist/editor/field-types/ImageFieldEditor.js.map +1 -1
  247. package/dist/editor/field-types/MultiLineText.js +29 -46
  248. package/dist/editor/field-types/MultiLineText.js.map +1 -1
  249. package/dist/editor/field-types/PictureFieldEditor.js +1 -1
  250. package/dist/editor/field-types/PictureFieldEditor.js.map +1 -1
  251. package/dist/editor/field-types/RichTextEditorComponent.js +19 -3
  252. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  253. package/dist/editor/field-types/SingleLineText.js +28 -79
  254. package/dist/editor/field-types/SingleLineText.js.map +1 -1
  255. package/dist/editor/field-types/richtext/components/ReactSlate.js +67 -10
  256. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  257. package/dist/editor/field-types/richtext/components/SimpleToolbarButton.js +4 -1
  258. package/dist/editor/field-types/richtext/components/SimpleToolbarButton.js.map +1 -1
  259. package/dist/editor/field-types/richtext/components/ToolbarButton.js +4 -1
  260. package/dist/editor/field-types/richtext/components/ToolbarButton.js.map +1 -1
  261. package/dist/editor/field-types/richtext/types.d.ts +7 -0
  262. package/dist/editor/field-types/richtext/types.js.map +1 -1
  263. package/dist/editor/field-types/richtext/utils/changeHighlight.d.ts +18 -0
  264. package/dist/editor/field-types/richtext/utils/changeHighlight.js +57 -0
  265. package/dist/editor/field-types/richtext/utils/changeHighlight.js.map +1 -0
  266. package/dist/editor/field-types/useFormFieldCaretPresence.d.ts +11 -0
  267. package/dist/editor/field-types/useFormFieldCaretPresence.js +33 -16
  268. package/dist/editor/field-types/useFormFieldCaretPresence.js.map +1 -1
  269. package/dist/editor/field-types/useFormFieldSelectionRange.d.ts +36 -0
  270. package/dist/editor/field-types/useFormFieldSelectionRange.js +123 -0
  271. package/dist/editor/field-types/useFormFieldSelectionRange.js.map +1 -0
  272. package/dist/editor/field-types/useTextCompletion.js +13 -3
  273. package/dist/editor/field-types/useTextCompletion.js.map +1 -1
  274. package/dist/editor/find-replace/FindReplacePanel.d.ts +11 -0
  275. package/dist/editor/find-replace/FindReplacePanel.js +311 -0
  276. package/dist/editor/find-replace/FindReplacePanel.js.map +1 -0
  277. package/dist/editor/find-replace/findReplaceCommand.d.ts +8 -0
  278. package/dist/editor/find-replace/findReplaceCommand.js +25 -0
  279. package/dist/editor/find-replace/findReplaceCommand.js.map +1 -0
  280. package/dist/editor/find-replace/findReplaceMatches.d.ts +42 -0
  281. package/dist/editor/find-replace/findReplaceMatches.js +66 -0
  282. package/dist/editor/find-replace/findReplaceMatches.js.map +1 -0
  283. package/dist/editor/find-replace/findReplaceStore.d.ts +30 -0
  284. package/dist/editor/find-replace/findReplaceStore.js +61 -0
  285. package/dist/editor/find-replace/findReplaceStore.js.map +1 -0
  286. package/dist/editor/find-replace/findReplaceTargets.d.ts +49 -0
  287. package/dist/editor/find-replace/findReplaceTargets.js +110 -0
  288. package/dist/editor/find-replace/findReplaceTargets.js.map +1 -0
  289. package/dist/editor/find-replace/findReplaceText.d.ts +50 -0
  290. package/dist/editor/find-replace/findReplaceText.js +189 -0
  291. package/dist/editor/find-replace/findReplaceText.js.map +1 -0
  292. package/dist/editor/media-selector/AiImageSearchPrompt.d.ts +2 -1
  293. package/dist/editor/media-selector/AiImageSearchPrompt.js +2 -2
  294. package/dist/editor/media-selector/AiImageSearchPrompt.js.map +1 -1
  295. package/dist/editor/media-selector/Thumbnails.d.ts +2 -1
  296. package/dist/editor/media-selector/Thumbnails.js +2 -2
  297. package/dist/editor/media-selector/Thumbnails.js.map +1 -1
  298. package/dist/editor/media-selector/TreeSelector.js +142 -42
  299. package/dist/editor/media-selector/TreeSelector.js.map +1 -1
  300. package/dist/editor/media-selector/UploadZone.d.ts +6 -1
  301. package/dist/editor/media-selector/UploadZone.js +10 -7
  302. package/dist/editor/media-selector/UploadZone.js.map +1 -1
  303. package/dist/editor/media-selector/mediaFileType.d.ts +2 -0
  304. package/dist/editor/media-selector/mediaFileType.js +37 -0
  305. package/dist/editor/media-selector/mediaFileType.js.map +1 -1
  306. package/dist/editor/menubar/ActiveUsers.js +1 -1
  307. package/dist/editor/menubar/ActiveUsers.js.map +1 -1
  308. package/dist/editor/menubar/GenericToolbar.d.ts +2 -1
  309. package/dist/editor/menubar/GenericToolbar.js +2 -2
  310. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  311. package/dist/editor/menubar/ToolbarFactory.js +10 -2
  312. package/dist/editor/menubar/ToolbarFactory.js.map +1 -1
  313. package/dist/editor/menubar/VersionSelector.js +2 -2
  314. package/dist/editor/menubar/VersionSelector.js.map +1 -1
  315. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js +10 -3
  316. package/dist/editor/menubar/toolbar-sections/DeviceSwitchToolbar.js.map +1 -1
  317. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.d.ts +6 -0
  318. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js +31 -0
  319. package/dist/editor/menubar/toolbar-sections/FindReplaceControls.js.map +1 -0
  320. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +6 -1
  321. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  322. package/dist/editor/menubar/toolbar-sections/index.d.ts +1 -0
  323. package/dist/editor/menubar/toolbar-sections/index.js +1 -0
  324. package/dist/editor/menubar/toolbar-sections/index.js.map +1 -1
  325. package/dist/editor/notifications/WatchButton.js +11 -4
  326. package/dist/editor/notifications/WatchButton.js.map +1 -1
  327. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.d.ts +20 -0
  328. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js +31 -0
  329. package/dist/editor/page-editor-chrome/AgentChangeHighlightings.js.map +1 -0
  330. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +2 -2
  331. package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
  332. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.d.ts +33 -0
  333. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js +290 -0
  334. package/dist/editor/page-editor-chrome/DiffHighlightOverlay.js.map +1 -0
  335. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +8 -4
  336. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  337. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.d.ts +11 -0
  338. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js +117 -0
  339. package/dist/editor/page-editor-chrome/FindReplaceHighlightings.js.map +1 -0
  340. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js +27 -10
  341. package/dist/editor/page-editor-chrome/InlineFieldHistoryButton.js.map +1 -1
  342. package/dist/editor/page-editor-chrome/InsertComponentMenu.d.ts +6 -1
  343. package/dist/editor/page-editor-chrome/InsertComponentMenu.js +53 -6
  344. package/dist/editor/page-editor-chrome/InsertComponentMenu.js.map +1 -1
  345. package/dist/editor/page-editor-chrome/PageEditorChrome.js +3 -1
  346. package/dist/editor/page-editor-chrome/PageEditorChrome.js.map +1 -1
  347. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +14 -2
  348. package/dist/editor/page-editor-chrome/PlaceholderDropZone.js.map +1 -1
  349. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js +67 -14
  350. package/dist/editor/page-editor-chrome/SuggestionHighlightings.js.map +1 -1
  351. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.d.ts +1 -1
  352. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js +6 -271
  353. package/dist/editor/page-editor-chrome/VersionDiffHighlightings.js.map +1 -1
  354. package/dist/editor/page-editor-chrome/diffRulerSegments.d.ts +18 -0
  355. package/dist/editor/page-editor-chrome/diffRulerSegments.js +37 -0
  356. package/dist/editor/page-editor-chrome/diffRulerSegments.js.map +1 -0
  357. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js +15 -2
  358. package/dist/editor/page-editor-chrome/overlay/IframeOverlayProvider.js.map +1 -1
  359. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.d.ts +2 -0
  360. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js +58 -5
  361. package/dist/editor/page-editor-chrome/useBridgeInlineEditing.js.map +1 -1
  362. package/dist/editor/page-viewer/DeviceToolbar.js +53 -10
  363. package/dist/editor/page-viewer/DeviceToolbar.js.map +1 -1
  364. package/dist/editor/page-viewer/MiniMap.d.ts +6 -2
  365. package/dist/editor/page-viewer/MiniMap.js +152 -36
  366. package/dist/editor/page-viewer/MiniMap.js.map +1 -1
  367. package/dist/editor/page-viewer/PageViewerFrame.js +225 -32
  368. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  369. package/dist/editor/page-viewer/bridgeFieldPatch.js +1 -0
  370. package/dist/editor/page-viewer/bridgeFieldPatch.js.map +1 -1
  371. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.d.ts +6 -0
  372. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js +19 -1
  373. package/dist/editor/page-viewer/bridgeKeyboardShortcuts.js.map +1 -1
  374. package/dist/editor/page-viewer/compareFrameWidth.d.ts +8 -0
  375. package/dist/editor/page-viewer/compareFrameWidth.js +25 -0
  376. package/dist/editor/page-viewer/compareFrameWidth.js.map +1 -0
  377. package/dist/editor/page-viewer/minimapViewport.d.ts +2 -0
  378. package/dist/editor/page-viewer/minimapViewport.js +31 -0
  379. package/dist/editor/page-viewer/minimapViewport.js.map +1 -0
  380. package/dist/editor/page-viewer/pageViewContext.d.ts +2 -1
  381. package/dist/editor/page-viewer/pageViewContext.js +10 -4
  382. package/dist/editor/page-viewer/pageViewContext.js.map +1 -1
  383. package/dist/editor/pageModel.d.ts +2 -0
  384. package/dist/editor/reviews/Comment.js +13 -12
  385. package/dist/editor/reviews/Comment.js.map +1 -1
  386. package/dist/editor/reviews/CommentDisplayPopover.js +25 -29
  387. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  388. package/dist/editor/reviews/CommentEditor.js +58 -19
  389. package/dist/editor/reviews/CommentEditor.js.map +1 -1
  390. package/dist/editor/reviews/CommentImageAttachments.d.ts +12 -0
  391. package/dist/editor/reviews/CommentImageAttachments.js +19 -0
  392. package/dist/editor/reviews/CommentImageAttachments.js.map +1 -0
  393. package/dist/editor/reviews/CommentQuote.d.ts +4 -0
  394. package/dist/editor/reviews/CommentQuote.js +30 -0
  395. package/dist/editor/reviews/CommentQuote.js.map +1 -0
  396. package/dist/editor/reviews/CommentThreadAgentLink.d.ts +23 -0
  397. package/dist/editor/reviews/CommentThreadAgentLink.js +37 -0
  398. package/dist/editor/reviews/CommentThreadAgentLink.js.map +1 -0
  399. package/dist/editor/reviews/CommentView.d.ts +2 -3
  400. package/dist/editor/reviews/CommentView.js +17 -14
  401. package/dist/editor/reviews/CommentView.js.map +1 -1
  402. package/dist/editor/reviews/Comments.js +14 -5
  403. package/dist/editor/reviews/Comments.js.map +1 -1
  404. package/dist/editor/reviews/MentionText.d.ts +5 -1
  405. package/dist/editor/reviews/MentionText.js +23 -0
  406. package/dist/editor/reviews/MentionText.js.map +1 -1
  407. package/dist/editor/reviews/ReviewCard.js +14 -8
  408. package/dist/editor/reviews/ReviewCard.js.map +1 -1
  409. package/dist/editor/reviews/ReviewersPanel.js +7 -2
  410. package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
  411. package/dist/editor/reviews/SuggestedEdit.js +75 -15
  412. package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
  413. package/dist/editor/reviews/SuggestionCommentThread.js +5 -4
  414. package/dist/editor/reviews/SuggestionCommentThread.js.map +1 -1
  415. package/dist/editor/reviews/SuggestionDisplayPopover.d.ts +3 -1
  416. package/dist/editor/reviews/SuggestionDisplayPopover.js +7 -2
  417. package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
  418. package/dist/editor/reviews/commentAgentAttachments.d.ts +5 -0
  419. package/dist/editor/reviews/commentAgentAttachments.js +51 -0
  420. package/dist/editor/reviews/commentAgentAttachments.js.map +1 -0
  421. package/dist/editor/reviews/commentAi.d.ts +29 -3
  422. package/dist/editor/reviews/commentAi.js +122 -34
  423. package/dist/editor/reviews/commentAi.js.map +1 -1
  424. package/dist/editor/reviews/commentImages.d.ts +49 -0
  425. package/dist/editor/reviews/commentImages.js +164 -0
  426. package/dist/editor/reviews/commentImages.js.map +1 -0
  427. package/dist/editor/reviews/feedbackAvatar.js +11 -5
  428. package/dist/editor/reviews/feedbackAvatar.js.map +1 -1
  429. package/dist/editor/reviews/feedbackCommentRules.d.ts +1 -1
  430. package/dist/editor/reviews/feedbackCommentRules.js +3 -9
  431. package/dist/editor/reviews/feedbackCommentRules.js.map +1 -1
  432. package/dist/editor/reviews/feedbackSelection.d.ts +13 -0
  433. package/dist/editor/reviews/feedbackSelection.js +37 -0
  434. package/dist/editor/reviews/feedbackSelection.js.map +1 -1
  435. package/dist/editor/reviews/suggestionDisplayValue.d.ts +24 -2
  436. package/dist/editor/reviews/suggestionDisplayValue.js +28 -4
  437. package/dist/editor/reviews/suggestionDisplayValue.js.map +1 -1
  438. package/dist/editor/reviews/useCommentImagePaste.d.ts +72 -0
  439. package/dist/editor/reviews/useCommentImagePaste.js +188 -0
  440. package/dist/editor/reviews/useCommentImagePaste.js.map +1 -0
  441. package/dist/editor/services/agentErrorMessage.js +5 -1
  442. package/dist/editor/services/agentErrorMessage.js.map +1 -1
  443. package/dist/editor/services/agentService.d.ts +12 -0
  444. package/dist/editor/services/agentService.js.map +1 -1
  445. package/dist/editor/services/agentStatus.d.ts +1 -0
  446. package/dist/editor/services/agentStatus.js +14 -0
  447. package/dist/editor/services/agentStatus.js.map +1 -1
  448. package/dist/editor/services/contentService.d.ts +2 -0
  449. package/dist/editor/services/contentService.js.map +1 -1
  450. package/dist/editor/services/editService.d.ts +17 -2
  451. package/dist/editor/services/editService.js +7 -2
  452. package/dist/editor/services/editService.js.map +1 -1
  453. package/dist/editor/services/searchService.d.ts +2 -1
  454. package/dist/editor/services/searchService.js +2 -1
  455. package/dist/editor/services/searchService.js.map +1 -1
  456. package/dist/editor/services/userResolution.js +6 -5
  457. package/dist/editor/services/userResolution.js.map +1 -1
  458. package/dist/editor/settings/index/RecentBatchesList.js +2 -1
  459. package/dist/editor/settings/index/RecentBatchesList.js.map +1 -1
  460. package/dist/editor/sidebar/ComponentPalette.js +12 -4
  461. package/dist/editor/sidebar/ComponentPalette.js.map +1 -1
  462. package/dist/editor/sidebar/ComponentTree.js +41 -22
  463. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  464. package/dist/editor/sidebar/EditHistory.js +2 -2
  465. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  466. package/dist/editor/sidebar/MainContentTree.js +1 -1
  467. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  468. package/dist/editor/sidebar/MorePanelsButton.js +2 -2
  469. package/dist/editor/sidebar/MorePanelsButton.js.map +1 -1
  470. package/dist/editor/sidebar/NavigationPanelMenuItem.js +2 -2
  471. package/dist/editor/sidebar/NavigationPanelMenuItem.js.map +1 -1
  472. package/dist/editor/sidebar/OperationItem.js +2 -1
  473. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  474. package/dist/editor/sidebar/Validation.js +38 -44
  475. package/dist/editor/sidebar/Validation.js.map +1 -1
  476. package/dist/editor/sidebar/liveComponentThumbnails.d.ts +66 -0
  477. package/dist/editor/sidebar/liveComponentThumbnails.js +220 -0
  478. package/dist/editor/sidebar/liveComponentThumbnails.js.map +1 -0
  479. package/dist/editor/ui/ItemCollectionEditor.d.ts +17 -1
  480. package/dist/editor/ui/ItemCollectionEditor.js +17 -5
  481. package/dist/editor/ui/ItemCollectionEditor.js.map +1 -1
  482. package/dist/editor/ui/ItemList.d.ts +5 -0
  483. package/dist/editor/ui/ItemList.js +10 -2
  484. package/dist/editor/ui/ItemList.js.map +1 -1
  485. package/dist/editor/ui/ItemSearch.d.ts +7 -0
  486. package/dist/editor/ui/ItemSearch.js +14 -6
  487. package/dist/editor/ui/ItemSearch.js.map +1 -1
  488. package/dist/editor/ui/ParheliaMark.d.ts +15 -0
  489. package/dist/editor/ui/ParheliaMark.js +12 -0
  490. package/dist/editor/ui/ParheliaMark.js.map +1 -0
  491. package/dist/editor/ui/PublishDialog.js +3 -2
  492. package/dist/editor/ui/PublishDialog.js.map +1 -1
  493. package/dist/editor/ui/SimpleTabs.js +58 -3
  494. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  495. package/dist/editor/ui/Splitter.d.ts +15 -0
  496. package/dist/editor/ui/Splitter.js +77 -100
  497. package/dist/editor/ui/Splitter.js.map +1 -1
  498. package/dist/editor/ui/TreeListSelector.d.ts +15 -1
  499. package/dist/editor/ui/TreeListSelector.js +2 -2
  500. package/dist/editor/ui/TreeListSelector.js.map +1 -1
  501. package/dist/editor/ui/WorkboxItemsTable.d.ts +6 -1
  502. package/dist/editor/ui/WorkboxItemsTable.js +44 -48
  503. package/dist/editor/ui/WorkboxItemsTable.js.map +1 -1
  504. package/dist/editor/ui/publishReadiness.d.ts +13 -0
  505. package/dist/editor/ui/publishReadiness.js +56 -0
  506. package/dist/editor/ui/publishReadiness.js.map +1 -1
  507. package/dist/editor/undoEligibility.d.ts +2 -0
  508. package/dist/editor/undoEligibility.js +8 -0
  509. package/dist/editor/undoEligibility.js.map +1 -0
  510. package/dist/editor/utils/keyboardNavigation.js +16 -0
  511. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  512. package/dist/editor/validation/ValidationIssuesPopover.d.ts +39 -0
  513. package/dist/editor/validation/ValidationIssuesPopover.js +51 -0
  514. package/dist/editor/validation/ValidationIssuesPopover.js.map +1 -0
  515. package/dist/editor/validation/navigateToValidationIssue.d.ts +13 -0
  516. package/dist/editor/validation/navigateToValidationIssue.js +43 -0
  517. package/dist/editor/validation/navigateToValidationIssue.js.map +1 -0
  518. package/dist/editor/validation/validationFixAgent.d.ts +26 -0
  519. package/dist/editor/validation/validationFixAgent.js +124 -0
  520. package/dist/editor/validation/validationFixAgent.js.map +1 -0
  521. package/dist/editor/validation/validationSeverity.d.ts +15 -0
  522. package/dist/editor/validation/validationSeverity.js +47 -0
  523. package/dist/editor/validation/validationSeverity.js.map +1 -0
  524. package/dist/editor/version-diff/versionDiffGeometryKeys.d.ts +10 -4
  525. package/dist/editor/version-diff/versionDiffGeometryKeys.js +21 -7
  526. package/dist/editor/version-diff/versionDiffGeometryKeys.js.map +1 -1
  527. package/dist/editor/version-diff/versionDiffTargets.d.ts +6 -1
  528. package/dist/editor/version-diff/versionDiffTargets.js +5 -5
  529. package/dist/editor/version-diff/versionDiffTargets.js.map +1 -1
  530. package/dist/editor/views/editorSlotContext.d.ts +4 -0
  531. package/dist/editor/views/editorSlotContext.js +37 -1
  532. package/dist/editor/views/editorSlotContext.js.map +1 -1
  533. package/dist/index.d.ts +1 -0
  534. package/dist/index.js +1 -0
  535. package/dist/index.js.map +1 -1
  536. package/dist/lib/utils.d.ts +5 -0
  537. package/dist/lib/utils.js +7 -0
  538. package/dist/lib/utils.js.map +1 -1
  539. package/dist/revision.d.ts +2 -2
  540. package/dist/revision.js +2 -2
  541. package/dist/splash-screen/ModernSplashScreen.js +10 -8
  542. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  543. package/dist/splash-screen/RecentPages.js +35 -20
  544. package/dist/splash-screen/RecentPages.js.map +1 -1
  545. package/dist/task-board/TaskBoardWorkspace.js +243 -81
  546. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  547. package/dist/task-board/components/AttentionPromptDialog.d.ts +13 -0
  548. package/dist/task-board/components/AttentionPromptDialog.js +45 -0
  549. package/dist/task-board/components/AttentionPromptDialog.js.map +1 -0
  550. package/dist/task-board/components/CommentsList.js +11 -11
  551. package/dist/task-board/components/CommentsList.js.map +1 -1
  552. package/dist/task-board/components/GoalDataView.d.ts +53 -1
  553. package/dist/task-board/components/GoalDataView.js +164 -55
  554. package/dist/task-board/components/GoalDataView.js.map +1 -1
  555. package/dist/task-board/components/GoalFindingsTable.d.ts +43 -0
  556. package/dist/task-board/components/GoalFindingsTable.js +160 -0
  557. package/dist/task-board/components/GoalFindingsTable.js.map +1 -0
  558. package/dist/task-board/components/GoalsMatrix.js +33 -6
  559. package/dist/task-board/components/GoalsMatrix.js.map +1 -1
  560. package/dist/task-board/components/IssuePanel.d.ts +31 -0
  561. package/dist/task-board/components/IssuePanel.js +268 -0
  562. package/dist/task-board/components/IssuePanel.js.map +1 -0
  563. package/dist/task-board/components/ProjectDashboard.d.ts +2 -18
  564. package/dist/task-board/components/ProjectDashboard.js +2 -206
  565. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  566. package/dist/task-board/components/ProjectGoalsPanel.js +173 -15
  567. package/dist/task-board/components/ProjectGoalsPanel.js.map +1 -1
  568. package/dist/task-board/components/ProjectProgressIndicator.d.ts +8 -0
  569. package/dist/task-board/components/ProjectProgressIndicator.js +17 -0
  570. package/dist/task-board/components/ProjectProgressIndicator.js.map +1 -0
  571. package/dist/task-board/components/SubgoalFindings.d.ts +40 -0
  572. package/dist/task-board/components/SubgoalFindings.js +88 -0
  573. package/dist/task-board/components/SubgoalFindings.js.map +1 -0
  574. package/dist/task-board/components/TaskAgentPanel.d.ts +2 -0
  575. package/dist/task-board/components/TaskAgentPanel.js +5 -4
  576. package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
  577. package/dist/task-board/components/TaskBoardHomeView.d.ts +11 -0
  578. package/dist/task-board/components/TaskBoardHomeView.js +40 -2
  579. package/dist/task-board/components/TaskBoardHomeView.js.map +1 -1
  580. package/dist/task-board/components/TaskBoardProjectListSidebar.js +2 -11
  581. package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
  582. package/dist/task-board/components/TaskDetailPanel.js +58 -23
  583. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  584. package/dist/task-board/components/WizardCommunicationCenter.d.ts +2 -0
  585. package/dist/task-board/components/WizardCommunicationCenter.js +5 -3
  586. package/dist/task-board/components/WizardCommunicationCenter.js.map +1 -1
  587. package/dist/task-board/components/WizardCommunicationShared.js +2 -1
  588. package/dist/task-board/components/WizardCommunicationShared.js.map +1 -1
  589. package/dist/task-board/components/WizardTask.d.ts +2 -0
  590. package/dist/task-board/components/WizardTask.js +2 -2
  591. package/dist/task-board/components/WizardTask.js.map +1 -1
  592. package/dist/task-board/components/WizardTaskDetailsPanel.d.ts +4 -0
  593. package/dist/task-board/components/WizardTaskDetailsPanel.js +16 -3
  594. package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
  595. package/dist/task-board/components/commentAuthor.d.ts +14 -0
  596. package/dist/task-board/components/commentAuthor.js +25 -0
  597. package/dist/task-board/components/commentAuthor.js.map +1 -0
  598. package/dist/task-board/services/issueService.d.ts +193 -0
  599. package/dist/task-board/services/issueService.js +97 -0
  600. package/dist/task-board/services/issueService.js.map +1 -0
  601. package/dist/task-board/taskBoardNavStore.d.ts +6 -0
  602. package/dist/task-board/taskBoardNavStore.js +36 -1
  603. package/dist/task-board/taskBoardNavStore.js.map +1 -1
  604. package/dist/task-board/types.d.ts +28 -0
  605. package/dist/task-board/utils/projectDashboardModel.d.ts +68 -0
  606. package/dist/task-board/utils/projectDashboardModel.js +363 -0
  607. package/dist/task-board/utils/projectDashboardModel.js.map +1 -0
  608. package/dist/task-board/views/DependencyGraphView.d.ts +7 -1
  609. package/dist/task-board/views/DependencyGraphView.js +58 -19
  610. package/dist/task-board/views/DependencyGraphView.js.map +1 -1
  611. package/dist/task-board/views/ProjectDashboardView.d.ts +28 -0
  612. package/dist/task-board/views/ProjectDashboardView.js +316 -0
  613. package/dist/task-board/views/ProjectDashboardView.js.map +1 -0
  614. package/dist/tour/Tour.js +21 -2
  615. package/dist/tour/Tour.js.map +1 -1
  616. package/dist/types.d.ts +11 -0
  617. package/images/Parhelia-Onboarding-Beach.jpg +0 -0
  618. package/package.json +1 -1
  619. package/styles.css +57 -3
  620. package/images/Parhelia-Onboarding-BG.jpg +0 -0
@@ -0,0 +1,363 @@
1
+ import { asMetrics, asRecord, asScore, asSeverityCounts, } from "../components/GoalDataView";
2
+ import { normalizeTaskStatus } from "../taskStatus";
3
+ const RUNNING_STATES = new Set(["Working", "Starting"]);
4
+ const ATTENTION_STATES = new Set([
5
+ "WaitingForApproval",
6
+ "WaitingForToolApproval",
7
+ "Questions",
8
+ "WaitingForInput",
9
+ "WaitingForUser",
10
+ "AgentError",
11
+ "WaitingForBudget",
12
+ ]);
13
+ export function getDashboardTaskBucket(task) {
14
+ const status = normalizeTaskStatus(task.status, task.executionState);
15
+ if (status === "Done")
16
+ return "done";
17
+ const state = task.executionState ?? "";
18
+ if (RUNNING_STATES.has(state))
19
+ return "running";
20
+ switch (task.executionAttentionReason) {
21
+ case "approval":
22
+ case "input":
23
+ case "failed":
24
+ case "budget":
25
+ return "attention";
26
+ }
27
+ if (ATTENTION_STATES.has(state))
28
+ return "attention";
29
+ if (status === "Review")
30
+ return "attention";
31
+ return "open";
32
+ }
33
+ export function isFailedTask(task) {
34
+ return (getDashboardTaskBucket(task) === "attention" &&
35
+ (task.executionState === "AgentError" ||
36
+ task.executionAttentionReason === "failed"));
37
+ }
38
+ function pluralTasks(count) {
39
+ return count === 1 ? "task" : "tasks";
40
+ }
41
+ export function buildDashboardStatusSummary(tasks) {
42
+ const counts = { done: 0, running: 0, attention: 0, open: 0 };
43
+ let failed = 0;
44
+ for (const task of tasks) {
45
+ counts[getDashboardTaskBucket(task)] += 1;
46
+ if (isFailedTask(task))
47
+ failed += 1;
48
+ }
49
+ const total = tasks.length;
50
+ if (total === 0) {
51
+ return {
52
+ total,
53
+ ...counts,
54
+ failed,
55
+ phase: "empty",
56
+ headline: "No tasks yet.",
57
+ detail: "",
58
+ };
59
+ }
60
+ if (counts.done === total) {
61
+ return {
62
+ total,
63
+ ...counts,
64
+ failed,
65
+ phase: "finished",
66
+ headline: "Finished.",
67
+ detail: total === 1 ? "The task is done." : `All ${total} tasks are done.`,
68
+ };
69
+ }
70
+ const phase = counts.running > 0
71
+ ? "running"
72
+ : counts.attention > 0
73
+ ? "attention"
74
+ : "idle";
75
+ const headline = phase === "running"
76
+ ? "Running."
77
+ : phase === "attention"
78
+ ? "Waiting for you."
79
+ : "Not running.";
80
+ const sentences = [`${counts.done} of ${total} tasks done.`];
81
+ if (counts.attention > 0) {
82
+ sentences.push(`${counts.attention} ${pluralTasks(counts.attention)} ${counts.attention === 1 ? "is" : "are"} waiting for you.`);
83
+ }
84
+ return {
85
+ total,
86
+ ...counts,
87
+ failed,
88
+ phase,
89
+ headline,
90
+ detail: sentences.join(" "),
91
+ };
92
+ }
93
+ export function describeAttention(task) {
94
+ switch (task.executionState) {
95
+ case "WaitingForToolApproval":
96
+ return {
97
+ description: "Wants to run a tool and needs your approval",
98
+ action: "Review",
99
+ };
100
+ case "Questions":
101
+ return { description: "Has questions for you", action: "Answer" };
102
+ case "WaitingForInput":
103
+ return { description: "Needs your input to continue", action: "Answer" };
104
+ case "WaitingForUser":
105
+ return { description: "Waiting for you to continue", action: "Open" };
106
+ case "AgentError": {
107
+ const error = task.executionError?.trim();
108
+ return {
109
+ description: error
110
+ ? `Stopped with an error: ${error}`
111
+ : "Stopped with an error",
112
+ action: "Open",
113
+ };
114
+ }
115
+ case "WaitingForBudget":
116
+ return {
117
+ description: "Paused until the project budget is extended",
118
+ action: "Open",
119
+ };
120
+ }
121
+ if (task.executionState === "WaitingForApproval" ||
122
+ normalizeTaskStatus(task.status, task.executionState) === "Review") {
123
+ return {
124
+ description: "Finished and waiting for your approval",
125
+ action: "Review",
126
+ };
127
+ }
128
+ return { description: "Needs your attention", action: "Open" };
129
+ }
130
+ export function listAttentionTasks(tasks) {
131
+ return tasks
132
+ .filter((task) => getDashboardTaskBucket(task) === "attention")
133
+ .map((task) => ({ task, ...describeAttention(task) }));
134
+ }
135
+ export function listRunningTasks(tasks) {
136
+ return tasks.filter((task) => getDashboardTaskBucket(task) === "running");
137
+ }
138
+ /** Row label for the pipeline; null means the row shows no status text. */
139
+ export function getDashboardTaskStatusLabel(task, isBlocked) {
140
+ const status = normalizeTaskStatus(task.status, task.executionState);
141
+ switch (task.executionState) {
142
+ case "Working":
143
+ return "Working";
144
+ case "Starting":
145
+ return "Starting";
146
+ case "Waiting":
147
+ return "Waiting";
148
+ }
149
+ if (status === "Waiting")
150
+ return "Waiting";
151
+ if (status === "Review")
152
+ return "Awaiting approval";
153
+ switch (task.executionState) {
154
+ case "WaitingForApproval":
155
+ return "Awaiting approval";
156
+ case "WaitingForToolApproval":
157
+ return "Awaiting tool approval";
158
+ case "Questions":
159
+ return "Questions";
160
+ case "WaitingForInput":
161
+ return "Waiting for input";
162
+ case "WaitingForUser":
163
+ return "Waiting for user";
164
+ case "AgentError":
165
+ return "Agent error";
166
+ case "WaitingForBudget":
167
+ return "Budget limit reached";
168
+ case "WaitingForCapacity":
169
+ return "Waiting for capacity";
170
+ case "Unassigned":
171
+ return null;
172
+ }
173
+ if (isBlocked)
174
+ return null;
175
+ switch (task.executionState) {
176
+ case "WaitingForDependency":
177
+ return "Blocked";
178
+ case "AgentNotStarted":
179
+ return "Not started";
180
+ }
181
+ switch (status) {
182
+ case "Done":
183
+ return "Done";
184
+ case "InProgress":
185
+ return "In progress";
186
+ default:
187
+ return null;
188
+ }
189
+ }
190
+ function parseDate(value) {
191
+ if (!value)
192
+ return null;
193
+ const time = Date.parse(value);
194
+ return Number.isFinite(time) ? time : null;
195
+ }
196
+ /** Wall-clock duration of a finished execution, or null when unknown. */
197
+ export function getTaskDurationMs(task) {
198
+ const start = parseDate(task.executionStartedAt);
199
+ const end = parseDate(task.executionCompletedAt);
200
+ if (start === null || end === null || end < start)
201
+ return null;
202
+ return end - start;
203
+ }
204
+ /** Time since the execution started, or null when the task never started. */
205
+ export function getTaskElapsedMs(task, now) {
206
+ const start = parseDate(task.executionStartedAt);
207
+ if (start === null || now < start)
208
+ return null;
209
+ return now - start;
210
+ }
211
+ export function formatDurationShort(ms) {
212
+ const seconds = Math.round(ms / 1000);
213
+ if (seconds < 60)
214
+ return `${Math.max(seconds, 1)} s`;
215
+ const minutes = Math.round(seconds / 60);
216
+ if (minutes < 60)
217
+ return `${minutes} min`;
218
+ const hours = Math.floor(minutes / 60);
219
+ const rest = minutes % 60;
220
+ return rest > 0 ? `${hours} h ${rest} min` : `${hours} h`;
221
+ }
222
+ /** Earliest execution start across the run, or null when nothing started. */
223
+ export function getRunStartedAt(tasks) {
224
+ let earliest = null;
225
+ for (const task of tasks) {
226
+ const start = parseDate(task.executionStartedAt);
227
+ if (start === null)
228
+ continue;
229
+ if (earliest === null || start < earliest)
230
+ earliest = start;
231
+ }
232
+ return earliest;
233
+ }
234
+ export const MAX_GOAL_TILES = 4;
235
+ export function readGoalSummary(goal) {
236
+ const record = asRecord(goal.data);
237
+ const summary = record?.summary;
238
+ return typeof summary === "string" && summary.trim().length > 0
239
+ ? summary.trim()
240
+ : null;
241
+ }
242
+ const DEFAULT_GOAL_SECTIONS = [
243
+ { widget: "score", key: "score" },
244
+ { widget: "severityCounts", key: "severityCounts" },
245
+ { widget: "metrics", key: "metrics" },
246
+ ];
247
+ const SEVERITY_ORDER = [
248
+ "critical",
249
+ "high",
250
+ "medium",
251
+ "low",
252
+ "info",
253
+ ];
254
+ function formatNumber(value) {
255
+ return new Intl.NumberFormat("en-US").format(value);
256
+ }
257
+ /**
258
+ * Turns the generic goal widgets (coverage, score, severity counts, metrics)
259
+ * into at most four figures. The goal template's display spec decides the
260
+ * order, so no project type needs its own dashboard code.
261
+ */
262
+ export function buildGoalTiles(goal, spec) {
263
+ const tiles = [];
264
+ const coverage = goal.coverage;
265
+ if (coverage && coverage.hasMeasurableSubgoals && coverage.total > 0) {
266
+ const parts = [];
267
+ if (coverage.inProgress > 0)
268
+ parts.push(`${coverage.inProgress} in progress`);
269
+ if (coverage.pending > 0)
270
+ parts.push(`${coverage.pending} not started`);
271
+ if (coverage.failed > 0)
272
+ parts.push(`${coverage.failed} failed`);
273
+ if (coverage.skipped > 0)
274
+ parts.push(`${coverage.skipped} skipped`);
275
+ tiles.push({
276
+ key: "coverage",
277
+ label: "Subgoals done",
278
+ value: formatNumber(coverage.done),
279
+ suffix: `of ${formatNumber(coverage.total)}`,
280
+ detail: parts.length > 0 ? parts.join(" · ") : undefined,
281
+ progress: Math.round((coverage.done / coverage.total) * 100),
282
+ tone: "ok",
283
+ });
284
+ }
285
+ // Issues-enabled goals show their typed counts, zero included; other goals
286
+ // keep the legacy report widgets below.
287
+ if (goal.issuesEnabled && goal.issueSummary) {
288
+ const summary = goal.issueSummary;
289
+ tiles.push({ key: "issues", label: "Unresolved issues", value: formatNumber(summary.open + summary.awaitingConfirmation), detail: `${summary.awaitingConfirmation} awaiting confirmation · ${summary.needsHumanReview} need review`, tone: "neutral" });
290
+ }
291
+ const record = asRecord(goal.data);
292
+ if (!record)
293
+ return tiles;
294
+ const sections = spec?.sections ?? DEFAULT_GOAL_SECTIONS;
295
+ for (const section of sections) {
296
+ if (tiles.length >= MAX_GOAL_TILES)
297
+ break;
298
+ const value = record[section.key];
299
+ switch (section.widget) {
300
+ case "score": {
301
+ const score = asScore(value);
302
+ if (!score)
303
+ break;
304
+ tiles.push({
305
+ key: `score-${section.key}`,
306
+ label: section.label ?? score.label ?? "Score",
307
+ value: formatNumber(score.value),
308
+ suffix: `of ${formatNumber(score.max)}`,
309
+ progress: Math.round(Math.max(0, Math.min(1, score.value / score.max)) * 100),
310
+ tone: "neutral",
311
+ });
312
+ break;
313
+ }
314
+ case "severityCounts": {
315
+ const counts = asSeverityCounts(value);
316
+ if (!counts)
317
+ break;
318
+ const present = SEVERITY_ORDER.filter((severity) => counts[severity] !== undefined);
319
+ if (present.length === 0)
320
+ break;
321
+ const total = present.reduce((sum, severity) => sum + (counts[severity] ?? 0), 0);
322
+ const urgent = present.filter((severity) => (severity === "critical" || severity === "high") &&
323
+ (counts[severity] ?? 0) > 0);
324
+ const rest = present.filter((severity) => !urgent.includes(severity));
325
+ tiles.push({
326
+ key: `severity-${section.key}`,
327
+ label: section.label ?? "Findings",
328
+ value: formatNumber(total),
329
+ emphasis: urgent.length > 0
330
+ ? urgent
331
+ .map((severity) => `${counts[severity]} ${severity}`)
332
+ .join(" · ")
333
+ : undefined,
334
+ detail: rest.length > 0
335
+ ? rest
336
+ .map((severity) => `${counts[severity]} ${severity}`)
337
+ .join(" · ")
338
+ : undefined,
339
+ });
340
+ break;
341
+ }
342
+ case "metrics": {
343
+ const metrics = asMetrics(value);
344
+ if (!metrics)
345
+ break;
346
+ for (const metric of metrics) {
347
+ if (tiles.length >= MAX_GOAL_TILES)
348
+ break;
349
+ if (!metric.label.trim() || !metric.value.trim())
350
+ continue;
351
+ tiles.push({
352
+ key: `metric-${section.key}-${metric.label}`,
353
+ label: metric.label,
354
+ value: metric.value,
355
+ });
356
+ }
357
+ break;
358
+ }
359
+ }
360
+ }
361
+ return tiles.slice(0, MAX_GOAL_TILES);
362
+ }
363
+ //# sourceMappingURL=projectDashboardModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectDashboardModel.js","sourceRoot":"","sources":["../../../src/task-board/utils/projectDashboardModel.ts"],"names":[],"mappings":"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"}
@@ -42,9 +42,12 @@ type TaskGroupMember = {
42
42
  };
43
43
  type TaskGroupNodeData = {
44
44
  groupId: string;
45
- parentTaskId: string;
45
+ /** Parent task of the members, or null for a batch created without a parent (the group is then a root node). */
46
+ parentTaskId: string | null;
46
47
  batchId: string;
47
48
  label: string;
49
+ /** False when the members share no title and the label is just the member count. */
50
+ hasSharedTitle: boolean;
48
51
  memberCount: number;
49
52
  statusCounts: TaskGroupStatusCounts;
50
53
  members: TaskGroupMember[];
@@ -74,6 +77,7 @@ export declare function buildDependencyGraphLayout(args: {
74
77
  selectedTaskId?: string | null;
75
78
  orientation?: GraphOrientation;
76
79
  autoLayoutStrategy?: "allEdges" | "hierarchy";
80
+ taskTemplateTitles?: ReadonlyMap<string, string>;
77
81
  }): {
78
82
  nodes: DependencyGraphNode[];
79
83
  edges: TaskGraphEdge[];
@@ -122,6 +126,8 @@ export declare function DependencyGraphView(props: {
122
126
  onAddChildTaskFromNode?: (taskId: string) => void;
123
127
  /** Remove control on each node (e.g. project template task templates). */
124
128
  onRemoveTask?: (taskId: string) => void;
129
+ /** Task template titles by lower-cased template id; names collapsed batches after the template they instantiate. */
130
+ taskTemplateTitles?: ReadonlyMap<string, string>;
125
131
  /** Enable creating graph relationships by dragging from source handles to target handles. */
126
132
  allowDependencyConnect?: boolean;
127
133
  /** Called when the graph creates a new dependency link. */
@@ -69,10 +69,28 @@ const PRIORITY_HOVER_STYLES = {
69
69
  };
70
70
  const DEFAULT_HOVER_STYLE = "hover:border-neutral-grey-10/50";
71
71
  const HANDLE_CLASS = "bg-neutral-grey-10! border-border-default! w-2! h-2!";
72
- function getTaskGroupLabel(members) {
72
+ /**
73
+ * Title of the task template the batch was fanned out from, when known. Scripts key a batch by the
74
+ * id of the task template it instantiates, and templated tasks carry their template id directly.
75
+ */
76
+ function getTaskGroupTemplateTitle(tasksInGroup, taskTemplateTitles) {
77
+ if (!taskTemplateTitles?.size)
78
+ return null;
79
+ const batchId = tasksInGroup[0]?.batchId?.trim().toLowerCase();
80
+ const byBatch = batchId ? taskTemplateTitles.get(batchId)?.trim() : "";
81
+ if (byBatch)
82
+ return byBatch;
83
+ const templateIds = new Set(tasksInGroup.map((task) => task.sourceTaskTemplateId?.trim().toLowerCase()));
84
+ if (templateIds.size !== 1)
85
+ return null;
86
+ const [templateId] = templateIds;
87
+ return (templateId && taskTemplateTitles.get(templateId)?.trim()) || null;
88
+ }
89
+ /** Title shared by all members (or their common leading words), or null when they share none. */
90
+ function getTaskGroupSharedTitle(members) {
73
91
  const titles = members.map((member) => member.title.trim()).filter(Boolean);
74
92
  if (titles.length === 0)
75
- return `${members.length} tasks`;
93
+ return null;
76
94
  if (titles.every((title) => title === titles[0]))
77
95
  return titles[0];
78
96
  let prefix = titles[0];
@@ -87,8 +105,17 @@ function getTaskGroupLabel(members) {
87
105
  if (!prefix)
88
106
  break;
89
107
  }
90
- const trimmedPrefix = prefix.replace(/[\s\p{P}\p{S}]+$/gu, "").trim();
91
- return trimmedPrefix || `${members.length} tasks`;
108
+ // Cut the prefix back to a word boundary so "01-card (cards)" / "02-hero (cards)" do not yield
109
+ // "0"; a prefix that ends inside a word says nothing about the batch.
110
+ const separator = /[\s\p{P}\p{S}]/u;
111
+ const endsOnBoundary = titles.every((title) => title.length === prefix.length || separator.test(title[prefix.length]));
112
+ const wordBoundaryPrefix = endsOnBoundary
113
+ ? prefix
114
+ : prefix.slice(0, prefix.search(/[^\s\p{P}\p{S}]*$/u));
115
+ const trimmedPrefix = wordBoundaryPrefix
116
+ .replace(/[\s\p{P}\p{S}]+$/gu, "")
117
+ .trim();
118
+ return trimmedPrefix.length >= 3 ? trimmedPrefix : null;
92
119
  }
93
120
  function collectBlockedTaskIds(tasks, dependencies) {
94
121
  const taskMap = new Map(tasks.map((task) => [task.taskId, task]));
@@ -109,17 +136,19 @@ function collectBlockedTaskIds(tasks, dependencies) {
109
136
  }
110
137
  return blocked;
111
138
  }
112
- function collectTaskGroups(tasks, selectedTaskId, blockedTaskIds) {
139
+ function collectTaskGroups(tasks, selectedTaskId, blockedTaskIds, taskTemplateTitles) {
113
140
  const groupedTasks = new Map();
114
141
  const taskIdsWithChildren = new Set(tasks
115
142
  .map((task) => task.parentTaskId?.trim())
116
143
  .filter((taskId) => !!taskId));
117
144
  for (const task of tasks) {
118
- const parentTaskId = task.parentTaskId?.trim();
119
145
  const batchId = task.batchId?.trim();
120
- if (!parentTaskId || !batchId)
146
+ if (!batchId)
121
147
  continue;
122
- const groupId = `${TASK_GROUP_NODE_ID_PREFIX}${parentTaskId}:${batchId}`;
148
+ // A batch groups under its parent when it has one; a parentless batch (tasks fanned out by a
149
+ // script or agent without a container task) still collapses, keyed as a root group.
150
+ const parentTaskId = task.parentTaskId?.trim() || null;
151
+ const groupId = `${TASK_GROUP_NODE_ID_PREFIX}${parentTaskId ?? "root"}:${batchId}`;
123
152
  const members = groupedTasks.get(groupId) ?? [];
124
153
  members.push(task);
125
154
  groupedTasks.set(groupId, members);
@@ -181,6 +210,8 @@ function collectTaskGroups(tasks, selectedTaskId, blockedTaskIds) {
181
210
  }
182
211
  }
183
212
  const firstTask = tasksInGroup[0];
213
+ const sharedTitle = getTaskGroupTemplateTitle(tasksInGroup, taskTemplateTitles) ??
214
+ getTaskGroupSharedTitle(members);
184
215
  const status = members.every((member) => member.status === "Done")
185
216
  ? "Done"
186
217
  : members.some((member) => member.status === "InProgress" || member.status === "Review")
@@ -188,9 +219,10 @@ function collectTaskGroups(tasks, selectedTaskId, blockedTaskIds) {
188
219
  : "Todo";
189
220
  groups.set(groupId, {
190
221
  groupId,
191
- parentTaskId: firstTask.parentTaskId.trim(),
222
+ parentTaskId: firstTask.parentTaskId?.trim() || null,
192
223
  batchId: firstTask.batchId.trim(),
193
- label: getTaskGroupLabel(members),
224
+ label: sharedTitle ?? `${members.length} tasks`,
225
+ hasSharedTitle: sharedTitle !== null,
194
226
  memberCount: members.length,
195
227
  statusCounts,
196
228
  members,
@@ -287,10 +319,10 @@ function TaskGroupGraphNode({ data }) {
287
319
  className: STATUS_STYLES.Todo.text,
288
320
  },
289
321
  ].filter((item) => item.count > 0);
290
- return (_jsxs(Popover, { open: isOpen, onOpenChange: setIsOpen, children: [_jsxs("div", { className: "relative overflow-visible", style: { width: NODE_WIDTH }, "data-testid": `dependency-graph-group-node-${data.groupId}`, children: [_jsx("div", { className: "border-border-default bg-neutral-grey-5 absolute inset-0 translate-x-2 translate-y-2 rounded-lg border shadow-sm" }), _jsx("div", { className: "border-border-default absolute inset-0 translate-x-1 translate-y-1 rounded-lg border bg-white shadow-sm" }), _jsx(Handle, { type: "target", position: Position.Left, id: "left", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-target-left-${data.groupId}` }), _jsx(Handle, { type: "target", position: Position.Top, id: "top", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-target-top-${data.groupId}` }), _jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "border-border-default relative z-10 flex min-h-30 w-full cursor-pointer flex-col gap-2.5 rounded-lg border bg-white p-3 text-left shadow-sm transition-all hover:shadow-md", "aria-label": `Show ${data.memberCount} tasks in ${data.label}`, children: [_jsxs("div", { className: "flex w-full min-w-0 items-start justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-muted-foreground mb-1 text-[10px] font-medium tracking-widest uppercase", children: "Batch" }), _jsx("div", { className: "line-clamp-2 text-sm leading-snug font-medium", children: data.label })] }), _jsx(CountBadge, { children: data.memberCount })] }), _jsxs("div", { className: "flex w-full flex-wrap items-center gap-x-2.5 gap-y-1", children: [breakdown.map((item) => {
322
+ return (_jsxs(Popover, { open: isOpen, onOpenChange: setIsOpen, children: [_jsxs("div", { className: "relative overflow-visible", style: { width: NODE_WIDTH }, "data-testid": `dependency-graph-group-node-${data.groupId}`, children: [_jsx("div", { className: "border-border-default bg-neutral-grey-5 absolute inset-0 translate-x-2 translate-y-2 rounded-lg border shadow-sm" }), _jsx("div", { className: "border-border-default absolute inset-0 translate-x-1 translate-y-1 rounded-lg border bg-white shadow-sm" }), _jsx(Handle, { type: "target", position: Position.Left, id: "left", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-target-left-${data.groupId}` }), _jsx(Handle, { type: "target", position: Position.Top, id: "top", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-target-top-${data.groupId}` }), _jsx(PopoverTrigger, { asChild: true, children: _jsxs("button", { type: "button", className: "border-border-default relative z-10 flex min-h-30 w-full cursor-pointer flex-col gap-2.5 rounded-lg border bg-white p-3 text-left shadow-sm transition-all hover:shadow-md", "aria-label": `Show ${data.memberCount} tasks in ${data.label}`, children: [_jsxs("div", { className: "flex w-full min-w-0 items-start justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("div", { className: "text-muted-foreground mb-1 text-[10px] font-medium tracking-widest uppercase", children: "Batch" }), _jsx("div", { className: "line-clamp-2 text-sm leading-snug font-medium", children: data.label })] }), data.hasSharedTitle ? (_jsx(CountBadge, { children: data.memberCount })) : null] }), _jsxs("div", { className: "flex w-full flex-wrap items-center gap-x-2.5 gap-y-1", children: [breakdown.map((item) => {
291
323
  const Icon = item.icon;
292
324
  return (_jsxs("span", { className: cn("inline-flex items-center gap-1 text-[10px] font-medium tabular-nums", item.className), title: `${item.count} ${item.label.toLowerCase()}`, children: [_jsx(Icon, { className: "h-3 w-3" }), item.count] }, item.key));
293
- }), data.isBlocked ? (_jsx(Badge, { variant: "outline", size: "sm", className: "bg-feedback-orange-light text-feedback-orange ml-auto border-transparent", children: "Blocked" })) : null] }), _jsxs("div", { className: "text-neutral-grey-50 text-[10px]", children: [data.memberCount, " tasks"] })] }) }), _jsx(Handle, { type: "source", position: Position.Right, id: "right", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-source-right-${data.groupId}` }), _jsx(Handle, { type: "source", position: Position.Bottom, id: "bottom", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-source-bottom-${data.groupId}` })] }), _jsx(PopoverContent, { className: "nodrag nopan max-h-64 w-72 overflow-y-auto p-1.5", onClick: (event) => event.stopPropagation(), children: _jsx("div", { className: "flex flex-col gap-0.5", children: data.members.map((member) => {
325
+ }), data.isBlocked ? (_jsx(Badge, { variant: "outline", size: "sm", className: "bg-feedback-orange-light text-feedback-orange ml-auto border-transparent", children: "Blocked" })) : null] })] }) }), _jsx(Handle, { type: "source", position: Position.Right, id: "right", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-source-right-${data.groupId}` }), _jsx(Handle, { type: "source", position: Position.Bottom, id: "bottom", className: HANDLE_CLASS, "data-testid": `dependency-graph-group-source-bottom-${data.groupId}` })] }), _jsx(PopoverContent, { className: "nodrag nopan max-h-64 w-72 overflow-y-auto p-1.5", onClick: (event) => event.stopPropagation(), children: _jsx("div", { className: "flex flex-col gap-0.5", children: data.members.map((member) => {
294
326
  const executionDisplay = member.isBlocked
295
327
  ? null
296
328
  : getTaskExecutionDisplayFromTask({
@@ -663,11 +695,11 @@ function layoutGraph(nodes, edges, orientation, autoLayoutStrategy, nodeSizeOver
663
695
  });
664
696
  return { nodes: layoutedNodes, edges };
665
697
  }
666
- function buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, orientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, nodeSizeOverrides) {
698
+ function buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, orientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, nodeSizeOverrides, taskTemplateTitles) {
667
699
  const taskMap = new Map();
668
700
  for (const t of tasks)
669
701
  taskMap.set(t.taskId, t);
670
- const { groups, collapsedTargetByTaskId } = collectTaskGroups(tasks, selectedTaskId, blockedTaskIds);
702
+ const { groups, collapsedTargetByTaskId } = collectTaskGroups(tasks, selectedTaskId, blockedTaskIds, taskTemplateTitles);
671
703
  const mapTaskId = (taskId) => collapsedTargetByTaskId.get(taskId) ?? taskId;
672
704
  const visibleTasks = tasks.filter((task) => !collapsedTargetByTaskId.has(task.taskId));
673
705
  const childRelationshipKeys = new Set();
@@ -680,6 +712,8 @@ function buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, b
680
712
  }
681
713
  }
682
714
  for (const group of groups.values()) {
715
+ if (!group.parentTaskId)
716
+ continue;
683
717
  const source = mapTaskId(group.parentTaskId);
684
718
  if (source !== group.groupId) {
685
719
  childRelationshipKeys.add(`${source}->${group.groupId}`);
@@ -857,6 +891,8 @@ function buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, b
857
891
  },
858
892
  }));
859
893
  for (const group of groups.values()) {
894
+ if (!group.parentTaskId || !taskMap.has(group.parentTaskId))
895
+ continue;
860
896
  hierarchyEdges.push({
861
897
  id: `parent:${group.parentTaskId}:${group.groupId}`,
862
898
  source: mapTaskId(group.parentTaskId),
@@ -884,7 +920,7 @@ function buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, b
884
920
  }
885
921
  export function buildDependencyGraphLayout(args) {
886
922
  const blockedTaskIds = collectBlockedTaskIds(args.tasks, args.dependencies);
887
- return buildGraph(args.tasks, args.dependencies, args.selectedTaskId ?? null, null, blockedTaskIds, args.orientation ?? "horizontal", false, args.autoLayoutStrategy ?? "hierarchy", () => undefined);
923
+ return buildGraph(args.tasks, args.dependencies, args.selectedTaskId ?? null, null, blockedTaskIds, args.orientation ?? "horizontal", false, args.autoLayoutStrategy ?? "hierarchy", () => undefined, undefined, undefined, undefined, undefined, args.taskTemplateTitles);
888
924
  }
889
925
  function applySavedLayout(nodes, savedLayout) {
890
926
  if (!savedLayout?.nodes?.length) {
@@ -1133,7 +1169,7 @@ function createGraphSyncSignature(nodes, edges) {
1133
1169
  });
1134
1170
  }
1135
1171
  export function DependencyGraphView(props) {
1136
- const { projectId, layoutKey, tasks, dependencies, savedLayout, selectedTaskId, selectedDependencyId = null, onSelectTask, onSelectDependency, onClearDependencySelection, permission, canPersistLayout: canPersistLayoutOverride, onPersistLayout, onLayoutSaved, highlightBlockedTasks = true, showExecutionStateBadges = true, emptyStateTitle = "No tasks to visualize", emptyStateDescription = "Create tasks in this project to see them in the dependency graph.", orientation = "vertical", autoLayoutStrategy = "allEdges", showOrientationToggle = false, layoutSaveDebounceMs = SAVE_DEBOUNCE_MS, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, allowDependencyConnect = false, onCreateDependency, onCreateChildRelationship, miniMapWidth, miniMapHeight, showMiniMap, isMaximized = false, onToggleMaximized, } = props;
1172
+ const { projectId, layoutKey, tasks, dependencies, savedLayout, selectedTaskId, selectedDependencyId = null, onSelectTask, onSelectDependency, onClearDependencySelection, permission, canPersistLayout: canPersistLayoutOverride, onPersistLayout, onLayoutSaved, highlightBlockedTasks = true, showExecutionStateBadges = true, emptyStateTitle = "No tasks to visualize", emptyStateDescription = "Create tasks in this project to see them in the dependency graph.", orientation = "vertical", autoLayoutStrategy = "allEdges", showOrientationToggle = false, layoutSaveDebounceMs = SAVE_DEBOUNCE_MS, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, taskTemplateTitles, allowDependencyConnect = false, onCreateDependency, onCreateChildRelationship, miniMapWidth, miniMapHeight, showMiniMap, isMaximized = false, onToggleMaximized, } = props;
1137
1173
  const canPersistLayout = typeof canPersistLayoutOverride === "boolean"
1138
1174
  ? canPersistLayoutOverride
1139
1175
  : permission === "Owner" || permission === "Editor";
@@ -1151,7 +1187,7 @@ export function DependencyGraphView(props) {
1151
1187
  return collectBlockedTaskIds(tasks, dependencies);
1152
1188
  }, [dependencies, highlightBlockedTasks, tasks]);
1153
1189
  const onSelect = useCallback((taskId) => onSelectTask(taskId), [onSelectTask]);
1154
- const { nodes: initialNodes, edges: initialEdges } = useMemo(() => buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, effectiveOrientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask), [
1190
+ const { nodes: initialNodes, edges: initialEdges } = useMemo(() => buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, effectiveOrientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, undefined, taskTemplateTitles), [
1155
1191
  tasks,
1156
1192
  dependencies,
1157
1193
  selectedTaskId,
@@ -1164,6 +1200,7 @@ export function DependencyGraphView(props) {
1164
1200
  onAddDependentTaskFromNode,
1165
1201
  onAddChildTaskFromNode,
1166
1202
  onRemoveTask,
1203
+ taskTemplateTitles,
1167
1204
  ]);
1168
1205
  const collapsedMemberIds = useMemo(() => {
1169
1206
  const ids = new Set();
@@ -1524,7 +1561,7 @@ export function DependencyGraphView(props) {
1524
1561
  const handleAutoLayout = useCallback(() => {
1525
1562
  const latestNodes = getLatestGraphNodes();
1526
1563
  const measuredNodeSizes = getMeasuredNodeSizeOverrides(latestNodes);
1527
- const autoLayout = buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, effectiveOrientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, measuredNodeSizes);
1564
+ const autoLayout = buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, effectiveOrientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, measuredNodeSizes, taskTemplateTitles);
1528
1565
  const nextNodes = preserveNodeMeasurements(latestNodes, autoLayout.nodes);
1529
1566
  beginFittingView();
1530
1567
  flushSync(() => {
@@ -1552,6 +1589,7 @@ export function DependencyGraphView(props) {
1552
1589
  onAddChildTaskFromNode,
1553
1590
  queueLayoutSave,
1554
1591
  selectedTaskId,
1592
+ taskTemplateTitles,
1555
1593
  selectedDependencyId,
1556
1594
  setEdges,
1557
1595
  setNodes,
@@ -1602,7 +1640,7 @@ export function DependencyGraphView(props) {
1602
1640
  const handleOrientationChange = useCallback((nextOrientation) => {
1603
1641
  const latestNodes = getLatestGraphNodes();
1604
1642
  const measuredNodeSizes = getMeasuredNodeSizeOverrides(latestNodes);
1605
- const autoLayout = buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, nextOrientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, measuredNodeSizes);
1643
+ const autoLayout = buildGraph(tasks, dependencies, selectedTaskId, selectedDependencyId, blockedTaskIds, nextOrientation, showExecutionStateBadges, autoLayoutStrategy, onSelect, onAddDependentTaskFromNode, onAddChildTaskFromNode, onRemoveTask, measuredNodeSizes, taskTemplateTitles);
1606
1644
  const nextNodes = preserveNodeMeasurements(latestNodes, autoLayout.nodes);
1607
1645
  // Hide while we relayout-then-fit so the user can't see a paint where
1608
1646
  // the new node positions are still being viewed through the old
@@ -1644,6 +1682,7 @@ export function DependencyGraphView(props) {
1644
1682
  setEdges,
1645
1683
  setNodes,
1646
1684
  showExecutionStateBadges,
1685
+ taskTemplateTitles,
1647
1686
  tasks,
1648
1687
  ]);
1649
1688
  return (_jsxs("div", { className: "flex h-full min-h-0 flex-col", children: [_jsxs("div", { className: "flex shrink-0 items-center justify-between gap-3 px-3 pt-2", children: [hasVisibleNodes && highlightBlockedTasks ? (_jsxs("div", { className: "text-neutral-grey-50 flex items-center gap-2 text-[11px]", children: [_jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx("span", { className: "bg-component-shared inline-block h-0.5 w-4 rounded-sm" }), "Blocked by"] }), _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx("span", { className: "bg-neutral-grey-50 inline-block h-0.5 w-4 rounded-sm" }), "Related"] }), _jsxs("span", { className: "inline-flex items-center gap-1", children: [_jsx("span", { className: "bg-feedback-blue inline-block h-0.5 w-4 rounded-sm" }), "Child task"] })] })) : (_jsx("div", {})), hasVisibleNodes && (_jsxs("div", { className: "flex items-center gap-2", children: [showOrientationToggle && (_jsx(MultiSwitchButton, { value: effectiveOrientation, options: [