@stigmer/react 3.1.1 → 3.1.2

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 (426) hide show
  1. package/composer/SessionComposer.d.ts +24 -1
  2. package/composer/SessionComposer.d.ts.map +1 -1
  3. package/composer/SessionComposer.js +19 -8
  4. package/composer/SessionComposer.js.map +1 -1
  5. package/execution/ArtifactContentRenderer.d.ts +11 -1
  6. package/execution/ArtifactContentRenderer.d.ts.map +1 -1
  7. package/execution/ArtifactContentRenderer.js +39 -15
  8. package/execution/ArtifactContentRenderer.js.map +1 -1
  9. package/execution/FilePathContext.d.ts +8 -1
  10. package/execution/FilePathContext.d.ts.map +1 -1
  11. package/execution/FilePathContext.js.map +1 -1
  12. package/execution/FilePathLink.d.ts.map +1 -1
  13. package/execution/FilePathLink.js +21 -6
  14. package/execution/FilePathLink.js.map +1 -1
  15. package/execution/MessageEntry.d.ts +29 -0
  16. package/execution/MessageEntry.d.ts.map +1 -1
  17. package/execution/MessageEntry.js +29 -5
  18. package/execution/MessageEntry.js.map +1 -1
  19. package/execution/MessageThread.d.ts +76 -13
  20. package/execution/MessageThread.d.ts.map +1 -1
  21. package/execution/MessageThread.js +178 -24
  22. package/execution/MessageThread.js.map +1 -1
  23. package/execution/PlanArtifactCard.d.ts +27 -18
  24. package/execution/PlanArtifactCard.d.ts.map +1 -1
  25. package/execution/PlanArtifactCard.js +13 -23
  26. package/execution/PlanArtifactCard.js.map +1 -1
  27. package/execution/PlanDocumentMessage.d.ts +32 -0
  28. package/execution/PlanDocumentMessage.d.ts.map +1 -0
  29. package/execution/PlanDocumentMessage.js +37 -0
  30. package/execution/PlanDocumentMessage.js.map +1 -0
  31. package/execution/PlanStreamingCard.d.ts +45 -0
  32. package/execution/PlanStreamingCard.d.ts.map +1 -0
  33. package/execution/PlanStreamingCard.js +35 -0
  34. package/execution/PlanStreamingCard.js.map +1 -0
  35. package/execution/index.d.ts +5 -1
  36. package/execution/index.d.ts.map +1 -1
  37. package/execution/index.js +2 -0
  38. package/execution/index.js.map +1 -1
  39. package/execution/useCreateAgentExecution.d.ts +10 -0
  40. package/execution/useCreateAgentExecution.d.ts.map +1 -1
  41. package/execution/useCreateAgentExecution.js +5 -1
  42. package/execution/useCreateAgentExecution.js.map +1 -1
  43. package/github/decodeGitHubContent.d.ts +29 -0
  44. package/github/decodeGitHubContent.d.ts.map +1 -0
  45. package/github/decodeGitHubContent.js +72 -0
  46. package/github/decodeGitHubContent.js.map +1 -0
  47. package/github/index.d.ts +1 -0
  48. package/github/index.d.ts.map +1 -1
  49. package/github/index.js +1 -0
  50. package/github/index.js.map +1 -1
  51. package/github/useGitHubFileReader.d.ts +26 -0
  52. package/github/useGitHubFileReader.d.ts.map +1 -0
  53. package/github/useGitHubFileReader.js +106 -0
  54. package/github/useGitHubFileReader.js.map +1 -0
  55. package/github/useGitHubTreeLister.d.ts.map +1 -1
  56. package/github/useGitHubTreeLister.js +6 -2
  57. package/github/useGitHubTreeLister.js.map +1 -1
  58. package/index.d.ts +9 -9
  59. package/index.d.ts.map +1 -1
  60. package/index.js +5 -5
  61. package/index.js.map +1 -1
  62. package/internal/ResizableSplit.d.ts +72 -22
  63. package/internal/ResizableSplit.d.ts.map +1 -1
  64. package/internal/ResizableSplit.js +96 -38
  65. package/internal/ResizableSplit.js.map +1 -1
  66. package/internal/VirtualizedThread.d.ts +5 -3
  67. package/internal/VirtualizedThread.d.ts.map +1 -1
  68. package/internal/VirtualizedThread.js +6 -4
  69. package/internal/VirtualizedThread.js.map +1 -1
  70. package/internal/file-icons/index.d.ts +17 -0
  71. package/internal/file-icons/index.d.ts.map +1 -0
  72. package/internal/file-icons/index.js +60 -0
  73. package/internal/file-icons/index.js.map +1 -0
  74. package/internal/file-tree/FileTreeNode.d.ts +18 -1
  75. package/internal/file-tree/FileTreeNode.d.ts.map +1 -1
  76. package/internal/file-tree/FileTreeNode.js +11 -2
  77. package/internal/file-tree/FileTreeNode.js.map +1 -1
  78. package/internal/markdown-components.d.ts +38 -1
  79. package/internal/markdown-components.d.ts.map +1 -1
  80. package/internal/markdown-components.js +86 -11
  81. package/internal/markdown-components.js.map +1 -1
  82. package/{workflow → internal}/motion-preference.d.ts +7 -4
  83. package/internal/motion-preference.d.ts.map +1 -0
  84. package/{workflow → internal}/motion-preference.js +7 -4
  85. package/internal/motion-preference.js.map +1 -0
  86. package/internal/store/index.d.ts +33 -0
  87. package/internal/store/index.d.ts.map +1 -1
  88. package/internal/store/index.js +59 -0
  89. package/internal/store/index.js.map +1 -1
  90. package/internal/store/workspace-editors-store.d.ts +145 -0
  91. package/internal/store/workspace-editors-store.d.ts.map +1 -0
  92. package/internal/store/workspace-editors-store.js +208 -0
  93. package/internal/store/workspace-editors-store.js.map +1 -0
  94. package/internal/store/workspace-file-selection-store.d.ts +38 -0
  95. package/internal/store/workspace-file-selection-store.d.ts.map +1 -0
  96. package/internal/store/workspace-file-selection-store.js +62 -0
  97. package/internal/store/workspace-file-selection-store.js.map +1 -0
  98. package/internal/useRevealLine.d.ts +49 -0
  99. package/internal/useRevealLine.d.ts.map +1 -0
  100. package/internal/useRevealLine.js +43 -0
  101. package/internal/useRevealLine.js.map +1 -0
  102. package/library/detect-plan-artifact.d.ts +21 -0
  103. package/library/detect-plan-artifact.d.ts.map +1 -1
  104. package/library/detect-plan-artifact.js +20 -0
  105. package/library/detect-plan-artifact.js.map +1 -1
  106. package/library/detect-streaming-plan.d.ts +45 -0
  107. package/library/detect-streaming-plan.d.ts.map +1 -0
  108. package/library/detect-streaming-plan.js +83 -0
  109. package/library/detect-streaming-plan.js.map +1 -0
  110. package/library/index.d.ts +4 -1
  111. package/library/index.d.ts.map +1 -1
  112. package/library/index.js +2 -1
  113. package/library/index.js.map +1 -1
  114. package/package.json +4 -4
  115. package/session/NewSessionViewer.d.ts +19 -4
  116. package/session/NewSessionViewer.d.ts.map +1 -1
  117. package/session/NewSessionViewer.js +52 -25
  118. package/session/NewSessionViewer.js.map +1 -1
  119. package/session/PlanEditor.d.ts +55 -0
  120. package/session/PlanEditor.d.ts.map +1 -0
  121. package/session/PlanEditor.js +88 -0
  122. package/session/PlanEditor.js.map +1 -0
  123. package/session/PlanStreamingDocument.d.ts +30 -0
  124. package/session/PlanStreamingDocument.d.ts.map +1 -0
  125. package/session/PlanStreamingDocument.js +37 -0
  126. package/session/PlanStreamingDocument.js.map +1 -0
  127. package/session/SessionPanelChip.d.ts +26 -0
  128. package/session/SessionPanelChip.d.ts.map +1 -0
  129. package/session/SessionPanelChip.js +40 -0
  130. package/session/SessionPanelChip.js.map +1 -0
  131. package/session/SessionViewer.d.ts +34 -7
  132. package/session/SessionViewer.d.ts.map +1 -1
  133. package/session/SessionViewer.js +315 -33
  134. package/session/SessionViewer.js.map +1 -1
  135. package/session/{inspector → facets}/ArtifactsTab.d.ts +10 -2
  136. package/session/facets/ArtifactsTab.d.ts.map +1 -0
  137. package/session/{inspector → facets}/ArtifactsTab.js +8 -3
  138. package/session/facets/ArtifactsTab.js.map +1 -0
  139. package/session/{inspector → facets}/ChangesTab.d.ts +3 -3
  140. package/session/facets/ChangesTab.d.ts.map +1 -0
  141. package/session/{inspector → facets}/ChangesTab.js +3 -3
  142. package/session/facets/ChangesTab.js.map +1 -0
  143. package/session/facets/InspectTab.d.ts.map +1 -0
  144. package/session/facets/InspectTab.js.map +1 -0
  145. package/session/{inspector → facets}/SetupTab.d.ts +11 -2
  146. package/session/facets/SetupTab.d.ts.map +1 -0
  147. package/session/{inspector → facets}/SetupTab.js +4 -3
  148. package/session/facets/SetupTab.js.map +1 -0
  149. package/session/{inspector → facets}/UsageTab.d.ts +1 -1
  150. package/session/facets/UsageTab.d.ts.map +1 -0
  151. package/session/{inspector → facets}/UsageTab.js +1 -1
  152. package/session/facets/UsageTab.js.map +1 -0
  153. package/session/{inspector → facets}/index.d.ts +0 -6
  154. package/session/facets/index.d.ts.map +1 -0
  155. package/session/{inspector → facets}/index.js +0 -3
  156. package/session/facets/index.js.map +1 -0
  157. package/session/index.d.ts +11 -2
  158. package/session/index.d.ts.map +1 -1
  159. package/session/index.js +15 -2
  160. package/session/index.js.map +1 -1
  161. package/session/plan-document.d.ts +9 -0
  162. package/session/plan-document.d.ts.map +1 -0
  163. package/session/plan-document.js +17 -0
  164. package/session/plan-document.js.map +1 -0
  165. package/session/useOpenFileChange.d.ts +20 -0
  166. package/session/useOpenFileChange.d.ts.map +1 -0
  167. package/session/useOpenFileChange.js +31 -0
  168. package/session/useOpenFileChange.js.map +1 -0
  169. package/session/usePlanDraft.d.ts +52 -0
  170. package/session/usePlanDraft.d.ts.map +1 -0
  171. package/session/usePlanDraft.js +63 -0
  172. package/session/usePlanDraft.js.map +1 -0
  173. package/session/useSessionConversation.d.ts +6 -0
  174. package/session/useSessionConversation.d.ts.map +1 -1
  175. package/session/useSessionConversation.js +1 -0
  176. package/session/useSessionConversation.js.map +1 -1
  177. package/session/useSessionPageFlow.d.ts.map +1 -1
  178. package/session/useSessionPageFlow.js +1 -0
  179. package/session/useSessionPageFlow.js.map +1 -1
  180. package/session/useSessionPanel.d.ts +120 -0
  181. package/session/useSessionPanel.d.ts.map +1 -0
  182. package/session/useSessionPanel.js +130 -0
  183. package/session/useSessionPanel.js.map +1 -0
  184. package/session/useSessionRailViews.d.ts +45 -0
  185. package/session/useSessionRailViews.d.ts.map +1 -0
  186. package/session/useSessionRailViews.js +105 -0
  187. package/session/useSessionRailViews.js.map +1 -0
  188. package/src/composer/SessionComposer.tsx +52 -10
  189. package/src/composer/__tests__/SessionComposer-contract.test.tsx +58 -4
  190. package/src/execution/ArtifactContentRenderer.tsx +101 -24
  191. package/src/execution/FilePathContext.tsx +8 -1
  192. package/src/execution/FilePathLink.tsx +22 -6
  193. package/src/execution/MessageEntry.tsx +111 -1
  194. package/src/execution/MessageThread.tsx +291 -36
  195. package/src/execution/PlanArtifactCard.tsx +63 -31
  196. package/src/execution/PlanDocumentMessage.tsx +96 -0
  197. package/src/execution/PlanStreamingCard.tsx +137 -0
  198. package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +80 -1
  199. package/src/execution/__tests__/FilePathLink.test.tsx +87 -0
  200. package/src/execution/__tests__/MessageThread.test.tsx +101 -0
  201. package/src/execution/__tests__/PlanArtifactCard.test.tsx +66 -12
  202. package/src/execution/__tests__/PlanDocumentMessage.test.tsx +55 -0
  203. package/src/execution/__tests__/PlanStreamingCard.test.tsx +49 -0
  204. package/src/execution/__tests__/buildThreadItems-plan-completion.test.ts +504 -22
  205. package/src/execution/__tests__/message-entry.test.tsx +48 -0
  206. package/src/execution/__tests__/useCreateAgentExecution.test.tsx +85 -0
  207. package/src/execution/index.ts +7 -1
  208. package/src/execution/useCreateAgentExecution.ts +16 -1
  209. package/src/github/__tests__/decodeGitHubContent.test.ts +102 -0
  210. package/src/github/__tests__/useGitHubFileReader.test.ts +183 -0
  211. package/src/github/decodeGitHubContent.ts +83 -0
  212. package/src/github/index.ts +1 -0
  213. package/src/github/useGitHubFileReader.ts +152 -0
  214. package/src/github/useGitHubTreeLister.ts +6 -2
  215. package/src/index.ts +63 -9
  216. package/src/internal/ResizableSplit.tsx +184 -51
  217. package/src/internal/VirtualizedThread.tsx +12 -4
  218. package/src/internal/__tests__/ResizableSplit.test.tsx +125 -3
  219. package/src/internal/__tests__/markdown-components.test.tsx +68 -0
  220. package/src/internal/__tests__/useRevealLine.test.tsx +97 -0
  221. package/src/internal/file-icons/__tests__/file-icons.test.tsx +35 -0
  222. package/src/internal/file-icons/index.tsx +137 -0
  223. package/src/internal/file-tree/FileTreeNode.tsx +43 -3
  224. package/src/internal/file-tree/__tests__/FileTreeNode-explorer.test.tsx +86 -0
  225. package/src/internal/markdown-components.tsx +116 -11
  226. package/src/{workflow → internal}/motion-preference.ts +7 -4
  227. package/src/internal/store/__tests__/workspace-editors-store.test.ts +216 -0
  228. package/src/internal/store/__tests__/workspace-file-selection-store.test.ts +118 -0
  229. package/src/internal/store/index.ts +94 -0
  230. package/src/internal/store/workspace-editors-store.ts +315 -0
  231. package/src/internal/store/workspace-file-selection-store.ts +88 -0
  232. package/src/internal/useRevealLine.ts +81 -0
  233. package/src/library/__tests__/detect-plan-artifact.test.ts +48 -0
  234. package/src/library/__tests__/detect-streaming-plan.test.ts +234 -0
  235. package/src/library/detect-plan-artifact.ts +35 -0
  236. package/src/library/detect-streaming-plan.ts +108 -0
  237. package/src/library/index.ts +5 -0
  238. package/src/session/NewSessionViewer.tsx +123 -55
  239. package/src/session/PlanEditor.tsx +361 -0
  240. package/src/session/PlanStreamingDocument.tsx +97 -0
  241. package/src/session/SessionPanelChip.tsx +103 -0
  242. package/src/session/SessionViewer.tsx +617 -90
  243. package/src/session/__tests__/NewSessionViewer.test.tsx +148 -0
  244. package/src/session/__tests__/PlanEditor.test.tsx +217 -0
  245. package/src/session/__tests__/PlanStreamingDocument.test.tsx +50 -0
  246. package/src/session/__tests__/SessionPanelChip.test.tsx +42 -0
  247. package/src/session/__tests__/SessionViewer-fileReviewDock.test.tsx +9 -4
  248. package/src/session/__tests__/SessionViewer-transcriptFileOpen.test.tsx +205 -0
  249. package/src/session/__tests__/audienceWiring.test.tsx +55 -19
  250. package/src/session/__tests__/useOpenFileChange.test.tsx +82 -0
  251. package/src/session/__tests__/usePlanDraft.test.ts +102 -0
  252. package/src/session/__tests__/useSessionPanel.test.ts +298 -0
  253. package/src/session/__tests__/useSessionRailViews.test.tsx +124 -0
  254. package/src/session/{inspector → facets}/ArtifactsTab.tsx +27 -5
  255. package/src/session/{inspector → facets}/ChangesTab.tsx +3 -3
  256. package/src/session/{inspector → facets}/SetupTab.tsx +13 -1
  257. package/src/session/{inspector → facets}/UsageTab.tsx +1 -1
  258. package/src/session/{inspector → facets}/__tests__/ArtifactsTab.test.tsx +35 -1
  259. package/src/session/facets/__tests__/SetupTab.test.tsx +44 -0
  260. package/src/session/{inspector → facets}/index.ts +0 -16
  261. package/src/session/index.ts +30 -13
  262. package/src/session/plan-document.ts +19 -0
  263. package/src/session/useOpenFileChange.ts +53 -0
  264. package/src/session/usePlanDraft.ts +109 -0
  265. package/src/session/useSessionConversation.ts +7 -0
  266. package/src/session/useSessionPageFlow.ts +1 -0
  267. package/src/session/useSessionPanel.ts +288 -0
  268. package/src/session/useSessionRailViews.tsx +200 -0
  269. package/src/workflow/WorkflowExecutionGraph.tsx +1 -1
  270. package/src/workflow/index.ts +1 -1
  271. package/src/workflow/useFollowExecution.ts +1 -1
  272. package/src/workspace/EditorTabs.tsx +145 -0
  273. package/src/workspace/ExplorerTree.tsx +247 -0
  274. package/src/workspace/FileViewer.tsx +516 -0
  275. package/src/workspace/WorkspaceContentSearch.tsx +478 -0
  276. package/src/workspace/WorkspaceContentSearcher.ts +70 -0
  277. package/src/workspace/WorkspaceFileLister.ts +11 -0
  278. package/src/workspace/WorkspaceFileReader.ts +57 -0
  279. package/src/workspace/WorkspaceFileSearch.tsx +429 -0
  280. package/src/workspace/WorkspaceSurface.tsx +781 -0
  281. package/src/workspace/__tests__/EditorTabs.test.tsx +100 -0
  282. package/src/workspace/__tests__/ExplorerTree.test.tsx +152 -0
  283. package/src/workspace/__tests__/FileViewer.test.tsx +421 -0
  284. package/src/workspace/__tests__/WorkspaceContentSearch.test.tsx +196 -0
  285. package/src/workspace/__tests__/WorkspaceFileSearch.test.tsx +206 -0
  286. package/src/workspace/__tests__/WorkspaceSurface.test.tsx +348 -0
  287. package/src/workspace/__tests__/findChangeForSelection.test.ts +132 -0
  288. package/src/workspace/__tests__/matchContentPreview.test.ts +55 -0
  289. package/src/workspace/__tests__/matchWorkspaceFiles.test.ts +104 -0
  290. package/src/workspace/__tests__/resolveWorkspaceFileSelection.test.ts +135 -0
  291. package/src/workspace/__tests__/useWorkspaceContentSearch.test.tsx +196 -0
  292. package/src/workspace/__tests__/useWorkspaceFileContent.test.tsx +190 -0
  293. package/src/workspace/__tests__/useWorkspaceFileSearch.test.tsx +162 -0
  294. package/src/workspace/findChangeForSelection.ts +61 -0
  295. package/src/workspace/index.ts +56 -2
  296. package/src/workspace/matchContentPreview.ts +51 -0
  297. package/src/workspace/matchWorkspaceFiles.ts +86 -0
  298. package/src/workspace/resolveWorkspaceFileSelection.ts +119 -0
  299. package/src/workspace/useWorkspaceContentSearch.ts +228 -0
  300. package/src/workspace/useWorkspaceFileContent.ts +129 -0
  301. package/src/workspace/useWorkspaceFileSearch.ts +184 -0
  302. package/src/workspace/useWorkspaceFiles.ts +27 -27
  303. package/src/workspace/workspaceListingCache.ts +93 -0
  304. package/styles.css +1 -1
  305. package/workflow/WorkflowExecutionGraph.js +1 -1
  306. package/workflow/WorkflowExecutionGraph.js.map +1 -1
  307. package/workflow/index.d.ts +1 -1
  308. package/workflow/index.d.ts.map +1 -1
  309. package/workflow/index.js +1 -1
  310. package/workflow/index.js.map +1 -1
  311. package/workflow/useFollowExecution.js +1 -1
  312. package/workflow/useFollowExecution.js.map +1 -1
  313. package/workspace/EditorTabs.d.ts +29 -0
  314. package/workspace/EditorTabs.d.ts.map +1 -0
  315. package/workspace/EditorTabs.js +66 -0
  316. package/workspace/EditorTabs.js.map +1 -0
  317. package/workspace/ExplorerTree.d.ts +32 -0
  318. package/workspace/ExplorerTree.d.ts.map +1 -0
  319. package/workspace/ExplorerTree.js +45 -0
  320. package/workspace/ExplorerTree.js.map +1 -0
  321. package/workspace/FileViewer.d.ts +93 -0
  322. package/workspace/FileViewer.d.ts.map +1 -0
  323. package/workspace/FileViewer.js +182 -0
  324. package/workspace/FileViewer.js.map +1 -0
  325. package/workspace/WorkspaceContentSearch.d.ts +41 -0
  326. package/workspace/WorkspaceContentSearch.d.ts.map +1 -0
  327. package/workspace/WorkspaceContentSearch.js +195 -0
  328. package/workspace/WorkspaceContentSearch.js.map +1 -0
  329. package/workspace/WorkspaceContentSearcher.d.ts +59 -0
  330. package/workspace/WorkspaceContentSearcher.d.ts.map +1 -0
  331. package/workspace/WorkspaceContentSearcher.js +7 -0
  332. package/workspace/WorkspaceContentSearcher.js.map +1 -0
  333. package/workspace/WorkspaceFileLister.d.ts +11 -0
  334. package/workspace/WorkspaceFileLister.d.ts.map +1 -1
  335. package/workspace/WorkspaceFileReader.d.ts +48 -0
  336. package/workspace/WorkspaceFileReader.d.ts.map +1 -0
  337. package/workspace/WorkspaceFileReader.js +11 -0
  338. package/workspace/WorkspaceFileReader.js.map +1 -0
  339. package/workspace/WorkspaceFileSearch.d.ts +32 -0
  340. package/workspace/WorkspaceFileSearch.d.ts.map +1 -0
  341. package/workspace/WorkspaceFileSearch.js +155 -0
  342. package/workspace/WorkspaceFileSearch.js.map +1 -0
  343. package/workspace/WorkspaceSurface.d.ts +151 -0
  344. package/workspace/WorkspaceSurface.d.ts.map +1 -0
  345. package/workspace/WorkspaceSurface.js +184 -0
  346. package/workspace/WorkspaceSurface.js.map +1 -0
  347. package/workspace/findChangeForSelection.d.ts +19 -0
  348. package/workspace/findChangeForSelection.d.ts.map +1 -0
  349. package/workspace/findChangeForSelection.js +46 -0
  350. package/workspace/findChangeForSelection.js.map +1 -0
  351. package/workspace/index.d.ts +24 -2
  352. package/workspace/index.d.ts.map +1 -1
  353. package/workspace/index.js +13 -1
  354. package/workspace/index.js.map +1 -1
  355. package/workspace/matchContentPreview.d.ts +21 -0
  356. package/workspace/matchContentPreview.d.ts.map +1 -0
  357. package/workspace/matchContentPreview.js +36 -0
  358. package/workspace/matchContentPreview.js.map +1 -0
  359. package/workspace/matchWorkspaceFiles.d.ts +30 -0
  360. package/workspace/matchWorkspaceFiles.d.ts.map +1 -0
  361. package/workspace/matchWorkspaceFiles.js +58 -0
  362. package/workspace/matchWorkspaceFiles.js.map +1 -0
  363. package/workspace/resolveWorkspaceFileSelection.d.ts +19 -0
  364. package/workspace/resolveWorkspaceFileSelection.d.ts.map +1 -0
  365. package/workspace/resolveWorkspaceFileSelection.js +115 -0
  366. package/workspace/resolveWorkspaceFileSelection.js.map +1 -0
  367. package/workspace/useWorkspaceContentSearch.d.ts +69 -0
  368. package/workspace/useWorkspaceContentSearch.d.ts.map +1 -0
  369. package/workspace/useWorkspaceContentSearch.js +154 -0
  370. package/workspace/useWorkspaceContentSearch.js.map +1 -0
  371. package/workspace/useWorkspaceFileContent.d.ts +73 -0
  372. package/workspace/useWorkspaceFileContent.d.ts.map +1 -0
  373. package/workspace/useWorkspaceFileContent.js +57 -0
  374. package/workspace/useWorkspaceFileContent.js.map +1 -0
  375. package/workspace/useWorkspaceFileSearch.d.ts +61 -0
  376. package/workspace/useWorkspaceFileSearch.d.ts.map +1 -0
  377. package/workspace/useWorkspaceFileSearch.js +119 -0
  378. package/workspace/useWorkspaceFileSearch.js.map +1 -0
  379. package/workspace/useWorkspaceFiles.d.ts +13 -5
  380. package/workspace/useWorkspaceFiles.d.ts.map +1 -1
  381. package/workspace/useWorkspaceFiles.js +18 -19
  382. package/workspace/useWorkspaceFiles.js.map +1 -1
  383. package/workspace/workspaceListingCache.d.ts +47 -0
  384. package/workspace/workspaceListingCache.d.ts.map +1 -0
  385. package/workspace/workspaceListingCache.js +55 -0
  386. package/workspace/workspaceListingCache.js.map +1 -0
  387. package/session/inspector/ArtifactsTab.d.ts.map +0 -1
  388. package/session/inspector/ArtifactsTab.js.map +0 -1
  389. package/session/inspector/ChangesTab.d.ts.map +0 -1
  390. package/session/inspector/ChangesTab.js.map +0 -1
  391. package/session/inspector/InspectTab.d.ts.map +0 -1
  392. package/session/inspector/InspectTab.js.map +0 -1
  393. package/session/inspector/SessionInspector.d.ts +0 -64
  394. package/session/inspector/SessionInspector.d.ts.map +0 -1
  395. package/session/inspector/SessionInspector.js +0 -53
  396. package/session/inspector/SessionInspector.js.map +0 -1
  397. package/session/inspector/SetupTab.d.ts.map +0 -1
  398. package/session/inspector/SetupTab.js.map +0 -1
  399. package/session/inspector/UsageTab.d.ts.map +0 -1
  400. package/session/inspector/UsageTab.js.map +0 -1
  401. package/session/inspector/WorkspaceTab.d.ts +0 -35
  402. package/session/inspector/WorkspaceTab.d.ts.map +0 -1
  403. package/session/inspector/WorkspaceTab.js +0 -75
  404. package/session/inspector/WorkspaceTab.js.map +0 -1
  405. package/session/inspector/index.d.ts.map +0 -1
  406. package/session/inspector/index.js.map +0 -1
  407. package/session/inspector/useSessionInspector.d.ts +0 -49
  408. package/session/inspector/useSessionInspector.d.ts.map +0 -1
  409. package/session/inspector/useSessionInspector.js +0 -122
  410. package/session/inspector/useSessionInspector.js.map +0 -1
  411. package/src/session/inspector/SessionInspector.tsx +0 -162
  412. package/src/session/inspector/WorkspaceTab.tsx +0 -245
  413. package/src/session/inspector/__tests__/useSessionInspector.test.ts +0 -251
  414. package/src/session/inspector/useSessionInspector.ts +0 -178
  415. package/src/workspace/WorkspaceEntryFiles.tsx +0 -196
  416. package/workflow/motion-preference.d.ts.map +0 -1
  417. package/workflow/motion-preference.js.map +0 -1
  418. package/workspace/WorkspaceEntryFiles.d.ts +0 -22
  419. package/workspace/WorkspaceEntryFiles.d.ts.map +0 -1
  420. package/workspace/WorkspaceEntryFiles.js +0 -58
  421. package/workspace/WorkspaceEntryFiles.js.map +0 -1
  422. /package/session/{inspector → facets}/InspectTab.d.ts +0 -0
  423. /package/session/{inspector → facets}/InspectTab.js +0 -0
  424. /package/src/{workflow → internal}/__tests__/motion-preference.test.ts +0 -0
  425. /package/src/session/{inspector → facets}/InspectTab.tsx +0 -0
  426. /package/src/session/{inspector → facets}/__tests__/ChangesTab.test.tsx +0 -0
@@ -2,9 +2,11 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { memo, useMemo, useState } from "react";
4
4
  import { Streamdown } from "streamdown";
5
- import { MessageType } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
5
+ import { MessageType, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
6
6
  import { cn } from "@stigmer/theme";
7
7
  import { MARKDOWN_COMPONENTS, unwrapEnclosingMarkdownFence, } from "../internal/markdown-components.js";
8
+ import { InteractionModeBadge } from "./InteractionModeBadge.js";
9
+ import { PlanDocumentMessage } from "./PlanDocumentMessage.js";
8
10
  import { useRenderTracer } from "../internal/dev/index.js";
9
11
  /**
10
12
  * Renders a single message in the conversation thread.
@@ -30,7 +32,7 @@ import { useRenderTracer } from "../internal/dev/index.js";
30
32
  * <MessageEntry message={agentMessage} />
31
33
  * ```
32
34
  */
33
- export const MessageEntry = memo(function MessageEntry({ message, className, onEdit, }) {
35
+ export const MessageEntry = memo(function MessageEntry({ message, className, onEdit, isPlanDocument, interactionMode, isBuildFromPlan, }) {
34
36
  useRenderTracer("MessageEntry", {
35
37
  messageType: message.type,
36
38
  contentLength: message.content.length,
@@ -38,8 +40,16 @@ export const MessageEntry = memo(function MessageEntry({ message, className, onE
38
40
  });
39
41
  switch (message.type) {
40
42
  case MessageType.MESSAGE_HUMAN:
41
- return (_jsx(HumanMessage, { content: message.content, className: className, onEdit: onEdit }));
43
+ if (isBuildFromPlan) {
44
+ return (_jsx(BuildFromPlanChip, { content: message.content, className: className }));
45
+ }
46
+ return (_jsx(HumanMessage, { content: message.content, className: className, onEdit: onEdit, interactionMode: interactionMode }));
42
47
  case MessageType.MESSAGE_AI:
48
+ // A completed Plan turn's plan is a document, not a bubble. The flag is
49
+ // only ever set on a settled message, so the streaming path is untouched.
50
+ if (isPlanDocument) {
51
+ return (_jsx(PlanDocumentMessage, { content: message.content, className: className }));
52
+ }
43
53
  return (_jsx(AiMessage, { content: message.content, isStreaming: message.isStreaming, className: className }));
44
54
  case MessageType.MESSAGE_THINKING:
45
55
  return (_jsx(ThinkingMessage, { content: message.content, isStreaming: message.isStreaming, className: className }));
@@ -49,8 +59,22 @@ export const MessageEntry = memo(function MessageEntry({ message, className, onE
49
59
  return null;
50
60
  }
51
61
  });
52
- function HumanMessage({ content, className, onEdit, }) {
53
- return (_jsxs("div", { role: "article", "aria-label": "User message", className: cn("group relative ms-[20%] rounded-lg bg-muted-subtle px-4 py-3", className), children: [_jsx("p", { className: "text-sm text-foreground whitespace-pre-wrap", children: content }), onEdit && (_jsx("button", { type: "button", onClick: onEdit, "aria-label": "Edit message", title: "Edit", className: cn("absolute -top-2.5 -right-2.5 inline-flex h-7 w-7 items-center justify-center rounded-full", "border border-border bg-card text-muted-foreground shadow-sm transition", "hover:text-foreground hover:bg-accent-hover", "opacity-0 group-hover:opacity-100 focus-visible:opacity-100", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"), children: _jsx(EditIcon, {}) }))] }));
62
+ function HumanMessage({ content, className, onEdit, interactionMode, }) {
63
+ return (_jsxs("div", { role: "article", "aria-label": "User message", className: cn("group relative ms-[20%] rounded-lg bg-muted-subtle px-4 py-3", className), children: [interactionMode !== undefined && (_jsx(InteractionModeBadge, { mode: interactionMode, className: "mb-1.5" })), _jsx("p", { className: "text-sm text-foreground whitespace-pre-wrap", children: content }), onEdit && (_jsx("button", { type: "button", onClick: onEdit, "aria-label": "Edit message", title: "Edit", className: cn("absolute -top-2.5 -right-2.5 inline-flex h-7 w-7 items-center justify-center rounded-full", "border border-border bg-card text-muted-foreground shadow-sm transition", "hover:text-foreground hover:bg-accent-hover", "opacity-0 group-hover:opacity-100 focus-visible:opacity-100", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"), children: _jsx(EditIcon, {}) }))] }));
64
+ }
65
+ /**
66
+ * The Build-from-plan turn's user entry: a compact pill in the user-turn
67
+ * position (right-aligned, like the prompt bubble it replaces) carrying the
68
+ * plan glyph and the turn's short label. Deliberately not editable — the
69
+ * label is not user prose to rephrase; refining the plan happens in the plan
70
+ * document, and the build is re-triggered from its card.
71
+ */
72
+ function BuildFromPlanChip({ content, className, }) {
73
+ return (_jsx("div", { role: "article", "aria-label": "Build from plan", className: cn("flex justify-end", className), children: _jsxs("span", { className: cn("inline-flex items-center gap-1.5 rounded-full border border-border", "bg-muted-subtle px-3 py-1.5 text-xs font-medium text-foreground"), children: [_jsx(BuildFromPlanIcon, {}), content] }) }));
74
+ }
75
+ /** The plan-card glyph (document lines + implement arrow) at chip scale. */
76
+ function BuildFromPlanIcon() {
77
+ return (_jsxs("svg", { width: "13", height: "13", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", className: "shrink-0 text-muted-foreground", "aria-hidden": "true", children: [_jsx("path", { d: "M3 4h10M3 8h7M3 12h8" }), _jsx("path", { d: "M12.5 10.5l1.5 1.5-1.5 1.5" })] }));
54
78
  }
55
79
  function EditIcon() {
56
80
  return (_jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M12 20h9" }), _jsx("path", { d: "M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z" })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"MessageEntry.js","sourceRoot":"","sources":["../../src/execution/MessageEntry.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageEntry.js","sourceRoot":"","sources":["../../src/execution/MessageEntry.tsx"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import type { PendingApproval } from "@stigmer/protos/ai/stigmer/agentic/agentex
5
5
  import type { FileChangeSet } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
6
6
  import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
7
7
  import type { TodoItem } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/todo_pb";
8
- import { ApprovalAction, ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
8
+ import { ApprovalAction, ExecutionPhase, InteractionMode } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
9
9
  import type { WorkspaceEntry } from "@stigmer/protos/ai/stigmer/agentic/session/v1/workspace_pb";
10
10
  import type { SummarizationEventView } from "./useContextWindow.js";
11
11
  import type { ResolvedPathAction } from "./file-path-resolver.js";
@@ -117,7 +117,7 @@ export interface MessageThreadProps {
117
117
  * builders use this to integrate their own file viewer or
118
118
  * navigation instead of the default open-URL / copy-to-clipboard.
119
119
  */
120
- readonly onFilePathClick?: (path: string, resolved: ResolvedPathAction) => void;
120
+ readonly onFilePathClick?: (path: string, resolved: ResolvedPathAction) => boolean | void;
121
121
  /**
122
122
  * Absolute sandbox workspace root (e.g. `/home/daytona/workspace`).
123
123
  * When provided, shell commands and tool output normalize absolute
@@ -157,6 +157,21 @@ export interface MessageThreadProps {
157
157
  * compatible — existing consumers see no change.
158
158
  */
159
159
  readonly onBuildFromPlan?: () => void;
160
+ /**
161
+ * Opens a plan in the session panel's plan document tab — the side-by-side
162
+ * review/refine surface. Wired to EVERY plan card: the latest opens
163
+ * editable/buildable, a superseded plan opens read-only (the host decides
164
+ * from the execution id). When omitted, cards fall back to the "Open full"
165
+ * preview modal (hosts without a panel).
166
+ *
167
+ * Providing this also opts the thread into LIVE plan collapse: while a
168
+ * Plan-mode turn streams its plan (detected via `findStreamingPlan`), the
169
+ * plan message is suppressed behind a compact {@link PlanStreamingCard}
170
+ * whose "Open plan" routes here — the host is expected to render the
171
+ * streaming document in its plan surface. Hosts without one (this prop
172
+ * omitted) keep the plan streaming inline, where it stays readable.
173
+ */
174
+ readonly onOpenPlan?: (executionId: string) => void;
160
175
  /**
161
176
  * Organization slug. Required for the plan completion card's
162
177
  * "Review plan" action, which opens the shared artifact preview
@@ -170,19 +185,32 @@ export interface MessageThreadProps {
170
185
  * disabled submit.
171
186
  */
172
187
  readonly planActionsDisabled?: boolean;
188
+ /** True while the approved plan is being uploaded ahead of the build turn. */
189
+ readonly planBuildPending?: boolean;
173
190
  /**
174
- * Center thread content within a max-width reading column.
191
+ * Constrain thread content to a max-width reading column
192
+ * (`max-w-3xl`, 768 px) inside the full-width scroll container —
193
+ * the scrollbar stays at the viewport edge.
175
194
  *
176
- * When `true`, items are constrained to `max-w-3xl` (768 px) and
177
- * horizontally centered. The scroll container stays full-width so
178
- * the scrollbar remains at the viewport edge.
195
+ * - `"center"` column horizontally centered (classic chat reading view).
196
+ * - `"start"` column anchored to the left edge, so the thread's left
197
+ * edge stays put when a sibling panel opens/closes beside it.
179
198
  *
180
- * Opt-in per DD-011 — existing consumers see no layout change.
181
- *
182
- * @default false
199
+ * When omitted, content spans the full width. Opt-in per DD-011 —
200
+ * existing consumers see no layout change.
183
201
  */
184
- readonly centerContent?: boolean;
202
+ readonly contentColumn?: ThreadContentColumn;
185
203
  }
204
+ /** Reading-column alignment for {@link MessageThread} content. */
205
+ export type ThreadContentColumn = "center" | "start";
206
+ /**
207
+ * Class set for the optional reading column — one definition shared by both
208
+ * render paths (non-virtualized and virtualized) so their geometry can never
209
+ * drift.
210
+ *
211
+ * @internal
212
+ */
213
+ export declare function threadContentColumnClass(column: ThreadContentColumn | undefined): string | false;
186
214
  /**
187
215
  * Flattened representation of one renderable item in the thread.
188
216
  *
@@ -199,6 +227,9 @@ export type ThreadItem = {
199
227
  readonly isPending?: boolean;
200
228
  readonly isFailed?: boolean;
201
229
  readonly isEditable?: boolean;
230
+ readonly isPlanDocument?: boolean;
231
+ readonly interactionMode?: InteractionMode;
232
+ readonly isBuildFromPlan?: boolean;
202
233
  } | {
203
234
  readonly kind: "tool-group";
204
235
  readonly toolCalls: readonly ToolCall[];
@@ -247,6 +278,35 @@ export type ThreadItem = {
247
278
  readonly key: string;
248
279
  readonly executionId: string;
249
280
  readonly planArtifact?: ExecutionArtifact;
281
+ /**
282
+ * The plan's title (its leading `# H1`), lifted from the plan message at
283
+ * build time — no fetch. Present only when the turn published an
284
+ * artifact (the collapsed-card path); the card falls back to "Plan".
285
+ */
286
+ readonly planTitle?: string;
287
+ /**
288
+ * True for the most recent completed Plan execution in the thread — the
289
+ * only plan whose card carries the primary "Build from plan" action.
290
+ * Superseded plans keep their review actions (open/download) but never a
291
+ * build CTA, so a stale plan can't be implemented by accident.
292
+ */
293
+ readonly isLatestPlan: boolean;
294
+ } | {
295
+ /**
296
+ * A plan the active Plan-mode execution is writing RIGHT NOW: the
297
+ * streaming plan message is suppressed and this compact card stands in
298
+ * while the document renders live in the panel's plan tab. On
299
+ * completion the item becomes `plan-completion` — a different kind
300
+ * under the SAME key, so the card holds one thread position and the
301
+ * swap reads as the card settling.
302
+ */
303
+ readonly kind: "plan-writing";
304
+ readonly key: string;
305
+ readonly executionId: string;
306
+ /** Live title (the plan's leading `# H1`), growing as it streams. */
307
+ readonly planTitle?: string;
308
+ /** Length of the plan text streamed so far (drives the live size). */
309
+ readonly planSize: number;
250
310
  };
251
311
  /**
252
312
  * Builds a flat list of renderable thread items from execution data.
@@ -256,7 +316,7 @@ export type ThreadItem = {
256
316
  *
257
317
  * @internal Exported for testing — not part of the public API.
258
318
  */
259
- export declare function buildThreadItems(executions: readonly AgentExecution[], activeStreamExecution: AgentExecution | null | undefined, pendingUserMessage: string | null | undefined, includeApprovals: boolean, workspaceEntries: readonly WorkspaceEntry[] | undefined, summarizationEvents?: readonly SummarizationEventView[], pendingMessageFailed?: boolean, editableActiveTurn?: boolean, includeFileReviewRecords?: boolean): ThreadItem[];
319
+ export declare function buildThreadItems(executions: readonly AgentExecution[], activeStreamExecution: AgentExecution | null | undefined, pendingUserMessage: string | null | undefined, includeApprovals: boolean, workspaceEntries: readonly WorkspaceEntry[] | undefined, summarizationEvents?: readonly SummarizationEventView[], pendingMessageFailed?: boolean, editableActiveTurn?: boolean, includeFileReviewRecords?: boolean, collapseStreamingPlan?: boolean): ThreadItem[];
260
320
  /**
261
321
  * Renders a continuous conversation thread from one or more
262
322
  * {@link AgentExecution} snapshots.
@@ -280,7 +340,7 @@ export declare function buildThreadItems(executions: readonly AgentExecution[],
280
340
  * />
281
341
  * ```
282
342
  */
283
- export declare function MessageThread({ executions, activeStreamExecution, pendingUserMessage, pendingMessageFailed, onRetrySend, onRetryExecution, onEditMessage, className, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, showFileReviewRecords, workspaceEntries, onFilePathClick, sandboxWorkspaceRoot, summarizationEvents, virtualized, onBuildFromPlan, org, planActionsDisabled, centerContent, }: MessageThreadProps): import("react/jsx-runtime").JSX.Element;
343
+ export declare function MessageThread({ executions, activeStreamExecution, pendingUserMessage, pendingMessageFailed, onRetrySend, onRetryExecution, onEditMessage, className, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, showFileReviewRecords, workspaceEntries, onFilePathClick, sandboxWorkspaceRoot, summarizationEvents, virtualized, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, contentColumn, }: MessageThreadProps): import("react/jsx-runtime").JSX.Element;
284
344
  /**
285
345
  * Props for {@link ThreadItemRenderer}.
286
346
  *
@@ -294,8 +354,11 @@ export interface ThreadItemRendererProps {
294
354
  readonly submittingApprovalIds?: ReadonlySet<string>;
295
355
  readonly approvalErrors?: ReadonlyMap<string, Error>;
296
356
  readonly onBuildFromPlan?: () => void;
357
+ readonly onOpenPlan?: (executionId: string) => void;
297
358
  readonly org?: string;
298
359
  readonly planActionsDisabled?: boolean;
360
+ /** True while the approved plan is being uploaded ahead of the build turn. */
361
+ readonly planBuildPending?: boolean;
299
362
  readonly onRetrySend?: () => void;
300
363
  readonly onRetryExecution?: (message: string) => void;
301
364
  readonly onEditMessage?: (text: string) => void;
@@ -311,5 +374,5 @@ export interface ThreadItemRendererProps {
311
374
  * @internal Exported for internal use by `VirtualizedThread` — not
312
375
  * part of the public API.
313
376
  */
314
- export declare function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage, }: ThreadItemRendererProps): import("react/jsx-runtime").JSX.Element;
377
+ export declare function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, onRetrySend, onRetryExecution, onEditMessage, }: ThreadItemRendererProps): import("react/jsx-runtime").JSX.Element;
315
378
  //# sourceMappingURL=MessageThread.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageThread.d.ts","sourceRoot":"","sources":["../../src/execution/MessageThread.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageThread.d.ts","sourceRoot":"","sources":["../../src/execution/MessageThread.tsx"],"names":[],"mappings":"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"}
@@ -17,13 +17,16 @@ import { FileReviewCard } from "./FileReviewCard.js";
17
17
  import { SummarizationCard } from "./SummarizationCard.js";
18
18
  import { PlanCompletionCard } from "./PlanCompletionCard.js";
19
19
  import { PlanArtifactCard } from "./PlanArtifactCard.js";
20
+ import { PlanStreamingCard } from "./PlanStreamingCard.js";
20
21
  import { TodoCard } from "./TodoCard.js";
21
22
  import { findPlanArtifact } from "../library/detect-plan-artifact.js";
23
+ import { findStreamingPlan } from "../library/detect-streaming-plan.js";
22
24
  import { isInternalTool, isCollapsedToolCall } from "./tool-categories.js";
23
25
  import { FilePathContext } from "./FilePathContext.js";
24
26
  import { SandboxContext } from "./SandboxContext.js";
25
27
  import { ApprovalContext } from "./ApprovalContext.js";
26
28
  import { FileReviewContext } from "./FileReviewContext.js";
29
+ import { extractLeadingH1, unwrapEnclosingMarkdownFence, } from "../internal/markdown-components.js";
27
30
  import { useRenderTracer, useKeyStability, useDomNodeCount, DevProfiler } from "../internal/dev/index.js";
28
31
  import { useAutoScroll } from "../internal/useAutoScroll.js";
29
32
  import { JumpToLatestButton } from "../internal/JumpToLatestButton.js";
@@ -36,6 +39,16 @@ const LazyVirtualizedThread = lazy(() => import("../internal/VirtualizedThread.j
36
39
  const EMPTY_APPROVALS = [];
37
40
  const EMPTY_SUBMITTING_IDS = new Set();
38
41
  const EMPTY_APPROVAL_ERRORS = new Map();
42
+ /**
43
+ * Class set for the optional reading column — one definition shared by both
44
+ * render paths (non-virtualized and virtualized) so their geometry can never
45
+ * drift.
46
+ *
47
+ * @internal
48
+ */
49
+ export function threadContentColumnClass(column) {
50
+ return column != null && cn("w-full max-w-3xl px-4", column === "center" && "mx-auto");
51
+ }
39
52
  /**
40
53
  * True once the agent has produced any real, renderable response for this turn —
41
54
  * assistant text, a tool call (running or terminal), or streamed model thinking.
@@ -63,6 +76,40 @@ function hasStartedResponding(execution) {
63
76
  return false;
64
77
  });
65
78
  }
79
+ /**
80
+ * True for an execution that ran in Plan mode and completed — the only kind of
81
+ * execution that has a reviewable plan (streaming/failed/terminated Plan turns
82
+ * have nothing final to review or build from).
83
+ */
84
+ function isCompletedPlanExecution(execution) {
85
+ return (execution.status?.phase === ExecutionPhase.EXECUTION_COMPLETED &&
86
+ execution.spec?.executionConfig?.interactionMode === InteractionMode.PLAN);
87
+ }
88
+ /**
89
+ * Index of the message that IS the plan in a completed Plan execution: the
90
+ * last AI message with content — the SAME selection rule the runner's
91
+ * `extractFinalPlanText` uses to publish `plan.md`, so the message promoted to
92
+ * a document in the thread is byte-identical to the published artifact.
93
+ * Returns -1 when no such message exists.
94
+ */
95
+ function findPlanMessageIndex(messages) {
96
+ for (let i = messages.length - 1; i >= 0; i--) {
97
+ const msg = messages[i];
98
+ if (msg.type === MessageType.MESSAGE_AI && msg.content.trim().length > 0) {
99
+ return i;
100
+ }
101
+ }
102
+ return -1;
103
+ }
104
+ /**
105
+ * The plan's title for its compact card: the leading `# H1` of the plan
106
+ * message, after the same plan-scoped bare-fence unwrap the document renderers
107
+ * apply — so the card and the plan tab always agree on the title. `undefined`
108
+ * when the plan has no H1 (the card falls back to "Plan").
109
+ */
110
+ function extractPlanTitle(content) {
111
+ return extractLeadingH1(unwrapEnclosingMarkdownFence(content, true)).title ?? undefined;
112
+ }
66
113
  /**
67
114
  * Adds the tool-call ids that a sub-agent renders as nested rows (the same
68
115
  * non-internal AI tool calls {@link SubAgentSection} surfaces) to `target`,
@@ -146,7 +193,7 @@ function insertFileReviewItems(items, changeSets, anchorIndexBySetId, execTermin
146
193
  *
147
194
  * @internal Exported for testing — not part of the public API.
148
195
  */
149
- export function buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents, pendingMessageFailed = false, editableActiveTurn = false, includeFileReviewRecords = false) {
196
+ export function buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents, pendingMessageFailed = false, editableActiveTurn = false, includeFileReviewRecords = false, collapseStreamingPlan = false) {
150
197
  const items = [];
151
198
  // Tool-call ids that render as an inline-approval-capable ToolCallItem (a
152
199
  // regular parent tool, or a sub-agent's nested tool). Their approvals show
@@ -173,6 +220,16 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
173
220
  const activeStreamIndex = activeStreamExecution
174
221
  ? allExecutions.length - 1
175
222
  : -1;
223
+ // The most recent completed Plan execution owns the primary "Build from
224
+ // plan" action; every earlier plan renders as a review-only record. Resolved
225
+ // up front so each segment can stamp its own card with the right authority.
226
+ let latestPlanExecutionId = null;
227
+ for (let i = allExecutions.length - 1; i >= 0; i--) {
228
+ if (isCompletedPlanExecution(allExecutions[i])) {
229
+ latestPlanExecutionId = allExecutions[i].metadata?.id ?? `_e${i}`;
230
+ break;
231
+ }
232
+ }
176
233
  // Build a queue of summarization events to interleave by timestamp.
177
234
  // Events are consumed as messages pass their timestamp.
178
235
  const pendingEvents = summarizationEvents?.length
@@ -200,6 +257,40 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
200
257
  const isActiveStreamExec = ei === activeStreamIndex;
201
258
  const messages = exec.status?.messages ?? [];
202
259
  const subAgents = exec.status?.subAgentExecutions ?? [];
260
+ // A completed Plan turn collapses its plan message into the compact plan
261
+ // card (the plan-completion item): the document lives in the panel's plan
262
+ // tab, not the thread. While the plan is still streaming, the same
263
+ // treatment applies live when the host has a plan surface (streamingPlan
264
+ // below): the in-flight plan message is suppressed behind a plan-writing
265
+ // card while the panel's plan tab renders it as it streams — the content
266
+ // moves, it doesn't disappear. Completion swaps the live card for the
267
+ // settled one (same key), and the paired auto-open (useSessionPanel's
268
+ // planKey trigger) keeps the document side-by-side. Collapse of a
269
+ // COMPLETED plan is gated on the ARTIFACT existing: a plan that never
270
+ // published (older executions, failed upload) exists only in the message,
271
+ // so that path keeps the inline document promotion (isPlanDocument) —
272
+ // collapsing it would orphan the plan behind a card with nothing to open.
273
+ const isCompletedPlanExec = isCompletedPlanExecution(exec);
274
+ const planMessageIndex = isCompletedPlanExec
275
+ ? findPlanMessageIndex(messages)
276
+ : -1;
277
+ const planArtifact = isCompletedPlanExec
278
+ ? findPlanArtifact(exec)
279
+ : undefined;
280
+ const collapsePlanMessage = planMessageIndex >= 0 && planArtifact !== undefined;
281
+ // The plan the active Plan-mode turn is writing RIGHT NOW (detected by
282
+ // the H1 convention — see findStreamingPlan). Its message is suppressed
283
+ // in favor of a live plan-writing card, mirroring the completed-turn
284
+ // collapse above, while the panel's plan tab renders the document live.
285
+ // Two gates: collapseStreamingPlan (the host wired onOpenPlan — without a
286
+ // document surface the plan must keep streaming inline, DD-011) and
287
+ // isActiveStreamExec (a stale non-terminal execution left in the
288
+ // completed list by the transient skew documented above must never
289
+ // sprout a live card). Mutually exclusive with collapsePlanMessage by
290
+ // construction: one requires a terminal phase, the other forbids it.
291
+ const streamingPlan = collapseStreamingPlan && isActiveStreamExec
292
+ ? findStreamingPlan(exec)
293
+ : undefined;
203
294
  // This execution's settled change sets render as read-only records inside
204
295
  // its own segment, anchored to the last stamped edit row of each set. The
205
296
  // display seam reads the server's live projection when present and folds
@@ -247,6 +338,13 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
247
338
  // The active execution's prompt is the one a user can edit-and-resubmit
248
339
  // (stop + rephrase). Only mark it when the consumer enabled editing.
249
340
  isEditable: isActiveStreamExec && editableActiveTurn,
341
+ // The turn's mode marks the prompt bubble (a "Plan" pill on Plan
342
+ // turns) so the transcript reads unambiguously after mode switches.
343
+ interactionMode: exec.spec?.executionConfig?.interactionMode,
344
+ // A Build-from-plan turn's prompt renders as a compact chip, not the
345
+ // message text — the text is a short label; the real instruction is
346
+ // runner-injected from the same flag.
347
+ isBuildFromPlan: exec.spec?.executionConfig?.buildFromPlan || undefined,
250
348
  });
251
349
  }
252
350
  for (let mi = 0; mi < messages.length; mi++) {
@@ -258,11 +356,22 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
258
356
  flushEventsUntil(msg.timestamp);
259
357
  const isEmptyAi = msg.type === MessageType.MESSAGE_AI && !msg.content.trim();
260
358
  if (!isEmptyAi) {
261
- items.push({
262
- kind: "message",
263
- message: msg,
264
- key: `${execId}-m${mi}`,
265
- });
359
+ // The collapsed plan message is not rendered — the plan-completion
360
+ // card at the segment's end is the turn's sole plan representation.
361
+ // Its tool calls (below) and the todo anchor still process normally.
362
+ // A STREAMING plan message is suppressed the same way: its stand-in
363
+ // is the plan-writing card at the segment's end, and the document
364
+ // renders live in the panel's plan tab.
365
+ const suppressAsPlan = (collapsePlanMessage && mi === planMessageIndex) ||
366
+ mi === streamingPlan?.messageIndex;
367
+ if (!suppressAsPlan) {
368
+ items.push({
369
+ kind: "message",
370
+ message: msg,
371
+ key: `${execId}-m${mi}`,
372
+ isPlanDocument: !collapsePlanMessage && mi === planMessageIndex,
373
+ });
374
+ }
266
375
  // Anchor (1): the plan sits right under the agent's opening narration.
267
376
  if (msg.type === MessageType.MESSAGE_AI ||
268
377
  msg.type === MessageType.MESSAGE_THINKING) {
@@ -335,6 +444,41 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
335
444
  }
336
445
  }
337
446
  }
447
+ // A completed Plan turn closes its segment with the plan card — the
448
+ // compact stand-in for the collapsed plan message, carrying the title the
449
+ // message would have shown. Every plan stays reviewable forever; only the
450
+ // latest carries the build authority (isLatestPlan). A superseded plan
451
+ // that never published an artifact is skipped — with no artifact and no
452
+ // build CTA it would render an empty shell.
453
+ if (isCompletedPlanExec) {
454
+ const isLatestPlan = execId === latestPlanExecutionId;
455
+ if (planArtifact || isLatestPlan) {
456
+ items.push({
457
+ kind: "plan-completion",
458
+ key: `${execId}-plan-completion`,
459
+ executionId: exec.metadata?.id ?? "",
460
+ planArtifact,
461
+ planTitle: collapsePlanMessage
462
+ ? extractPlanTitle(messages[planMessageIndex].content)
463
+ : undefined,
464
+ isLatestPlan,
465
+ });
466
+ }
467
+ }
468
+ else if (streamingPlan) {
469
+ // The live stand-in for the suppressed streaming plan message. It
470
+ // deliberately SHARES the completion item's key: on completion this
471
+ // item becomes the plan-completion item above (a kind change under a
472
+ // stable key), so the card holds one thread position and the handoff
473
+ // reads as the card settling rather than a new element appearing.
474
+ items.push({
475
+ kind: "plan-writing",
476
+ key: `${execId}-plan-completion`,
477
+ executionId: exec.metadata?.id ?? "",
478
+ planTitle: extractLeadingH1(streamingPlan.displayText).title ?? undefined,
479
+ planSize: streamingPlan.displayText.length,
480
+ });
481
+ }
338
482
  // Anchor (3): a plan that produced no rendered narration or work item still
339
483
  // surfaces — never silently dropped.
340
484
  emitTodos();
@@ -399,15 +543,9 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
399
543
  });
400
544
  }
401
545
  }
402
- if (lastPhase === ExecutionPhase.EXECUTION_COMPLETED &&
403
- lastExec?.spec?.executionConfig?.interactionMode === InteractionMode.PLAN) {
404
- items.push({
405
- kind: "plan-completion",
406
- key: "plan-completion",
407
- executionId: lastExec?.metadata?.id ?? "",
408
- planArtifact: findPlanArtifact(lastExec),
409
- });
410
- }
546
+ // Plan cards are emitted inside each execution's segment (see the
547
+ // isCompletedPlanExec block in the loop above) — attached to their plan
548
+ // document, persistent across later turns, never appended at the tail.
411
549
  if (includeApprovals) {
412
550
  // Backstop only: an approval whose tool call renders inline shows its gate
413
551
  // on that row (see ApprovalContext / ToolCallItem). We emit a bottom card
@@ -473,11 +611,15 @@ export function buildThreadItems(executions, activeStreamExecution, pendingUserM
473
611
  * />
474
612
  * ```
475
613
  */
476
- export function MessageThread({ executions, activeStreamExecution, pendingUserMessage, pendingMessageFailed = false, onRetrySend, onRetryExecution, onEditMessage, className, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, showFileReviewRecords = false, workspaceEntries, onFilePathClick, sandboxWorkspaceRoot, summarizationEvents, virtualized = false, onBuildFromPlan, org, planActionsDisabled, centerContent = false, }) {
614
+ export function MessageThread({ executions, activeStreamExecution, pendingUserMessage, pendingMessageFailed = false, onRetrySend, onRetryExecution, onEditMessage, className, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, showFileReviewRecords = false, workspaceEntries, onFilePathClick, sandboxWorkspaceRoot, summarizationEvents, virtualized = false, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, contentColumn, }) {
477
615
  useRenderTracer("MessageThread", { executions, activeStreamExecution });
478
616
  const includeApprovals = onApprovalSubmit != null;
479
617
  const editableActiveTurn = onEditMessage != null;
480
- const items = useMemo(() => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents, pendingMessageFailed, editableActiveTurn, showFileReviewRecords), [executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents, pendingMessageFailed, editableActiveTurn, showFileReviewRecords]);
618
+ // A streaming plan is collapsed behind its live card only when the host can
619
+ // open the plan document surface — a panel-less host (no onOpenPlan) keeps
620
+ // the plan streaming inline, where it remains readable (DD-011).
621
+ const collapseStreamingPlan = onOpenPlan != null;
622
+ const items = useMemo(() => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents, pendingMessageFailed, editableActiveTurn, showFileReviewRecords, collapseStreamingPlan), [executions, activeStreamExecution, pendingUserMessage, includeApprovals, workspaceEntries, summarizationEvents, pendingMessageFailed, editableActiveTurn, showFileReviewRecords, collapseStreamingPlan]);
481
623
  useKeyStability(items);
482
624
  const filePathCtx = useMemo(() => ({
483
625
  workspaceEntries: workspaceEntries ?? [],
@@ -529,14 +671,14 @@ export function MessageThread({ executions, activeStreamExecution, pendingUserMe
529
671
  // cards, so the bar reuses the existing scroll machine without a new observer.
530
672
  const unresolvedApprovalCount = pendingApprovals.length;
531
673
  if (virtualized) {
532
- return (_jsx("div", { className: cn("relative min-h-0", className), children: _jsx(Suspense, { fallback: null, children: _jsx(LazyVirtualizedThread, { items: items, formatToolCallSummary: formatToolCallSummary, onApprovalSubmit: onApprovalSubmit, submittingApprovalIds: submittingApprovalIds, approvalErrors: approvalErrors, filePathCtx: filePathCtx, sandboxCtx: sandboxCtx, approvalCtx: approvalCtx, fileReviewCtx: fileReviewCtx, unresolvedApprovalCount: unresolvedApprovalCount, onBuildFromPlan: onBuildFromPlan, org: org, planActionsDisabled: planActionsDisabled, centerContent: centerContent, onRetrySend: onRetrySend, onRetryExecution: onRetryExecution, onEditMessage: onEditMessage }) }) }));
674
+ return (_jsx("div", { className: cn("relative min-h-0", className), children: _jsx(Suspense, { fallback: null, children: _jsx(LazyVirtualizedThread, { items: items, formatToolCallSummary: formatToolCallSummary, onApprovalSubmit: onApprovalSubmit, submittingApprovalIds: submittingApprovalIds, approvalErrors: approvalErrors, filePathCtx: filePathCtx, sandboxCtx: sandboxCtx, approvalCtx: approvalCtx, fileReviewCtx: fileReviewCtx, unresolvedApprovalCount: unresolvedApprovalCount, onBuildFromPlan: onBuildFromPlan, onOpenPlan: onOpenPlan, org: org, planActionsDisabled: planActionsDisabled, planBuildPending: planBuildPending, contentColumn: contentColumn, onRetrySend: onRetrySend, onRetryExecution: onRetryExecution, onEditMessage: onEditMessage }) }) }));
533
675
  }
534
- return (_jsx(NonVirtualizedThread, { items: items, className: className, centerContent: centerContent, formatToolCallSummary: formatToolCallSummary, onApprovalSubmit: onApprovalSubmit, submittingApprovalIds: submittingApprovalIds, approvalErrors: approvalErrors, filePathCtx: filePathCtx, sandboxCtx: sandboxCtx, approvalCtx: approvalCtx, fileReviewCtx: fileReviewCtx, unresolvedApprovalCount: unresolvedApprovalCount, onBuildFromPlan: onBuildFromPlan, org: org, planActionsDisabled: planActionsDisabled, onRetrySend: onRetrySend, onRetryExecution: onRetryExecution, onEditMessage: onEditMessage }));
676
+ return (_jsx(NonVirtualizedThread, { items: items, className: className, contentColumn: contentColumn, formatToolCallSummary: formatToolCallSummary, onApprovalSubmit: onApprovalSubmit, submittingApprovalIds: submittingApprovalIds, approvalErrors: approvalErrors, filePathCtx: filePathCtx, sandboxCtx: sandboxCtx, approvalCtx: approvalCtx, fileReviewCtx: fileReviewCtx, unresolvedApprovalCount: unresolvedApprovalCount, onBuildFromPlan: onBuildFromPlan, onOpenPlan: onOpenPlan, org: org, planActionsDisabled: planActionsDisabled, planBuildPending: planBuildPending, onRetrySend: onRetrySend, onRetryExecution: onRetryExecution, onEditMessage: onEditMessage }));
535
677
  }
536
- function NonVirtualizedThread({ items, className, centerContent, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, filePathCtx, sandboxCtx, approvalCtx, fileReviewCtx, unresolvedApprovalCount, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage, }) {
678
+ function NonVirtualizedThread({ items, className, contentColumn, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, filePathCtx, sandboxCtx, approvalCtx, fileReviewCtx, unresolvedApprovalCount, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, onRetrySend, onRetryExecution, onEditMessage, }) {
537
679
  const { scrollRef, sentinelRef, contentRef, isFollowing, jumpToLatest } = useAutoScroll();
538
680
  useDomNodeCount(scrollRef, "MessageThread");
539
- return (_jsxs("div", { className: cn("relative min-h-0", className), children: [_jsxs("div", { ref: scrollRef, role: "log", "aria-live": "polite", "aria-relevant": "additions", className: cn("h-full overflow-y-auto pt-6 pb-4 [overflow-anchor:none]", "[scrollbar-width:thin] [scrollbar-color:var(--color-border)_transparent]", "[&::-webkit-scrollbar]:w-1.5", "[&::-webkit-scrollbar-track]:bg-transparent", "[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border/40"), children: [_jsx(SandboxContext.Provider, { value: sandboxCtx, children: _jsx(FilePathContext.Provider, { value: filePathCtx, children: _jsx(ApprovalContext.Provider, { value: approvalCtx, children: _jsx(FileReviewContext.Provider, { value: fileReviewCtx, children: _jsx(DevProfiler, { id: "MessageThread", children: _jsx("div", { ref: contentRef, className: cn("flex flex-col gap-4", centerContent && "mx-auto w-full max-w-3xl px-4"), children: items.map((item) => (_jsx(ThreadItemWrapper, { animate: true, children: _jsx(ThreadItemRenderer, { item: item, formatToolCallSummary: formatToolCallSummary, onApprovalSubmit: onApprovalSubmit, submittingApprovalIds: submittingApprovalIds, approvalErrors: approvalErrors, onBuildFromPlan: onBuildFromPlan, org: org, planActionsDisabled: planActionsDisabled, onRetrySend: onRetrySend, onRetryExecution: onRetryExecution, onEditMessage: onEditMessage }) }, item.key))) }) }) }) }) }) }), _jsx("div", { ref: sentinelRef, "aria-hidden": "true" })] }), _jsx(JumpToLatestButton, { onClick: jumpToLatest, visible: !isFollowing && unresolvedApprovalCount === 0 }), _jsx(ApprovalPeekBar, { visible: !isFollowing && unresolvedApprovalCount > 0, count: unresolvedApprovalCount, onClick: jumpToLatest })] }));
681
+ return (_jsxs("div", { className: cn("relative min-h-0", className), children: [_jsxs("div", { ref: scrollRef, role: "log", "aria-live": "polite", "aria-relevant": "additions", className: cn("h-full overflow-y-auto pt-6 pb-4 [overflow-anchor:none]", "[scrollbar-width:thin] [scrollbar-color:var(--color-border)_transparent]", "[&::-webkit-scrollbar]:w-1.5", "[&::-webkit-scrollbar-track]:bg-transparent", "[&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-border/40"), children: [_jsx(SandboxContext.Provider, { value: sandboxCtx, children: _jsx(FilePathContext.Provider, { value: filePathCtx, children: _jsx(ApprovalContext.Provider, { value: approvalCtx, children: _jsx(FileReviewContext.Provider, { value: fileReviewCtx, children: _jsx(DevProfiler, { id: "MessageThread", children: _jsx("div", { ref: contentRef, className: cn("flex flex-col gap-4", threadContentColumnClass(contentColumn)), children: items.map((item) => (_jsx(ThreadItemWrapper, { animate: true, children: _jsx(ThreadItemRenderer, { item: item, formatToolCallSummary: formatToolCallSummary, onApprovalSubmit: onApprovalSubmit, submittingApprovalIds: submittingApprovalIds, approvalErrors: approvalErrors, onBuildFromPlan: onBuildFromPlan, onOpenPlan: onOpenPlan, org: org, planActionsDisabled: planActionsDisabled, planBuildPending: planBuildPending, onRetrySend: onRetrySend, onRetryExecution: onRetryExecution, onEditMessage: onEditMessage }) }, item.key))) }) }) }) }) }) }), _jsx("div", { ref: sentinelRef, "aria-hidden": "true" })] }), _jsx(JumpToLatestButton, { onClick: jumpToLatest, visible: !isFollowing && unresolvedApprovalCount === 0 }), _jsx(ApprovalPeekBar, { visible: !isFollowing && unresolvedApprovalCount > 0, count: unresolvedApprovalCount, onClick: jumpToLatest })] }));
540
682
  }
541
683
  /**
542
684
  * Renders a single thread item by discriminated `kind`. Used by both
@@ -549,13 +691,13 @@ function NonVirtualizedThread({ items, className, centerContent, formatToolCallS
549
691
  * @internal Exported for internal use by `VirtualizedThread` — not
550
692
  * part of the public API.
551
693
  */
552
- export function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, org, planActionsDisabled, onRetrySend, onRetryExecution, onEditMessage, }) {
694
+ export function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubmit, submittingApprovalIds, approvalErrors, onBuildFromPlan, onOpenPlan, org, planActionsDisabled, planBuildPending, onRetrySend, onRetryExecution, onEditMessage, }) {
553
695
  switch (item.kind) {
554
696
  case "message":
555
697
  if (item.isFailed) {
556
698
  return (_jsx(FailedUserMessage, { message: item.message, onRetry: onRetrySend }));
557
699
  }
558
- return (_jsx(MessageEntry, { message: item.message, className: item.isPending ? "opacity-70" : undefined, onEdit: item.isEditable && onEditMessage
700
+ return (_jsx(MessageEntry, { message: item.message, className: item.isPending ? "opacity-70" : undefined, isPlanDocument: item.isPlanDocument, interactionMode: item.interactionMode, isBuildFromPlan: item.isBuildFromPlan, onEdit: item.isEditable && onEditMessage
559
701
  ? () => onEditMessage(item.message.content)
560
702
  : undefined }));
561
703
  case "tool-group":
@@ -580,7 +722,19 @@ export function ThreadItemRenderer({ item, formatToolCallSummary, onApprovalSubm
580
722
  // When the plan was published as an artifact, show the richer reviewable
581
723
  // card (preview / copy / download / implement). Otherwise fall back to the
582
724
  // bare Implement CTA (older executions, or a plan that failed to publish).
583
- return item.planArtifact && item.executionId ? (_jsx(PlanArtifactCard, { executionId: item.executionId, artifact: item.planArtifact, org: org, onImplement: onBuildFromPlan, disabled: planActionsDisabled })) : (_jsx(PlanCompletionCard, { onImplement: onBuildFromPlan, disabled: planActionsDisabled }));
725
+ // Only the latest plan receives the build action a superseded plan's
726
+ // card is review-only, so a stale plan can never be implemented from it.
727
+ return item.planArtifact && item.executionId ? (_jsx(PlanArtifactCard, { executionId: item.executionId, artifact: item.planArtifact, title: item.planTitle, org: org, onImplement: item.isLatestPlan ? onBuildFromPlan : undefined,
728
+ // Every card routes to the plan document tab — the host renders a
729
+ // superseded plan read-only there (it receives the execution id).
730
+ onOpenPlan: onOpenPlan
731
+ ? () => onOpenPlan(item.executionId)
732
+ : undefined, disabled: planActionsDisabled, buildPending: planBuildPending })) : (_jsx(PlanCompletionCard, { onImplement: item.isLatestPlan ? onBuildFromPlan : undefined, disabled: planActionsDisabled }));
733
+ case "plan-writing":
734
+ // The live stand-in for a plan the active turn is writing. Emitted only
735
+ // when onOpenPlan is wired (see buildThreadItems' collapseStreamingPlan
736
+ // gate), so the action is always available in practice.
737
+ return (_jsx(PlanStreamingCard, { title: item.planTitle, sizeBytes: item.planSize, onOpenPlan: onOpenPlan ? () => onOpenPlan(item.executionId) : undefined }));
584
738
  }
585
739
  }
586
740
  // ---------------------------------------------------------------------------