@cueloop/client 0.1.0-alpha.93 → 0.1.0-alpha.95

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 (309) hide show
  1. package/package.json +12 -12
  2. package/src/{annotation-palette.ts → annotations/annotation-palette.ts} +1 -1
  3. package/src/{components → annotations/components}/AnnotationCards.stories.tsx +4 -4
  4. package/src/{components → annotations/components}/AnnotationCards.tsx +7 -7
  5. package/src/{components → annotations/components}/DiscussionMarkerRail.stories.tsx +3 -3
  6. package/src/{components → annotations/components}/DiscussionMarkerRail.tsx +5 -5
  7. package/src/{discussions.ts → annotations/discussions.ts} +1 -1
  8. package/src/{use-annotation-surface.tsx → annotations/use-annotation-surface.tsx} +7 -7
  9. package/src/{App.appearance.test.tsx → app/App.appearance.test.tsx} +1 -1
  10. package/src/{App.autoclose.test.tsx → app/App.autoclose.test.tsx} +1 -1
  11. package/src/{App.deleted-scroll.test.tsx → app/App.deleted-scroll.test.tsx} +3 -3
  12. package/src/{App.diff.test.tsx → app/App.diff.test.tsx} +2 -2
  13. package/src/{App.export.test.tsx → app/App.export.test.tsx} +1 -1
  14. package/src/{App.identity.test.tsx → app/App.identity.test.tsx} +6 -1
  15. package/src/{App.plan-render.test.tsx → app/App.plan-render.test.tsx} +2 -2
  16. package/src/{App.plan-review.test.tsx → app/App.plan-review.test.tsx} +3 -3
  17. package/src/{App.prototype-markdown.test.tsx → app/App.prototype-markdown.test.tsx} +2 -2
  18. package/src/{App.prototype.test.tsx → app/App.prototype.test.tsx} +2 -2
  19. package/src/{App.readonly.test.tsx → app/App.readonly.test.tsx} +1 -1
  20. package/src/{App.regression.test.tsx → app/App.regression.test.tsx} +1 -1
  21. package/src/{App.rendering.test.tsx → app/App.rendering.test.tsx} +1 -1
  22. package/src/{App.share-dialog.test.tsx → app/App.share-dialog.test.tsx} +2 -2
  23. package/src/{App.submit-confirm.test.tsx → app/App.submit-confirm.test.tsx} +1 -1
  24. package/src/{App.test.tsx → app/App.test.tsx} +2 -2
  25. package/src/{App.toast.test.tsx → app/App.toast.test.tsx} +2 -2
  26. package/src/{App.tsx → app/App.tsx} +68 -37
  27. package/src/{App.visual.test.tsx → app/App.visual.test.tsx} +4 -4
  28. package/src/{App.walk.test.tsx → app/App.walk.test.tsx} +2 -2
  29. package/src/{App.workbench.test.tsx → app/App.workbench.test.tsx} +85 -3
  30. package/src/{app-key-state.ts → app/app-key-state.ts} +4 -4
  31. package/src/{app-screens.tsx → app/app-screens.tsx} +31 -31
  32. package/src/{app-view-model.ts → app/app-view-model.ts} +6 -6
  33. package/src/{components → app/components}/AppHeader.stories.tsx +4 -4
  34. package/src/{components → app/components}/AppHeader.tsx +3 -3
  35. package/src/{components → app/components}/AppShell.brand.test.tsx +2 -2
  36. package/src/{components → app/components}/AppShell.extensions.test.tsx +2 -2
  37. package/src/{components → app/components}/AppShell.stories.tsx +2 -2
  38. package/src/{components → app/components}/AppShell.tsx +12 -9
  39. package/src/{components → app/components}/AppShell.zoom.test.tsx +4 -4
  40. package/src/{components → app/components}/Breadcrumb.stories.tsx +2 -2
  41. package/src/{components → app/components}/Breadcrumb.tsx +2 -2
  42. package/src/{components → app/components}/MenuBar.stories.tsx +2 -2
  43. package/src/{components → app/components}/MenuBar.tsx +3 -3
  44. package/src/{components → app/components}/PaneGrid.stories.tsx +2 -2
  45. package/src/{components → app/components}/PaneGrid.tsx +1 -1
  46. package/src/{components → app/components}/PanelColumn.stories.tsx +2 -2
  47. package/src/{components → app/components}/PanelColumn.tsx +2 -2
  48. package/src/{components → app/components}/ShellHeader.stories.tsx +3 -3
  49. package/src/{components → app/components}/ShellHeader.tsx +2 -2
  50. package/src/{components → app/components}/WorkspacePanels.stories.tsx +3 -3
  51. package/src/{components → app/components}/WorkspacePanels.tsx +9 -5
  52. package/src/{components → app/components}/pages/Workspace.stories.tsx +4 -4
  53. package/src/{intent-dispatch.test.ts → app/intent-dispatch.test.ts} +7 -3
  54. package/src/{intent-dispatch.ts → app/intent-dispatch.ts} +12 -6
  55. package/src/{ready-signal.test.ts → app/ready-signal.test.ts} +1 -1
  56. package/src/{run.ts → app/run.ts} +12 -6
  57. package/src/{serve.ts → app/serve.ts} +1 -1
  58. package/src/{version.ts → app/version.ts} +1 -1
  59. package/src/{components → appearance/components}/theme-context.stories.tsx +2 -2
  60. package/src/{components → diff/components}/AnnotatableFileView.stories.tsx +2 -2
  61. package/src/{components → diff/components}/AnnotatableFileView.test.tsx +8 -2
  62. package/src/{components → diff/components}/AnnotatableFileView.tsx +3 -3
  63. package/src/{components → diff/components}/BareWorkbenchFileView.stories.tsx +2 -2
  64. package/src/{components → diff/components}/BareWorkbenchFileView.tsx +2 -2
  65. package/src/{components → diff/components}/DiffContentView.scroll.test.tsx +4 -4
  66. package/src/{components → diff/components}/DiffContentView.split.test.tsx +4 -4
  67. package/src/{components → diff/components}/DiffContentView.stories.tsx +5 -5
  68. package/src/{components → diff/components}/DiffContentView.syntax.test.tsx +3 -3
  69. package/src/{components → diff/components}/DiffContentView.tsx +13 -13
  70. package/src/{components → diff/components}/WalkWizard.stories.tsx +2 -2
  71. package/src/{components → diff/components}/WalkWizard.tsx +4 -4
  72. package/src/{components → diff/components}/diff-content-view-layout.test.ts +2 -2
  73. package/src/{components → diff/components}/diff-content-view-layout.ts +2 -2
  74. package/src/{diff-syntax.ts → diff/diff-syntax.ts} +1 -1
  75. package/src/{view-diff.ts → diff/view-diff.ts} +4 -4
  76. package/src/index.ts +8 -8
  77. package/src/{components → integrations/components}/ExtensionZone.stories.tsx +1 -1
  78. package/src/{components → integrations/components}/ExtensionZone.tsx +3 -3
  79. package/src/{components → integrations/components}/ShareDialog.stories.tsx +2 -2
  80. package/src/{components → integrations/components}/ShareDialog.tsx +11 -11
  81. package/src/{integrations.test.ts → integrations/integrations.test.ts} +1 -1
  82. package/src/{integrations.ts → integrations/integrations.ts} +1 -1
  83. package/src/{components → keyboard/components}/CompletionOverlay.stories.tsx +2 -2
  84. package/src/{components → keyboard/components}/CompletionOverlay.tsx +4 -4
  85. package/src/{components → keyboard/components}/HandleChipsInput.stories.tsx +2 -2
  86. package/src/{components → keyboard/components}/HandleChipsInput.test.tsx +2 -2
  87. package/src/{components → keyboard/components}/HandleChipsInput.tsx +3 -3
  88. package/src/{components → keyboard/components}/KeybindsDialog.stories.tsx +2 -2
  89. package/src/{components → keyboard/components}/KeybindsDialog.tsx +3 -3
  90. package/src/{components → keyboard/components}/NavModeHint.stories.tsx +2 -2
  91. package/src/{components → keyboard/components}/NavModeHint.tsx +1 -1
  92. package/src/{components → keyboard/components}/SlashComposer.stories.tsx +3 -3
  93. package/src/{components → keyboard/components}/SlashComposer.tsx +3 -3
  94. package/src/{key-bindings.test.ts → keyboard/key-bindings.test.ts} +1 -1
  95. package/src/{keymap.test.ts → keyboard/keymap.test.ts} +1 -1
  96. package/src/{keymap.ts → keyboard/keymap.ts} +1 -1
  97. package/src/{slash-palette.ts → keyboard/slash-palette.ts} +1 -1
  98. package/src/{components → markdown/components}/MarkdownGridBlock.stories.tsx +2 -2
  99. package/src/{components → markdown/components}/MarkdownGridBlock.tsx +2 -2
  100. package/src/{components → markdown/components}/MarkdownThreadEditor.stories.tsx +2 -2
  101. package/src/{components → markdown/components}/MarkdownThreadEditor.test.tsx +2 -2
  102. package/src/{components → markdown/components}/MarkdownThreadEditor.tsx +1 -1
  103. package/src/{components → markdown/components}/ThreadView.selection.test.tsx +4 -4
  104. package/src/{components → markdown/components}/ThreadView.slash.test.tsx +6 -6
  105. package/src/{components → markdown/components}/ThreadView.stories.tsx +4 -4
  106. package/src/{components → markdown/components}/ThreadView.tsx +13 -13
  107. package/src/{mark-runs.ts → markdown/mark-runs.ts} +1 -1
  108. package/src/{markdown-editor-syntax-style.ts → markdown/markdown-editor-syntax-style.ts} +1 -1
  109. package/src/{thread-code-syntax.ts → markdown/thread-code-syntax.ts} +3 -3
  110. package/src/{use-thread-body-editing.tsx → markdown/use-thread-body-editing.tsx} +2 -2
  111. package/src/{view-plan.ts → markdown/view-plan.ts} +3 -3
  112. package/src/{components → prototype/components}/PrototypeContentView.stories.tsx +2 -2
  113. package/src/{components → prototype/components}/PrototypeContentView.tsx +5 -5
  114. package/src/{components → settings/components}/SettingsDialog.stories.tsx +3 -3
  115. package/src/{components → settings/components}/SettingsDialog.tsx +7 -7
  116. package/src/{components → settings/components}/SettingsRows.stories.tsx +2 -2
  117. package/src/{components → settings/components}/SettingsRows.tsx +2 -2
  118. package/src/{components → settings/components}/quick-actions-editor.stories.tsx +2 -2
  119. package/src/{components → settings/components}/quick-actions-editor.test.tsx +1 -1
  120. package/src/{components → settings/components}/quick-actions-editor.tsx +3 -3
  121. package/src/{config.test.ts → settings/config.test.ts} +2 -2
  122. package/src/{config.ts → settings/config.ts} +8 -3
  123. package/src/{use-settings-dialog.tsx → settings/use-settings-dialog.tsx} +2 -2
  124. package/src/{components → stories}/stories-app.tsx +8 -8
  125. package/src/{components → stories}/stories.test.tsx +2 -2
  126. package/src/{components → stories}/story-fixtures.ts +2 -2
  127. package/src/{components → stories}/story-tree.test.ts +1 -1
  128. package/src/{components → stories}/story.ts +4 -4
  129. package/src/{components → terminal/components}/AnsiScreen.stories.tsx +1 -1
  130. package/src/{components → terminal/components}/AnsiScreen.tsx +2 -2
  131. package/src/{components → terminal/components}/terminal-pane.test.tsx +1 -1
  132. package/src/{ghostty-terminal.ts → terminal/ghostty-terminal.ts} +1 -1
  133. package/src/{pty.ts → terminal/pty.ts} +1 -1
  134. package/src/{test-support.test.ts → testing/test-support.test.ts} +1 -1
  135. package/src/{test-support.ts → testing/test-support.ts} +1 -1
  136. package/src/{components → thread/components}/ThreadFooter.stories.tsx +2 -2
  137. package/src/{components → thread/components}/ThreadFooter.test.tsx +2 -2
  138. package/src/{components → thread/components}/ThreadFooter.tsx +4 -4
  139. package/src/{components → thread/components}/ThreadTree.stories.tsx +3 -3
  140. package/src/{components → thread/components}/ThreadTree.tsx +8 -8
  141. package/src/{thread-controller.live-diff.test.ts → thread/thread-controller.live-diff.test.ts} +31 -1
  142. package/src/{thread-controller.share.test.ts → thread/thread-controller.share.test.ts} +1 -1
  143. package/src/{thread-controller.tree.test.ts → thread/thread-controller.tree.test.ts} +1 -1
  144. package/src/{thread-controller.ts → thread/thread-controller.ts} +43 -14
  145. package/src/{components → ui/components}/CodeBlock.stories.tsx +2 -2
  146. package/src/{components → ui/components}/CodeBlock.tsx +2 -2
  147. package/src/{components → ui/components}/ConfirmCard.stories.tsx +3 -3
  148. package/src/{components → ui/components}/ConfirmCard.tsx +12 -7
  149. package/src/{components → ui/components}/ConfirmDialog.stories.tsx +2 -2
  150. package/src/{components → ui/components}/ConfirmDialog.tsx +2 -2
  151. package/src/{components → ui/components}/OverlayScrollbar.stories.tsx +2 -2
  152. package/src/{components → ui/components}/OverlayScrollbar.test.tsx +5 -5
  153. package/src/{components → ui/components}/OverlayScrollbar.tsx +2 -2
  154. package/src/{components → ui/components}/PromptDialog.stories.tsx +2 -2
  155. package/src/{components → ui/components}/PromptDialog.test.tsx +2 -2
  156. package/src/{components → ui/components}/PromptDialog.tsx +2 -2
  157. package/src/{components → ui/components}/RootOverlay.stories.tsx +2 -2
  158. package/src/{components → ui/components}/ScrollArea.stories.tsx +2 -2
  159. package/src/{components → ui/components}/ScrollArea.tsx +1 -1
  160. package/src/{components → ui/components}/Toast.stories.tsx +2 -2
  161. package/src/{components → ui/components}/Toast.tsx +2 -2
  162. package/src/{components → ui/components}/Tooltip.stories.tsx +2 -2
  163. package/src/{components → ui/components}/Tooltip.tsx +1 -1
  164. package/src/{components → ui/components}/menu-control.stories.tsx +2 -2
  165. package/src/{components → ui/components}/primitives/Button.stories.tsx +2 -2
  166. package/src/{components → ui/components}/primitives/Button.tsx +2 -2
  167. package/src/{components → ui/components}/primitives/Card.stories.tsx +2 -2
  168. package/src/{components → ui/components}/primitives/Card.tsx +2 -2
  169. package/src/{components → ui/components}/primitives/Dialog.stories.tsx +2 -2
  170. package/src/{components → ui/components}/primitives/Dialog.test.tsx +2 -2
  171. package/src/{components → ui/components}/primitives/Dialog.tsx +2 -2
  172. package/src/{components → ui/components}/primitives/DialogActions.stories.tsx +2 -2
  173. package/src/{components → ui/components}/primitives/DialogActions.tsx +1 -1
  174. package/src/{components → ui/components}/primitives/IconButton.stories.tsx +2 -2
  175. package/src/{components → ui/components}/primitives/IconButton.tsx +1 -1
  176. package/src/{components → ui/components}/primitives/StatusBar.stories.tsx +2 -2
  177. package/src/{components → ui/components}/primitives/StatusBar.tsx +2 -2
  178. package/src/{components → ui/components}/primitives/Switch.stories.tsx +2 -2
  179. package/src/{components → ui/components}/primitives/Switch.tsx +2 -2
  180. package/src/{components → ui/components}/primitives/Tabs.stories.tsx +2 -2
  181. package/src/{components → ui/components}/primitives/Tabs.tsx +2 -2
  182. package/src/{components → ui/components}/primitives/Toolbar.stories.tsx +1 -1
  183. package/src/{components → ui/components}/primitives/Tree.stories.tsx +2 -2
  184. package/src/{components → ui/components}/primitives/Tree.tsx +2 -2
  185. package/src/{components → ui/components}/syntax-highlight.ts +1 -1
  186. package/src/{components → workbench/components}/ChangesColumn.stories.tsx +2 -2
  187. package/src/{components → workbench/components}/ChangesColumn.tsx +7 -7
  188. package/src/{components → workbench/components}/ChangesFileTree.test.tsx +2 -2
  189. package/src/{components → workbench/components}/EditorGrid.split.test.tsx +1 -1
  190. package/src/{components → workbench/components}/EditorGrid.stories.tsx +2 -2
  191. package/src/{components → workbench/components}/EditorGrid.tabs.test.tsx +2 -2
  192. package/src/{components → workbench/components}/EditorGrid.tsx +8 -8
  193. package/src/{components → workbench/components}/EditorGrid.zoom.test.tsx +2 -2
  194. package/src/{components → workbench/components}/FileContentsView.stories.tsx +2 -2
  195. package/src/{components → workbench/components}/FileContentsView.test.tsx +2 -2
  196. package/src/{components → workbench/components}/FileContentsView.tsx +4 -4
  197. package/src/{components → workbench/components}/GridTabContent.actions.test.tsx +6 -6
  198. package/src/{components → workbench/components}/GridTabContent.stories.tsx +4 -4
  199. package/src/{components → workbench/components}/GridTabContent.tsx +4 -4
  200. package/src/{components → workbench/components}/ProjectTreeView.stories.tsx +2 -2
  201. package/src/{components → workbench/components}/ProjectTreeView.test.tsx +2 -2
  202. package/src/{components → workbench/components}/ProjectTreeView.tsx +5 -5
  203. package/src/{components → workbench/components}/TreePane.stories.tsx +3 -3
  204. package/src/{components → workbench/components}/TreePane.tsx +6 -6
  205. package/src/{components → workbench/components}/WelcomePlayground.stories.tsx +2 -2
  206. package/src/{components → workbench/components}/WelcomePlayground.test.tsx +10 -3
  207. package/src/{components → workbench/components}/WelcomePlayground.tsx +5 -5
  208. package/src/{components → workbench/components}/file-tree.ts +1 -1
  209. package/src/{use-changes-workbench.ts → workbench/use-changes-workbench.ts} +2 -2
  210. package/src/{use-remember-layout.ts → workbench/use-remember-layout.ts} +2 -2
  211. package/src/{use-repo-changes.ts → workbench/use-repo-changes.ts} +5 -1
  212. /package/src/{thread-selection.test.ts → annotations/thread-selection.test.ts} +0 -0
  213. /package/src/{thread-selection.ts → annotations/thread-selection.ts} +0 -0
  214. /package/src/{App.focus.test.ts → app/App.focus.test.ts} +0 -0
  215. /package/src/{launch-layout.test.ts → app/launch-layout.test.ts} +0 -0
  216. /package/src/{launch-layout.ts → app/launch-layout.ts} +0 -0
  217. /package/src/{ready-signal.ts → app/ready-signal.ts} +0 -0
  218. /package/src/{serve.test.ts → app/serve.test.ts} +0 -0
  219. /package/src/{components → appearance/components}/theme-context.tsx +0 -0
  220. /package/src/{theme-presets.test.ts → appearance/theme-presets.test.ts} +0 -0
  221. /package/src/{theme-presets.ts → appearance/theme-presets.ts} +0 -0
  222. /package/src/{theme.ts → appearance/theme.ts} +0 -0
  223. /package/src/{visual → appearance/visual}/contrast.test.ts +0 -0
  224. /package/src/{visual → appearance/visual}/contrast.ts +0 -0
  225. /package/src/{diff-fold.test.ts → diff/diff-fold.test.ts} +0 -0
  226. /package/src/{diff-fold.ts → diff/diff-fold.ts} +0 -0
  227. /package/src/{diff-hunk-curate.test.ts → diff/diff-hunk-curate.test.ts} +0 -0
  228. /package/src/{diff-hunk-curate.ts → diff/diff-hunk-curate.ts} +0 -0
  229. /package/src/{diff-intraline.test.ts → diff/diff-intraline.test.ts} +0 -0
  230. /package/src/{diff-intraline.ts → diff/diff-intraline.ts} +0 -0
  231. /package/src/{diff-syntax.test.ts → diff/diff-syntax.test.ts} +0 -0
  232. /package/src/{split-diff.test.ts → diff/split-diff.test.ts} +0 -0
  233. /package/src/{split-diff.ts → diff/split-diff.ts} +0 -0
  234. /package/src/{view-diff.test.ts → diff/view-diff.test.ts} +0 -0
  235. /package/src/{walk.test.ts → diff/walk.test.ts} +0 -0
  236. /package/src/{walk.ts → diff/walk.ts} +0 -0
  237. /package/src/{attribution.test.ts → integrations/attribution.test.ts} +0 -0
  238. /package/src/{attribution.ts → integrations/attribution.ts} +0 -0
  239. /package/src/{client-extension-registry.test.tsx → integrations/client-extension-registry.test.tsx} +0 -0
  240. /package/src/{client-extension-registry.ts → integrations/client-extension-registry.ts} +0 -0
  241. /package/src/{clipboard.test.ts → integrations/clipboard.test.ts} +0 -0
  242. /package/src/{clipboard.ts → integrations/clipboard.ts} +0 -0
  243. /package/src/{components → integrations/components}/share-dialog-store.ts +0 -0
  244. /package/src/{editor.test.ts → integrations/editor.test.ts} +0 -0
  245. /package/src/{editor.ts → integrations/editor.ts} +0 -0
  246. /package/src/{github-identity.test.ts → integrations/github-identity.test.ts} +0 -0
  247. /package/src/{github-identity.ts → integrations/github-identity.ts} +0 -0
  248. /package/src/{herdr.test.ts → integrations/herdr.test.ts} +0 -0
  249. /package/src/{herdr.ts → integrations/herdr.ts} +0 -0
  250. /package/src/{pasted-image.test.ts → integrations/pasted-image.test.ts} +0 -0
  251. /package/src/{pasted-image.ts → integrations/pasted-image.ts} +0 -0
  252. /package/src/{share.ts → integrations/share.ts} +0 -0
  253. /package/src/{key-bindings.ts → keyboard/key-bindings.ts} +0 -0
  254. /package/src/{skills.test.ts → keyboard/skills.test.ts} +0 -0
  255. /package/src/{skills.ts → keyboard/skills.ts} +0 -0
  256. /package/src/{slash-palette.test.ts → keyboard/slash-palette.test.ts} +0 -0
  257. /package/src/{thread-chords.test.ts → keyboard/thread-chords.test.ts} +0 -0
  258. /package/src/{thread-chords.ts → keyboard/thread-chords.ts} +0 -0
  259. /package/src/{use-shared-keyboard.ts → keyboard/use-shared-keyboard.ts} +0 -0
  260. /package/src/{__snapshots__ → markdown/__snapshots__}/view-plan.regression.test.ts.snap +0 -0
  261. /package/src/{markdown-grid.test.ts → markdown/markdown-grid.test.ts} +0 -0
  262. /package/src/{markdown-grid.ts → markdown/markdown-grid.ts} +0 -0
  263. /package/src/{markdown-highlight.test.ts → markdown/markdown-highlight.test.ts} +0 -0
  264. /package/src/{markdown-highlight.ts → markdown/markdown-highlight.ts} +0 -0
  265. /package/src/{view-plan.regression.test.ts → markdown/view-plan.regression.test.ts} +0 -0
  266. /package/src/{view-plan.test.ts → markdown/view-plan.test.ts} +0 -0
  267. /package/src/{perf → performance}/otlp-trace.test.ts +0 -0
  268. /package/src/{perf → performance}/otlp-trace.ts +0 -0
  269. /package/src/{perf → performance}/perf-report.ts +0 -0
  270. /package/src/{perf → performance}/perf-timings.test.ts +0 -0
  271. /package/src/{perf → performance}/perf-timings.ts +0 -0
  272. /package/src/{prototype-browser.test.ts → prototype/prototype-browser.test.ts} +0 -0
  273. /package/src/{prototype-browser.ts → prototype/prototype-browser.ts} +0 -0
  274. /package/src/{prototype-pixels.tsx → prototype/prototype-pixels.tsx} +0 -0
  275. /package/src/{config-identity.test.ts → settings/config-identity.test.ts} +0 -0
  276. /package/src/{components → stories}/__snapshots__/stories.test.tsx.snap +0 -0
  277. /package/src/{ansi-screen.test.ts → terminal/ansi-screen.test.ts} +0 -0
  278. /package/src/{ansi-screen.ts → terminal/ansi-screen.ts} +0 -0
  279. /package/src/{components → terminal/components}/terminal-pane.ts +0 -0
  280. /package/src/{ghostty-terminal.test.ts → terminal/ghostty-terminal.test.ts} +0 -0
  281. /package/src/{kitty-image.test.ts → terminal/kitty-image.test.ts} +0 -0
  282. /package/src/{kitty-image.ts → terminal/kitty-image.ts} +0 -0
  283. /package/src/{pty.test.ts → terminal/pty.test.ts} +0 -0
  284. /package/src/{components → thread/components}/thread-tree.test.ts +0 -0
  285. /package/src/{components → thread/components}/thread-tree.ts +0 -0
  286. /package/src/{thread-controller.curate.test.ts → thread/thread-controller.curate.test.ts} +0 -0
  287. /package/src/{thread-controller.derivation.test.ts → thread/thread-controller.derivation.test.ts} +0 -0
  288. /package/src/{thread-controller.optimistic.test.ts → thread/thread-controller.optimistic.test.ts} +0 -0
  289. /package/src/{thread-controller.switch-cache.test.ts → thread/thread-controller.switch-cache.test.ts} +0 -0
  290. /package/src/{tree-view.test.ts → thread/tree-view.test.ts} +0 -0
  291. /package/src/{tree-view.ts → thread/tree-view.ts} +0 -0
  292. /package/src/{components → ui/components}/RootOverlay.tsx +0 -0
  293. /package/src/{components → ui/components}/menu-control.tsx +0 -0
  294. /package/src/{components → ui/components}/primitives/Toolbar.tsx +0 -0
  295. /package/src/{components → ui/components}/primitives/frame.test.ts +0 -0
  296. /package/src/{components → ui/components}/primitives/frame.ts +0 -0
  297. /package/src/{components → ui/components}/primitives/icons.ts +0 -0
  298. /package/src/{components → ui/components}/primitives/tree-model.test.ts +0 -0
  299. /package/src/{components → ui/components}/primitives/tree-model.ts +0 -0
  300. /package/src/{components → ui/components}/truncate-text.ts +0 -0
  301. /package/src/{components → ui/components}/truncate-title.test.ts +0 -0
  302. /package/src/{components → ui/components}/truncate-title.ts +0 -0
  303. /package/src/{use-frame-measure.ts → ui/use-frame-measure.ts} +0 -0
  304. /package/src/{use-terminal-virtualizer.ts → ui/use-terminal-virtualizer.ts} +0 -0
  305. /package/src/{components → workbench/components}/editor-grid.test.ts +0 -0
  306. /package/src/{components → workbench/components}/editor-grid.ts +0 -0
  307. /package/src/{components → workbench/components}/file-tree.test.ts +0 -0
  308. /package/src/{workbench-snapshot.test.ts → workbench/workbench-snapshot.test.ts} +0 -0
  309. /package/src/{workbench-snapshot.ts → workbench/workbench-snapshot.ts} +0 -0
@@ -4,10 +4,10 @@
4
4
  import { afterEach, beforeEach, expect, test } from "bun:test";
5
5
  import React from "react";
6
6
  import { App } from "./App";
7
- import { clickText, isolateUserConfig, renderReadyApp, waitForText } from "./test-support";
8
- import { themeForName } from "./theme-presets";
9
- import { rgbColorFromHex } from "./visual/contrast";
10
- import { createTestReviewHome, type TestReviewHome } from "../../../test/helpers/review-home";
7
+ import { clickText, isolateUserConfig, renderReadyApp, waitForText } from "../testing/test-support";
8
+ import { themeForName } from "../appearance/theme-presets";
9
+ import { rgbColorFromHex } from "../appearance/visual/contrast";
10
+ import { createTestReviewHome, type TestReviewHome } from "../../../../test/helpers/review-home";
11
11
 
12
12
  let reviewHome: TestReviewHome;
13
13
  let restoreUserConfig: () => void;
@@ -8,7 +8,7 @@ import React from "react";
8
8
  import { DaemonServer } from "@cueloop/daemon";
9
9
  import type { Thread } from "@cueloop/schema";
10
10
  import { App } from "./App";
11
- import { DARK } from "./theme";
11
+ import { DARK } from "../appearance/theme";
12
12
  import {
13
13
  isolateUserConfig,
14
14
  press,
@@ -18,7 +18,7 @@ import {
18
18
  waitForState,
19
19
  waitForText,
20
20
  waitForTextGone,
21
- } from "./test-support";
21
+ } from "../testing/test-support";
22
22
 
23
23
  const PATCH = `diff --git a/src/a.ts b/src/a.ts
24
24
  index 111..222 100644
@@ -15,7 +15,7 @@ import { testRender } from "@opentui/react/test-utils";
15
15
  import { DaemonServer } from "@cueloop/daemon";
16
16
  import type { Thread } from "@cueloop/schema";
17
17
  import { App } from "./App";
18
- import { loadConfig } from "./config";
18
+ import { loadConfig } from "../settings/config";
19
19
  import { pairLayout, planLayout, reviewLayout } from "./launch-layout";
20
20
  import {
21
21
  dragText,
@@ -28,8 +28,8 @@ import {
28
28
  waitForText,
29
29
  waitForTextGone,
30
30
  renderReadyApp,
31
- } from "./test-support";
32
- import { NERD } from "./components/primitives/icons";
31
+ } from "../testing/test-support";
32
+ import { NERD } from "../ui/components/primitives/icons";
33
33
 
34
34
  const PATCH = `diff --git a/src/store.ts b/src/store.ts
35
35
  index 111..222 100644
@@ -112,7 +112,89 @@ const rightToggleColumn = (setup: Setup): number => toggleColumn(setup, NERD.sid
112
112
  // the collapsed rail shows the outline (off) variant, mirroring the left toggle's filled/outline states
113
113
  const railToggleColumn = (setup: Setup): number => toggleColumn(setup, NERD.sidebarRightOff);
114
114
 
115
+ function changedFileVisibleInRightTree(frame: string, file: string): boolean {
116
+ return frame.split("\n").some((line) => {
117
+ const divider = line.lastIndexOf("│");
118
+
119
+ return divider >= 0 && line.slice(divider + 1).includes(file);
120
+ });
121
+ }
122
+
115
123
  describe("the four-pane workbench", () => {
124
+ test("a bootstrapped workbench paints its changed-file list in the first usable frame", async () => {
125
+ const workbench = server.core.sessionCreate({
126
+ workspace: { repoRoot: repo, branch: "main" },
127
+ artifact: { type: "diff", content: "", meta: { title: "Workbench", workbench: true } },
128
+ });
129
+ const initialReview = {
130
+ session: workbench,
131
+ diff: {
132
+ patch: PATCH,
133
+ files: [
134
+ {
135
+ path: "src/store.ts",
136
+ oldContents: "export class Store { private items = []; }\n",
137
+ newContents: "export class Store { private items = new Map(); }\n",
138
+ status: "modified" as const,
139
+ },
140
+ ],
141
+ },
142
+ };
143
+ const setup = await renderReadyApp(
144
+ <App
145
+ home={home}
146
+ sessionId={workbench.id}
147
+ initialReview={initialReview}
148
+ layout={reviewLayout()}
149
+ />,
150
+ { width: 160, height: 20 },
151
+ );
152
+
153
+ expect(changedFileVisibleInRightTree(setup.captureCharFrame(), "store.ts")).toBe(true);
154
+ setup.renderer.destroy();
155
+ });
156
+
157
+ test("reopening Changes does not restore files from the launch snapshot", async () => {
158
+ const workbench = server.core.sessionCreate({
159
+ workspace: { repoRoot: repo, branch: "main" },
160
+ artifact: { type: "diff", content: "", meta: { title: "Workbench", workbench: true } },
161
+ });
162
+ const initialReview = {
163
+ session: workbench,
164
+ diff: {
165
+ patch: PATCH,
166
+ files: [
167
+ {
168
+ path: "src/store.ts",
169
+ oldContents: "before\n",
170
+ newContents: "after\n",
171
+ status: "modified" as const,
172
+ },
173
+ ],
174
+ },
175
+ };
176
+ const setup = await renderReadyApp(
177
+ <App
178
+ home={home}
179
+ sessionId={workbench.id}
180
+ initialReview={initialReview}
181
+ layout={reviewLayout()}
182
+ />,
183
+ { width: 160, height: 20 },
184
+ );
185
+
186
+ await waitForState(
187
+ setup,
188
+ () => !changedFileVisibleInRightTree(setup.captureCharFrame(), "store.ts"),
189
+ );
190
+ await setup.mockMouse.click(rightToggleColumn(setup), HEADER_ROW);
191
+ await waitForState(setup, () => diffToggleColumn(setup) === -1);
192
+ await setup.mockMouse.click(railToggleColumn(setup), HEADER_ROW);
193
+
194
+ expect(changedFileVisibleInRightTree(setup.captureCharFrame(), "store.ts")).toBe(false);
195
+ setup.renderer.destroy();
196
+ });
197
+
116
198
  test("rapid wheel scrolling a large Changes diff keeps the app responsive", async () => {
117
199
  const filePatches = Array.from({ length: 40 }, (_, fileIndex) => [
118
200
  `diff --git a/file-${fileIndex}.ts b/file-${fileIndex}.ts`,
@@ -1,9 +1,9 @@
1
1
  import type { Thread } from "@cueloop/schema";
2
2
  import type { Mode } from "./intent-dispatch";
3
- import type { KeyState } from "./keymap";
4
- import type { DisplayBlock } from "./view-plan";
5
- import type { DiffRow } from "./view-diff";
6
- import type { WalkFile } from "./walk";
3
+ import type { KeyState } from "../keyboard/keymap";
4
+ import type { DisplayBlock } from "../markdown/view-plan";
5
+ import type { DiffRow } from "../diff/view-diff";
6
+ import type { WalkFile } from "../diff/walk";
7
7
 
8
8
  export function buildKeyState(params: {
9
9
  keys: Record<string, string[]>;
@@ -1,42 +1,42 @@
1
- import { ScrollArea } from "./components/ScrollArea";
1
+ import { ScrollArea } from "../ui/components/ScrollArea";
2
2
  import React, { useCallback, useMemo, type Dispatch, type SetStateAction } from "react";
3
3
  import type { Thread, MessageOutcome } from "@cueloop/schema";
4
4
  import { returnPaneFor } from "@cueloop/schema";
5
- import type { Theme } from "./theme";
6
- import type { DiffViewMode, QuickAction } from "./config";
5
+ import type { Theme } from "../appearance/theme";
6
+ import type { DiffViewMode, QuickAction } from "../settings/config";
7
7
  import type { LaunchLayout } from "./launch-layout";
8
- import { useRememberLayout } from "./use-remember-layout";
8
+ import { useRememberLayout } from "../workbench/use-remember-layout";
9
9
  import type { Mode, TreeAsk } from "./intent-dispatch";
10
- import type { Intent } from "./keymap";
11
- import type { ReviewController, ToastState } from "./thread-controller";
12
- import { noteForFile } from "./walk";
13
- import type { WalkFile } from "./walk";
14
- import type { CheatsheetSection } from "./key-bindings";
15
- import type { SettingsCategory, SettingsValues } from "./components/SettingsDialog";
16
- import type { SettingsNav } from "./use-settings-dialog";
10
+ import type { Intent } from "../keyboard/keymap";
11
+ import type { ReviewController, ToastState } from "../thread/thread-controller";
12
+ import { noteForFile } from "../diff/walk";
13
+ import type { WalkFile } from "../diff/walk";
14
+ import type { CheatsheetSection } from "../keyboard/key-bindings";
15
+ import type { SettingsCategory, SettingsValues } from "../settings/components/SettingsDialog";
16
+ import type { SettingsNav } from "../settings/use-settings-dialog";
17
17
  import { CLIENT_VERSION } from "./version";
18
- import { ThemeProvider } from "./components/theme-context";
19
- import type { InboxRow } from "./components/thread-tree";
20
- import { SettingsDialog } from "./components/SettingsDialog";
21
- import { CompletionOverlay } from "./components/CompletionOverlay";
22
- import { ThreadTree } from "./components/ThreadTree";
23
- import { WelcomePlayground } from "./components/WelcomePlayground";
18
+ import { ThemeProvider } from "../appearance/components/theme-context";
19
+ import type { InboxRow } from "../thread/components/thread-tree";
20
+ import { SettingsDialog } from "../settings/components/SettingsDialog";
21
+ import { CompletionOverlay } from "../keyboard/components/CompletionOverlay";
22
+ import { ThreadTree } from "../thread/components/ThreadTree";
23
+ import { WelcomePlayground } from "../workbench/components/WelcomePlayground";
24
24
  import { AppShell, type FocusPane, type ProjectPanelMode } from "./components/AppShell";
25
- import type { ClientExtensionRegistry } from "./client-extension-registry";
25
+ import type { ClientExtensionRegistry } from "../integrations/client-extension-registry";
26
26
  import type { ExtensionUIContext } from "@cueloop/extension-api/client";
27
- import { EditorGrid } from "./components/EditorGrid";
28
- import { MenuControlProvider, type MenuControlApi } from "./components/menu-control";
29
- import { ProjectTreeView } from "./components/ProjectTreeView";
30
- import { ChangesFileTree } from "./components/ChangesColumn";
31
- import { BareWorkbenchFileView, draftThread } from "./components/BareWorkbenchFileView";
32
- import { GridTabContent, type DiffSurfaceProps } from "./components/GridTabContent";
33
- import type { DiffFoldControls } from "./components/DiffContentView";
34
- import { useChangesWorkbench } from "./use-changes-workbench";
35
- import { useRepoChanges } from "./use-repo-changes";
36
- import { ConfirmDialog } from "./components/ConfirmDialog";
37
- import { PromptDialog } from "./components/PromptDialog";
38
- import { WalkWizard } from "./components/WalkWizard";
39
- import { Toast } from "./components/Toast";
27
+ import { EditorGrid } from "../workbench/components/EditorGrid";
28
+ import { MenuControlProvider, type MenuControlApi } from "../ui/components/menu-control";
29
+ import { ProjectTreeView } from "../workbench/components/ProjectTreeView";
30
+ import { ChangesFileTree } from "../workbench/components/ChangesColumn";
31
+ import { BareWorkbenchFileView, draftThread } from "../diff/components/BareWorkbenchFileView";
32
+ import { GridTabContent, type DiffSurfaceProps } from "../workbench/components/GridTabContent";
33
+ import type { DiffFoldControls } from "../diff/components/DiffContentView";
34
+ import { useChangesWorkbench } from "../workbench/use-changes-workbench";
35
+ import { useRepoChanges } from "../workbench/use-repo-changes";
36
+ import { ConfirmDialog } from "../ui/components/ConfirmDialog";
37
+ import { PromptDialog } from "../ui/components/PromptDialog";
38
+ import { WalkWizard } from "../diff/components/WalkWizard";
39
+ import { Toast } from "../ui/components/Toast";
40
40
 
41
41
  export function ErrorScreen({ error, theme }: { error: string; theme: Theme }): React.ReactNode {
42
42
  return (
@@ -1,12 +1,12 @@
1
1
  import type { Dispatch, MutableRefObject, SetStateAction } from "react";
2
2
  import type { Thread, MessageOutcome } from "@cueloop/schema";
3
3
  import type { Mode } from "./intent-dispatch";
4
- import type { Intent, KeyState } from "./keymap";
5
- import type { Completion } from "./thread-controller";
6
- import type { WalkFile } from "./walk";
7
- import type { QuickAction } from "./config";
8
- import { viewedCount } from "./walk";
9
- import type { ConfirmCardProps } from "./components/ConfirmCard";
4
+ import type { Intent, KeyState } from "../keyboard/keymap";
5
+ import type { Completion } from "../thread/thread-controller";
6
+ import type { WalkFile } from "../diff/walk";
7
+ import type { QuickAction } from "../settings/config";
8
+ import { viewedCount } from "../diff/walk";
9
+ import type { ConfirmCardProps } from "../ui/components/ConfirmCard";
10
10
  import type { BreadcrumbItem } from "./components/Breadcrumb";
11
11
 
12
12
  export function computeRoleCapabilities(
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { AppHeader } from "./AppHeader";
5
- import { Button } from "./primitives/Button";
6
- import { Toolbar } from "./primitives/Toolbar";
5
+ import { Button } from "../../ui/components/primitives/Button";
6
+ import { Toolbar } from "../../ui/components/primitives/Toolbar";
7
7
 
8
8
  export const meta: StoryMeta = { title: "Chrome/AppHeader" };
9
9
 
@@ -5,9 +5,9 @@
5
5
  // right column. Collapsing a column keeps its toggle reachable at the edge.
6
6
 
7
7
  import React from "react";
8
- import type { Theme } from "../theme";
9
- import { IconButton } from "./primitives/IconButton";
10
- import { NERD } from "./primitives/icons";
8
+ import type { Theme } from "../../appearance/theme";
9
+ import { IconButton } from "../../ui/components/primitives/IconButton";
10
+ import { NERD } from "../../ui/components/primitives/icons";
11
11
 
12
12
  export interface AppHeaderProps {
13
13
  onOpenMenu: () => void;
@@ -9,8 +9,8 @@ import { describe, expect, test } from "bun:test";
9
9
  import { testRender } from "@opentui/react/test-utils";
10
10
  import React from "react";
11
11
  import { AppShell } from "./AppShell";
12
- import { NERD } from "./primitives/icons";
13
- import { settle } from "../test-support";
12
+ import { NERD } from "../../ui/components/primitives/icons";
13
+ import { settle } from "../../testing/test-support";
14
14
 
15
15
  const LONG_TITLE = "working tree @ GRO-1981-fe-billing-promo-cookie-migration";
16
16
 
@@ -7,8 +7,8 @@ import { testRender } from "@opentui/react/test-utils";
7
7
  import {
8
8
  ClientExtensionRegistry,
9
9
  loadInstalledClientExtensions,
10
- } from "../client-extension-registry";
11
- import { settle } from "../test-support";
10
+ } from "../../integrations/client-extension-registry";
11
+ import { settle } from "../../testing/test-support";
12
12
  import { AppShell } from "./AppShell";
13
13
 
14
14
  function shell(
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { AppShell } from "./AppShell";
5
5
 
6
6
  export const meta: StoryMeta = { title: "Layout/AppShell" };
@@ -8,17 +8,20 @@
8
8
  import React, { useEffect, useRef } from "react";
9
9
  import { useTerminalDimensions } from "@opentui/react";
10
10
  import type { BoxRenderable } from "@opentui/core";
11
- import { DARK, type Theme } from "../theme";
12
- import { useFrameMeasure } from "../use-frame-measure";
13
- import { truncateTitle } from "./truncate-title";
11
+ import { DARK, type Theme } from "../../appearance/theme";
12
+ import { useFrameMeasure } from "../../ui/use-frame-measure";
13
+ import { truncateTitle } from "../../ui/components/truncate-title";
14
14
  import { PanelColumn } from "./PanelColumn";
15
- import { IconButton } from "./primitives/IconButton";
16
- import { NERD, HEADER_UNDERLINE_CHARS } from "./primitives/icons";
17
- import { TooltipProvider } from "./Tooltip";
18
- import { RootOverlayProvider } from "./RootOverlay";
15
+ import { IconButton } from "../../ui/components/primitives/IconButton";
16
+ import { NERD, HEADER_UNDERLINE_CHARS } from "../../ui/components/primitives/icons";
17
+ import { TooltipProvider } from "../../ui/components/Tooltip";
18
+ import { RootOverlayProvider } from "../../ui/components/RootOverlay";
19
19
  import type { ExtensionUIContext } from "@cueloop/extension-api/client";
20
- import { ClientExtensionRegistry } from "../client-extension-registry";
21
- import { ExtensionZone, useClientExtensionSnapshot } from "./ExtensionZone";
20
+ import { ClientExtensionRegistry } from "../../integrations/client-extension-registry";
21
+ import {
22
+ ExtensionZone,
23
+ useClientExtensionSnapshot,
24
+ } from "../../integrations/components/ExtensionZone";
22
25
  import { WorkspacePanels } from "./WorkspacePanels";
23
26
 
24
27
  const EMPTY_EXTENSION_REGISTRY = new ClientExtensionRegistry();
@@ -10,10 +10,10 @@ import { describe, expect, test } from "bun:test";
10
10
  import { testRender } from "@opentui/react/test-utils";
11
11
  import React from "react";
12
12
  import { AppShell } from "./AppShell";
13
- import { EditorGrid } from "./EditorGrid";
14
- import { changesTab, makeGroup, splitGroup } from "./editor-grid";
15
- import { NERD } from "./primitives/icons";
16
- import { allowEventLoopUpdates } from "../test-support";
13
+ import { EditorGrid } from "../../workbench/components/EditorGrid";
14
+ import { changesTab, makeGroup, splitGroup } from "../../workbench/components/editor-grid";
15
+ import { NERD } from "../../ui/components/primitives/icons";
16
+ import { allowEventLoopUpdates } from "../../testing/test-support";
17
17
 
18
18
  const grid = makeGroup([changesTab()]);
19
19
 
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { Breadcrumb } from "./Breadcrumb";
5
5
 
6
6
  export const meta: StoryMeta = { title: "Chrome/Breadcrumb" };
@@ -5,8 +5,8 @@
5
5
  */
6
6
 
7
7
  import React from "react";
8
- import type { Theme } from "../theme";
9
- import { useComponentTheme } from "./theme-context";
8
+ import type { Theme } from "../../appearance/theme";
9
+ import { useComponentTheme } from "../../appearance/components/theme-context";
10
10
 
11
11
  export type BreadcrumbTone = "accent" | "dim" | "text" | "green";
12
12
 
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { MenuBar } from "./MenuBar";
5
5
 
6
6
  export const meta: StoryMeta = { title: "Chrome/MenuBar" };
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import type { Theme } from "../theme";
3
- import { useComponentTheme } from "./theme-context";
4
- import { FRAME_BORDER_STYLE } from "./primitives/frame";
2
+ import type { Theme } from "../../appearance/theme";
3
+ import { useComponentTheme } from "../../appearance/components/theme-context";
4
+ import { FRAME_BORDER_STYLE } from "../../ui/components/primitives/frame";
5
5
 
6
6
  export interface MenuBarProps {
7
7
  open: boolean;
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { PaneGrid } from "./PaneGrid";
5
5
 
6
6
  export const meta: StoryMeta = { title: "Layout/PaneGrid" };
@@ -4,7 +4,7 @@
4
4
  // storybook runner); the product's four-pane workbench is AppShell.
5
5
 
6
6
  import React from "react";
7
- import { DARK, type Theme } from "../theme";
7
+ import { DARK, type Theme } from "../../appearance/theme";
8
8
  import type { BorderSides } from "@opentui/core";
9
9
 
10
10
  export interface PaneGridProps {
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { PanelColumn, FileTab } from "./PanelColumn";
5
5
 
6
6
  export const meta: StoryMeta = { title: "Surfaces/PanelColumn" };
@@ -4,8 +4,8 @@
4
4
  // header bottoms join the side rules into one grid. The side border runs from the top.
5
5
 
6
6
  import React, { useState } from "react";
7
- import type { Theme } from "../theme";
8
- import { NERD, HEADER_UNDERLINE_CHARS } from "./primitives/icons";
7
+ import type { Theme } from "../../appearance/theme";
8
+ import { NERD, HEADER_UNDERLINE_CHARS } from "../../ui/components/primitives/icons";
9
9
 
10
10
  export interface FileTabProps {
11
11
  label: string;
@@ -1,8 +1,8 @@
1
1
  import React from "react";
2
- import { DARK } from "../theme";
3
- import type { Story, StoryMeta } from "./story";
2
+ import { DARK } from "../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../stories/story";
4
4
  import { ShellHeader } from "./ShellHeader";
5
- import { NERD } from "./primitives/icons";
5
+ import { NERD } from "../../ui/components/primitives/icons";
6
6
 
7
7
  export const meta: StoryMeta = { title: "Layout/ShellHeader" };
8
8
 
@@ -1,8 +1,8 @@
1
1
  // The app shell's top bar: left panel toggle + icons + label, an optional title, right icons + panel toggle.
2
2
 
3
3
  import React from "react";
4
- import { DARK, type Theme } from "../theme";
5
- import { NERD } from "./primitives/icons";
4
+ import { DARK, type Theme } from "../../appearance/theme";
5
+ import { NERD } from "../../ui/components/primitives/icons";
6
6
 
7
7
  export interface ShellTab {
8
8
  label: string;
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import { ClientExtensionRegistry } from "../client-extension-registry";
3
- import { DARK } from "../theme";
4
- import type { Story, StoryMeta } from "./story";
2
+ import { ClientExtensionRegistry } from "../../integrations/client-extension-registry";
3
+ import { DARK } from "../../appearance/theme";
4
+ import type { Story, StoryMeta } from "../../stories/story";
5
5
  import { WorkspacePanels } from "./WorkspacePanels";
6
6
 
7
7
  export const meta: StoryMeta = { title: "Extensions/WorkspacePanels" };
@@ -1,13 +1,17 @@
1
1
  import React, { useEffect, useMemo, useState } from "react";
2
2
  import { useKeyboard } from "@opentui/react";
3
3
  import type { ExtensionUIContext } from "@cueloop/extension-api/client";
4
- import type { ClientExtensionRegistry } from "../client-extension-registry";
5
- import type { Theme } from "../theme";
4
+ import type { ClientExtensionRegistry } from "../../integrations/client-extension-registry";
5
+ import type { Theme } from "../../appearance/theme";
6
6
  import type { ProjectPanelMode } from "./AppShell";
7
- import { ExtensionZone, useClientExtensionSnapshot, visibleContributions } from "./ExtensionZone";
7
+ import {
8
+ ExtensionZone,
9
+ useClientExtensionSnapshot,
10
+ visibleContributions,
11
+ } from "../../integrations/components/ExtensionZone";
8
12
  import { FileTab, PanelColumn } from "./PanelColumn";
9
- import { IconButton } from "./primitives/IconButton";
10
- import { NERD } from "./primitives/icons";
13
+ import { IconButton } from "../../ui/components/primitives/IconButton";
14
+ import { NERD } from "../../ui/components/primitives/icons";
11
15
 
12
16
  /** The existing right pane owns built-in modes and selectable extension views. */
13
17
  export function WorkspacePanels(props: {
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
- import { DARK } from "../../theme";
3
- import type { Story, StoryMeta } from "../story";
2
+ import { DARK } from "../../../appearance/theme";
3
+ import type { Story, StoryMeta } from "../../../stories/story";
4
4
  import { PaneGrid } from "../PaneGrid";
5
- import { Tree } from "../primitives/Tree";
6
- import type { TreeNode } from "../primitives/tree-model";
5
+ import { Tree } from "../../../ui/components/primitives/Tree";
6
+ import type { TreeNode } from "../../../ui/components/primitives/tree-model";
7
7
 
8
8
  export const meta: StoryMeta = { title: "Pages/Workspace" };
9
9
 
@@ -9,9 +9,13 @@ import { describe, expect, mock, test } from "bun:test";
9
9
  import type { SetStateAction } from "react";
10
10
  import { SCHEMA_VERSION, type Annotation, type Thread } from "@cueloop/schema";
11
11
  import { createIntentDispatch, type IntentDispatchDeps } from "./intent-dispatch";
12
- import type { ControllerSnapshot, CurationItem, ReviewController } from "./thread-controller";
13
- import type { DisplayBlock } from "./view-plan";
14
- import type { TreeRow } from "./tree-view";
12
+ import type {
13
+ ControllerSnapshot,
14
+ CurationItem,
15
+ ReviewController,
16
+ } from "../thread/thread-controller";
17
+ import type { DisplayBlock } from "../markdown/view-plan";
18
+ import type { TreeRow } from "../thread/tree-view";
15
19
 
16
20
  function block(text: string): DisplayBlock {
17
21
  return { type: "same", kind: "p", work: { kind: "p", text, lineStart: 0, lineEnd: 0 } };
@@ -9,12 +9,18 @@
9
9
 
10
10
  import type { Dispatch, MutableRefObject, SetStateAction } from "react";
11
11
  import { isAddressed, MESSAGE_OUTCOMES, type Thread, type MessageOutcome } from "@cueloop/schema";
12
- import { displayText, spanKey, startSpan, type DisplayBlock, type SpanState } from "./view-plan";
13
- import type { DiffRow } from "./view-diff";
14
- import type { ReviewController } from "./thread-controller";
15
- import type { Intent } from "./keymap";
16
- import type { TreeRow } from "./tree-view";
17
- import { quickActionBody, type QuickAction } from "./config";
12
+ import {
13
+ displayText,
14
+ spanKey,
15
+ startSpan,
16
+ type DisplayBlock,
17
+ type SpanState,
18
+ } from "../markdown/view-plan";
19
+ import type { DiffRow } from "../diff/view-diff";
20
+ import type { ReviewController } from "../thread/thread-controller";
21
+ import type { Intent } from "../keyboard/keymap";
22
+ import type { TreeRow } from "../thread/tree-view";
23
+ import { quickActionBody, type QuickAction } from "../settings/config";
18
24
 
19
25
  /** Which pane of the session tree / review the keyboard grammar is aimed at. */
20
26
  export type RailTab = "review" | "tree";
@@ -7,7 +7,7 @@ import { join } from "node:path";
7
7
  import { createElement, useState } from "react";
8
8
  import { testRender } from "@opentui/react/test-utils";
9
9
  import { READY_FILE_ENV, useReadySignal } from "./ready-signal";
10
- import { settle } from "./test-support";
10
+ import { settle } from "../testing/test-support";
11
11
 
12
12
  const homes: string[] = [];
13
13
 
@@ -4,19 +4,23 @@ import React from "react";
4
4
  import { createCliRenderer } from "@opentui/core";
5
5
  import { createRoot } from "@opentui/react";
6
6
  import { App } from "./App";
7
- import { closePrototypeBrowser } from "./prototype-browser";
8
- import type { Appearance } from "./theme-presets";
9
- import { loadConfig } from "./config";
10
- import { perfMark } from "./perf/perf-timings";
11
- import { reportPerfMarks } from "./perf/perf-report";
7
+ import { closePrototypeBrowser } from "../prototype/prototype-browser";
8
+ import type { Appearance } from "../appearance/theme-presets";
9
+ import type { DiffFileContents, Thread } from "@cueloop/schema";
10
+ import type { ThreadClient } from "@cueloop/daemon/client";
11
+ import { loadConfig } from "../settings/config";
12
+ import { perfMark } from "../performance/perf-timings";
13
+ import { reportPerfMarks } from "../performance/perf-report";
12
14
  import { defaultLayout, type LaunchLayout } from "./launch-layout";
13
15
  import {
14
16
  ClientExtensionRegistry,
15
17
  loadInstalledClientExtensions,
16
- } from "./client-extension-registry";
18
+ } from "../integrations/client-extension-registry";
17
19
 
18
20
  export interface RunClientOptions {
19
21
  sessionId?: string;
22
+ initialReview?: { session: Thread; diff: { patch: string; files: DiffFileContents[] } };
23
+ initialClient?: ThreadClient;
20
24
  home?: string;
21
25
  /** The layout a create-command opens in; omit to restore the remembered one, then the default. */
22
26
  layout?: LaunchLayout;
@@ -73,6 +77,8 @@ export async function runClient(options: RunClientOptions): Promise<number> {
73
77
  React.createElement(App, {
74
78
  home: options.home,
75
79
  sessionId: options.sessionId,
80
+ initialReview: options.initialReview,
81
+ initialClient: options.initialClient,
76
82
  appearance,
77
83
  layout,
78
84
  extensionRegistry,