@cueloop/client 0.1.0-alpha.94 → 0.1.0-alpha.96

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 +7 -7
  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} +37 -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} +26 -5
  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} +6 -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} +1 -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} +18 -13
  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/{thread-selection.test.ts → annotations/thread-selection.test.ts} +0 -0
  212. /package/src/{thread-selection.ts → annotations/thread-selection.ts} +0 -0
  213. /package/src/{App.focus.test.ts → app/App.focus.test.ts} +0 -0
  214. /package/src/{launch-layout.test.ts → app/launch-layout.test.ts} +0 -0
  215. /package/src/{launch-layout.ts → app/launch-layout.ts} +0 -0
  216. /package/src/{ready-signal.ts → app/ready-signal.ts} +0 -0
  217. /package/src/{serve.test.ts → app/serve.test.ts} +0 -0
  218. /package/src/{components → appearance/components}/theme-context.tsx +0 -0
  219. /package/src/{theme-presets.test.ts → appearance/theme-presets.test.ts} +0 -0
  220. /package/src/{theme-presets.ts → appearance/theme-presets.ts} +0 -0
  221. /package/src/{theme.ts → appearance/theme.ts} +0 -0
  222. /package/src/{visual → appearance/visual}/contrast.test.ts +0 -0
  223. /package/src/{visual → appearance/visual}/contrast.ts +0 -0
  224. /package/src/{diff-fold.test.ts → diff/diff-fold.test.ts} +0 -0
  225. /package/src/{diff-fold.ts → diff/diff-fold.ts} +0 -0
  226. /package/src/{diff-hunk-curate.test.ts → diff/diff-hunk-curate.test.ts} +0 -0
  227. /package/src/{diff-hunk-curate.ts → diff/diff-hunk-curate.ts} +0 -0
  228. /package/src/{diff-intraline.test.ts → diff/diff-intraline.test.ts} +0 -0
  229. /package/src/{diff-intraline.ts → diff/diff-intraline.ts} +0 -0
  230. /package/src/{diff-syntax.test.ts → diff/diff-syntax.test.ts} +0 -0
  231. /package/src/{split-diff.test.ts → diff/split-diff.test.ts} +0 -0
  232. /package/src/{split-diff.ts → diff/split-diff.ts} +0 -0
  233. /package/src/{view-diff.test.ts → diff/view-diff.test.ts} +0 -0
  234. /package/src/{walk.test.ts → diff/walk.test.ts} +0 -0
  235. /package/src/{walk.ts → diff/walk.ts} +0 -0
  236. /package/src/{attribution.test.ts → integrations/attribution.test.ts} +0 -0
  237. /package/src/{attribution.ts → integrations/attribution.ts} +0 -0
  238. /package/src/{client-extension-registry.test.tsx → integrations/client-extension-registry.test.tsx} +0 -0
  239. /package/src/{client-extension-registry.ts → integrations/client-extension-registry.ts} +0 -0
  240. /package/src/{clipboard.test.ts → integrations/clipboard.test.ts} +0 -0
  241. /package/src/{clipboard.ts → integrations/clipboard.ts} +0 -0
  242. /package/src/{components → integrations/components}/share-dialog-store.ts +0 -0
  243. /package/src/{editor.test.ts → integrations/editor.test.ts} +0 -0
  244. /package/src/{editor.ts → integrations/editor.ts} +0 -0
  245. /package/src/{github-identity.test.ts → integrations/github-identity.test.ts} +0 -0
  246. /package/src/{github-identity.ts → integrations/github-identity.ts} +0 -0
  247. /package/src/{herdr.test.ts → integrations/herdr.test.ts} +0 -0
  248. /package/src/{herdr.ts → integrations/herdr.ts} +0 -0
  249. /package/src/{pasted-image.test.ts → integrations/pasted-image.test.ts} +0 -0
  250. /package/src/{pasted-image.ts → integrations/pasted-image.ts} +0 -0
  251. /package/src/{share.ts → integrations/share.ts} +0 -0
  252. /package/src/{key-bindings.ts → keyboard/key-bindings.ts} +0 -0
  253. /package/src/{skills.test.ts → keyboard/skills.test.ts} +0 -0
  254. /package/src/{skills.ts → keyboard/skills.ts} +0 -0
  255. /package/src/{slash-palette.test.ts → keyboard/slash-palette.test.ts} +0 -0
  256. /package/src/{thread-chords.test.ts → keyboard/thread-chords.test.ts} +0 -0
  257. /package/src/{thread-chords.ts → keyboard/thread-chords.ts} +0 -0
  258. /package/src/{use-shared-keyboard.ts → keyboard/use-shared-keyboard.ts} +0 -0
  259. /package/src/{__snapshots__ → markdown/__snapshots__}/view-plan.regression.test.ts.snap +0 -0
  260. /package/src/{markdown-grid.test.ts → markdown/markdown-grid.test.ts} +0 -0
  261. /package/src/{markdown-grid.ts → markdown/markdown-grid.ts} +0 -0
  262. /package/src/{markdown-highlight.test.ts → markdown/markdown-highlight.test.ts} +0 -0
  263. /package/src/{markdown-highlight.ts → markdown/markdown-highlight.ts} +0 -0
  264. /package/src/{view-plan.regression.test.ts → markdown/view-plan.regression.test.ts} +0 -0
  265. /package/src/{view-plan.test.ts → markdown/view-plan.test.ts} +0 -0
  266. /package/src/{perf → performance}/otlp-trace.test.ts +0 -0
  267. /package/src/{perf → performance}/otlp-trace.ts +0 -0
  268. /package/src/{perf → performance}/perf-report.ts +0 -0
  269. /package/src/{perf → performance}/perf-timings.test.ts +0 -0
  270. /package/src/{perf → performance}/perf-timings.ts +0 -0
  271. /package/src/{prototype-browser.test.ts → prototype/prototype-browser.test.ts} +0 -0
  272. /package/src/{prototype-browser.ts → prototype/prototype-browser.ts} +0 -0
  273. /package/src/{prototype-pixels.tsx → prototype/prototype-pixels.tsx} +0 -0
  274. /package/src/{config-identity.test.ts → settings/config-identity.test.ts} +0 -0
  275. /package/src/{components → stories}/__snapshots__/stories.test.tsx.snap +0 -0
  276. /package/src/{ansi-screen.test.ts → terminal/ansi-screen.test.ts} +0 -0
  277. /package/src/{ansi-screen.ts → terminal/ansi-screen.ts} +0 -0
  278. /package/src/{components → terminal/components}/terminal-pane.ts +0 -0
  279. /package/src/{ghostty-terminal.test.ts → terminal/ghostty-terminal.test.ts} +0 -0
  280. /package/src/{kitty-image.test.ts → terminal/kitty-image.test.ts} +0 -0
  281. /package/src/{kitty-image.ts → terminal/kitty-image.ts} +0 -0
  282. /package/src/{pty.test.ts → terminal/pty.test.ts} +0 -0
  283. /package/src/{components → thread/components}/thread-tree.test.ts +0 -0
  284. /package/src/{components → thread/components}/thread-tree.ts +0 -0
  285. /package/src/{thread-controller.curate.test.ts → thread/thread-controller.curate.test.ts} +0 -0
  286. /package/src/{thread-controller.derivation.test.ts → thread/thread-controller.derivation.test.ts} +0 -0
  287. /package/src/{thread-controller.optimistic.test.ts → thread/thread-controller.optimistic.test.ts} +0 -0
  288. /package/src/{thread-controller.switch-cache.test.ts → thread/thread-controller.switch-cache.test.ts} +0 -0
  289. /package/src/{tree-view.test.ts → thread/tree-view.test.ts} +0 -0
  290. /package/src/{tree-view.ts → thread/tree-view.ts} +0 -0
  291. /package/src/{components → ui/components}/RootOverlay.tsx +0 -0
  292. /package/src/{components → ui/components}/menu-control.tsx +0 -0
  293. /package/src/{components → ui/components}/primitives/Toolbar.tsx +0 -0
  294. /package/src/{components → ui/components}/primitives/frame.test.ts +0 -0
  295. /package/src/{components → ui/components}/primitives/frame.ts +0 -0
  296. /package/src/{components → ui/components}/primitives/icons.ts +0 -0
  297. /package/src/{components → ui/components}/primitives/tree-model.test.ts +0 -0
  298. /package/src/{components → ui/components}/primitives/tree-model.ts +0 -0
  299. /package/src/{components → ui/components}/truncate-text.ts +0 -0
  300. /package/src/{components → ui/components}/truncate-title.test.ts +0 -0
  301. /package/src/{components → ui/components}/truncate-title.ts +0 -0
  302. /package/src/{use-frame-measure.ts → ui/use-frame-measure.ts} +0 -0
  303. /package/src/{use-terminal-virtualizer.ts → ui/use-terminal-virtualizer.ts} +0 -0
  304. /package/src/{components → workbench/components}/editor-grid.test.ts +0 -0
  305. /package/src/{components → workbench/components}/editor-grid.ts +0 -0
  306. /package/src/{components → workbench/components}/file-tree.test.ts +0 -0
  307. /package/src/{use-repo-changes.ts → workbench/use-repo-changes.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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cueloop/client",
3
- "version": "0.1.0-alpha.94",
3
+ "version": "0.1.0-alpha.96",
4
4
  "description": "The cueloop review UI: projection renderer, keyboard grammar, review rail",
5
5
  "homepage": "https://github.com/mmurakaru/cueloop#readme",
6
6
  "bugs": {
@@ -20,17 +20,17 @@
20
20
  "type": "module",
21
21
  "exports": {
22
22
  ".": "./src/index.ts",
23
- "./config": "./src/config.ts",
24
- "./slash-palette": "./src/slash-palette.ts"
23
+ "./config": "./src/settings/config.ts",
24
+ "./slash-palette": "./src/keyboard/slash-palette.ts"
25
25
  },
26
26
  "publishConfig": {
27
27
  "access": "public"
28
28
  },
29
29
  "dependencies": {
30
- "@cueloop/daemon": "0.1.0-alpha.94",
31
- "@cueloop/extension-api": "0.1.0-alpha.94",
32
- "@cueloop/integration-obsidian": "0.1.0-alpha.94",
33
- "@cueloop/schema": "0.1.0-alpha.94",
30
+ "@cueloop/daemon": "0.1.0-alpha.96",
31
+ "@cueloop/extension-api": "0.1.0-alpha.96",
32
+ "@cueloop/integration-obsidian": "0.1.0-alpha.96",
33
+ "@cueloop/schema": "0.1.0-alpha.96",
34
34
  "@opentui/core": "^0.5.12",
35
35
  "@opentui/keymap": "0.5.12",
36
36
  "@opentui/react": "^0.5.12",
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import { createTextAttributes } from "@opentui/core";
9
- import type { Theme } from "./theme";
9
+ import type { Theme } from "../appearance/theme";
10
10
 
11
11
  export const UNDERLINE = createTextAttributes({ underline: true });
12
12
  export const CUT = createTextAttributes({ strikethrough: true, dim: true });
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
  import type { Annotation } from "@cueloop/schema";
3
- import { DARK } from "../theme";
3
+ import { DARK } from "../../appearance/theme";
4
4
  import { annotationPaletteFor } from "../annotation-palette";
5
- import { slashItemsFrom } from "../slash-palette";
6
- import { DEFAULT_QUICK_ACTIONS } from "../config";
7
- import type { Story, StoryMeta } from "./story";
5
+ import { slashItemsFrom } from "../../keyboard/slash-palette";
6
+ import { DEFAULT_QUICK_ACTIONS } from "../../settings/config";
7
+ import type { Story, StoryMeta } from "../../stories/story";
8
8
  import { CommentRow, ComposerPalette, DiscussionCard } from "./AnnotationCards";
9
9
 
10
10
  export const meta: StoryMeta = { title: "Chrome/AnnotationCards" };
@@ -15,14 +15,14 @@ import type {
15
15
  TextareaRenderable,
16
16
  } from "@opentui/core";
17
17
  import type { Annotation } from "@cueloop/schema";
18
- import type { Theme } from "../theme";
19
- import { useTooltip } from "./Tooltip";
18
+ import type { Theme } from "../../appearance/theme";
19
+ import { useTooltip } from "../../ui/components/Tooltip";
20
20
  import { lighten } from "../annotation-palette";
21
- import { useFrameMeasure } from "../use-frame-measure";
22
- import { imagePlaceholder, looksLikeBinaryPaste } from "../pasted-image";
23
- import { skillReferenceRanges, type SlashItem } from "../slash-palette";
24
- import { PaletteNamesContext } from "../skills";
25
- import { referenceStyleFor } from "./syntax-highlight";
21
+ import { useFrameMeasure } from "../../ui/use-frame-measure";
22
+ import { imagePlaceholder, looksLikeBinaryPaste } from "../../integrations/pasted-image";
23
+ import { skillReferenceRanges, type SlashItem } from "../../keyboard/slash-palette";
24
+ import { PaletteNamesContext } from "../../keyboard/skills";
25
+ import { referenceStyleFor } from "../../ui/components/syntax-highlight";
26
26
 
27
27
  /* -------------------------------------------------------------- composer */
28
28
 
@@ -1,11 +1,11 @@
1
1
  import React from "react";
2
2
  import type { Annotation } from "@cueloop/schema";
3
- import { DARK } from "../theme";
3
+ import { DARK } from "../../appearance/theme";
4
4
  import type { Discussion } from "../discussions";
5
5
  import type { TextSpan } from "../thread-selection";
6
- import { RootOverlayProvider } from "./RootOverlay";
6
+ import { RootOverlayProvider } from "../../ui/components/RootOverlay";
7
7
  import { DiscussionMarkerRail } from "./DiscussionMarkerRail";
8
- import type { Story, StoryMeta } from "./story";
8
+ import type { Story, StoryMeta } from "../../stories/story";
9
9
 
10
10
  export const meta: StoryMeta = { title: "Chrome/DiscussionMarkerRail" };
11
11
 
@@ -8,13 +8,13 @@
8
8
 
9
9
  import React, { useEffect, useRef, useState, type RefObject } from "react";
10
10
  import type { BoxRenderable, ScrollBoxRenderable } from "@opentui/core";
11
- import type { Theme } from "../theme";
11
+ import type { Theme } from "../../appearance/theme";
12
12
  import type { TextSpan } from "../thread-selection";
13
13
  import type { Discussion } from "../discussions";
14
- import { useFrameMeasure } from "../use-frame-measure";
15
- import { useComponentTheme } from "./theme-context";
16
- import { useRootOverlay } from "./RootOverlay";
17
- import { OverlayScrollbar } from "./OverlayScrollbar";
14
+ import { useFrameMeasure } from "../../ui/use-frame-measure";
15
+ import { useComponentTheme } from "../../appearance/components/theme-context";
16
+ import { useRootOverlay } from "../../ui/components/RootOverlay";
17
+ import { OverlayScrollbar } from "../../ui/components/OverlayScrollbar";
18
18
 
19
19
  interface HoveredMarker {
20
20
  key: string;
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import type { Annotation, Thread } from "@cueloop/schema";
9
- import type { Mark } from "./view-plan";
9
+ import type { Mark } from "../markdown/view-plan";
10
10
  import { comparePositions, type TextSpan } from "./thread-selection";
11
11
 
12
12
  /** One conversation: a root annotation, its replies, and the span they mark. */
@@ -15,11 +15,11 @@
15
15
  import React, { useContext, useEffect, useRef, useState } from "react";
16
16
  import type { KeyEvent, MouseEvent as TerminalMouseEvent, TextRenderable } from "@opentui/core";
17
17
  import { flushSync } from "@opentui/react";
18
- import { useSharedKeyboard } from "./use-shared-keyboard";
18
+ import { useSharedKeyboard } from "../keyboard/use-shared-keyboard";
19
19
  import type { Annotation, Thread } from "@cueloop/schema";
20
- import type { Mark } from "./view-plan";
21
- import type { QuickAction } from "./config";
22
- import type { Theme } from "./theme";
20
+ import type { Mark } from "../markdown/view-plan";
21
+ import type { QuickAction } from "../settings/config";
22
+ import type { Theme } from "../appearance/theme";
23
23
  import {
24
24
  comparePositions,
25
25
  isDoubleClick,
@@ -37,7 +37,7 @@ import {
37
37
  type TextSpan,
38
38
  } from "./thread-selection";
39
39
  import { annotationPaletteFor, type AnnotationPalette } from "./annotation-palette";
40
- import { printableSequence, type MarkRange, type VisualLine } from "./mark-runs";
40
+ import { printableSequence, type MarkRange, type VisualLine } from "../markdown/mark-runs";
41
41
  import {
42
42
  activeSlashToken,
43
43
  insertSlashItem,
@@ -45,8 +45,8 @@ import {
45
45
  mergeSlashItems,
46
46
  slashFilter,
47
47
  slashItemsFrom,
48
- } from "./slash-palette";
49
- import { SlashSkillsContext } from "./skills";
48
+ } from "../keyboard/slash-palette";
49
+ import { SlashSkillsContext } from "../keyboard/skills";
50
50
  import { discussionsFrom, type Discussion } from "./discussions";
51
51
  import {
52
52
  CommentRow,
@@ -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 { isolateUserConfig, settle, waitForText, renderReadyApp } from "./test-support";
11
+ import { isolateUserConfig, settle, waitForText, renderReadyApp } from "../testing/test-support";
12
12
 
13
13
  const PLAN = "# Sync Plan\n\n## Steps\n\n- flush the queue\n";
14
14
 
@@ -10,7 +10,7 @@ import { ManualClock } from "@opentui/core/testing";
10
10
  import { DaemonServer } from "@cueloop/daemon";
11
11
  import type { Thread } from "@cueloop/schema";
12
12
  import { App } from "./App";
13
- import { isolateUserConfig, press, settle, waitForText, pressKey } from "./test-support";
13
+ import { isolateUserConfig, press, settle, waitForText, pressKey } from "../testing/test-support";
14
14
 
15
15
  const PLAN = "# Plan\n\nShip the thing.\n";
16
16
 
@@ -8,8 +8,8 @@ import React from "react";
8
8
  import { ScrollBoxRenderable, type Renderable } from "@opentui/core";
9
9
  import { DaemonServer } from "@cueloop/daemon";
10
10
  import { App } from "./App";
11
- import { annotationPaletteFor } from "./annotation-palette";
12
- import { DARK } from "./theme";
11
+ import { annotationPaletteFor } from "../annotations/annotation-palette";
12
+ import { DARK } from "../appearance/theme";
13
13
  import {
14
14
  isolateUserConfig,
15
15
  locateText,
@@ -17,7 +17,7 @@ import {
17
17
  renderReadyApp,
18
18
  settle,
19
19
  waitForText,
20
- } from "./test-support";
20
+ } from "../testing/test-support";
21
21
 
22
22
  function findScrollbox(node: Renderable): ScrollBoxRenderable | null {
23
23
  if (node.id === "diff-scroll" && node instanceof ScrollBoxRenderable) return node;
@@ -9,7 +9,7 @@ import { DaemonServer } from "@cueloop/daemon";
9
9
  import type { Thread } from "@cueloop/schema";
10
10
  import { App } from "./App";
11
11
  import { pullRequestReviewLayout } from "./launch-layout";
12
- import { DARK } from "./theme";
12
+ import { DARK } from "../appearance/theme";
13
13
  import {
14
14
  clickText,
15
15
  dragText,
@@ -21,7 +21,7 @@ import {
21
21
  typeText,
22
22
  waitForState,
23
23
  waitForText,
24
- } from "./test-support";
24
+ } from "../testing/test-support";
25
25
 
26
26
  const PATCH = `diff --git a/src/store.ts b/src/store.ts
27
27
  index 111..222 100644
@@ -22,7 +22,7 @@ import {
22
22
  waitForText,
23
23
  pressKey,
24
24
  renderReadyApp,
25
- } from "./test-support";
25
+ } from "../testing/test-support";
26
26
 
27
27
  const PLAN = `# Migration Plan
28
28
 
@@ -7,7 +7,12 @@ import { join } from "node:path";
7
7
  import React from "react";
8
8
  import { DaemonServer } from "@cueloop/daemon";
9
9
  import { App } from "./App";
10
- import { isolateUserConfig, locateText, renderReadyApp, waitForText } from "./test-support";
10
+ import {
11
+ isolateUserConfig,
12
+ locateText,
13
+ renderReadyApp,
14
+ waitForText,
15
+ } from "../testing/test-support";
11
16
 
12
17
  const PLAN = "# Migration Plan\n\nThe daemon persists sessions to disk atomically.\n";
13
18
 
@@ -16,7 +16,7 @@ import React from "react";
16
16
  import { DaemonServer } from "@cueloop/daemon";
17
17
  import type { Thread } from "@cueloop/schema";
18
18
  import { App } from "./App";
19
- import { DARK } from "./theme";
19
+ import { DARK } from "../appearance/theme";
20
20
  import {
21
21
  dragText,
22
22
  isolateUserConfig,
@@ -26,7 +26,7 @@ import {
26
26
  typeText as type,
27
27
  waitForState,
28
28
  waitForText,
29
- } from "./test-support";
29
+ } from "../testing/test-support";
30
30
 
31
31
  const PLAN = `---
32
32
  title: Migration Plan
@@ -8,8 +8,8 @@ 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 { DEFAULT_QUICK_ACTIONS } from "./config";
12
- import { slashItemsFrom } from "./slash-palette";
11
+ import { DEFAULT_QUICK_ACTIONS } from "../settings/config";
12
+ import { slashItemsFrom } from "../keyboard/slash-palette";
13
13
  import {
14
14
  clickText,
15
15
  dragText,
@@ -22,7 +22,7 @@ import {
22
22
  waitForState,
23
23
  waitForText,
24
24
  waitForTextGone,
25
- } from "./test-support";
25
+ } from "../testing/test-support";
26
26
 
27
27
  const PLAN = `# Migration Plan
28
28
 
@@ -8,8 +8,8 @@ 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";
12
- import { isolateUserConfig, renderReadyApp, settle, waitForText } from "./test-support";
11
+ import { DARK } from "../appearance/theme";
12
+ import { isolateUserConfig, renderReadyApp, settle, waitForText } from "../testing/test-support";
13
13
 
14
14
  const DOC = `# PromoCard
15
15
 
@@ -12,7 +12,7 @@ import {
12
12
  setPrototypeRendererFactory,
13
13
  type PrototypeElement,
14
14
  type PrototypeRenderer,
15
- } from "./prototype-browser";
15
+ } from "../prototype/prototype-browser";
16
16
  import {
17
17
  isolateUserConfig,
18
18
  press,
@@ -22,7 +22,7 @@ import {
22
22
  waitForState,
23
23
  waitForText,
24
24
  waitForTextGone,
25
- } from "./test-support";
25
+ } from "../testing/test-support";
26
26
 
27
27
  const HTML = "<main><div class='card'><h2>Pro</h2><p>$24/mo</p></div></main>";
28
28
 
@@ -18,7 +18,7 @@ import {
18
18
  renderReadyApp,
19
19
  typeText,
20
20
  waitForText,
21
- } from "./test-support";
21
+ } from "../testing/test-support";
22
22
 
23
23
  const PLAN = `# Migration Plan
24
24
 
@@ -14,7 +14,7 @@ import {
14
14
  pressKey,
15
15
  renderReadyApp,
16
16
  waitForText,
17
- } from "./test-support";
17
+ } from "../testing/test-support";
18
18
 
19
19
  const ACCENT_DARK: [number, number, number] = [203, 166, 247];
20
20
 
@@ -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 { isolateUserConfig, waitForText, renderReadyApp } from "./test-support";
11
+ import { isolateUserConfig, waitForText, renderReadyApp } from "../testing/test-support";
12
12
 
13
13
  const PLAN = `# Render Plan
14
14
 
@@ -9,7 +9,7 @@ import { testRender } from "@opentui/react/test-utils";
9
9
  import { DaemonServer } from "@cueloop/daemon";
10
10
  import type { Thread } from "@cueloop/schema";
11
11
  import { App } from "./App";
12
- import type { ShareTransport } from "./thread-controller";
12
+ import type { ShareTransport } from "../thread/thread-controller";
13
13
  import {
14
14
  isolateUserConfig,
15
15
  press,
@@ -17,7 +17,7 @@ import {
17
17
  settle,
18
18
  waitForText,
19
19
  waitForTextGone,
20
- } from "./test-support";
20
+ } from "../testing/test-support";
21
21
 
22
22
  const shareTransport: ShareTransport = {
23
23
  publish: mock(async () => ({ line: "ssh p_share01@cueloop.dev", copied: true })),
@@ -16,7 +16,7 @@ import {
16
16
  settle,
17
17
  waitForText,
18
18
  waitForTextGone,
19
- } from "./test-support";
19
+ } from "../testing/test-support";
20
20
 
21
21
  const PLAN = `# Migration Plan
22
22
 
@@ -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
  clickText,
14
14
  dragText,
@@ -22,7 +22,7 @@ import {
22
22
  typeText as type,
23
23
  waitForState,
24
24
  waitForText,
25
- } from "./test-support";
25
+ } from "../testing/test-support";
26
26
 
27
27
  const PLAN = `# Migration Plan
28
28
 
@@ -9,7 +9,7 @@ import { testRender } from "@opentui/react/test-utils";
9
9
  import { DaemonServer } from "@cueloop/daemon";
10
10
  import type { Thread } from "@cueloop/schema";
11
11
  import { App } from "./App";
12
- import type { ShareTransport } from "./thread-controller";
12
+ import type { ShareTransport } from "../thread/thread-controller";
13
13
  import {
14
14
  clickText,
15
15
  isolateUserConfig,
@@ -19,7 +19,7 @@ import {
19
19
  typeText,
20
20
  waitForText,
21
21
  waitForTextGone,
22
- } from "./test-support";
22
+ } from "../testing/test-support";
23
23
 
24
24
  const publishShare = mock(async () => ({ line: "ssh p_share01@cueloop.dev", copied: true }));
25
25
  const shareTransport: ShareTransport = {
@@ -8,7 +8,7 @@ import React, {
8
8
  } from "react";
9
9
  import { useKeyboard, useRenderer, useTerminalDimensions } from "@opentui/react";
10
10
  import type { Clock, KeyEvent } from "@opentui/core";
11
- import { buildDisplay, marksByDisplay, type Mark } from "./view-plan";
11
+ import { buildDisplay, marksByDisplay, type Mark } from "../markdown/view-plan";
12
12
  import {
13
13
  DEFAULT_KEYS,
14
14
  DEFAULT_QUICK_ACTIONS,
@@ -22,48 +22,48 @@ import {
22
22
  type IdentityConfig,
23
23
  type QuickAction,
24
24
  type ReviewWorkspaceMode,
25
- } from "./config";
26
- import { resolveDisplayName } from "./attribution";
27
- import { resolveGithubIdentity } from "./github-identity";
28
- import { loadSkills, PaletteNamesContext, SlashSkillsContext } from "./skills";
29
- import { mergeSlashItems, slashItemsFrom, type SlashItem } from "./slash-palette";
25
+ } from "../settings/config";
26
+ import { resolveDisplayName } from "../integrations/attribution";
27
+ import { resolveGithubIdentity } from "../integrations/github-identity";
28
+ import { loadSkills, PaletteNamesContext, SlashSkillsContext } from "../keyboard/skills";
29
+ import { mergeSlashItems, slashItemsFrom, type SlashItem } from "../keyboard/slash-palette";
30
30
  import {
31
31
  composeTheme,
32
32
  DEFAULT_THEME_NAME,
33
33
  themeForName,
34
34
  type Appearance,
35
35
  type ThemeName,
36
- } from "./theme-presets";
37
- import type { Theme } from "./theme";
38
- import { createReviewController, type ShareTransport } from "./thread-controller";
36
+ } from "../appearance/theme-presets";
37
+ import type { Theme } from "../appearance/theme";
38
+ import { createReviewController, type ShareTransport } from "../thread/thread-controller";
39
39
  import type { ThreadClient } from "@cueloop/daemon/client";
40
40
  import { createIntentDispatch, type Mode, type RailTab } from "./intent-dispatch";
41
- import { reduceKey, type KeyState } from "./keymap";
42
- import { KeyBindings, type CheatsheetSection } from "./key-bindings";
41
+ import { reduceKey, type KeyState } from "../keyboard/keymap";
42
+ import { KeyBindings, type CheatsheetSection } from "../keyboard/key-bindings";
43
43
  import { useReadySignal } from "./ready-signal";
44
- import { ThemeProvider } from "./components/theme-context";
45
- import { Button } from "./components/primitives/Button";
46
- import { ShareDialog } from "./components/ShareDialog";
47
- import { shareDialogStore } from "./components/share-dialog-store";
48
- import { Toolbar } from "./components/primitives/Toolbar";
49
- import { groupInbox, projectName, threadTitle } from "./components/thread-tree";
50
- import { ThreadTree } from "./components/ThreadTree";
51
- import { ChangesFileTree } from "./components/ChangesColumn";
52
- import { MenuControlProvider, useMenuControlState } from "./components/menu-control";
53
- import { ProjectTreeView } from "./components/ProjectTreeView";
44
+ import { ThemeProvider } from "../appearance/components/theme-context";
45
+ import { Button } from "../ui/components/primitives/Button";
46
+ import { ShareDialog } from "../integrations/components/ShareDialog";
47
+ import { shareDialogStore } from "../integrations/components/share-dialog-store";
48
+ import { Toolbar } from "../ui/components/primitives/Toolbar";
49
+ import { groupInbox, projectName, threadTitle } from "../thread/components/thread-tree";
50
+ import { ThreadTree } from "../thread/components/ThreadTree";
51
+ import { ChangesFileTree } from "../workbench/components/ChangesColumn";
52
+ import { MenuControlProvider, useMenuControlState } from "../ui/components/menu-control";
53
+ import { ProjectTreeView } from "../workbench/components/ProjectTreeView";
54
54
  import { AppShell, type FocusPane, type ProjectPanelMode } from "./components/AppShell";
55
- import type { ClientExtensionRegistry } from "./client-extension-registry";
55
+ import type { ClientExtensionRegistry } from "../integrations/client-extension-registry";
56
56
  import type { ExtensionUIContext } from "@cueloop/extension-api/client";
57
- import { EditorGrid } from "./components/EditorGrid";
58
- import { GridTabContent } from "./components/GridTabContent";
59
- import { useChangesWorkbench } from "./use-changes-workbench";
60
- import { useRepoChanges } from "./use-repo-changes";
61
- import { useThreadBodyEditing } from "./use-thread-body-editing";
62
- import { useRememberLayout } from "./use-remember-layout";
57
+ import { EditorGrid } from "../workbench/components/EditorGrid";
58
+ import { GridTabContent } from "../workbench/components/GridTabContent";
59
+ import { useChangesWorkbench } from "../workbench/use-changes-workbench";
60
+ import { useRepoChanges } from "../workbench/use-repo-changes";
61
+ import { useThreadBodyEditing } from "../markdown/use-thread-body-editing";
62
+ import { useRememberLayout } from "../workbench/use-remember-layout";
63
63
  import type { LaunchLayout } from "./launch-layout";
64
- import { ThreadFooter, THREAD_FOOTER_HEIGHT } from "./components/ThreadFooter";
65
- import { ConfirmCard } from "./components/ConfirmCard";
66
- import { THREAD_VIEW_CHEATSHEET, ThreadView } from "./components/ThreadView";
64
+ import { ThreadFooter, THREAD_FOOTER_HEIGHT } from "../thread/components/ThreadFooter";
65
+ import { ConfirmCard } from "../ui/components/ConfirmCard";
66
+ import { THREAD_VIEW_CHEATSHEET, ThreadView } from "../markdown/components/ThreadView";
67
67
  import {
68
68
  curationCommandEntries,
69
69
  diffCommandEntries,
@@ -71,9 +71,9 @@ import {
71
71
  resolveSessionChord,
72
72
  sessionCommandEntries,
73
73
  treeCommandEntries,
74
- } from "./thread-chords";
75
- import { type DiffFoldControls } from "./components/DiffContentView";
76
- import { commentCountsByFile, readsFrozenDiff } from "./view-diff";
74
+ } from "../keyboard/thread-chords";
75
+ import { type DiffFoldControls } from "../diff/components/DiffContentView";
76
+ import { commentCountsByFile, readsFrozenDiff } from "../diff/view-diff";
77
77
  import { annotationTarget, isAddressed, isAgentNote, threadShareLinks } from "@cueloop/schema";
78
78
  import type {
79
79
  Annotation,
@@ -84,8 +84,8 @@ import type {
84
84
  Thread,
85
85
  MessageOutcome,
86
86
  } from "@cueloop/schema";
87
- import { PrototypePixels } from "./prototype-pixels";
88
- import type { PrototypeElement } from "./prototype-browser";
87
+ import { PrototypePixels } from "../prototype/prototype-pixels";
88
+ import type { PrototypeElement } from "../prototype/prototype-browser";
89
89
  import {
90
90
  buildRenderFlags,
91
91
  buildSubmitConfirmState,
@@ -97,7 +97,7 @@ import {
97
97
  resolveOverlay,
98
98
  } from "./app-view-model";
99
99
  import { buildKeyState } from "./app-key-state";
100
- import { useSettingsDialog } from "./use-settings-dialog";
100
+ import { useSettingsDialog } from "../settings/use-settings-dialog";
101
101
  import {
102
102
  CompletionScreen,
103
103
  ConnectingScreen,
@@ -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
@@ -11,11 +11,11 @@ import { mkdtempSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
11
11
  import { tmpdir } from "node:os";
12
12
  import { join } from "node:path";
13
13
  import React from "react";
14
- import { testRender } from "@opentui/react/test-utils";
14
+ import { testRender as renderTestComponent } 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,
@@ -27,9 +27,9 @@ import {
27
27
  waitForState,
28
28
  waitForText,
29
29
  waitForTextGone,
30
- renderReadyApp,
31
- } from "./test-support";
32
- import { NERD } from "./components/primitives/icons";
30
+ renderReadyApp as renderReadyTestApp,
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
@@ -47,6 +47,23 @@ let repo: string;
47
47
  let restoreUserConfig: () => void;
48
48
  let server: DaemonServer;
49
49
  let session: Thread;
50
+ const renderers = new Set<Awaited<ReturnType<typeof renderTestComponent>>["renderer"]>();
51
+
52
+ async function testRender(...args: Parameters<typeof renderTestComponent>) {
53
+ const setup = await renderTestComponent(...args);
54
+
55
+ renderers.add(setup.renderer);
56
+
57
+ return setup;
58
+ }
59
+
60
+ async function renderReadyApp(...args: Parameters<typeof renderReadyTestApp>) {
61
+ const setup = await renderReadyTestApp(...args);
62
+
63
+ renderers.add(setup.renderer);
64
+
65
+ return setup;
66
+ }
50
67
 
51
68
  /** A throwaway git repo so the Project tree (git ls-files) and file contents resolve without a real checkout. */
52
69
  function makeRepo(): string {
@@ -79,6 +96,10 @@ beforeEach(() => {
79
96
  });
80
97
  });
81
98
  afterEach(() => {
99
+ for (const renderer of renderers) {
100
+ if (!renderer.isDestroyed) renderer.destroy();
101
+ }
102
+ renderers.clear();
82
103
  restoreUserConfig();
83
104
  server.stop();
84
105
  rmSync(home, { recursive: true, force: true });