cowork-os 0.3.21 → 0.3.23

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 (170) hide show
  1. package/README.md +293 -6
  2. package/connectors/README.md +20 -0
  3. package/connectors/asana-mcp/README.md +24 -0
  4. package/connectors/asana-mcp/dist/index.js +427 -0
  5. package/connectors/asana-mcp/package.json +15 -0
  6. package/connectors/asana-mcp/src/index.ts +553 -0
  7. package/connectors/asana-mcp/tsconfig.json +13 -0
  8. package/connectors/hubspot-mcp/README.md +35 -0
  9. package/connectors/hubspot-mcp/dist/index.js +454 -0
  10. package/connectors/hubspot-mcp/package.json +15 -0
  11. package/connectors/hubspot-mcp/src/index.ts +562 -0
  12. package/connectors/hubspot-mcp/tsconfig.json +13 -0
  13. package/connectors/jira-mcp/README.md +49 -0
  14. package/connectors/jira-mcp/dist/index.js +588 -0
  15. package/connectors/jira-mcp/package.json +15 -0
  16. package/connectors/jira-mcp/src/index.ts +711 -0
  17. package/connectors/jira-mcp/tsconfig.json +13 -0
  18. package/connectors/linear-mcp/README.md +22 -0
  19. package/connectors/linear-mcp/dist/index.js +402 -0
  20. package/connectors/linear-mcp/package.json +15 -0
  21. package/connectors/linear-mcp/src/index.ts +522 -0
  22. package/connectors/linear-mcp/tsconfig.json +13 -0
  23. package/connectors/okta-mcp/README.md +24 -0
  24. package/connectors/okta-mcp/dist/index.js +411 -0
  25. package/connectors/okta-mcp/package.json +15 -0
  26. package/connectors/okta-mcp/src/index.ts +520 -0
  27. package/connectors/okta-mcp/tsconfig.json +13 -0
  28. package/connectors/salesforce-mcp/README.md +47 -0
  29. package/connectors/salesforce-mcp/dist/index.js +584 -0
  30. package/connectors/salesforce-mcp/package.json +15 -0
  31. package/connectors/salesforce-mcp/src/index.ts +722 -0
  32. package/connectors/salesforce-mcp/tsconfig.json +13 -0
  33. package/connectors/servicenow-mcp/README.md +26 -0
  34. package/connectors/servicenow-mcp/dist/index.js +400 -0
  35. package/connectors/servicenow-mcp/package.json +15 -0
  36. package/connectors/servicenow-mcp/src/index.ts +500 -0
  37. package/connectors/servicenow-mcp/tsconfig.json +13 -0
  38. package/connectors/templates/mcp-connector/README.md +31 -0
  39. package/connectors/templates/mcp-connector/package.json +15 -0
  40. package/connectors/templates/mcp-connector/src/index.ts +330 -0
  41. package/connectors/templates/mcp-connector/tsconfig.json +13 -0
  42. package/connectors/zendesk-mcp/README.md +40 -0
  43. package/connectors/zendesk-mcp/dist/index.js +431 -0
  44. package/connectors/zendesk-mcp/package.json +15 -0
  45. package/connectors/zendesk-mcp/src/index.ts +543 -0
  46. package/connectors/zendesk-mcp/tsconfig.json +13 -0
  47. package/dist/electron/electron/agent/daemon.js +25 -0
  48. package/dist/electron/electron/agent/executor.js +181 -26
  49. package/dist/electron/electron/agent/llm/anthropic-compatible-provider.js +177 -0
  50. package/dist/electron/electron/agent/llm/github-copilot-provider.js +97 -0
  51. package/dist/electron/electron/agent/llm/groq-provider.js +33 -0
  52. package/dist/electron/electron/agent/llm/index.js +11 -1
  53. package/dist/electron/electron/agent/llm/kimi-provider.js +33 -0
  54. package/dist/electron/electron/agent/llm/openai-compatible-provider.js +116 -0
  55. package/dist/electron/electron/agent/llm/openai-compatible.js +111 -0
  56. package/dist/electron/electron/agent/llm/openai-oauth.js +2 -1
  57. package/dist/electron/electron/agent/llm/openrouter-provider.js +1 -1
  58. package/dist/electron/electron/agent/llm/provider-factory.js +318 -4
  59. package/dist/electron/electron/agent/llm/types.js +66 -1
  60. package/dist/electron/electron/agent/llm/xai-provider.js +33 -0
  61. package/dist/electron/electron/agent/tools/box-tools.js +231 -0
  62. package/dist/electron/electron/agent/tools/builtin-settings.js +28 -0
  63. package/dist/electron/electron/agent/tools/dropbox-tools.js +237 -0
  64. package/dist/electron/electron/agent/tools/google-drive-tools.js +227 -0
  65. package/dist/electron/electron/agent/tools/notion-tools.js +312 -0
  66. package/dist/electron/electron/agent/tools/onedrive-tools.js +217 -0
  67. package/dist/electron/electron/agent/tools/registry.js +541 -0
  68. package/dist/electron/electron/agent/tools/sharepoint-tools.js +243 -0
  69. package/dist/electron/electron/agent/tools/shell-tools.js +12 -3
  70. package/dist/electron/electron/agent/tools/x-tools.js +1 -1
  71. package/dist/electron/electron/gateway/index.js +1 -0
  72. package/dist/electron/electron/gateway/router.js +123 -143
  73. package/dist/electron/electron/ipc/canvas-handlers.js +5 -0
  74. package/dist/electron/electron/ipc/handlers.js +627 -158
  75. package/dist/electron/electron/main.js +63 -0
  76. package/dist/electron/electron/mcp/oauth/connector-oauth.js +333 -0
  77. package/dist/electron/electron/mcp/registry/MCPRegistryManager.js +503 -154
  78. package/dist/electron/electron/memory/MemoryService.js +1 -1
  79. package/dist/electron/electron/preload.js +74 -1
  80. package/dist/electron/electron/settings/box-manager.js +54 -0
  81. package/dist/electron/electron/settings/dropbox-manager.js +54 -0
  82. package/dist/electron/electron/settings/google-drive-manager.js +54 -0
  83. package/dist/electron/electron/settings/notion-manager.js +56 -0
  84. package/dist/electron/electron/settings/onedrive-manager.js +54 -0
  85. package/dist/electron/electron/settings/sharepoint-manager.js +54 -0
  86. package/dist/electron/electron/utils/box-api.js +153 -0
  87. package/dist/electron/electron/utils/dropbox-api.js +144 -0
  88. package/dist/electron/electron/utils/env-migration.js +19 -0
  89. package/dist/electron/electron/utils/google-drive-api.js +152 -0
  90. package/dist/electron/electron/utils/notion-api.js +103 -0
  91. package/dist/electron/electron/utils/onedrive-api.js +113 -0
  92. package/dist/electron/electron/utils/sharepoint-api.js +109 -0
  93. package/dist/electron/electron/utils/validation.js +82 -3
  94. package/dist/electron/electron/utils/x-cli.js +1 -1
  95. package/dist/electron/shared/channelMessages.js +284 -3
  96. package/dist/electron/shared/llm-provider-catalog.js +198 -0
  97. package/dist/electron/shared/types.js +88 -1
  98. package/package.json +12 -2
  99. package/src/electron/agent/executor.ts +205 -28
  100. package/src/electron/agent/llm/anthropic-compatible-provider.ts +214 -0
  101. package/src/electron/agent/llm/github-copilot-provider.ts +117 -0
  102. package/src/electron/agent/llm/groq-provider.ts +39 -0
  103. package/src/electron/agent/llm/index.ts +5 -0
  104. package/src/electron/agent/llm/kimi-provider.ts +39 -0
  105. package/src/electron/agent/llm/openai-compatible-provider.ts +153 -0
  106. package/src/electron/agent/llm/openai-compatible.ts +133 -0
  107. package/src/electron/agent/llm/openai-oauth.ts +2 -1
  108. package/src/electron/agent/llm/openrouter-provider.ts +2 -1
  109. package/src/electron/agent/llm/provider-factory.ts +414 -6
  110. package/src/electron/agent/llm/types.ts +90 -1
  111. package/src/electron/agent/llm/xai-provider.ts +39 -0
  112. package/src/electron/agent/tools/box-tools.ts +239 -0
  113. package/src/electron/agent/tools/builtin-settings.ts +34 -0
  114. package/src/electron/agent/tools/dropbox-tools.ts +237 -0
  115. package/src/electron/agent/tools/google-drive-tools.ts +228 -0
  116. package/src/electron/agent/tools/notion-tools.ts +330 -0
  117. package/src/electron/agent/tools/onedrive-tools.ts +217 -0
  118. package/src/electron/agent/tools/registry.ts +565 -0
  119. package/src/electron/agent/tools/sharepoint-tools.ts +247 -0
  120. package/src/electron/agent/tools/shell-tools.ts +11 -3
  121. package/src/electron/agent/tools/x-tools.ts +1 -1
  122. package/src/electron/database/SecureSettingsRepository.ts +7 -1
  123. package/src/electron/gateway/index.ts +1 -0
  124. package/src/electron/gateway/router.ts +134 -149
  125. package/src/electron/ipc/canvas-handlers.ts +10 -0
  126. package/src/electron/ipc/handlers.ts +673 -153
  127. package/src/electron/main.ts +35 -0
  128. package/src/electron/mcp/oauth/connector-oauth.ts +448 -0
  129. package/src/electron/mcp/registry/MCPRegistryManager.ts +343 -12
  130. package/src/electron/memory/MemoryService.ts +5 -1
  131. package/src/electron/preload.ts +167 -4
  132. package/src/electron/settings/box-manager.ts +58 -0
  133. package/src/electron/settings/dropbox-manager.ts +58 -0
  134. package/src/electron/settings/google-drive-manager.ts +58 -0
  135. package/src/electron/settings/notion-manager.ts +60 -0
  136. package/src/electron/settings/onedrive-manager.ts +58 -0
  137. package/src/electron/settings/sharepoint-manager.ts +58 -0
  138. package/src/electron/utils/box-api.ts +184 -0
  139. package/src/electron/utils/dropbox-api.ts +171 -0
  140. package/src/electron/utils/env-migration.ts +22 -0
  141. package/src/electron/utils/google-drive-api.ts +183 -0
  142. package/src/electron/utils/notion-api.ts +126 -0
  143. package/src/electron/utils/onedrive-api.ts +137 -0
  144. package/src/electron/utils/sharepoint-api.ts +132 -0
  145. package/src/electron/utils/validation.ts +102 -1
  146. package/src/electron/utils/x-cli.ts +1 -1
  147. package/src/renderer/App.tsx +20 -2
  148. package/src/renderer/components/BoxSettings.tsx +203 -0
  149. package/src/renderer/components/BrowserView.tsx +101 -0
  150. package/src/renderer/components/BuiltinToolsSettings.tsx +105 -0
  151. package/src/renderer/components/CanvasPreview.tsx +68 -1
  152. package/src/renderer/components/ConnectorEnvModal.tsx +116 -0
  153. package/src/renderer/components/ConnectorSetupModal.tsx +566 -0
  154. package/src/renderer/components/ConnectorsSettings.tsx +397 -0
  155. package/src/renderer/components/DropboxSettings.tsx +202 -0
  156. package/src/renderer/components/GoogleDriveSettings.tsx +201 -0
  157. package/src/renderer/components/MCPSettings.tsx +56 -0
  158. package/src/renderer/components/MainContent.tsx +270 -34
  159. package/src/renderer/components/NotionSettings.tsx +231 -0
  160. package/src/renderer/components/Onboarding/Onboarding.tsx +13 -1
  161. package/src/renderer/components/OnboardingModal.tsx +70 -1
  162. package/src/renderer/components/OneDriveSettings.tsx +212 -0
  163. package/src/renderer/components/Settings.tsx +611 -8
  164. package/src/renderer/components/SharePointSettings.tsx +224 -0
  165. package/src/renderer/components/Sidebar.tsx +25 -9
  166. package/src/renderer/hooks/useOnboardingFlow.ts +21 -0
  167. package/src/renderer/styles/index.css +438 -25
  168. package/src/shared/channelMessages.ts +367 -4
  169. package/src/shared/llm-provider-catalog.ts +217 -0
  170. package/src/shared/types.ts +226 -1
@@ -536,12 +536,12 @@
536
536
  background: rgba(255, 255, 255, 0.6) !important;
537
537
  }
538
538
 
539
- .theme-light .cli-new-task-btn {
539
+ .theme-light .cli-action-btn {
540
540
  background: rgba(255, 255, 255, 0.8) !important;
541
541
  border-color: rgba(0, 0, 0, 0.1) !important;
542
542
  }
543
543
 
544
- .theme-light .cli-new-task-btn:hover {
544
+ .theme-light .cli-action-btn:hover {
545
545
  background: rgba(255, 255, 255, 1) !important;
546
546
  border-color: var(--color-accent) !important;
547
547
  }
@@ -2047,6 +2047,11 @@ a,
2047
2047
  border-radius: var(--radius-lg);
2048
2048
  }
2049
2049
 
2050
+ .input-container.drag-over {
2051
+ outline: 1px dashed var(--color-border);
2052
+ background: var(--color-bg-hover);
2053
+ }
2054
+
2050
2055
  .input-row {
2051
2056
  display: flex;
2052
2057
  align-items: center;
@@ -2102,6 +2107,30 @@ a,
2102
2107
  gap: 12px;
2103
2108
  }
2104
2109
 
2110
+ .attachment-btn {
2111
+ width: 36px;
2112
+ height: 36px;
2113
+ border-radius: var(--radius-sm);
2114
+ background: var(--color-bg-secondary);
2115
+ border: 1px solid var(--color-border);
2116
+ color: var(--color-text);
2117
+ cursor: pointer;
2118
+ display: flex;
2119
+ align-items: center;
2120
+ justify-content: center;
2121
+ transition: all 0.2s ease;
2122
+ }
2123
+
2124
+ .attachment-btn:hover {
2125
+ background: var(--color-bg-hover);
2126
+ color: var(--color-text);
2127
+ }
2128
+
2129
+ .attachment-btn:disabled {
2130
+ opacity: 0.6;
2131
+ cursor: not-allowed;
2132
+ }
2133
+
2105
2134
  .input-add-btn {
2106
2135
  width: 28px;
2107
2136
  height: 28px;
@@ -2121,6 +2150,81 @@ a,
2121
2150
  color: var(--color-text);
2122
2151
  }
2123
2152
 
2153
+ .attachment-panel {
2154
+ width: 100%;
2155
+ max-width: 800px;
2156
+ margin: 0 auto 10px;
2157
+ display: flex;
2158
+ flex-direction: column;
2159
+ gap: 8px;
2160
+ }
2161
+
2162
+ .attachment-error {
2163
+ padding: 6px 10px;
2164
+ border-radius: var(--radius-sm);
2165
+ background: rgba(239, 68, 68, 0.12);
2166
+ border: 1px solid rgba(239, 68, 68, 0.25);
2167
+ color: var(--color-text);
2168
+ font-size: 12px;
2169
+ }
2170
+
2171
+ .attachment-list {
2172
+ display: flex;
2173
+ flex-wrap: wrap;
2174
+ gap: 8px;
2175
+ }
2176
+
2177
+ .attachment-chip {
2178
+ display: flex;
2179
+ align-items: center;
2180
+ gap: 6px;
2181
+ padding: 6px 8px;
2182
+ background: var(--color-bg-tertiary);
2183
+ border: 1px solid var(--color-border-subtle);
2184
+ border-radius: var(--radius-sm);
2185
+ color: var(--color-text-secondary);
2186
+ font-size: 12px;
2187
+ max-width: 260px;
2188
+ }
2189
+
2190
+ .attachment-icon {
2191
+ display: inline-flex;
2192
+ align-items: center;
2193
+ justify-content: center;
2194
+ }
2195
+
2196
+ .attachment-name {
2197
+ overflow: hidden;
2198
+ text-overflow: ellipsis;
2199
+ white-space: nowrap;
2200
+ max-width: 160px;
2201
+ }
2202
+
2203
+ .attachment-size {
2204
+ color: var(--color-text-muted);
2205
+ font-size: 11px;
2206
+ }
2207
+
2208
+ .attachment-remove {
2209
+ background: transparent;
2210
+ border: none;
2211
+ color: var(--color-text-muted);
2212
+ cursor: pointer;
2213
+ display: inline-flex;
2214
+ align-items: center;
2215
+ justify-content: center;
2216
+ padding: 0;
2217
+ }
2218
+
2219
+ .attachment-remove:hover {
2220
+ color: var(--color-text);
2221
+ }
2222
+
2223
+ .attachment-remove:disabled {
2224
+ opacity: 0.5;
2225
+ cursor: not-allowed;
2226
+ }
2227
+
2124
2228
  .model-selector {
2125
2229
  display: flex;
2126
2230
  align-items: center;
@@ -4055,6 +4159,11 @@ button {
4055
4159
  border-radius: var(--radius-lg);
4056
4160
  }
4057
4161
 
4162
+ .welcome-input-container.drag-over {
4163
+ outline: 1px dashed var(--color-border);
4164
+ background: var(--color-bg-hover);
4165
+ }
4166
+
4058
4167
  .welcome-input {
4059
4168
  width: 100%;
4060
4169
  padding: 14px 16px;
@@ -6499,20 +6608,41 @@ button {
6499
6608
  letter-spacing: 1px;
6500
6609
  }
6501
6610
 
6502
- /* CLI New Task Button */
6503
- .cli-new-task-btn {
6611
+ /* CLI Action Buttons */
6612
+ .cli-header-actions {
6613
+ display: flex;
6614
+ flex-direction: column;
6615
+ gap: 8px;
6616
+ }
6617
+
6618
+ .cli-action-btn {
6619
+ width: 100%;
6504
6620
  display: flex;
6505
6621
  align-items: center;
6506
- gap: 6px;
6507
- background: rgba(0, 0, 0, 0.3) !important;
6622
+ gap: 8px;
6623
+ background: transparent !important;
6508
6624
  border: 1px solid var(--color-border-subtle) !important;
6625
+ border-radius: var(--radius-md);
6509
6626
  font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace !important;
6510
- padding: 10px 14px !important;
6627
+ padding: 8px 12px !important;
6628
+ color: var(--color-text-muted) !important;
6629
+ font-size: 11px !important;
6630
+ letter-spacing: 0.2px;
6631
+ transition: all 0.15s ease;
6511
6632
  }
6512
6633
 
6513
- .cli-new-task-btn:hover {
6634
+ .cli-action-btn:hover {
6514
6635
  border-color: var(--color-accent) !important;
6515
- background: rgba(0, 0, 0, 0.4) !important;
6636
+ color: var(--color-text) !important;
6637
+ background: rgba(0, 0, 0, 0.12) !important;
6638
+ }
6639
+
6640
+ .cli-new-task-btn {
6641
+ justify-content: flex-start;
6642
+ }
6643
+
6644
+ .cli-mission-control-btn {
6645
+ justify-content: flex-start;
6516
6646
  }
6517
6647
 
6518
6648
  .cli-btn-bracket {
@@ -6524,6 +6654,12 @@ button {
6524
6654
  font-weight: 600;
6525
6655
  }
6526
6656
 
6657
+ .cli-btn-accent {
6658
+ color: var(--color-accent);
6659
+ font-weight: 700;
6660
+ letter-spacing: 0.6px;
6661
+ }
6662
+
6527
6663
  .cli-btn-text {
6528
6664
  color: var(--color-text);
6529
6665
  }
@@ -6849,6 +6985,12 @@ button {
6849
6985
  min-height: 48px !important;
6850
6986
  }
6851
6987
 
6988
+ .cli-footer-actions {
6989
+ display: flex;
6990
+ align-items: center;
6991
+ gap: 8px;
6992
+ }
6993
+
6852
6994
  .cli-footer-info {
6853
6995
  display: flex;
6854
6996
  align-items: center;
@@ -7614,6 +7756,80 @@ button {
7614
7756
  background: rgba(239, 68, 68, 0.08);
7615
7757
  }
7616
7758
 
7759
+ .notion-status-badge {
7760
+ display: inline-flex;
7761
+ align-items: center;
7762
+ padding: 4px 10px;
7763
+ border-radius: 999px;
7764
+ font-size: 11px;
7765
+ font-weight: 600;
7766
+ border: 1px solid var(--color-border);
7767
+ background: var(--color-bg-glass);
7768
+ color: var(--color-text-secondary);
7769
+ }
7770
+
7771
+ .notion-status-badge.connected {
7772
+ color: var(--color-success, #22c55e);
7773
+ border-color: rgba(34, 197, 94, 0.35);
7774
+ background: rgba(34, 197, 94, 0.08);
7775
+ }
7776
+
7777
+ .notion-status-badge.configured {
7778
+ color: var(--color-text-secondary);
7779
+ border-color: var(--color-border);
7780
+ }
7781
+
7782
+ .notion-status-badge.missing {
7783
+ color: var(--color-error, #ef4444);
7784
+ border-color: rgba(239, 68, 68, 0.35);
7785
+ background: rgba(239, 68, 68, 0.08);
7786
+ }
7787
+
7788
+ .box-status-badge,
7789
+ .onedrive-status-badge,
7790
+ .google-drive-status-badge,
7791
+ .dropbox-status-badge,
7792
+ .sharepoint-status-badge {
7793
+ display: inline-flex;
7794
+ align-items: center;
7795
+ padding: 4px 10px;
7796
+ border-radius: 999px;
7797
+ font-size: 11px;
7798
+ font-weight: 600;
7799
+ border: 1px solid var(--color-border);
7800
+ background: var(--color-bg-glass);
7801
+ color: var(--color-text-secondary);
7802
+ }
7803
+
7804
+ .box-status-badge.connected,
7805
+ .onedrive-status-badge.connected,
7806
+ .google-drive-status-badge.connected,
7807
+ .dropbox-status-badge.connected,
7808
+ .sharepoint-status-badge.connected {
7809
+ color: var(--color-success, #22c55e);
7810
+ border-color: rgba(34, 197, 94, 0.35);
7811
+ background: rgba(34, 197, 94, 0.08);
7812
+ }
7813
+
7814
+ .box-status-badge.configured,
7815
+ .onedrive-status-badge.configured,
7816
+ .google-drive-status-badge.configured,
7817
+ .dropbox-status-badge.configured,
7818
+ .sharepoint-status-badge.configured {
7819
+ color: var(--color-text-secondary);
7820
+ border-color: var(--color-border);
7821
+ }
7822
+
7823
+ .box-status-badge.missing,
7824
+ .onedrive-status-badge.missing,
7825
+ .google-drive-status-badge.missing,
7826
+ .dropbox-status-badge.missing,
7827
+ .sharepoint-status-badge.missing {
7828
+ color: var(--color-error, #ef4444);
7829
+ border-color: rgba(239, 68, 68, 0.35);
7830
+ background: rgba(239, 68, 68, 0.08);
7831
+ }
7832
+
7617
7833
  .settings-toggle {
7618
7834
  position: relative;
7619
7835
  display: inline-block;
@@ -9388,6 +9604,26 @@ button {
9388
9604
  overflow-y: auto;
9389
9605
  }
9390
9606
 
9607
+ .connector-setup-modal .settings-field label {
9608
+ display: block;
9609
+ font-size: 12px;
9610
+ color: var(--color-text-secondary);
9611
+ margin-bottom: 6px;
9612
+ }
9613
+
9614
+ .connector-mode-toggle {
9615
+ display: flex;
9616
+ gap: 8px;
9617
+ flex-wrap: wrap;
9618
+ }
9619
+
9620
+ .connector-setup-actions {
9621
+ margin-top: 12px;
9622
+ display: flex;
9623
+ gap: 8px;
9624
+ flex-wrap: wrap;
9625
+ }
9626
+
9391
9627
  .mcp-modal-wide {
9392
9628
  max-width: 500px;
9393
9629
  }
@@ -9767,6 +10003,53 @@ button {
9767
10003
  color: var(--color-text);
9768
10004
  }
9769
10005
 
10006
+ .builtin-tool-advanced {
10007
+ border-top: 1px solid var(--color-border);
10008
+ padding: 12px 16px 4px;
10009
+ display: flex;
10010
+ flex-direction: column;
10011
+ gap: 10px;
10012
+ }
10013
+
10014
+ .builtin-tool-advanced-row {
10015
+ display: flex;
10016
+ align-items: center;
10017
+ justify-content: space-between;
10018
+ gap: 12px;
10019
+ }
10020
+
10021
+ .builtin-tool-advanced-text {
10022
+ display: flex;
10023
+ flex-direction: column;
10024
+ gap: 2px;
10025
+ }
10026
+
10027
+ .builtin-tool-advanced-label {
10028
+ font-size: 12px;
10029
+ font-weight: 600;
10030
+ color: var(--color-text);
10031
+ }
10032
+
10033
+ .builtin-tool-advanced-hint {
10034
+ font-size: 11px;
10035
+ color: var(--color-text-secondary);
10036
+ }
10037
+
10038
+ .builtin-tool-timeout-input {
10039
+ width: 110px;
10040
+ padding: 4px 6px;
10041
+ font-size: 12px;
10042
+ background: var(--color-bg-secondary);
10043
+ border: 1px solid var(--color-border);
10044
+ border-radius: var(--radius-sm);
10045
+ color: var(--color-text);
10046
+ }
10047
+
10048
+ .builtin-tool-timeout-input:disabled {
10049
+ opacity: 0.5;
10050
+ cursor: not-allowed;
10051
+ }
10052
+
9770
10053
  .builtin-tool-list {
9771
10054
  padding: 0 16px 16px;
9772
10055
  display: flex;
@@ -11309,6 +11592,46 @@ button {
11309
11592
  gap: 8px;
11310
11593
  }
11311
11594
 
11595
+ .canvas-browser-input-row {
11596
+ display: flex;
11597
+ align-items: center;
11598
+ gap: 8px;
11599
+ padding: 8px 12px;
11600
+ background: rgba(0, 0, 0, 0.2);
11601
+ border-bottom: 1px solid var(--color-border-subtle);
11602
+ }
11603
+
11604
+ .canvas-browser-input {
11605
+ flex: 1;
11606
+ min-width: 160px;
11607
+ padding: 6px 8px;
11608
+ border: 1px solid var(--color-border-subtle);
11609
+ border-radius: 6px;
11610
+ background: var(--color-bg);
11611
+ color: var(--color-text);
11612
+ font-size: 12px;
11613
+ }
11614
+
11615
+ .canvas-browser-btn {
11616
+ padding: 6px 10px;
11617
+ border-radius: 6px;
11618
+ border: 1px solid var(--color-border-subtle);
11619
+ background: var(--color-bg-hover);
11620
+ color: var(--color-text);
11621
+ font-size: 12px;
11622
+ cursor: pointer;
11623
+ transition: all 0.15s ease;
11624
+ }
11625
+
11626
+ .canvas-browser-btn:hover {
11627
+ border-color: var(--color-border);
11628
+ }
11629
+
11630
+ .canvas-browser-btn.ghost {
11631
+ background: transparent;
11632
+ color: var(--color-text-muted);
11633
+ }
11634
+
11312
11635
  .canvas-preview-container.minimized .canvas-preview-header {
11313
11636
  border-bottom: none;
11314
11637
  }
@@ -11555,6 +11878,81 @@ button {
11555
11878
  background: rgba(255, 255, 255, 0.9);
11556
11879
  }
11557
11880
 
11881
+ .browser-view {
11882
+ height: calc(100vh - 40px);
11883
+ display: flex;
11884
+ flex-direction: column;
11885
+ background: var(--color-bg);
11886
+ color: var(--color-text);
11887
+ }
11888
+
11889
+ .browser-toolbar {
11890
+ display: flex;
11891
+ align-items: center;
11892
+ gap: 8px;
11893
+ padding: 10px 16px;
11894
+ border-bottom: 1px solid var(--color-border-subtle);
11895
+ background: rgba(0, 0, 0, 0.2);
11896
+ }
11897
+
11898
+ .browser-toolbar-btn {
11899
+ display: inline-flex;
11900
+ align-items: center;
11901
+ gap: 6px;
11902
+ padding: 6px 10px;
11903
+ border-radius: 6px;
11904
+ border: 1px solid var(--color-border-subtle);
11905
+ background: transparent;
11906
+ color: var(--color-text);
11907
+ font-size: 12px;
11908
+ cursor: pointer;
11909
+ transition: all 0.15s ease;
11910
+ }
11911
+
11912
+ .browser-toolbar-btn.primary {
11913
+ background: var(--color-accent);
11914
+ border-color: transparent;
11915
+ color: #0b0b0b;
11916
+ }
11917
+
11918
+ .browser-toolbar-btn:hover {
11919
+ border-color: var(--color-border);
11920
+ }
11921
+
11922
+ .browser-url {
11923
+ display: flex;
11924
+ align-items: center;
11925
+ gap: 8px;
11926
+ flex: 1;
11927
+ }
11928
+
11929
+ .browser-url input {
11930
+ flex: 1;
11931
+ min-width: 200px;
11932
+ padding: 6px 10px;
11933
+ border-radius: 6px;
11934
+ border: 1px solid var(--color-border-subtle);
11935
+ background: var(--color-bg);
11936
+ color: var(--color-text);
11937
+ font-size: 12px;
11938
+ }
11939
+
11940
+ .browser-surface {
11941
+ flex: 1;
11942
+ background: #111;
11943
+ }
11944
+
11945
+ .browser-webview {
11946
+ width: 100%;
11947
+ height: 100%;
11948
+ border: 0;
11949
+ }
11950
+
11951
+ .browser-empty {
11952
+ padding: 20px;
11953
+ color: var(--color-text-muted);
11954
+ }
11955
+
11558
11956
  /* Canvas preview quick wins - additional styles */
11559
11957
  .canvas-preview-container:focus {
11560
11958
  outline: 2px solid var(--color-accent);
@@ -13834,25 +14232,29 @@ button {
13834
14232
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
13835
14233
  }
13836
14234
 
13837
- /* ==================== MORE CHANNELS PANEL ==================== */
13838
- .more-channels-panel {
14235
+ /* ==================== MORE CHANNELS / INTEGRATIONS PANEL ==================== */
14236
+ .more-channels-panel,
14237
+ .integrations-panel {
13839
14238
  display: flex;
13840
14239
  flex-direction: column;
13841
14240
  gap: 20px;
13842
14241
  }
13843
14242
 
13844
- .more-channels-header h2 {
14243
+ .more-channels-header h2,
14244
+ .integrations-header h2 {
13845
14245
  margin: 0 0 4px 0;
13846
14246
  font-size: 18px;
13847
14247
  font-weight: 600;
13848
14248
  color: var(--color-text);
13849
14249
  }
13850
14250
 
13851
- .more-channels-header .settings-description {
14251
+ .more-channels-header .settings-description,
14252
+ .integrations-header .settings-description {
13852
14253
  margin: 0;
13853
14254
  }
13854
14255
 
13855
- .more-channels-tabs {
14256
+ .more-channels-tabs,
14257
+ .integrations-tabs {
13856
14258
  display: flex;
13857
14259
  flex-wrap: wrap;
13858
14260
  gap: 8px;
@@ -13862,7 +14264,8 @@ button {
13862
14264
  border: 1px solid var(--color-border);
13863
14265
  }
13864
14266
 
13865
- .more-channels-tab {
14267
+ .more-channels-tab,
14268
+ .integrations-tab {
13866
14269
  display: inline-flex;
13867
14270
  align-items: center;
13868
14271
  gap: 6px;
@@ -13878,33 +14281,39 @@ button {
13878
14281
  white-space: nowrap;
13879
14282
  }
13880
14283
 
13881
- .more-channels-tab:hover {
14284
+ .more-channels-tab:hover,
14285
+ .integrations-tab:hover {
13882
14286
  background: var(--color-bg-glass-hover);
13883
14287
  color: var(--color-text);
13884
14288
  }
13885
14289
 
13886
- .more-channels-tab.active {
14290
+ .more-channels-tab.active,
14291
+ .integrations-tab.active {
13887
14292
  background: var(--color-accent-subtle);
13888
14293
  color: var(--color-text);
13889
14294
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
13890
14295
  }
13891
14296
 
13892
- .more-channels-tab svg {
14297
+ .more-channels-tab svg,
14298
+ .integrations-tab svg {
13893
14299
  opacity: 0.6;
13894
14300
  flex-shrink: 0;
13895
14301
  }
13896
14302
 
13897
- .more-channels-tab.active svg {
14303
+ .more-channels-tab.active svg,
14304
+ .integrations-tab.active svg {
13898
14305
  opacity: 1;
13899
14306
  color: var(--color-accent);
13900
14307
  }
13901
14308
 
13902
- .more-channels-tab span {
14309
+ .more-channels-tab span,
14310
+ .integrations-tab span {
13903
14311
  overflow: hidden;
13904
14312
  text-overflow: ellipsis;
13905
14313
  }
13906
14314
 
13907
- .more-channels-content {
14315
+ .more-channels-content,
14316
+ .integrations-content {
13908
14317
  border: 1px solid var(--color-border);
13909
14318
  border-radius: var(--radius-lg);
13910
14319
  background: var(--color-bg-tertiary);
@@ -13912,21 +14321,25 @@ button {
13912
14321
  }
13913
14322
 
13914
14323
  /* Light theme overrides */
13915
- .theme-light .more-channels-tabs {
14324
+ .theme-light .more-channels-tabs,
14325
+ .theme-light .integrations-tabs {
13916
14326
  background: rgba(0, 0, 0, 0.03);
13917
14327
  border-color: rgba(0, 0, 0, 0.12);
13918
14328
  }
13919
14329
 
13920
- .theme-light .more-channels-tab:hover {
14330
+ .theme-light .more-channels-tab:hover,
14331
+ .theme-light .integrations-tab:hover {
13921
14332
  background: rgba(0, 0, 0, 0.06);
13922
14333
  }
13923
14334
 
13924
- .theme-light .more-channels-tab.active {
14335
+ .theme-light .more-channels-tab.active,
14336
+ .theme-light .integrations-tab.active {
13925
14337
  background: white;
13926
14338
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
13927
14339
  }
13928
14340
 
13929
- .theme-light .more-channels-content {
14341
+ .theme-light .more-channels-content,
14342
+ .theme-light .integrations-content {
13930
14343
  background: rgba(255, 255, 255, 0.6);
13931
14344
  border-color: rgba(0, 0, 0, 0.12);
13932
14345
  }