@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
@@ -784,6 +784,50 @@ describe("MessageThread", () => {
784
784
  });
785
785
  });
786
786
 
787
+ describe("live plan collapse (streaming Plan turn)", () => {
788
+ function streamingPlanExecution() {
789
+ return makeExecution({
790
+ id: "exec-live",
791
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
792
+ interactionMode: InteractionMode.PLAN,
793
+ aiContent: "# Rollout Plan\n\n1. First step",
794
+ });
795
+ }
796
+
797
+ it("collapses the streaming plan behind a live card when onOpenPlan is wired", () => {
798
+ const onOpenPlan = vi.fn();
799
+ render(
800
+ <MessageThread
801
+ executions={[]}
802
+ activeStreamExecution={streamingPlanExecution()}
803
+ onOpenPlan={onOpenPlan}
804
+ />,
805
+ );
806
+
807
+ const card = screen.getByRole("region", { name: "Plan being written" });
808
+ expect(card.textContent).toContain("Rollout Plan");
809
+ // The plan body lives in the panel's plan tab, not the thread.
810
+ expect(screen.queryByText(/First step/)).toBeNull();
811
+
812
+ fireEvent.click(screen.getByText("Open plan"));
813
+ expect(onOpenPlan).toHaveBeenCalledWith("exec-live");
814
+ });
815
+
816
+ it("keeps the plan streaming inline for hosts without a plan surface (DD-011)", () => {
817
+ render(
818
+ <MessageThread
819
+ executions={[]}
820
+ activeStreamExecution={streamingPlanExecution()}
821
+ />,
822
+ );
823
+
824
+ expect(
825
+ screen.queryByRole("region", { name: "Plan being written" }),
826
+ ).toBeNull();
827
+ expect(screen.getByText(/First step/)).toBeTruthy();
828
+ });
829
+ });
830
+
787
831
  it("renders plan-completion card when last execution is completed Plan mode", () => {
788
832
  const exec = makeExecution({
789
833
  id: "exec-plan",
@@ -806,4 +850,61 @@ describe("MessageThread", () => {
806
850
  fireEvent.click(buildBtn);
807
851
  expect(onBuildFromPlan).toHaveBeenCalledOnce();
808
852
  });
853
+
854
+ describe("plan-turn identity", () => {
855
+ it("marks a Plan turn's prompt bubble with the Plan badge", () => {
856
+ const exec = makeExecution({
857
+ id: "exec-plan",
858
+ phase: ExecutionPhase.EXECUTION_COMPLETED,
859
+ interactionMode: InteractionMode.PLAN,
860
+ });
861
+
862
+ render(<MessageThread executions={[exec]} />);
863
+
864
+ expect(screen.getByRole("status", { name: "Plan mode" })).toBeTruthy();
865
+ });
866
+
867
+ it("shows no mode badge on Agent turns", () => {
868
+ const exec = makeExecution({
869
+ id: "exec-agent",
870
+ phase: ExecutionPhase.EXECUTION_COMPLETED,
871
+ interactionMode: InteractionMode.AGENT,
872
+ });
873
+
874
+ render(<MessageThread executions={[exec]} />);
875
+
876
+ expect(screen.queryByRole("status", { name: "Plan mode" })).toBeNull();
877
+ });
878
+
879
+ it("renders a completed Plan turn's plan as a document", () => {
880
+ const exec = makeExecution({
881
+ id: "exec-plan",
882
+ phase: ExecutionPhase.EXECUTION_COMPLETED,
883
+ interactionMode: InteractionMode.PLAN,
884
+ aiContent: "# Rollout Plan\n\n1. First step",
885
+ });
886
+
887
+ render(<MessageThread executions={[exec]} />);
888
+
889
+ const doc = screen.getByRole("article", { name: "Plan document" });
890
+ expect(doc.textContent).toContain("Rollout Plan");
891
+ expect(doc.textContent).toContain("First step");
892
+ });
893
+
894
+ it("renders a streaming Plan turn's text as an ordinary chat message", () => {
895
+ const exec = makeExecution({
896
+ id: "exec-live",
897
+ phase: ExecutionPhase.EXECUTION_IN_PROGRESS,
898
+ interactionMode: InteractionMode.PLAN,
899
+ aiContent: "Draft so far",
900
+ });
901
+
902
+ render(<MessageThread executions={[]} activeStreamExecution={exec} />);
903
+
904
+ expect(
905
+ screen.queryByRole("article", { name: "Plan document" }),
906
+ ).toBeNull();
907
+ expect(screen.getByRole("article", { name: "AI response" })).toBeTruthy();
908
+ });
909
+ });
809
910
  });
@@ -47,18 +47,32 @@ function renderCard(ui: ReactNode) {
47
47
 
48
48
  afterEach(cleanup);
49
49
 
50
- describe("PlanArtifactCard — action surface", () => {
51
- it("is an accessible region labelled as the plan's actions, with name + size", () => {
50
+ describe("PlanArtifactCard — compact document card", () => {
51
+ it("is an accessible region with the plan's title, filename, and size", () => {
52
52
  renderCard(
53
- <PlanArtifactCard executionId="aex_1" artifact={planArtifact} org="acme" />,
53
+ <PlanArtifactCard
54
+ executionId="aex_1"
55
+ artifact={planArtifact}
56
+ title="Refactor the auth flow"
57
+ org="acme"
58
+ />,
54
59
  );
55
60
 
56
- const region = screen.getByRole("region", { name: "Plan actions" });
57
- expect(region.textContent).toContain("Plan");
61
+ const region = screen.getByRole("region", { name: "Plan" });
62
+ expect(region.textContent).toContain("Refactor the auth flow");
63
+ expect(region.textContent).toContain("plan.md");
58
64
  expect(region.textContent).toContain("KB");
59
65
  });
60
66
 
61
- it("does NOT render the plan content (the message above is the document)", () => {
67
+ it("falls back to 'Plan' when the plan has no title", () => {
68
+ renderCard(
69
+ <PlanArtifactCard executionId="aex_1" artifact={planArtifact} org="acme" />,
70
+ );
71
+ const region = screen.getByRole("region", { name: "Plan" });
72
+ expect(region.textContent).toContain("Plan");
73
+ });
74
+
75
+ it("does NOT render the plan content (the document lives in the plan tab)", () => {
62
76
  const { stigmer, getArtifactContent } = createStigmerMock();
63
77
  render(
64
78
  withStigmer(
@@ -66,8 +80,8 @@ describe("PlanArtifactCard — action surface", () => {
66
80
  stigmer,
67
81
  ),
68
82
  );
69
- // The card is a pure action surface — it must not fetch the plan body until
70
- // the user explicitly opens the full preview.
83
+ // The card is the plan's compact stand-in — it must not fetch the plan
84
+ // body; that belongs to the plan tab (or the explicit preview modal).
71
85
  expect(getArtifactContent).not.toHaveBeenCalled();
72
86
  });
73
87
 
@@ -93,6 +107,25 @@ describe("PlanArtifactCard — action surface", () => {
93
107
  expect(screen.queryByText("Build from plan")).toBeNull();
94
108
  });
95
109
 
110
+ it("shows the pending label while the approved plan uploads (buildPending)", () => {
111
+ renderCard(
112
+ <PlanArtifactCard
113
+ executionId="aex_1"
114
+ artifact={planArtifact}
115
+ org="acme"
116
+ onImplement={vi.fn()}
117
+ disabled
118
+ buildPending
119
+ />,
120
+ );
121
+
122
+ // The primary reads as in-progress and stays disabled — no double-submits
123
+ // while the upload precedes the implement turn.
124
+ expect(screen.queryByText("Build from plan")).toBeNull();
125
+ const button = screen.getByText("Starting build…").closest("button")!;
126
+ expect(button.disabled).toBe(true);
127
+ });
128
+
96
129
  it("disables 'Build from plan' when disabled", () => {
97
130
  const onImplement = vi.fn();
98
131
  renderCard(
@@ -141,7 +174,7 @@ describe("PlanArtifactCard — Cmd/Ctrl+Enter accelerator (card-scoped)", () =>
141
174
  />,
142
175
  );
143
176
 
144
- const region = screen.getByRole("region", { name: "Plan actions" });
177
+ const region = screen.getByRole("region", { name: "Plan" });
145
178
  fireEvent.keyDown(region, { key: "Enter", metaKey: true });
146
179
  expect(onImplement).toHaveBeenCalledTimes(1);
147
180
  });
@@ -157,7 +190,7 @@ describe("PlanArtifactCard — Cmd/Ctrl+Enter accelerator (card-scoped)", () =>
157
190
  />,
158
191
  );
159
192
 
160
- const region = screen.getByRole("region", { name: "Plan actions" });
193
+ const region = screen.getByRole("region", { name: "Plan" });
161
194
  fireEvent.keyDown(region, { key: "Enter", ctrlKey: true });
162
195
  expect(onImplement).toHaveBeenCalledTimes(1);
163
196
  });
@@ -173,7 +206,7 @@ describe("PlanArtifactCard — Cmd/Ctrl+Enter accelerator (card-scoped)", () =>
173
206
  />,
174
207
  );
175
208
 
176
- const region = screen.getByRole("region", { name: "Plan actions" });
209
+ const region = screen.getByRole("region", { name: "Plan" });
177
210
  fireEvent.keyDown(region, { key: "Enter" });
178
211
  expect(onImplement).not.toHaveBeenCalled();
179
212
  });
@@ -190,7 +223,7 @@ describe("PlanArtifactCard — Cmd/Ctrl+Enter accelerator (card-scoped)", () =>
190
223
  />,
191
224
  );
192
225
 
193
- const region = screen.getByRole("region", { name: "Plan actions" });
226
+ const region = screen.getByRole("region", { name: "Plan" });
194
227
  fireEvent.keyDown(region, { key: "Enter", metaKey: true });
195
228
  expect(onImplement).not.toHaveBeenCalled();
196
229
  });
@@ -230,3 +263,24 @@ describe("PlanArtifactCard — Open full (org-gated preview)", () => {
230
263
  expect(screen.queryByText("Download")).not.toBeNull();
231
264
  });
232
265
  });
266
+
267
+ describe("PlanArtifactCard — Open plan (panel-first review)", () => {
268
+ it("replaces the modal secondary with 'Open plan' when onOpenPlan is provided", () => {
269
+ const onOpenPlan = vi.fn();
270
+ renderCard(
271
+ <PlanArtifactCard
272
+ executionId="aex_1"
273
+ artifact={planArtifact}
274
+ org="acme"
275
+ onOpenPlan={onOpenPlan}
276
+ />,
277
+ );
278
+
279
+ // One review affordance, not two: the facet supersedes the modal.
280
+ expect(screen.queryByText("Open full")).toBeNull();
281
+
282
+ fireEvent.click(screen.getByText("Open plan"));
283
+ expect(onOpenPlan).toHaveBeenCalledTimes(1);
284
+ expect(document.querySelector("dialog")).toBeNull();
285
+ });
286
+ });
@@ -0,0 +1,55 @@
1
+ import { describe, it, expect, afterEach } from "vitest";
2
+ import { render, screen, cleanup } from "@testing-library/react";
3
+ import { PlanDocumentMessage } from "../PlanDocumentMessage";
4
+
5
+ afterEach(cleanup);
6
+
7
+ describe("PlanDocumentMessage", () => {
8
+ it("lifts the leading H1 into the header and renders the body as markdown", () => {
9
+ render(
10
+ <PlanDocumentMessage
11
+ content={"# Migration Plan\n\n## Phase 1\n\n- step one"}
12
+ />,
13
+ );
14
+
15
+ const doc = screen.getByRole("article", { name: "Plan document" });
16
+ expect(doc).toBeTruthy();
17
+ expect(doc.querySelector("header")!.textContent).toContain(
18
+ "Migration Plan",
19
+ );
20
+ // The lifted title does not repeat inside the prose body.
21
+ expect(doc.querySelectorAll("h1")).toHaveLength(0);
22
+ });
23
+
24
+ it("falls back to a 'Plan' header when the document has no leading H1", () => {
25
+ render(<PlanDocumentMessage content="Just prose, no heading." />);
26
+
27
+ const doc = screen.getByRole("article", { name: "Plan document" });
28
+ expect(doc.querySelector("header")!.textContent).toContain("Plan");
29
+ expect(doc.textContent).toContain("Just prose, no heading.");
30
+ });
31
+
32
+ it("unwraps a whole-body BARE fence (plan-scoped fence handling)", () => {
33
+ render(
34
+ <PlanDocumentMessage content={"```\n# Fenced Plan\n\nBody text\n```"} />,
35
+ );
36
+
37
+ const doc = screen.getByRole("article", { name: "Plan document" });
38
+ // Unwrapped: the H1 became the header title, the body is prose (not a
39
+ // flat code block).
40
+ expect(doc.querySelector("header")!.textContent).toContain("Fenced Plan");
41
+ expect(doc.querySelector("pre")).toBeNull();
42
+ expect(doc.textContent).toContain("Body text");
43
+ });
44
+
45
+ it("keeps an inner code fence as a code block", () => {
46
+ render(
47
+ <PlanDocumentMessage
48
+ content={"# Plan\n\n```ts\nconst x = 1;\n```"}
49
+ />,
50
+ );
51
+
52
+ const doc = screen.getByRole("article", { name: "Plan document" });
53
+ expect(doc.querySelector("pre")).not.toBeNull();
54
+ });
55
+ });
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect, vi, afterEach } from "vitest";
2
+ import { render, screen, fireEvent, cleanup } from "@testing-library/react";
3
+ import { PlanStreamingCard } from "../PlanStreamingCard";
4
+
5
+ afterEach(cleanup);
6
+
7
+ describe("PlanStreamingCard — live plan stand-in", () => {
8
+ it("is a busy region with the streaming title, filename, and live size", () => {
9
+ render(
10
+ <PlanStreamingCard
11
+ title="Refactor the auth flow"
12
+ sizeBytes={2048}
13
+ onOpenPlan={vi.fn()}
14
+ />,
15
+ );
16
+
17
+ const region = screen.getByRole("region", { name: "Plan being written" });
18
+ expect(region.getAttribute("aria-busy")).toBe("true");
19
+ expect(region.textContent).toContain("Refactor the auth flow");
20
+ expect(region.textContent).toContain("plan.md");
21
+ expect(region.textContent).toContain("Writing…");
22
+ expect(region.textContent).toContain("2.0 KB");
23
+ });
24
+
25
+ it("falls back to 'Writing plan…' until the title has streamed in", () => {
26
+ render(<PlanStreamingCard sizeBytes={12} onOpenPlan={vi.fn()} />);
27
+ expect(screen.getByText("Writing plan…")).toBeTruthy();
28
+ });
29
+
30
+ it("routes 'Open plan' to onOpenPlan", () => {
31
+ const onOpenPlan = vi.fn();
32
+ render(<PlanStreamingCard sizeBytes={64} onOpenPlan={onOpenPlan} />);
33
+
34
+ fireEvent.click(screen.getByText("Open plan"));
35
+ expect(onOpenPlan).toHaveBeenCalledTimes(1);
36
+ });
37
+
38
+ it("offers no Download or Build actions — nothing final exists yet", () => {
39
+ render(<PlanStreamingCard sizeBytes={64} onOpenPlan={vi.fn()} />);
40
+ expect(screen.queryByText("Download")).toBeNull();
41
+ expect(screen.queryByText("Build from plan")).toBeNull();
42
+ });
43
+
44
+ it("renders without an action when onOpenPlan is absent", () => {
45
+ render(<PlanStreamingCard sizeBytes={64} />);
46
+ expect(screen.queryByText("Open plan")).toBeNull();
47
+ expect(screen.queryByRole("button")).toBeNull();
48
+ });
49
+ });