@stigmer/react 0.0.92 → 0.0.93

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 (328) hide show
  1. package/README.md +57 -12
  2. package/agent/AgentDetailView.js +7 -7
  3. package/agent/AgentDetailView.js.map +1 -1
  4. package/agent/AgentPicker.js +3 -3
  5. package/agent/AgentPicker.js.map +1 -1
  6. package/api-key/ApiKeyCreatedAlert.js +1 -1
  7. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  8. package/api-key/ApiKeyListPanel.js +4 -4
  9. package/api-key/ApiKeyListPanel.js.map +1 -1
  10. package/api-key/CreateApiKeyForm.js +1 -1
  11. package/api-key/CreateApiKeyForm.js.map +1 -1
  12. package/attachment/AttachmentChipList.js +2 -2
  13. package/attachment/AttachmentChipList.js.map +1 -1
  14. package/color-mode.d.ts +48 -0
  15. package/color-mode.d.ts.map +1 -0
  16. package/color-mode.js +53 -0
  17. package/color-mode.js.map +1 -0
  18. package/composer/ComposerToolbar.d.ts +6 -2
  19. package/composer/ComposerToolbar.d.ts.map +1 -1
  20. package/composer/ComposerToolbar.js +5 -3
  21. package/composer/ComposerToolbar.js.map +1 -1
  22. package/composer/ConfigureMenu.js +3 -3
  23. package/composer/ConfigureMenu.js.map +1 -1
  24. package/composer/ContextChip.js +1 -1
  25. package/composer/ContextChip.js.map +1 -1
  26. package/composer/ContextPopover.js +1 -1
  27. package/composer/ContextPopover.js.map +1 -1
  28. package/composer/SessionComposer.d.ts +24 -3
  29. package/composer/SessionComposer.d.ts.map +1 -1
  30. package/composer/SessionComposer.js +5 -4
  31. package/composer/SessionComposer.js.map +1 -1
  32. package/environment/CreateEnvironmentForm.js +1 -1
  33. package/environment/CreateEnvironmentForm.js.map +1 -1
  34. package/environment/EnvVarForm.js +2 -2
  35. package/environment/EnvVarForm.js.map +1 -1
  36. package/environment/EnvironmentListPanel.js +2 -2
  37. package/environment/EnvironmentListPanel.js.map +1 -1
  38. package/environment/EnvironmentVariableEditor.js +6 -6
  39. package/environment/EnvironmentVariableEditor.js.map +1 -1
  40. package/error/ErrorMessage.js +1 -1
  41. package/error/ErrorMessage.js.map +1 -1
  42. package/execution/ApprovalCard.js +4 -4
  43. package/execution/ApprovalCard.js.map +1 -1
  44. package/execution/ArtifactCard.js +1 -1
  45. package/execution/ArtifactCard.js.map +1 -1
  46. package/execution/ArtifactPreviewModal.js +4 -4
  47. package/execution/ArtifactPreviewModal.js.map +1 -1
  48. package/execution/FollowUpInput.js +1 -1
  49. package/execution/FollowUpInput.js.map +1 -1
  50. package/execution/McpToolDetail.js +4 -4
  51. package/execution/McpToolDetail.js.map +1 -1
  52. package/execution/MessageEntry.js +1 -1
  53. package/execution/MessageEntry.js.map +1 -1
  54. package/execution/MessageThread.js +1 -1
  55. package/execution/MessageThread.js.map +1 -1
  56. package/execution/SessionVariablesInput.js +4 -4
  57. package/execution/SessionVariablesInput.js.map +1 -1
  58. package/execution/SubAgentSection.js +2 -2
  59. package/execution/SubAgentSection.js.map +1 -1
  60. package/execution/ToolCallDetail.js +2 -2
  61. package/execution/ToolCallDetail.js.map +1 -1
  62. package/execution/ToolCallGroup.js +1 -1
  63. package/execution/ToolCallGroup.js.map +1 -1
  64. package/execution/ToolCallItem.js +2 -2
  65. package/execution/ToolCallItem.js.map +1 -1
  66. package/execution/WriteBackCard.js +3 -3
  67. package/execution/WriteBackCard.js.map +1 -1
  68. package/execution/tool-rendering-primitives.js +3 -3
  69. package/execution/tool-rendering-primitives.js.map +1 -1
  70. package/github/GitHubRepoPicker.js +5 -5
  71. package/github/GitHubRepoPicker.js.map +1 -1
  72. package/iam-policy/GrantAccessForm.js +1 -1
  73. package/iam-policy/GrantAccessForm.js.map +1 -1
  74. package/iam-policy/OrgMembersPanel.js +5 -5
  75. package/iam-policy/OrgMembersPanel.js.map +1 -1
  76. package/identity-provider/CreateIdentityProviderForm.js +3 -3
  77. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  78. package/identity-provider/IdentityProviderDetailPanel.js +5 -5
  79. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  80. package/identity-provider/IdentityProviderListPanel.js +3 -3
  81. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  82. package/identity-provider/IdentityProviderWizard.js +7 -7
  83. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  84. package/identity-provider/ProviderPicker.js +2 -2
  85. package/identity-provider/ProviderPicker.js.map +1 -1
  86. package/index.d.ts +8 -4
  87. package/index.d.ts.map +1 -1
  88. package/index.js +7 -3
  89. package/index.js.map +1 -1
  90. package/internal/CloudFeatureNotice.js +1 -1
  91. package/internal/CloudFeatureNotice.js.map +1 -1
  92. package/internal/Tabs.js +1 -1
  93. package/internal/Tabs.js.map +1 -1
  94. package/internal/markdown-components.js +2 -2
  95. package/internal/markdown-components.js.map +1 -1
  96. package/invitation/InvitationCreatedAlert.js +1 -1
  97. package/invitation/InvitationCreatedAlert.js.map +1 -1
  98. package/invitation/InvitationManager.js +5 -5
  99. package/invitation/InvitationManager.js.map +1 -1
  100. package/invitation/InvitationRedemption.js +4 -4
  101. package/invitation/InvitationRedemption.js.map +1 -1
  102. package/library/ResourceCountCard.js +1 -1
  103. package/library/ResourceCountCard.js.map +1 -1
  104. package/library/ResourceListView.js +5 -5
  105. package/library/ResourceListView.js.map +1 -1
  106. package/mcp-server/McpServerConfigPanel.js +5 -5
  107. package/mcp-server/McpServerConfigPanel.js.map +1 -1
  108. package/mcp-server/McpServerConnectDialog.js +4 -4
  109. package/mcp-server/McpServerConnectDialog.js.map +1 -1
  110. package/mcp-server/McpServerDetailView.js +14 -14
  111. package/mcp-server/McpServerDetailView.js.map +1 -1
  112. package/mcp-server/McpServerPicker.js +4 -4
  113. package/mcp-server/McpServerPicker.js.map +1 -1
  114. package/mcp-server/McpToolSelector.js +3 -3
  115. package/mcp-server/McpToolSelector.js.map +1 -1
  116. package/mcp-server/OAuthAppForm.js +1 -1
  117. package/mcp-server/OAuthAppForm.js.map +1 -1
  118. package/models/ModelSelector.js +1 -1
  119. package/models/ModelSelector.js.map +1 -1
  120. package/oauth-app/CreateOAuthAppForm.js +1 -1
  121. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  122. package/oauth-app/OAuthAppDetailPanel.js +3 -3
  123. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  124. package/oauth-app/OAuthAppListPanel.js +2 -2
  125. package/oauth-app/OAuthAppListPanel.js.map +1 -1
  126. package/organization/CreateOrganizationForm.js +1 -1
  127. package/organization/CreateOrganizationForm.js.map +1 -1
  128. package/organization/OrgProfilePanel.js +3 -3
  129. package/organization/OrgProfilePanel.js.map +1 -1
  130. package/package.json +4 -4
  131. package/platform-client/CreatePlatformClientForm.js +2 -2
  132. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  133. package/platform-client/PlatformClientDetailPanel.js +4 -4
  134. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  135. package/platform-client/PlatformClientListPanel.js +3 -3
  136. package/platform-client/PlatformClientListPanel.js.map +1 -1
  137. package/platform-client/PlatformClientSecretAlert.js +2 -2
  138. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  139. package/provider.d.ts +39 -2
  140. package/provider.d.ts.map +1 -1
  141. package/provider.js +11 -3
  142. package/provider.js.map +1 -1
  143. package/runner/RunnerListPanel.d.ts +65 -0
  144. package/runner/RunnerListPanel.d.ts.map +1 -0
  145. package/runner/RunnerListPanel.js +237 -0
  146. package/runner/RunnerListPanel.js.map +1 -0
  147. package/runner/RunnerPicker.d.ts +54 -0
  148. package/runner/RunnerPicker.d.ts.map +1 -0
  149. package/runner/RunnerPicker.js +133 -0
  150. package/runner/RunnerPicker.js.map +1 -0
  151. package/runner/__tests__/useDeleteRunner.test.d.ts +2 -0
  152. package/runner/__tests__/useDeleteRunner.test.d.ts.map +1 -0
  153. package/runner/__tests__/useDeleteRunner.test.js +108 -0
  154. package/runner/__tests__/useDeleteRunner.test.js.map +1 -0
  155. package/runner/__tests__/useLaunchLocalRunner.test.d.ts +2 -0
  156. package/runner/__tests__/useLaunchLocalRunner.test.d.ts.map +1 -0
  157. package/runner/__tests__/useLaunchLocalRunner.test.js +143 -0
  158. package/runner/__tests__/useLaunchLocalRunner.test.js.map +1 -0
  159. package/runner/__tests__/useStopRunner.test.d.ts +2 -0
  160. package/runner/__tests__/useStopRunner.test.d.ts.map +1 -0
  161. package/runner/__tests__/useStopRunner.test.js +114 -0
  162. package/runner/__tests__/useStopRunner.test.js.map +1 -0
  163. package/runner/index.d.ts +14 -0
  164. package/runner/index.d.ts.map +1 -0
  165. package/runner/index.js +8 -0
  166. package/runner/index.js.map +1 -0
  167. package/runner/phase.d.ts +30 -0
  168. package/runner/phase.d.ts.map +1 -0
  169. package/runner/phase.js +58 -0
  170. package/runner/phase.js.map +1 -0
  171. package/runner/useDeleteRunner.d.ts +36 -0
  172. package/runner/useDeleteRunner.d.ts.map +1 -0
  173. package/runner/useDeleteRunner.js +42 -0
  174. package/runner/useDeleteRunner.js.map +1 -0
  175. package/runner/useLaunchLocalRunner.d.ts +84 -0
  176. package/runner/useLaunchLocalRunner.d.ts.map +1 -0
  177. package/runner/useLaunchLocalRunner.js +75 -0
  178. package/runner/useLaunchLocalRunner.js.map +1 -0
  179. package/runner/useRunnerList.d.ts +49 -0
  180. package/runner/useRunnerList.d.ts.map +1 -0
  181. package/runner/useRunnerList.js +70 -0
  182. package/runner/useRunnerList.js.map +1 -0
  183. package/runner/useStopRunner.d.ts +53 -0
  184. package/runner/useStopRunner.d.ts.map +1 -0
  185. package/runner/useStopRunner.js +50 -0
  186. package/runner/useStopRunner.js.map +1 -0
  187. package/session/draft.d.ts +53 -0
  188. package/session/draft.d.ts.map +1 -0
  189. package/session/draft.js +45 -0
  190. package/session/draft.js.map +1 -0
  191. package/session/index.d.ts +10 -0
  192. package/session/index.d.ts.map +1 -1
  193. package/session/index.js +5 -0
  194. package/session/index.js.map +1 -1
  195. package/session/useCreateSession.d.ts +8 -0
  196. package/session/useCreateSession.d.ts.map +1 -1
  197. package/session/useCreateSession.js +1 -0
  198. package/session/useCreateSession.js.map +1 -1
  199. package/session/useEditSessionPrep.d.ts +26 -0
  200. package/session/useEditSessionPrep.d.ts.map +1 -0
  201. package/session/useEditSessionPrep.js +83 -0
  202. package/session/useEditSessionPrep.js.map +1 -0
  203. package/session/useNewSessionFlow.d.ts +110 -0
  204. package/session/useNewSessionFlow.d.ts.map +1 -0
  205. package/session/useNewSessionFlow.js +184 -0
  206. package/session/useNewSessionFlow.js.map +1 -0
  207. package/session/usePersistedModel.d.ts +18 -0
  208. package/session/usePersistedModel.d.ts.map +1 -0
  209. package/session/usePersistedModel.js +31 -0
  210. package/session/usePersistedModel.js.map +1 -0
  211. package/session/useSessionPageFlow.d.ts +104 -0
  212. package/session/useSessionPageFlow.d.ts.map +1 -0
  213. package/session/useSessionPageFlow.js +172 -0
  214. package/session/useSessionPageFlow.js.map +1 -0
  215. package/skill/SkillDetailView.js +3 -3
  216. package/skill/SkillDetailView.js.map +1 -1
  217. package/skill/SkillPicker.js +3 -3
  218. package/skill/SkillPicker.js.map +1 -1
  219. package/src/agent/AgentDetailView.tsx +8 -8
  220. package/src/agent/AgentPicker.tsx +3 -3
  221. package/src/api-key/ApiKeyCreatedAlert.tsx +2 -2
  222. package/src/api-key/ApiKeyListPanel.tsx +6 -6
  223. package/src/api-key/CreateApiKeyForm.tsx +2 -2
  224. package/src/attachment/AttachmentChipList.tsx +3 -3
  225. package/src/color-mode.ts +75 -0
  226. package/src/composer/ComposerToolbar.tsx +29 -7
  227. package/src/composer/ConfigureMenu.tsx +6 -6
  228. package/src/composer/ContextChip.tsx +1 -1
  229. package/src/composer/ContextPopover.tsx +2 -2
  230. package/src/composer/SessionComposer.tsx +34 -5
  231. package/src/environment/CreateEnvironmentForm.tsx +3 -3
  232. package/src/environment/EnvVarForm.tsx +6 -6
  233. package/src/environment/EnvironmentListPanel.tsx +3 -3
  234. package/src/environment/EnvironmentVariableEditor.tsx +7 -7
  235. package/src/error/ErrorMessage.tsx +5 -5
  236. package/src/execution/ApprovalCard.tsx +5 -5
  237. package/src/execution/ArtifactCard.tsx +2 -2
  238. package/src/execution/ArtifactPreviewModal.tsx +4 -4
  239. package/src/execution/FollowUpInput.tsx +2 -2
  240. package/src/execution/McpToolDetail.tsx +4 -4
  241. package/src/execution/MessageEntry.tsx +1 -1
  242. package/src/execution/MessageThread.tsx +1 -1
  243. package/src/execution/SessionVariablesInput.tsx +7 -7
  244. package/src/execution/SubAgentSection.tsx +5 -5
  245. package/src/execution/ToolCallDetail.tsx +2 -2
  246. package/src/execution/ToolCallGroup.tsx +3 -3
  247. package/src/execution/ToolCallItem.tsx +4 -4
  248. package/src/execution/WriteBackCard.tsx +5 -5
  249. package/src/execution/tool-rendering-primitives.tsx +5 -5
  250. package/src/github/GitHubRepoPicker.tsx +5 -5
  251. package/src/iam-policy/GrantAccessForm.tsx +2 -2
  252. package/src/iam-policy/OrgMembersPanel.tsx +11 -11
  253. package/src/identity-provider/CreateIdentityProviderForm.tsx +4 -4
  254. package/src/identity-provider/IdentityProviderDetailPanel.tsx +7 -7
  255. package/src/identity-provider/IdentityProviderListPanel.tsx +7 -7
  256. package/src/identity-provider/IdentityProviderWizard.tsx +8 -8
  257. package/src/identity-provider/ProviderPicker.tsx +2 -2
  258. package/src/index.ts +46 -7
  259. package/src/internal/CloudFeatureNotice.tsx +1 -1
  260. package/src/internal/Tabs.tsx +1 -1
  261. package/src/internal/markdown-components.tsx +2 -2
  262. package/src/invitation/InvitationCreatedAlert.tsx +2 -2
  263. package/src/invitation/InvitationManager.tsx +9 -9
  264. package/src/invitation/InvitationRedemption.tsx +11 -11
  265. package/src/library/ResourceCountCard.tsx +1 -1
  266. package/src/library/ResourceListView.tsx +7 -7
  267. package/src/mcp-server/McpServerConfigPanel.tsx +7 -7
  268. package/src/mcp-server/McpServerConnectDialog.tsx +5 -5
  269. package/src/mcp-server/McpServerDetailView.tsx +19 -19
  270. package/src/mcp-server/McpServerPicker.tsx +6 -6
  271. package/src/mcp-server/McpToolSelector.tsx +4 -4
  272. package/src/mcp-server/OAuthAppForm.tsx +3 -3
  273. package/src/models/ModelSelector.tsx +1 -1
  274. package/src/oauth-app/CreateOAuthAppForm.tsx +3 -3
  275. package/src/oauth-app/OAuthAppDetailPanel.tsx +7 -7
  276. package/src/oauth-app/OAuthAppListPanel.tsx +3 -3
  277. package/src/organization/CreateOrganizationForm.tsx +3 -3
  278. package/src/organization/OrgProfilePanel.tsx +4 -5
  279. package/src/platform-client/CreatePlatformClientForm.tsx +6 -6
  280. package/src/platform-client/PlatformClientDetailPanel.tsx +19 -19
  281. package/src/platform-client/PlatformClientListPanel.tsx +7 -7
  282. package/src/platform-client/PlatformClientSecretAlert.tsx +2 -2
  283. package/src/provider.tsx +52 -2
  284. package/src/runner/RunnerListPanel.tsx +725 -0
  285. package/src/runner/RunnerPicker.tsx +319 -0
  286. package/src/runner/__tests__/useDeleteRunner.test.tsx +150 -0
  287. package/src/runner/__tests__/useLaunchLocalRunner.test.tsx +223 -0
  288. package/src/runner/__tests__/useStopRunner.test.tsx +154 -0
  289. package/src/runner/index.ts +34 -0
  290. package/src/runner/phase.ts +62 -0
  291. package/src/runner/useDeleteRunner.ts +67 -0
  292. package/src/runner/useLaunchLocalRunner.ts +139 -0
  293. package/src/runner/useRunnerList.ts +114 -0
  294. package/src/runner/useStopRunner.ts +92 -0
  295. package/src/session/draft.ts +82 -0
  296. package/src/session/index.ts +28 -0
  297. package/src/session/useCreateSession.ts +9 -0
  298. package/src/session/useEditSessionPrep.ts +111 -0
  299. package/src/session/useNewSessionFlow.ts +283 -0
  300. package/src/session/usePersistedModel.ts +41 -0
  301. package/src/session/useSessionPageFlow.ts +280 -0
  302. package/src/skill/SkillDetailView.tsx +5 -5
  303. package/src/skill/SkillPicker.tsx +3 -3
  304. package/src/styles.css +25 -1
  305. package/src/usage/OrgUsagePanel.tsx +4 -4
  306. package/src/workspace/WorkspaceEditor.tsx +78 -66
  307. package/src/workspace/index.ts +0 -8
  308. package/styles.css +1 -1
  309. package/usage/OrgUsagePanel.js +2 -2
  310. package/usage/OrgUsagePanel.js.map +1 -1
  311. package/workspace/WorkspaceEditor.d.ts +28 -3
  312. package/workspace/WorkspaceEditor.d.ts.map +1 -1
  313. package/workspace/WorkspaceEditor.js +24 -25
  314. package/workspace/WorkspaceEditor.js.map +1 -1
  315. package/workspace/index.d.ts +0 -4
  316. package/workspace/index.d.ts.map +1 -1
  317. package/workspace/index.js +0 -2
  318. package/workspace/index.js.map +1 -1
  319. package/src/workspace/FolderBrowser.tsx +0 -579
  320. package/src/workspace/useFolderListing.ts +0 -164
  321. package/workspace/FolderBrowser.d.ts +0 -37
  322. package/workspace/FolderBrowser.d.ts.map +0 -1
  323. package/workspace/FolderBrowser.js +0 -188
  324. package/workspace/FolderBrowser.js.map +0 -1
  325. package/workspace/useFolderListing.d.ts +0 -73
  326. package/workspace/useFolderListing.d.ts.map +0 -1
  327. package/workspace/useFolderListing.js +0 -110
  328. package/workspace/useFolderListing.js.map +0 -1
@@ -110,8 +110,12 @@ export interface SessionComposerProps {
110
110
  readonly enableGitHub?: boolean;
111
111
  /** Show the Local Folder source button. @default false */
112
112
  readonly enableLocal?: boolean;
113
- /** Use the visual folder browser instead of a text input. @default false */
114
- readonly enableFolderBrowser?: boolean;
113
+ /**
114
+ * Native folder picker callback passed through to {@link WorkspaceEditor}.
115
+ * When provided, clicking "Local Folder" opens a native dialog instead
116
+ * of the inline text input. See {@link WorkspaceEditorProps.onBrowseLocalFolder}.
117
+ */
118
+ readonly onBrowseLocalFolder?: () => Promise<string | null>;
115
119
 
116
120
  /**
117
121
  * Organization slug for agent, MCP server, and skill searches.
@@ -188,6 +192,24 @@ export interface SessionComposerProps {
188
192
  /** Called when the skill selection changes. Providing this enables the skill trigger. */
189
193
  readonly onSkillRefsChange?: (refs: ResourceRef[]) => void;
190
194
 
195
+ /**
196
+ * Currently selected runner ID, or `null` for "Auto" (backend decides).
197
+ *
198
+ * When `onRunnerIdChange` is provided and `org` is set, renders a
199
+ * runner picker in the toolbar's Tier 1 (alongside Model Selector).
200
+ *
201
+ * The selected runner ID flows through to `session.create({ runnerId })`
202
+ * so the session is bound to that runner's task queue.
203
+ */
204
+ readonly runnerId?: string | null;
205
+ /**
206
+ * Called when the user selects a different runner. `null` = "Auto".
207
+ *
208
+ * Providing this callback enables the runner picker in the toolbar.
209
+ * Requires `org` to be set (same prerequisite as agent/MCP pickers).
210
+ */
211
+ readonly onRunnerIdChange?: (runnerId: string | null) => void;
212
+
191
213
  /**
192
214
  * Session variables state managed by {@link useSessionVariables}.
193
215
  * When provided, renders a "Session Variables" trigger in the toolbar
@@ -332,7 +354,7 @@ export function SessionComposer({
332
354
  gitHubConnection,
333
355
  enableGitHub = true,
334
356
  enableLocal = false,
335
- enableFolderBrowser = false,
357
+ onBrowseLocalFolder,
336
358
  org,
337
359
  agentRef,
338
360
  onAgentRefChange,
@@ -342,6 +364,8 @@ export function SessionComposer({
342
364
  onMcpServerUsagesChange,
343
365
  skillRefs,
344
366
  onSkillRefsChange,
367
+ runnerId,
368
+ onRunnerIdChange,
345
369
  sessionVariables,
346
370
  enableAttachments = true,
347
371
  onAttachmentValidationError,
@@ -364,6 +388,7 @@ export function SessionComposer({
364
388
  const showMcp = onMcpServerUsagesChange != null && org != null;
365
389
  const showWorkspace = workspace != null;
366
390
  const showSkills = onSkillRefsChange != null && org != null;
391
+ const showRunner = onRunnerIdChange != null && org != null;
367
392
  const showSessionVars = sessionVariables != null;
368
393
  const showAttach = enableAttachments;
369
394
 
@@ -1143,7 +1168,7 @@ export function SessionComposer({
1143
1168
  className="block w-full resize-none bg-transparent px-4 pt-3 pb-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none disabled:cursor-not-allowed"
1144
1169
  />
1145
1170
  {isDragOver && (
1146
- <div className="pointer-events-none absolute inset-0 flex items-center justify-center rounded-t-xl bg-primary/5">
1171
+ <div className="pointer-events-none absolute inset-0 flex items-center justify-center rounded-t-xl bg-primary-subtle">
1147
1172
  <span className="text-xs font-medium text-primary">
1148
1173
  Drop files to attach
1149
1174
  </span>
@@ -1270,7 +1295,7 @@ export function SessionComposer({
1270
1295
  gitHubConnection={gitHubConnection}
1271
1296
  enableGitHub={enableGitHub}
1272
1297
  enableLocal={enableLocal}
1273
- enableFolderBrowser={enableFolderBrowser}
1298
+ onBrowseLocalFolder={onBrowseLocalFolder}
1274
1299
  />
1275
1300
  : null
1276
1301
  }
@@ -1280,6 +1305,10 @@ export function SessionComposer({
1280
1305
  configActivePanel={configActivePanel}
1281
1306
  onConfigActivePanelChange={handleConfigActivePanelChange}
1282
1307
  renderConfigPanel={renderConfigPanel}
1308
+ showRunner={showRunner}
1309
+ runnerOrg={org ?? ""}
1310
+ runnerId={runnerId ?? null}
1311
+ onRunnerIdChange={onRunnerIdChange ?? (() => {})}
1283
1312
  showModelSelector={showModelSelector}
1284
1313
  modelId={modelId}
1285
1314
  onModelChange={handleModelChange}
@@ -109,7 +109,7 @@ export function CreateEnvironmentForm({
109
109
  className="text-xs font-medium text-muted-foreground"
110
110
  >
111
111
  Description{" "}
112
- <span className="text-muted-foreground/60">(optional)</span>
112
+ <span className="text-muted-foreground-subtle">(optional)</span>
113
113
  </label>
114
114
  <input
115
115
  id="stgm-new-env-desc"
@@ -140,7 +140,7 @@ export function CreateEnvironmentForm({
140
140
  disabled={!canSubmit}
141
141
  className={cn(
142
142
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
143
- "bg-primary text-primary-foreground hover:bg-primary/90",
143
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
144
144
  "disabled:pointer-events-none disabled:opacity-40",
145
145
  )}
146
146
  >
@@ -155,7 +155,7 @@ export function CreateEnvironmentForm({
155
155
  disabled={isCreating}
156
156
  className={cn(
157
157
  "rounded-md px-3 py-1.5 text-xs",
158
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
158
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
159
159
  "disabled:pointer-events-none disabled:opacity-50",
160
160
  )}
161
161
  >
@@ -275,7 +275,7 @@ export function EnvVarForm({
275
275
  >
276
276
  <span className="font-mono">{variable.key}</span>
277
277
  {variable.isSecret && (
278
- <span className="text-[0.55rem] uppercase tracking-wider text-muted-foreground/70">
278
+ <span className="text-[0.55rem] uppercase tracking-wider text-muted-foreground-subtle">
279
279
  secret
280
280
  </span>
281
281
  )}
@@ -328,13 +328,13 @@ export function EnvVarForm({
328
328
  {variable.description && (
329
329
  <p
330
330
  id={descId}
331
- className="text-[0.6rem] leading-relaxed text-muted-foreground/80"
331
+ className="text-[0.6rem] leading-relaxed text-muted-foreground-subtle"
332
332
  >
333
333
  {variable.description}
334
334
  </p>
335
335
  )}
336
336
  {prefilledKeys.has(variable.key) && (
337
- <p className="text-[0.55rem] text-primary/70">
337
+ <p className="text-[0.55rem] text-primary-muted">
338
338
  Pre-filled from session variables
339
339
  </p>
340
340
  )}
@@ -378,7 +378,7 @@ export function EnvVarForm({
378
378
  Save for future runs
379
379
  </span>
380
380
  {!saveForFuture && (
381
- <span className="block text-[0.6rem] leading-relaxed text-muted-foreground/70">
381
+ <span className="block text-[0.6rem] leading-relaxed text-muted-foreground-subtle">
382
382
  These values will only be used for this run.
383
383
  </span>
384
384
  )}
@@ -395,7 +395,7 @@ export function EnvVarForm({
395
395
  disabled={isDisabled}
396
396
  className={cn(
397
397
  "rounded-md px-3 py-1.5 text-xs",
398
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
398
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
399
399
  "disabled:pointer-events-none disabled:opacity-50",
400
400
  )}
401
401
  >
@@ -410,7 +410,7 @@ export function EnvVarForm({
410
410
  className={cn(
411
411
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs font-medium",
412
412
  "bg-primary text-primary-foreground",
413
- "hover:bg-primary/90",
413
+ "hover:bg-primary-hover",
414
414
  "disabled:pointer-events-none disabled:opacity-40",
415
415
  )}
416
416
  >
@@ -135,7 +135,7 @@ export function EnvironmentListPanel({
135
135
  {Array.from({ length: 2 }, (_, i) => (
136
136
  <div
137
137
  key={i}
138
- className="bg-muted/40 h-14 animate-pulse rounded-lg"
138
+ className="bg-muted-subtle h-14 animate-pulse rounded-lg"
139
139
  />
140
140
  ))}
141
141
  </div>
@@ -210,7 +210,7 @@ function EnvironmentCard({
210
210
  "rounded-lg border transition-colors",
211
211
  isExpanded
212
212
  ? "border-border bg-card"
213
- : "border-border/60 hover:border-border",
213
+ : "border-border-muted hover:border-border",
214
214
  )}
215
215
  >
216
216
  {/* Header — always visible */}
@@ -240,7 +240,7 @@ function EnvironmentCard({
240
240
 
241
241
  {/* Expanded content — variable editor */}
242
242
  {isExpanded && environmentId && (
243
- <div className="border-border/60 border-t px-3 pb-3 pt-2">
243
+ <div className="border-border-muted border-t px-3 pb-3 pt-2">
244
244
  <EnvironmentVariableEditor
245
245
  environmentId={environmentId}
246
246
  readOnly={readOnly}
@@ -157,7 +157,7 @@ export function EnvironmentVariableEditor({
157
157
  {Array.from({ length: 3 }, (_, i) => (
158
158
  <div
159
159
  key={i}
160
- className="bg-muted/40 h-8 animate-pulse rounded"
160
+ className="bg-muted-subtle h-8 animate-pulse rounded"
161
161
  style={{ width: `${85 - i * 10}%` }}
162
162
  />
163
163
  ))}
@@ -211,7 +211,7 @@ export function EnvironmentVariableEditor({
211
211
  onClick={() => setShowAddForm(true)}
212
212
  className={cn(
213
213
  "mt-1 flex items-center gap-1.5 rounded-md px-2 py-1.5 text-xs",
214
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
214
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
215
215
  "transition-colors",
216
216
  )}
217
217
  >
@@ -396,7 +396,7 @@ function VariableRow({
396
396
  {variable.key}
397
397
  </span>
398
398
  {variable.isSecret && (
399
- <span className="text-[0.55rem] uppercase tracking-wider text-muted-foreground/60">
399
+ <span className="text-[0.55rem] uppercase tracking-wider text-muted-foreground-subtle">
400
400
  secret
401
401
  </span>
402
402
  )}
@@ -584,7 +584,7 @@ function AddVariableForm({
584
584
  disabled={!canSubmit}
585
585
  className={cn(
586
586
  "inline-flex items-center gap-1.5 rounded-md px-3 py-1 text-xs font-medium",
587
- "bg-primary text-primary-foreground hover:bg-primary/90",
587
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
588
588
  "disabled:pointer-events-none disabled:opacity-40",
589
589
  )}
590
590
  >
@@ -597,7 +597,7 @@ function AddVariableForm({
597
597
  disabled={isAdding}
598
598
  className={cn(
599
599
  "rounded-md px-3 py-1 text-xs",
600
- "text-muted-foreground hover:text-foreground hover:bg-accent/50",
600
+ "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
601
601
  "disabled:pointer-events-none disabled:opacity-50",
602
602
  )}
603
603
  >
@@ -626,10 +626,10 @@ function ActionButton({
626
626
  children: React.ReactNode;
627
627
  }) {
628
628
  const colorClass = {
629
- primary: "text-primary hover:text-primary/80",
629
+ primary: "text-primary hover:text-primary-muted",
630
630
  muted: "text-muted-foreground hover:text-foreground",
631
631
  "muted-danger": "text-muted-foreground hover:text-destructive",
632
- danger: "text-destructive hover:text-destructive/80",
632
+ danger: "text-destructive hover:text-destructive-muted",
633
633
  }[variant];
634
634
 
635
635
  return (
@@ -75,7 +75,7 @@ export function ErrorMessage({
75
75
  <div
76
76
  role="alert"
77
77
  className={cn(
78
- "bg-destructive/5 border-destructive/20 text-destructive rounded-lg border p-4",
78
+ "bg-destructive-subtle border-destructive/20 text-destructive rounded-lg border p-4",
79
79
  className,
80
80
  )}
81
81
  >
@@ -90,14 +90,14 @@ export function ErrorMessage({
90
90
  <p className="text-sm font-medium">
91
91
  {title ?? CATEGORY_TITLES[category]}
92
92
  </p>
93
- <p className="text-destructive/80 text-sm">{message}</p>
93
+ <p className="text-destructive-muted text-sm">{message}</p>
94
94
 
95
95
  {metadata && (
96
96
  <div className="pt-1">
97
97
  <button
98
98
  type="button"
99
99
  onClick={() => setDetailsOpen((prev) => !prev)}
100
- className="text-destructive/60 hover:text-destructive/80 inline-flex items-center gap-1 text-xs transition-colors"
100
+ className="text-destructive-muted hover:text-destructive-muted inline-flex items-center gap-1 text-xs transition-colors"
101
101
  >
102
102
  <ChevronDownIcon
103
103
  className={cn(
@@ -108,7 +108,7 @@ export function ErrorMessage({
108
108
  Technical details
109
109
  </button>
110
110
  {detailsOpen && (
111
- <dl className="text-destructive/60 mt-1.5 space-y-0.5 font-mono text-xs">
111
+ <dl className="text-destructive-muted mt-1.5 space-y-0.5 font-mono text-xs">
112
112
  <div className="flex gap-2">
113
113
  <dt className="shrink-0">Method:</dt>
114
114
  <dd className="truncate">{metadata.method}</dd>
@@ -129,7 +129,7 @@ export function ErrorMessage({
129
129
  onClick={retry}
130
130
  className={cn(
131
131
  "inline-flex shrink-0 items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-xs font-medium",
132
- "border-destructive/20 text-destructive hover:bg-destructive/10",
132
+ "border-destructive/20 text-destructive hover:bg-destructive-subtle",
133
133
  "transition-colors",
134
134
  )}
135
135
  >
@@ -106,7 +106,7 @@ export function ApprovalCard({
106
106
 
107
107
  const borderClass =
108
108
  categoryInfo.category === "delete"
109
- ? "border-destructive/30 bg-destructive/5"
109
+ ? "border-destructive/30 bg-destructive-subtle"
110
110
  : "border-warning/30 bg-warning/5";
111
111
 
112
112
  return (
@@ -119,7 +119,7 @@ export function ApprovalCard({
119
119
  <div
120
120
  className={cn(
121
121
  "flex items-center gap-2 px-2.5 py-1.5 text-xs",
122
- "border-b border-border/30",
122
+ "border-b border-border-muted",
123
123
  )}
124
124
  >
125
125
  <span className="shrink-0 text-warning" aria-hidden="true">
@@ -231,11 +231,11 @@ function ActionButton({
231
231
  ),
232
232
  skip: cn(
233
233
  "border border-border bg-background text-muted-foreground hover:bg-muted hover:text-foreground",
234
- "disabled:bg-muted/30 disabled:text-muted-foreground/50",
234
+ "disabled:bg-muted-faint disabled:text-muted-foreground-faint",
235
235
  ),
236
236
  reject: cn(
237
- "bg-destructive text-destructive-foreground hover:bg-destructive/90",
238
- "disabled:bg-destructive/50 disabled:text-destructive-foreground/70",
237
+ "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
238
+ "disabled:bg-destructive-subtle0 disabled:text-destructive-foreground/70",
239
239
  ),
240
240
  };
241
241
 
@@ -192,7 +192,7 @@ export function ArtifactCard({
192
192
  />
193
193
  )}
194
194
  {detectionLabel && (
195
- <span className="mt-1.5 inline-flex items-center rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary">
195
+ <span className="mt-1.5 inline-flex items-center rounded-full bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary">
196
196
  {detectionLabel}
197
197
  </span>
198
198
  )}
@@ -204,7 +204,7 @@ export function ArtifactCard({
204
204
  type="button"
205
205
  onClick={() => onPreview!(artifact)}
206
206
  className={cn(
207
- "text-xs font-medium text-primary transition-colors hover:text-primary/80",
207
+ "text-xs font-medium text-primary transition-colors hover:text-primary-muted",
208
208
  FOCUS_RING_CLASSES,
209
209
  )}
210
210
  >
@@ -447,7 +447,7 @@ function ContentHeader({
447
447
  />
448
448
  )}
449
449
  {detectionLabel && (
450
- <span className="inline-flex items-center rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary">
450
+ <span className="inline-flex items-center rounded-full bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary">
451
451
  {detectionLabel}
452
452
  </span>
453
453
  )}
@@ -548,7 +548,7 @@ function DirectoryContentView({
548
548
  return (
549
549
  <div className="p-4">
550
550
  {skillDetection.detected && (
551
- <div className="mb-4 rounded-md bg-primary/5 p-3">
551
+ <div className="mb-4 rounded-md bg-primary-subtle p-3">
552
552
  <p className="text-sm font-medium text-foreground">
553
553
  {skillDetection.skillName}
554
554
  </p>
@@ -671,7 +671,7 @@ function ActionBar({
671
671
  type="button"
672
672
  onClick={onApply}
673
673
  className={cn(
674
- "text-xs font-medium text-destructive underline transition-colors hover:text-destructive/80",
674
+ "text-xs font-medium text-destructive underline transition-colors hover:text-destructive-muted",
675
675
  FOCUS_RING_CLASSES,
676
676
  )}
677
677
  >
@@ -717,7 +717,7 @@ function ApplyButton({
717
717
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
718
718
  "disabled:cursor-not-allowed",
719
719
  canApply
720
- ? "bg-primary text-primary-foreground hover:bg-primary/90"
720
+ ? "bg-primary text-primary-foreground hover:bg-primary-hover"
721
721
  : "bg-muted text-muted-foreground",
722
722
  )}
723
723
  >
@@ -161,7 +161,7 @@ export function FollowUpInput({
161
161
  className="block w-full resize-none bg-transparent px-4 pt-3 pb-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none disabled:cursor-not-allowed"
162
162
  />
163
163
 
164
- <div className="flex items-center justify-between gap-2 border-t border-border/50 px-3 py-2">
164
+ <div className="flex items-center justify-between gap-2 border-t border-border-muted px-3 py-2">
165
165
  <div className="flex items-center gap-2">
166
166
  {showModelSelector && (
167
167
  <ModelSelector
@@ -176,7 +176,7 @@ export function FollowUpInput({
176
176
  type="button"
177
177
  disabled={!canSubmit}
178
178
  onClick={handleSubmit}
179
- className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground transition-colors hover:bg-primary/90 disabled:pointer-events-none disabled:opacity-40"
179
+ className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary text-primary-foreground transition-colors hover:bg-primary-hover disabled:pointer-events-none disabled:opacity-40"
180
180
  aria-label="Send message"
181
181
  >
182
182
  {isSubmitting ? <SpinnerIcon /> : <ArrowUpIcon />}
@@ -94,7 +94,7 @@ export function McpMetadataRow({
94
94
  <span className="inline-flex items-center gap-1.5 rounded bg-muted px-1.5 py-0.5 font-mono">
95
95
  <McpServerIcon />
96
96
  {mcpServerSlug}
97
- <span className="text-muted-foreground/60">/</span>
97
+ <span className="text-muted-foreground-subtle">/</span>
98
98
  <span className="text-foreground">{humanizeToolName(toolName)}</span>
99
99
  </span>
100
100
  )}
@@ -139,7 +139,7 @@ export function McpArgsView({ args }: McpArgsViewProps) {
139
139
  <span className="font-medium text-muted-foreground">Arguments</span>
140
140
 
141
141
  {scalars.length > 0 && (
142
- <dl className="grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 rounded-md border border-border bg-muted/30 px-2.5 py-2">
142
+ <dl className="grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 rounded-md border border-border bg-muted-faint px-2.5 py-2">
143
143
  {scalars.map(([key, value]) => (
144
144
  <ScalarRow key={key} label={key} value={value} />
145
145
  ))}
@@ -167,7 +167,7 @@ function ScalarRow({ label, value }: { label: string; value: string }) {
167
167
  </dt>
168
168
  {isMultiline ? (
169
169
  <dd className="min-w-0">
170
- <pre className="whitespace-pre-wrap break-words rounded border border-border bg-muted/40 px-2 py-1 font-mono text-foreground">
170
+ <pre className="whitespace-pre-wrap break-words rounded border border-border bg-muted-subtle px-2 py-1 font-mono text-foreground">
171
171
  {value}
172
172
  </pre>
173
173
  </dd>
@@ -192,7 +192,7 @@ function McpResultView({ result }: { result: string }) {
192
192
  <span className="font-medium text-muted-foreground">Result</span>
193
193
  <CollapsiblePre
194
194
  content={parsed}
195
- className="max-h-80 overflow-auto rounded-md border border-border bg-muted/40 p-2 text-foreground"
195
+ className="max-h-80 overflow-auto rounded-md border border-border bg-muted-subtle p-2 text-foreground"
196
196
  />
197
197
  </div>
198
198
  );
@@ -62,7 +62,7 @@ function HumanMessage({
62
62
  <div
63
63
  role="article"
64
64
  aria-label="User message"
65
- className={cn("ms-[20%] rounded-lg bg-muted/50 px-4 py-3", className)}
65
+ className={cn("ms-[20%] rounded-lg bg-muted-subtle px-4 py-3", className)}
66
66
  >
67
67
  <p className="text-sm text-foreground whitespace-pre-wrap">{content}</p>
68
68
  </div>
@@ -406,7 +406,7 @@ export function MessageThread({
406
406
  key={item.key}
407
407
  role="article"
408
408
  aria-label="Sending message"
409
- className="ms-[20%] rounded-lg bg-muted/50 px-4 py-3 opacity-70"
409
+ className="ms-[20%] rounded-lg bg-muted-subtle px-4 py-3 opacity-70"
410
410
  >
411
411
  <p className="text-sm text-foreground whitespace-pre-wrap">
412
412
  {item.content}
@@ -123,7 +123,7 @@ export function SessionVariablesInput({
123
123
  {entries.canScrollDown && <ScrollFade position="bottom" />}
124
124
  </div>
125
125
  ) : (
126
- <p className="py-2 text-center text-[0.65rem] text-muted-foreground/70">
126
+ <p className="py-2 text-center text-[0.65rem] text-muted-foreground-subtle">
127
127
  No variables added.
128
128
  </p>
129
129
  )}
@@ -136,7 +136,7 @@ export function SessionVariablesInput({
136
136
  className={cn(
137
137
  "inline-flex w-full items-center justify-center gap-1 rounded-md py-1.5 text-xs",
138
138
  "border border-dashed border-border text-muted-foreground",
139
- "hover:border-border hover:bg-accent/50 hover:text-foreground",
139
+ "hover:border-border hover:bg-accent-hover hover:text-foreground",
140
140
  "disabled:pointer-events-none disabled:opacity-50",
141
141
  )}
142
142
  >
@@ -194,7 +194,7 @@ function VariableEntryRow({
194
194
  aria-label="Variable name"
195
195
  className={cn(
196
196
  "min-w-0 flex-1 rounded-md border border-input bg-background px-2.5 py-1.5 font-mono text-xs text-foreground",
197
- "placeholder:text-muted-foreground/50",
197
+ "placeholder:text-muted-foreground-faint",
198
198
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
199
199
  "disabled:pointer-events-none disabled:opacity-50",
200
200
  isDuplicate && "border-warning",
@@ -231,7 +231,7 @@ function VariableEntryRow({
231
231
  aria-label={`Variable value${entryKey.trim() ? ` for ${entryKey.trim()}` : ""}`}
232
232
  className={cn(
233
233
  "w-full rounded-md border border-input bg-background px-2.5 py-1.5 text-xs text-foreground",
234
- "placeholder:text-muted-foreground/50",
234
+ "placeholder:text-muted-foreground-faint",
235
235
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
236
236
  "disabled:pointer-events-none disabled:opacity-50",
237
237
  )}
@@ -268,7 +268,7 @@ function VariableEntryRow({
268
268
 
269
269
  {/* Required-by indicator */}
270
270
  {requiredBy && requiredBy.length > 0 && (
271
- <p className="text-[0.55rem] text-primary/70">
271
+ <p className="text-[0.55rem] text-primary-muted">
272
272
  Used by: {requiredBy.join(", ")}
273
273
  </p>
274
274
  )}
@@ -308,8 +308,8 @@ function SecretToggle({
308
308
  "inline-flex shrink-0 items-center gap-0.5 rounded-md px-1.5 py-1 text-[0.55rem] font-medium uppercase tracking-wider transition-colors",
309
309
  "disabled:pointer-events-none disabled:opacity-50",
310
310
  checked
311
- ? "bg-primary/10 text-primary"
312
- : "bg-muted/50 text-muted-foreground hover:bg-muted",
311
+ ? "bg-primary-subtle text-primary"
312
+ : "bg-muted-subtle text-muted-foreground hover:bg-muted",
313
313
  )}
314
314
  >
315
315
  <LockIcon />
@@ -158,7 +158,7 @@ function CollapsibleCard({
158
158
  role="group"
159
159
  aria-label={ariaLabel}
160
160
  className={cn(
161
- "rounded-md border border-border border-l-2 border-l-primary/30 bg-muted/30",
161
+ "rounded-md border border-border border-l-2 border-l-primary/30 bg-muted-faint",
162
162
  className,
163
163
  )}
164
164
  >
@@ -169,11 +169,11 @@ function CollapsibleCard({
169
169
  onClick={handleToggle}
170
170
  className={cn(
171
171
  "flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs text-muted-foreground transition-colors",
172
- "hover:bg-muted/50",
172
+ "hover:bg-muted-subtle",
173
173
  "cursor-pointer",
174
174
  )}
175
175
  >
176
- <span className="shrink-0 text-primary/70" aria-hidden="true">
176
+ <span className="shrink-0 text-primary-muted" aria-hidden="true">
177
177
  <BotIcon />
178
178
  </span>
179
179
  <span className="min-w-0 flex-1 truncate">{displayLabel}</span>
@@ -216,7 +216,7 @@ function CollapsibleCard({
216
216
  >
217
217
  <div className="overflow-hidden">
218
218
  {expanded && (
219
- <div className="border-t border-border/50 px-2.5 pb-2 pt-1.5">
219
+ <div className="border-t border-border-muted px-2.5 pb-2 pt-1.5">
220
220
  <SubAgentThreadContent
221
221
  threadItems={threadItems}
222
222
  todos={sub.todos}
@@ -350,7 +350,7 @@ function SubAgentThreadContent({
350
350
  )}
351
351
 
352
352
  {isFailed && error && (
353
- <div className="rounded-md border border-destructive/20 bg-destructive/5 px-2 py-1.5 text-xs text-destructive">
353
+ <div className="rounded-md border border-destructive/20 bg-destructive-subtle px-2 py-1.5 text-xs text-destructive">
354
354
  {error}
355
355
  </div>
356
356
  )}
@@ -58,7 +58,7 @@ export function ToolCallDetail({ toolCall, className }: ToolCallDetailProps) {
58
58
  {isFailed && toolCall.error && (
59
59
  <div className="space-y-1">
60
60
  <span className="font-medium text-destructive">Error</span>
61
- <pre className="whitespace-pre-wrap break-words rounded-md border border-destructive/20 bg-destructive/5 p-2 font-mono text-destructive">
61
+ <pre className="whitespace-pre-wrap break-words rounded-md border border-destructive/20 bg-destructive-subtle p-2 font-mono text-destructive">
62
62
  {toolCall.error}
63
63
  </pre>
64
64
  </div>
@@ -199,7 +199,7 @@ function ThinkToolDetail({ toolCall }: { toolCall: ToolCall }) {
199
199
  if (!thought) return null;
200
200
 
201
201
  return (
202
- <div className="rounded-md border border-border/50 bg-muted/20 p-3">
202
+ <div className="rounded-md border border-border-muted bg-muted-faint p-3">
203
203
  <CollapsiblePre
204
204
  content={thought}
205
205
  className="italic text-muted-foreground whitespace-pre-wrap"
@@ -200,7 +200,7 @@ export function ToolCallGroup({
200
200
  role="group"
201
201
  aria-label={ariaLabel}
202
202
  className={cn(
203
- "rounded-md border border-border bg-muted/30",
203
+ "rounded-md border border-border bg-muted-faint",
204
204
  className,
205
205
  )}
206
206
  >
@@ -211,7 +211,7 @@ export function ToolCallGroup({
211
211
  onClick={handleToggle}
212
212
  className={cn(
213
213
  "flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs text-muted-foreground transition-colors",
214
- "hover:bg-muted/50",
214
+ "hover:bg-muted-subtle",
215
215
  "cursor-pointer",
216
216
  )}
217
217
  >
@@ -231,7 +231,7 @@ export function ToolCallGroup({
231
231
  >
232
232
  <div className="overflow-hidden">
233
233
  {expanded && (
234
- <div className="border-t border-border/50">
234
+ <div className="border-t border-border-muted">
235
235
  {toolCalls.map((tc) => (
236
236
  <ToolCallItem
237
237
  key={tc.id || tc.name}
@@ -126,7 +126,7 @@ export function ToolCallItem({
126
126
 
127
127
  if (isNonExpandableRead) {
128
128
  return (
129
- <div className={cn("border-b border-border/50 last:border-b-0", className)}>
129
+ <div className={cn("border-b border-border-muted last:border-b-0", className)}>
130
130
  <div
131
131
  className="flex w-full items-center gap-2 px-2.5 py-1.5 text-xs"
132
132
  >
@@ -156,15 +156,15 @@ export function ToolCallItem({
156
156
  : primaryArg;
157
157
 
158
158
  return (
159
- <div className={cn("border-b border-border/50 last:border-b-0", className)}>
159
+ <div className={cn("border-b border-border-muted last:border-b-0", className)}>
160
160
  <button
161
161
  type="button"
162
162
  aria-expanded={expanded}
163
163
  onClick={() => setExpanded((v) => !v)}
164
164
  className={cn(
165
165
  "flex w-full items-center gap-2 px-2.5 py-1.5 text-left text-xs transition-colors",
166
- "hover:bg-muted/50",
167
- expanded && "bg-muted/30",
166
+ "hover:bg-muted-subtle",
167
+ expanded && "bg-muted-faint",
168
168
  )}
169
169
  >
170
170
  <span className="shrink-0 text-muted-foreground" aria-hidden="true">