@kortix/ui 0.14.7 → 0.14.9

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 (576) hide show
  1. package/README.md +2 -2
  2. package/dist/_vendor/kortix-shared.js +64 -4
  3. package/dist/_vendor/shared/app-config.d.ts +175 -0
  4. package/dist/_vendor/shared/channel-message.d.ts +34 -5
  5. package/dist/_vendor/shared/index.d.ts +1 -0
  6. package/dist/_vendor/shared/runtime-versions.d.ts +4 -0
  7. package/dist/_vendor/shared/space-slug.d.ts +37 -0
  8. package/dist/access/access/access-detail-shell.js +1 -1
  9. package/dist/access/access/access-dialog-share.js +4 -7
  10. package/dist/access/access/access-dialog.js +2 -1
  11. package/dist/access/access/principal-picker.d.ts +11 -0
  12. package/dist/access/access/principal-picker.js +9 -7
  13. package/dist/apps/app-preview-pool.d.ts +7 -2
  14. package/dist/apps/app-preview-pool.js +11 -5
  15. package/dist/apps/app-shared.d.ts +22 -15
  16. package/dist/apps/app-shared.js +37 -19
  17. package/dist/apps/index.d.ts +2 -2
  18. package/dist/apps/index.js +2 -2
  19. package/dist/artifacts/artifact-frame.d.ts +16 -0
  20. package/dist/artifacts/artifact-frame.js +51 -0
  21. package/dist/artifacts/artifact-session.d.ts +18 -0
  22. package/dist/artifacts/artifact-session.js +101 -0
  23. package/dist/artifacts/frame-policy.d.ts +30 -0
  24. package/dist/artifacts/frame-policy.js +61 -0
  25. package/dist/artifacts/index.d.ts +3 -0
  26. package/dist/artifacts/index.js +5 -0
  27. package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
  28. package/dist/browser/sandbox-browser-chrome.js +2 -2
  29. package/dist/customize/agents/agent-cover-card.d.ts +17 -0
  30. package/dist/customize/agents/agent-cover-card.js +13 -0
  31. package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
  32. package/dist/customize/agents/agent-grant-pages.js +30 -4
  33. package/dist/customize/agents/agent-page.js +8 -33
  34. package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
  35. package/dist/customize/agents/agent-policy-sets.js +72 -0
  36. package/dist/customize/agents/agent-triggers-section.js +2 -1
  37. package/dist/customize/agents/agents-page.js +43 -49
  38. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
  39. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
  40. package/dist/customize/connectors/agent-access.d.ts +35 -0
  41. package/dist/customize/connectors/agent-access.js +77 -0
  42. package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
  43. package/dist/customize/connectors/catalog/browse-sections.js +7 -74
  44. package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
  45. package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
  46. package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
  47. package/dist/customize/connectors/catalog/connector-browse.js +19 -50
  48. package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
  49. package/dist/customize/connectors/catalog/use-catalog.js +48 -175
  50. package/dist/customize/connectors/connector-identity.d.ts +9 -11
  51. package/dist/customize/connectors/connector-identity.js +13 -42
  52. package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
  53. package/dist/customize/connectors/connector-moves-banner.js +4 -6
  54. package/dist/customize/connectors/connector-routes.d.ts +21 -9
  55. package/dist/customize/connectors/connector-routes.js +29 -20
  56. package/dist/customize/connectors/connectors-page.js +53 -82
  57. package/dist/customize/connectors/detail/app-page.js +226 -98
  58. package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
  59. package/dist/customize/connectors/detail/computer-app-page.js +39 -0
  60. package/dist/customize/connectors/detail/connector-accounts.js +3 -1
  61. package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
  62. package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
  63. package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
  64. package/dist/customize/connectors/detail/connector-agents.js +69 -0
  65. package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
  66. package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
  67. package/dist/customize/connectors/detail/connector-move-row.js +23 -14
  68. package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
  69. package/dist/customize/connectors/detail/connector-page.js +14 -10
  70. package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
  71. package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
  72. package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
  73. package/dist/customize/connectors/detail/connector-settings.js +7 -3
  74. package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
  75. package/dist/customize/connectors/detail/connector-status.js +34 -10
  76. package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
  77. package/dist/customize/connectors/detail/connector-tabs.js +8 -2
  78. package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
  79. package/dist/customize/connectors/detail/connector-tools.js +105 -48
  80. package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
  81. package/dist/customize/connectors/detail/email-inboxes.js +184 -0
  82. package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
  83. package/dist/customize/connectors/detail/provider-info.js +2 -2
  84. package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
  85. package/dist/customize/connectors/detail/status-badge.js +4 -5
  86. package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
  87. package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
  88. package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
  89. package/dist/customize/connectors/install/install-dialog.js +40 -0
  90. package/dist/customize/connectors/install/install.d.ts +13 -2
  91. package/dist/customize/connectors/install/install.js +9 -4
  92. package/dist/customize/connectors/install/use-install.d.ts +19 -2
  93. package/dist/customize/connectors/install/use-install.js +65 -37
  94. package/dist/customize/connectors/install/way-kind.d.ts +5 -0
  95. package/dist/customize/connectors/install/way-kind.js +16 -0
  96. package/dist/customize/connectors/provider-label.d.ts +2 -1
  97. package/dist/customize/connectors/provider-label.js +13 -3
  98. package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
  99. package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
  100. package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
  101. package/dist/customize/connectors/tools/policy-sets.js +41 -0
  102. package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
  103. package/dist/customize/connectors/tools/tool-groups.js +78 -16
  104. package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
  105. package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
  106. package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
  107. package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
  108. package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
  109. package/dist/customize/connectors/tools/tool-policy.js +74 -8
  110. package/dist/customize/connectors/use-agent-access.d.ts +85 -0
  111. package/dist/customize/connectors/use-agent-access.js +72 -0
  112. package/dist/customize/migrate-to-v2/index.d.ts +1 -2
  113. package/dist/customize/migrate-to-v2/index.js +1 -2
  114. package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -24
  115. package/dist/customize/migrate-to-v2/migration-prompt.js +34 -235
  116. package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
  117. package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
  118. package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
  119. package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
  120. package/dist/customize/providers/provider-accordion.js +17 -2
  121. package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
  122. package/dist/customize/sections/component/channel-access-panel.js +146 -0
  123. package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
  124. package/dist/customize/sections/component/channel-connect-hero.js +3 -2
  125. package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
  126. package/dist/customize/sections/component/channel-hero-frame.js +40 -0
  127. package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
  128. package/dist/customize/sections/component/channel-mocks.js +46 -0
  129. package/dist/customize/sections/component/channel-row.d.ts +13 -3
  130. package/dist/customize/sections/component/channel-row.js +10 -4
  131. package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
  132. package/dist/customize/sections/component/email-connect-form.js +183 -0
  133. package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
  134. package/dist/customize/sections/component/slack-connect-card.js +2 -3
  135. package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
  136. package/dist/customize/sections/component/teams-connect-card.js +2 -3
  137. package/dist/customize/sections/component/telegram-channel-row.js +16 -25
  138. package/dist/customize/sections/connectors-view.d.ts +1 -15
  139. package/dist/customize/sections/connectors-view.js +81 -314
  140. package/dist/customize/sections/view/agent-editor-catalog.js +5 -0
  141. package/dist/customize/sections/view/channels-view.d.ts +5 -1
  142. package/dist/customize/sections/view/channels-view.js +63 -81
  143. package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
  144. package/dist/customize/settings/tabs/experimental-tab.js +35 -16
  145. package/dist/customize/shared/catalog/catalog-empty-state.d.ts +1 -12
  146. package/dist/customize/shared/catalog/catalog-empty-state.js +3 -3
  147. package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
  148. package/dist/customize/shared/channels-switch-dialog.js +30 -0
  149. package/dist/customize/shared/feature-gate-screen.js +27 -9
  150. package/dist/customize/shared/new-entity-menu.js +4 -1
  151. package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
  152. package/dist/customize/shared/use-customize-prefetch.js +9 -27
  153. package/dist/customize/skills/skills-page.js +4 -5
  154. package/dist/customize/triggers/schedule/post-to-field.d.ts +18 -0
  155. package/dist/customize/triggers/schedule/post-to-field.js +49 -0
  156. package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
  157. package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
  158. package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
  159. package/dist/customize/triggers/schedule/then-fields.js +1 -5
  160. package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
  161. package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
  162. package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
  163. package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
  164. package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
  165. package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
  166. package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
  167. package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
  168. package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
  169. package/dist/customize/triggers/schedule-view.js +9 -4
  170. package/dist/files/index.d.ts +1 -0
  171. package/dist/files/index.js +1 -0
  172. package/dist/files/project/change-request-recovery.d.ts +1 -26
  173. package/dist/files/project/change-request-recovery.js +1 -59
  174. package/dist/files/project/components/change-request-detail-dialog.js +13 -3
  175. package/dist/files/project/components/drive-explorer.js +15 -15
  176. package/dist/files/project/components/drive-toolbar.d.ts +16 -2
  177. package/dist/files/project/components/drive-toolbar.js +14 -5
  178. package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
  179. package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
  180. package/dist/files/project/hooks/use-change-requests.js +11 -2
  181. package/dist/files/renderers/image-frame.d.ts +46 -0
  182. package/dist/files/renderers/image-frame.js +59 -0
  183. package/dist/files/renderers/image-renderer.d.ts +11 -1
  184. package/dist/files/renderers/image-renderer.js +13 -3
  185. package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
  186. package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
  187. package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
  188. package/dist/files/renderers/show-content-renderer.d.ts +9 -1
  189. package/dist/files/renderers/show-content-renderer.js +56 -14
  190. package/dist/files/runtime/file-source.js +2 -0
  191. package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
  192. package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
  193. package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
  194. package/dist/files/runtime/hooks/use-shared-image.js +177 -0
  195. package/dist/files/viewer/file-content-renderer.d.ts +22 -1
  196. package/dist/files/viewer/file-content-renderer.js +50 -7
  197. package/dist/files/viewer/file-header.d.ts +7 -3
  198. package/dist/files/viewer/file-header.js +20 -11
  199. package/dist/files/viewer/file-preview-modal.d.ts +1 -1
  200. package/dist/files/viewer/file-preview-modal.js +10 -22
  201. package/dist/files/viewer/file-source.d.ts +13 -0
  202. package/dist/files/viewer/use-file-content-state.d.ts +2 -0
  203. package/dist/files/viewer/use-file-content-state.js +28 -10
  204. package/dist/files/viewer/viewer-actions.d.ts +3 -1
  205. package/dist/files/viewer/viewer-actions.js +2 -2
  206. package/dist/hooks/use-media-query.d.ts +1 -0
  207. package/dist/hooks/use-mobile.d.ts +5 -0
  208. package/dist/hooks/use-mobile.js +8 -0
  209. package/dist/i18n/en.d.ts +906 -70
  210. package/dist/i18n/en.js +924 -88
  211. package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
  212. package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
  213. package/dist/index.d.ts +2 -2
  214. package/dist/index.js +2 -2
  215. package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
  216. package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
  217. package/dist/internal/account-hub/hub-sheet.js +21 -5
  218. package/dist/internal/account-hub/sections.d.ts +1 -1
  219. package/dist/internal/account-hub/sections.js +2 -1
  220. package/dist/internal/auth/auth-card-shell.js +3 -3
  221. package/dist/internal/components/agent-mark.d.ts +38 -0
  222. package/dist/internal/components/agent-mark.js +41 -0
  223. package/dist/internal/connector-logo/connector-logo-source.d.ts +63 -0
  224. package/dist/internal/connector-logo/connector-logo-source.js +48 -0
  225. package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
  226. package/dist/internal/connector-logo/connector-logo.js +56 -0
  227. package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
  228. package/dist/internal/connector-logo/connector-mark-files.js +35 -0
  229. package/dist/internal/files/file-read-retry.d.ts +13 -0
  230. package/dist/internal/files/file-read-retry.js +23 -3
  231. package/dist/internal/files/session-drive-files.d.ts +5 -1
  232. package/dist/internal/files/session-drive-files.js +7 -2
  233. package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
  234. package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
  235. package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
  236. package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
  237. package/dist/internal/hooks/connectors/use-add-account.js +1 -1
  238. package/dist/internal/hooks/index.d.ts +1 -1
  239. package/dist/internal/hooks/index.js +1 -1
  240. package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
  241. package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
  242. package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
  243. package/dist/internal/hooks/use-auto-scroll.js +4 -4
  244. package/dist/internal/icons/telegram.d.ts +5 -0
  245. package/dist/internal/icons/telegram.js +6 -1
  246. package/dist/internal/layout/nav-hover-card.d.ts +35 -0
  247. package/dist/internal/layout/nav-hover-card.js +84 -0
  248. package/dist/internal/layout/project-nav-row.d.ts +3 -1
  249. package/dist/internal/layout/project-nav-row.js +3 -2
  250. package/dist/internal/layout/project-page-header.d.ts +4 -2
  251. package/dist/internal/layout/project-page-header.js +4 -3
  252. package/dist/internal/layout/project-settings-nav.js +59 -2
  253. package/dist/internal/lib/browser-error-noise.d.ts +1 -1
  254. package/dist/internal/lib/browser-error-noise.js +1 -1
  255. package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
  256. package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
  257. package/dist/internal/lib/manifest-version.d.ts +1 -1
  258. package/dist/internal/lib/manifest-version.js +2 -2
  259. package/dist/internal/lib/memory-href.d.ts +16 -0
  260. package/dist/internal/lib/memory-href.js +46 -0
  261. package/dist/internal/lib/pixel-mark.d.ts +33 -0
  262. package/dist/internal/lib/pixel-mark.js +152 -0
  263. package/dist/internal/lib/use-project-feature-flags.js +11 -11
  264. package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
  265. package/dist/internal/lib/utils/heic-convert.js +3 -4
  266. package/dist/internal/lib/web-notifications.d.ts +20 -0
  267. package/dist/internal/lib/web-notifications.js +48 -4
  268. package/dist/internal/notifications/notification-bell.d.ts +4 -1
  269. package/dist/internal/notifications/notification-bell.js +2 -2
  270. package/dist/internal/selection/selection-bar.d.ts +2 -1
  271. package/dist/internal/selection/selection-bar.js +1 -1
  272. package/dist/internal/stores/file-preview-store.d.ts +29 -2
  273. package/dist/internal/stores/file-preview-store.js +19 -1
  274. package/dist/internal/stores/kortix-computer-store.js +3 -0
  275. package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
  276. package/dist/internal/stores/sidebar-nav-store.js +3 -1
  277. package/dist/lib/routes.d.ts +13 -1
  278. package/dist/lib/routes.js +13 -0
  279. package/dist/markdown/genui/components/inline.d.ts +1 -1
  280. package/dist/markdown/index.d.ts +2 -1
  281. package/dist/markdown/index.js +2 -1
  282. package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
  283. package/dist/markdown/setup-links/approval-decision.js +6 -2
  284. package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
  285. package/dist/markdown/setup-links/connector-handshake.js +12 -10
  286. package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
  287. package/dist/markdown/setup-links/show-connect-hero.js +91 -0
  288. package/dist/markdown/unified-markdown.js +5 -5
  289. package/dist/primitives/badge.d.ts +1 -1
  290. package/dist/primitives/badge.js +2 -0
  291. package/dist/primitives/disclosure.js +14 -2
  292. package/dist/primitives/empty-art.d.ts +12 -0
  293. package/dist/primitives/empty-art.js +11 -0
  294. package/dist/primitives/entity-avatar.d.ts +4 -1
  295. package/dist/primitives/entity-avatar.js +4 -2
  296. package/dist/primitives/mermaid-renderer.d.ts +2 -0
  297. package/dist/primitives/mermaid-renderer.js +21 -15
  298. package/dist/primitives/resizable.js +6 -1
  299. package/dist/primitives/resize-seam.d.ts +11 -0
  300. package/dist/primitives/resize-seam.js +12 -0
  301. package/dist/primitives/sidebar-panel.js +4 -7
  302. package/dist/primitives/tabs.d.ts +14 -1
  303. package/dist/primitives/tabs.js +1 -1
  304. package/dist/primitives/user-avatar.d.ts +3 -1
  305. package/dist/primitives/user-avatar.js +4 -2
  306. package/dist/providers/ui-provider.d.ts +10 -1
  307. package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
  308. package/dist/session/composer/ComposerAboveCard.js +2 -2
  309. package/dist/session/composer/ComposerCard.d.ts +1 -1
  310. package/dist/session/composer/ComposerCard.js +3 -3
  311. package/dist/session/composer/agent-selector.d.ts +19 -1
  312. package/dist/session/composer/agent-selector.js +42 -12
  313. package/dist/session/composer/composer-agent-access.d.ts +15 -0
  314. package/dist/session/composer/composer-agent-access.js +27 -0
  315. package/dist/session/composer/composer-chat-input.d.ts +8 -2
  316. package/dist/session/composer/composer-chat-input.js +8 -6
  317. package/dist/session/composer/composer-logic.d.ts +16 -0
  318. package/dist/session/composer/composer-logic.js +12 -0
  319. package/dist/session/composer/composer-underbar.d.ts +3 -1
  320. package/dist/session/composer/composer-underbar.js +4 -3
  321. package/dist/session/composer/composer.d.ts +15 -1
  322. package/dist/session/composer/composer.js +19 -1
  323. package/dist/session/composer/context-usage.d.ts +5 -0
  324. package/dist/session/composer/context-usage.js +6 -1
  325. package/dist/session/composer/draft/composer-draft.d.ts +6 -2
  326. package/dist/session/composer/draft/composer-draft.js +5 -1
  327. package/dist/session/composer/reasoning-effort-selector.js +1 -1
  328. package/dist/session/composer/token-progress.js +4 -4
  329. package/dist/session/header/export-transcript-modal.d.ts +3 -2
  330. package/dist/session/header/export-transcript-modal.js +6 -3
  331. package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
  332. package/dist/session/models/chatgpt-connection-button.js +54 -0
  333. package/dist/session/models/model-selector.d.ts +3 -1
  334. package/dist/session/models/model-selector.js +7 -3
  335. package/dist/session/models/use-model-connection-gate.d.ts +5 -5
  336. package/dist/session/models/use-model-connection-gate.js +5 -5
  337. package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
  338. package/dist/session/outcomes/jump-to-outcome.js +11 -0
  339. package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
  340. package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
  341. package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
  342. package/dist/session/outcomes/session-outcomes-provider.js +33 -3
  343. package/dist/session/panel/easy/app-preview.d.ts +10 -0
  344. package/dist/session/panel/easy/app-preview.js +31 -12
  345. package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
  346. package/dist/session/panel/easy/change-requests-card.js +17 -0
  347. package/dist/session/panel/easy/easy-panel-logic.js +7 -1
  348. package/dist/session/panel/easy/easy-panel.js +5 -2
  349. package/dist/session/panel/easy/file-preview.js +1 -1
  350. package/dist/session/panel/easy/outputs-card.d.ts +2 -1
  351. package/dist/session/panel/easy/outputs-card.js +3 -2
  352. package/dist/session/panel/easy/plan-card.d.ts +2 -0
  353. package/dist/session/panel/easy/plan-card.js +2 -0
  354. package/dist/session/panel/mobile-tool-drawer.js +7 -1
  355. package/dist/session/panel/session-audit-panel.js +9 -2
  356. package/dist/session/panel/session-detail-panel.js +9 -3
  357. package/dist/session/panel/session-files-explorer.d.ts +9 -0
  358. package/dist/session/panel/session-files-explorer.js +12 -3
  359. package/dist/session/panel/session-panel-provider.d.ts +15 -1
  360. package/dist/session/panel/session-panel-provider.js +32 -7
  361. package/dist/session/panel/shared/derive-panels.d.ts +8 -1
  362. package/dist/session/panel/shared/derive-panels.js +12 -2
  363. package/dist/session/panel/shared/output-priority.js +2 -0
  364. package/dist/session/participants/session-participants.d.ts +5 -1
  365. package/dist/session/participants/session-participants.js +9 -2
  366. package/dist/session/prompts/approval-request.d.ts +5 -0
  367. package/dist/session/prompts/approval-request.js +7 -1
  368. package/dist/session/prompts/session-approval-review.d.ts +9 -0
  369. package/dist/session/prompts/session-approval-review.js +18 -0
  370. package/dist/session/status/session-error-banner.js +2 -49
  371. package/dist/session/status/session-starting-loader.d.ts +14 -2
  372. package/dist/session/status/session-starting-loader.js +16 -4
  373. package/dist/session/thread/after-first-prompt.d.ts +7 -0
  374. package/dist/session/thread/after-first-prompt.js +8 -0
  375. package/dist/session/thread/detect-command.d.ts +12 -0
  376. package/dist/session/thread/detect-command.js +20 -0
  377. package/dist/session/thread/plan-surface.d.ts +1 -0
  378. package/dist/session/thread/plan-surface.js +1 -0
  379. package/dist/session/thread/session-chat.d.ts +3 -1
  380. package/dist/session/thread/session-chat.js +377 -252
  381. package/dist/session/thread/session-context-metrics.d.ts +15 -0
  382. package/dist/session/thread/session-context-metrics.js +10 -1
  383. package/dist/session/thread/session-context-modal.d.ts +4 -2
  384. package/dist/session/thread/session-context-modal.js +16 -9
  385. package/dist/session/thread/session-thread.d.ts +3 -1
  386. package/dist/session/thread/session-thread.js +9 -2
  387. package/dist/session/thread/thread-boot-rows.d.ts +36 -0
  388. package/dist/session/thread/thread-boot-rows.js +89 -0
  389. package/dist/session/thread/transcript-rows.d.ts +31 -0
  390. package/dist/session/thread/transcript-rows.js +3 -0
  391. package/dist/session/thread/transcript.d.ts +4 -9
  392. package/dist/session/thread/transcript.js +119 -21
  393. package/dist/session/thread/turn-share.d.ts +16 -0
  394. package/dist/session/thread/turn-share.js +162 -0
  395. package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
  396. package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
  397. package/dist/session/tool/tool-part-renderer.d.ts +5 -4
  398. package/dist/session/tool/tool-part-renderer.js +8 -3
  399. package/dist/session/tool/tools/apply-patch-tool.d.ts +1 -0
  400. package/dist/session/tool/tools/apply-patch-tool.js +1 -0
  401. package/dist/session/tool/tools/bash-tool.js +7 -6
  402. package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
  403. package/dist/session/tool/tools/channel-send.d.ts +2 -1
  404. package/dist/session/tool/tools/codemode-tool.js +1 -1
  405. package/dist/session/tool/tools/connector-tools.js +1 -1
  406. package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
  407. package/dist/session/tool/tools/image-gen-tool.js +240 -53
  408. package/dist/session/tool/tools/pty-kill-tool.d.ts +1 -0
  409. package/dist/session/tool/tools/pty-kill-tool.js +1 -0
  410. package/dist/session/tool/tools/pty-read-tool.d.ts +2 -0
  411. package/dist/session/tool/tools/pty-read-tool.js +2 -0
  412. package/dist/session/tool/tools/pty-spawn-tool.d.ts +1 -0
  413. package/dist/session/tool/tools/pty-spawn-tool.js +1 -0
  414. package/dist/session/tool/tools/pty-write-tool.d.ts +1 -0
  415. package/dist/session/tool/tools/pty-write-tool.js +1 -0
  416. package/dist/session/tool/tools/show-tool.js +19 -8
  417. package/dist/session/tool/tools/todo-write-tool.d.ts +1 -0
  418. package/dist/session/tool/tools/todo-write-tool.js +1 -0
  419. package/dist/session/turn/channel-brand.d.ts +8 -3
  420. package/dist/session/turn/channel-brand.js +20 -4
  421. package/dist/session/turn/message-author-label.js +6 -2
  422. package/dist/session/turn/message-author.d.ts +8 -0
  423. package/dist/session/turn/message-author.js +24 -0
  424. package/dist/session/turn/message-row.d.ts +52 -0
  425. package/dist/session/turn/message-row.js +44 -0
  426. package/dist/session/turn/plan-anchor.d.ts +4 -1
  427. package/dist/session/turn/plan-anchor.js +4 -1
  428. package/dist/session/turn/plan-card.d.ts +7 -0
  429. package/dist/session/turn/plan-card.js +7 -0
  430. package/dist/session/turn/user-message.d.ts +7 -1
  431. package/dist/session/turn/user-message.js +21 -7
  432. package/dist/styles.css +1 -1
  433. package/dist/terminal/session-terminal-connect-bar.js +2 -1
  434. package/dist/workspace/home/access-requests-bell.d.ts +9 -2
  435. package/dist/workspace/home/access-requests-bell.js +20 -6
  436. package/dist/workspace/home/first-chat.d.ts +8 -21
  437. package/dist/workspace/home/first-chat.js +22 -72
  438. package/dist/workspace/index.d.ts +6 -0
  439. package/dist/workspace/index.js +6 -0
  440. package/dist/workspace/layout/project-home.d.ts +14 -2
  441. package/dist/workspace/layout/project-home.js +60 -21
  442. package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
  443. package/dist/workspace/layout/use-project-home-send.js +82 -3
  444. package/dist/workspace/memory/body-doc.d.ts +17 -0
  445. package/dist/workspace/memory/body-doc.js +208 -0
  446. package/dist/workspace/memory/body-extensions.d.ts +38 -0
  447. package/dist/workspace/memory/body-extensions.js +103 -0
  448. package/dist/workspace/memory/company-memory-page.d.ts +8 -0
  449. package/dist/workspace/memory/company-memory-page.js +16 -0
  450. package/dist/workspace/memory/memory-all.d.ts +20 -0
  451. package/dist/workspace/memory/memory-all.js +27 -0
  452. package/dist/workspace/memory/memory-body.d.ts +19 -0
  453. package/dist/workspace/memory/memory-body.js +139 -0
  454. package/dist/workspace/memory/memory-empty.d.ts +13 -0
  455. package/dist/workspace/memory/memory-empty.js +28 -0
  456. package/dist/workspace/memory/memory-history.d.ts +27 -0
  457. package/dist/workspace/memory/memory-history.js +108 -0
  458. package/dist/workspace/memory/memory-labels.d.ts +16 -0
  459. package/dist/workspace/memory/memory-labels.js +47 -0
  460. package/dist/workspace/memory/memory-page-list.d.ts +34 -0
  461. package/dist/workspace/memory/memory-page-list.js +156 -0
  462. package/dist/workspace/memory/memory-reader.d.ts +58 -0
  463. package/dist/workspace/memory/memory-reader.js +123 -0
  464. package/dist/workspace/memory/memory-view.d.ts +21 -0
  465. package/dist/workspace/memory/memory-view.js +124 -0
  466. package/dist/workspace/memory/remember-popover.d.ts +19 -0
  467. package/dist/workspace/memory/remember-popover.js +61 -0
  468. package/dist/workspace/memory/remember-this.d.ts +12 -0
  469. package/dist/workspace/memory/remember-this.js +89 -0
  470. package/dist/workspace/memory/source-mark.d.ts +18 -0
  471. package/dist/workspace/memory/source-mark.js +79 -0
  472. package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
  473. package/dist/workspace/memory/used-memory-chip.js +61 -0
  474. package/dist/workspace/new/advanced-fields.d.ts +2 -1
  475. package/dist/workspace/new/advanced-fields.js +2 -2
  476. package/dist/workspace/new/source-param.d.ts +1 -1
  477. package/dist/workspace/new/source-param.js +3 -1
  478. package/dist/workspace/new/use-create-workspace.d.ts +8 -10
  479. package/dist/workspace/new/use-create-workspace.js +3 -3
  480. package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
  481. package/dist/workspace/projects/onboarding/app-logo.js +6 -13
  482. package/dist/workspace/projects/policies-panel.js +5 -3
  483. package/dist/workspace/review/review-actions.d.ts +4 -2
  484. package/dist/workspace/review/review-actions.js +8 -2
  485. package/dist/workspace/review/review-center.js +11 -7
  486. package/dist/workspace/review/review-detail.d.ts +10 -0
  487. package/dist/workspace/review/review-detail.js +101 -13
  488. package/dist/workspace/saved-session-skeleton.d.ts +2 -2
  489. package/dist/workspace/saved-session-skeleton.js +3 -3
  490. package/dist/workspace/session-workspace.js +15 -13
  491. package/dist/workspace/sessions/project-sessions-view.js +3 -2
  492. package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
  493. package/dist/workspace/sessions/sessions-toolbar.js +2 -2
  494. package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
  495. package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
  496. package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
  497. package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
  498. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
  499. package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
  500. package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
  501. package/dist/workspace/sidebar/nav-row-meta.js +14 -2
  502. package/dist/workspace/sidebar/project-nav-items.js +3 -0
  503. package/dist/workspace/sidebar/project-session-list.js +68 -56
  504. package/dist/workspace/sidebar/project-sidebar.js +9 -2
  505. package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
  506. package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
  507. package/dist/workspace/sidebar/session-brief-hover-card.js +28 -1
  508. package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
  509. package/dist/workspace/sidebar/session-group-order.js +25 -0
  510. package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
  511. package/dist/workspace/sidebar/session-group-sections.js +267 -0
  512. package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
  513. package/dist/workspace/sidebar/session-list-chrome.js +50 -0
  514. package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
  515. package/dist/workspace/spaces/channel-glyph.js +6 -0
  516. package/dist/workspace/spaces/channel-setup.d.ts +16 -0
  517. package/dist/workspace/spaces/channel-setup.js +105 -0
  518. package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
  519. package/dist/workspace/spaces/channels-onboarding.js +37 -0
  520. package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
  521. package/dist/workspace/spaces/create-channel-dialog.js +158 -0
  522. package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
  523. package/dist/workspace/spaces/private-channels-not-in.js +69 -0
  524. package/dist/workspace/spaces/space-agents.d.ts +10 -0
  525. package/dist/workspace/spaces/space-agents.js +10 -0
  526. package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
  527. package/dist/workspace/spaces/space-details-dialog.js +176 -0
  528. package/dist/workspace/spaces/space-link-label.d.ts +49 -0
  529. package/dist/workspace/spaces/space-link-label.js +73 -0
  530. package/dist/workspace/spaces/space-links.d.ts +19 -0
  531. package/dist/workspace/spaces/space-links.js +230 -0
  532. package/dist/workspace/spaces/space-members.d.ts +46 -0
  533. package/dist/workspace/spaces/space-members.js +182 -0
  534. package/dist/workspace/spaces/space-roster.d.ts +15 -0
  535. package/dist/workspace/spaces/space-roster.js +44 -0
  536. package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
  537. package/dist/workspace/spaces/space-threads-tab.js +156 -0
  538. package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
  539. package/dist/workspace/spaces/space-timeline-view.js +235 -0
  540. package/dist/workspace/spaces/space-timeline.d.ts +106 -0
  541. package/dist/workspace/spaces/space-timeline.js +183 -0
  542. package/dist/workspace/spaces/space-triggers.d.ts +13 -0
  543. package/dist/workspace/spaces/space-triggers.js +78 -0
  544. package/dist/workspace/spaces/space-view.d.ts +37 -0
  545. package/dist/workspace/spaces/space-view.js +436 -0
  546. package/package.json +31 -32
  547. package/skills/kortix-ui/SKILL.md +3 -3
  548. package/skills/kortix-ui/references/custom-dashboard.md +3 -3
  549. package/skills/kortix-ui/references/modules.md +28 -4
  550. package/skills/kortix-ui/references/theming.md +1 -1
  551. package/dist/customize/agents/agent-nav.prototype.d.ts +0 -35
  552. package/dist/customize/agents/agent-nav.prototype.js +0 -95
  553. package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
  554. package/dist/customize/connectors/catalog/merge-search.js +0 -26
  555. package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
  556. package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
  557. package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
  558. package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
  559. package/dist/customize/sections/connector-connection-header.d.ts +0 -36
  560. package/dist/customize/sections/connector-connection-header.js +0 -33
  561. package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
  562. package/dist/customize/sections/connector-connection-modal.js +0 -72
  563. package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
  564. package/dist/customize/sections/discover-catalogue-card.js +0 -26
  565. package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
  566. package/dist/customize/sections/discover-catalogue-detail.js +0 -24
  567. package/dist/customize/sections/discover-catalogue.d.ts +0 -17
  568. package/dist/customize/sections/discover-catalogue.js +0 -132
  569. package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
  570. package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
  571. package/dist/files/project/components/drive-empty-art.d.ts +0 -2
  572. package/dist/files/project/components/drive-empty-art.js +0 -5
  573. package/dist/internal/hooks/use-media-query.d.ts +0 -2
  574. package/dist/internal/share/public-share-link-button.d.ts +0 -14
  575. package/dist/internal/share/public-share-link-button.js +0 -17
  576. /package/dist/{internal/hooks → hooks}/use-media-query.js +0 -0
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useTranslations } from '../../../i18n/index.js';
4
- import { GlobeIcon, MonitorIcon } from '@phosphor-icons/react';
5
- import { memo, useState } from 'react';
4
+ import { GlobeIcon } from '@phosphor-icons/react';
5
+ import { memo } from 'react';
6
6
  import { Badge } from '../../../primitives/badge.js';
7
7
  import { Button } from '../../../primitives/button.js';
8
8
  import Loading from '../../../primitives/loading.js';
@@ -13,13 +13,13 @@ import { CatalogCardSkeleton, CatalogGrid, } from '../../shared/catalog/catalog-
13
13
  import { DENSE_GRID_CLASSNAME, DENSE_GRID_CONTAINER_CLASSNAME, } from '../../shared/catalog/catalog-grid-tokens.js';
14
14
  import { cn } from '../../../internal/lib/utils.js';
15
15
  import { InstallButton } from '../install/install-menu.js';
16
- import { catalogEntryKindLabel, isCatalogEntryConnected } from './catalog-entry.js';
16
+ import { ConnectorLogo } from '../../../internal/connector-logo/connector-logo.js';
17
+ import { catalogEntryKindLabel, catalogEntryLogoSource, isCatalogEntryConnected, } from './catalog-entry.js';
17
18
  import { catalogFootSummary } from './catalog-foot.js';
18
19
  import { useCatalogAutoload } from './use-catalog-autoload.js';
19
- /** The Install control is offered only where the caller may add the app, and
20
- * never on the computer card: a computer is paired, not installed. */
21
- function canInstallEntry(entry, install) {
22
- return install.canWrite && entry.source !== 'computer';
20
+ /** The Install control is offered only where the caller may add the app. */
21
+ function canInstallEntry(install) {
22
+ return install.canWrite;
23
23
  }
24
24
  /**
25
25
  * What a catalogue card offers on its right edge: "Added" when the project has
@@ -35,44 +35,15 @@ function CatalogAffordance({ entry, connected, install, }) {
35
35
  if (connected) {
36
36
  return (_jsx(Badge, { variant: "success", size: "sm", "data-testid": "catalog-connected", children: t('added') }));
37
37
  }
38
- if (!canInstallEntry(entry, install))
38
+ if (!canInstallEntry(install))
39
39
  return null;
40
- return (_jsx(InstallButton, { label: t('install'), variant: "outline", className: "gap-1 rounded-full", "aria-label": t('installNamed', { name: entry.name }), onInstall: () => install.onInstall(entry), pending: install.pendingKey === entry.slug,
40
+ // What Kortix built is set up on its own page, not installed.
41
+ const channel = entry.source === 'discover' && entry.connector.kind === 'kortix';
42
+ return (_jsx(InstallButton, { label: channel ? t('waySetUp') : t('install'), variant: "outline", className: "gap-1 rounded-full", "aria-label": channel ? t('setUpNamed', { name: entry.name }) : t('installNamed', { name: entry.name }), onInstall: () => install.onInstall(entry), pending: install.pendingKey === entry.slug,
41
43
  // `pendingKey` holds one install. A second one started beside it would
42
44
  // clear the first one's pending state when it settles.
43
45
  disabled: !install.ready || install.pendingKey !== null, "data-testid": "catalog-add" }));
44
46
  }
45
- /**
46
- * A catalog favicon, or a neutral glyph tile when the record has none or its
47
- * URL fails to load.
48
- *
49
- * A plain `<img>`, not `next/image`. These are third-party favicons on
50
- * arbitrary hosts, so the loader was already bypassed with `unoptimized` — which
51
- * left `fill` costing an absolutely-positioned child inside a `relative`
52
- * wrapper, per card, for no optimisation in return. Native `loading="lazy"`
53
- * defers every icon below the fold, which is most of them on a browse page.
54
- *
55
- * `width`/`height` are set so the box is reserved before the image arrives and
56
- * the grid never reflows around a late favicon.
57
- *
58
- * The broken-image state is the fallback the null case already had: a logo
59
- * URL that 404s used to render the browser's broken-image glyph inside the
60
- * tile, which is worse than no imagery at all. `onError` swaps to the same
61
- * glyph tile — the same fallback a record with no icon gets, so "missing" and
62
- * "unavailable" look identical. Mirrors `ConnectorAppIcon`'s broken state.
63
- *
64
- * The latch is per URL (`failedUrl`, not a boolean): a URL that failed stays
65
- * failed, while a swapped URL gets a fresh try without any call-site key —
66
- * merge-search swaps a merged twin's icon to the managed logo as catalogue
67
- * pages stream in.
68
- */
69
- export function ConnectorIcon({ icon, computer = false, }) {
70
- const [failedUrl, setFailedUrl] = useState(null);
71
- if (!icon || failedUrl === icon) {
72
- return (_jsx("span", { className: "bg-card flex size-9 shrink-0 items-center justify-center rounded-sm", children: computer ? _jsx(MonitorIcon, { className: "size-5" }) : _jsx(GlobeIcon, { className: "size-5" }) }));
73
- }
74
- return (_jsx("span", { className: "flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-sm", children: _jsx("img", { src: icon, alt: "", width: 36, height: 36, loading: "lazy", decoding: "async", referrerPolicy: "no-referrer", className: "size-9 object-contain", onError: () => setFailedUrl(icon) }) }));
75
- }
76
47
  /**
77
48
  * One catalogue card: icon and title on the bare page — no border, no
78
49
  * description — with one quiet line under the title saying how the entry
@@ -81,24 +52,22 @@ export function ConnectorIcon({ icon, computer = false, }) {
81
52
  * `memo`'d because the grid renders several hundred of these. `entry` and `connectedKeys` are referentially stable
82
53
  * across a page landing (the arrays they come from are rebuilt, but the entry
83
54
  * objects inside them are not), so the comparison actually pays off.
84
- * `hrefFor`, `onOpen` and `install` must be stable for the same reason;
55
+ * `hrefFor` and `install` must be stable for the same reason;
85
56
  * `install` changes identity only when an install starts or ends.
86
57
  */
87
- const CatalogEntryCard = memo(function CatalogEntryCard({ entry, connectedKeys, hrefFor, onOpen, install, }) {
58
+ const CatalogEntryCard = memo(function CatalogEntryCard({ entry, connectedKeys, hrefFor, install, }) {
88
59
  const href = hrefFor(entry);
89
60
  const connected = isCatalogEntryConnected(entry, connectedKeys);
90
61
  const shared = {
91
62
  variant: 'plain',
92
- leading: _jsx(ConnectorIcon, { icon: entry.icon, computer: entry.source === 'computer' }),
63
+ leading: _jsx(ConnectorLogo, { source: catalogEntryLogoSource(entry), size: "lg" }),
93
64
  title: entry.name,
94
65
  subtitle: _jsx("span", { className: "text-muted-foreground text-xs", children: catalogEntryKindLabel(entry) }),
95
66
  trailing: _jsx(CatalogAffordance, { entry: entry, connected: connected, install: install }),
96
67
  };
97
- // An entry with no page of its own (the computer card) opens in place.
98
- return href ? (
99
68
  // Only the Install control needs to sit beside the link. The "Added" badge
100
69
  // stays inside it, so a click on the badge still opens the page.
101
- _jsx(CatalogCard, { ...shared, href: href, trailingInteractive: !connected && canInstallEntry(entry, install) })) : (_jsx(CatalogCard, { ...shared, onClick: () => onOpen(entry) }));
70
+ return (_jsx(CatalogCard, { ...shared, href: href, trailingInteractive: !connected && canInstallEntry(install) }));
102
71
  });
103
72
  /** Skeletons appended to a growing grid while a request is in flight. Six —
104
73
  * two full rows of the widest layout — so the placeholder block is the same
@@ -120,7 +89,7 @@ function CatalogFoot({ summary, hasMore, isLoadingMore, loadMore, }) {
120
89
  const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
121
90
  if (!hasMore && summary === null)
122
91
  return null;
123
- return (_jsxs("div", { className: "flex flex-col items-center gap-2 pt-2", children: [hasMore && !isLoadingMore ? (_jsx(Button, { variant: "outline", size: "sm", onClick: loadMore, className: "transition-transform duration-(--duration-normal) ease-out active:scale-[0.96]", children: tI18nComplete.raw('textac8991ef0101') })) : null, summary ? (_jsxs("p", { className: "text-muted-foreground/70 flex items-center gap-2 text-xs tabular-nums", role: isLoadingMore ? 'status' : undefined, "aria-live": isLoadingMore ? 'polite' : undefined, children: [isLoadingMore ? _jsx(Loading, { className: "size-3.5 shrink-0" }) : null, summary] })) : null] }));
92
+ return (_jsxs("div", { className: "flex flex-col items-center gap-2 pt-2", children: [hasMore && !isLoadingMore ? (_jsx(Button, { variant: "outline", size: "sm", onClick: loadMore, className: "transition-transform duration-(--duration-normal) ease-out active:scale-[0.96]", children: tI18nComplete.raw('textac8991ef0101') })) : null, summary ? (_jsxs("p", { className: "text-muted-foreground flex items-center gap-2 text-xs tabular-nums", role: isLoadingMore ? 'status' : undefined, "aria-live": isLoadingMore ? 'polite' : undefined, children: [isLoadingMore ? _jsx(Loading, { className: "size-3.5 shrink-0" }) : null, summary] })) : null] }));
124
93
  }
125
94
  /**
126
95
  * The catalogue body: one flat, paginated, searchable grid.
@@ -130,7 +99,7 @@ function CatalogFoot({ summary, hasMore, isLoadingMore, loadMore, }) {
130
99
  * no per-category deepening loop, no reveal window uncovering already-loaded
131
100
  * cards.
132
101
  */
133
- export function ConnectorBrowse({ state, connectedKeys, hrefFor, onOpen, install, emptyTitle, emptyDescription, suppressNoMatch = false, }) {
102
+ export function ConnectorBrowse({ state, connectedKeys, hrefFor, install, emptyTitle, emptyDescription, suppressNoMatch = false, }) {
134
103
  const { activeQuery, entries, total } = state;
135
104
  const searching = activeQuery.length > 0;
136
105
  const hasMore = state.hasMore;
@@ -149,7 +118,7 @@ export function ConnectorBrowse({ state, connectedKeys, hrefFor, onOpen, install
149
118
  // documented order, so those three states are delegated here and the grid
150
119
  // gets no children it could render.
151
120
  if (state.isLoading || state.isError || isEmpty) {
152
- return (_jsx(CatalogGrid, { isLoading: state.isLoading, isError: state.isError, error: state.error, onRetry: state.refetch, isEmpty: true, empty: searching ? (suppressNoMatch ? null : (_jsx(CatalogNoMatch, { query: activeQuery, excludedNoActions: state.excludedNoActions }))) : (_jsx(EmptyState, { icon: GlobeIcon, size: "sm", title: emptyTitle, description: emptyDescription })), children: null }));
121
+ return (_jsx(CatalogGrid, { isLoading: state.isLoading, isError: state.isError, error: state.error, onRetry: state.refetch, isEmpty: true, empty: searching ? (suppressNoMatch ? null : (_jsx(CatalogNoMatch, { query: activeQuery }))) : (_jsx(EmptyState, { icon: GlobeIcon, size: "sm", title: emptyTitle, description: emptyDescription })), children: null }));
153
122
  }
154
123
  const summary = catalogFootSummary({
155
124
  loaded: entries.length,
@@ -158,7 +127,7 @@ export function ConnectorBrowse({ state, connectedKeys, hrefFor, onOpen, install
158
127
  hasMore,
159
128
  isLoadingMore: state.isLoadingMore,
160
129
  });
161
- return (_jsxs("div", { "aria-busy": state.isRefreshing || undefined, className: cn('space-y-6 transition-opacity duration-(--duration-normal) ease-out', state.isRefreshing && 'pointer-events-none opacity-60'), children: [_jsx("div", { className: DENSE_GRID_CONTAINER_CLASSNAME, children: _jsxs("div", { className: DENSE_GRID_CLASSNAME, children: [entries.map((entry) => (_jsx(CatalogEntryCard, { entry: entry, connectedKeys: connectedKeys, hrefFor: hrefFor, onOpen: onOpen, install: install }, entry.key))), state.isLoadingMore
130
+ return (_jsxs("div", { "aria-busy": state.isRefreshing || undefined, className: cn('space-y-6 transition-opacity duration-(--duration-normal) ease-out', state.isRefreshing && 'pointer-events-none opacity-60'), children: [_jsx("div", { className: DENSE_GRID_CONTAINER_CLASSNAME, children: _jsxs("div", { className: DENSE_GRID_CLASSNAME, children: [entries.map((entry) => (_jsx(CatalogEntryCard, { entry: entry, connectedKeys: connectedKeys, hrefFor: hrefFor, install: install }, entry.key))), state.isLoadingMore
162
131
  ? Array.from({ length: LOADING_MORE_SKELETONS }, (_, index) => (_jsx(CatalogCardSkeleton, {}, `loading-${index}`)))
163
132
  : null] }) }), hasMore ? _jsx("div", { ref: sentinelRef, "aria-hidden": true, className: "h-px" }) : null, _jsx(CatalogFoot, { summary: summary, hasMore: hasMore, isLoadingMore: state.isLoadingMore, loadMore: loadMore })] }));
164
133
  }
@@ -1,6 +1,6 @@
1
- import { getConnectStatus, listDiscoverConnectors } from '@kortix/sdk';
1
+ import { getConnectStatus, type DiscoverConnectorKind } from '@kortix/sdk';
2
2
  import { type BrowseSectionsPage } from './browse-sections.js';
3
- import { computersCatalogEntry, type CatalogEntry, type CatalogSource } from './catalog-entry.js';
3
+ import { type CatalogEntry } from './catalog-entry.js';
4
4
  /**
5
5
  * One browse section: a category, a fixed slice of it, and its true size.
6
6
  *
@@ -22,14 +22,6 @@ export interface CatalogState {
22
22
  total: number;
23
23
  /** The debounced query actually in flight, trimmed. Empty when browsing. */
24
24
  activeQuery: string;
25
- /** Which catalogue answered. Decides the add flow a card opens. */
26
- source: CatalogSource;
27
- /** Categories the user can filter by, each with its true count. Empty for
28
- * the Discover source and while the Easy Connect index is still building. */
29
- /** Apps matching the query that publish no actions, so the catalogue does
30
- * not offer them. Lets the no-match state say why instead of implying the
31
- * app does not exist — `q=SAP` is exactly this case. */
32
- excludedNoActions: number;
33
25
  /** The browse page. Empty while searching or inside a category — both are
34
26
  * one flat result set by definition. */
35
27
  sections: CatalogSection[];
@@ -90,12 +82,15 @@ export declare const connectStatusQuery: {
90
82
  queryFn: typeof getConnectStatus;
91
83
  };
92
84
  /**
93
- * The browse page's one request, keyed per catalogue. Exported so the
94
- * Customize prefetch (`use-customize-prefetch.ts`) fills the exact cache entry
95
- * the Discover landing reads.
85
+ * The browse page's one request. Exported so the Customize prefetch
86
+ * (`use-customize-prefetch.ts`) fills the exact cache entry the landing reads.
96
87
  */
97
- export declare function catalogSectionsQuery(projectId: string, catalogue: 'kortix' | 'discover' | 'composio' | 'pipedream' | null): {
98
- queryKey: readonly ["catalog-sections", string, "kortix" | "composio" | "pipedream" | "discover" | null];
88
+ export declare function catalogSectionsQuery(projectId: string,
89
+ /** Just the apps that connect with nothing to set up. */
90
+ oneClick?: boolean,
91
+ /** Just the apps that connect these ways. */
92
+ kinds?: readonly DiscoverConnectorKind[]): {
93
+ queryKey: readonly ["catalog-sections", string, "kortix", ...string[]];
99
94
  queryFn: () => Promise<BrowseSectionsPage>;
100
95
  staleTime: number;
101
96
  };
@@ -108,54 +103,20 @@ export declare function listConnectCatalogPage(input: {
108
103
  limit: number;
109
104
  }): Promise<import("@kortix/sdk").PipedreamCatalogPage>;
110
105
  /**
111
- * The catalogue behind the All tab, from whichever of the two
112
- * sources this project actually has.
113
- *
114
- * **Why two sources.** `connectors_api_discover` resolves to `false` by
115
- * default (`apps/api/src/experimental/features.ts:83`), so the Discover
116
- * catalogue is unavailable to most projects. Easy Connect (Pipedream) is not
117
- * flagged. Falling back keeps the page populated for every project.
118
- *
119
- * **Why not merge them.** The two publish overlapping apps under different
120
- * slugs and different `id` namespaces, and each has its own add flow. A merged
121
- * list would need a cross-catalogue identity that neither API provides.
106
+ * The catalogue behind the All tab: Kortix's apps, every integrations.sh
107
+ * server and API, and the Composio apps, each app once by its best way in
108
+ * (`apps/api/src/connectors/mcp-apps.ts`). One source, the Discover routes.
122
109
  *
123
110
  * **One paging mechanism.** A scroll or a click on "Load more" fetches the next
124
- * page. That is all. This replaces a three-layer arrangement — eager initial
125
- * pages, a per-category auto-deepening effect chain, and a client-side reveal
126
- * window over the top — that existed only because the client had to accumulate
127
- * enough pages to fake a category filter. The server filters by category now
128
- * (`pipedreamCatalogPage`), so the client asks for exactly the page it renders.
129
- *
130
- * **Filtering happens server-side, over the whole catalogue.** Both `q` and
131
- * `category` are query keys, so changing either starts a new list rather than
132
- * re-slicing an accumulated one. Pipedream's own API cannot filter by category
133
- * at all — see `apps/api/src/connectors/pipedream-index.ts`.
134
- *
135
- * **Easy Connect waits for the deployment probe.** No Pipedream request is sent
136
- * until `usePipedreamStatus` has ruled out `absent`, because on a deployment
137
- * without Pipedream credentials every one of them is a `501` — and one landing
138
- * before the probe would paint the error card the probe exists to prevent. The
139
- * cost is one round trip on the first load of the session, spent on a route that
140
- * only reads env vars, and the wait is reported as `isLoading` so the grid holds
141
- * its skeletons instead of flashing an empty result.
111
+ * page. `q`, `oneClick` and `kinds` are query keys, so changing any of them
112
+ * starts a new list rather than re-slicing an accumulated one.
142
113
  */
143
114
  export declare function useCatalog(projectId: string, query: string, opts: {
144
115
  enabled: boolean;
145
- /** The API/MCP catalogue is on for this project (`connectors_api_discover`). */
146
- discoverEnabled: boolean;
147
- /** `connectors_v2`: the catalogue is Kortix's own MCP apps, served on the
148
- * Discover routes. No Composio or Pipedream request is sent. */
149
- mcpApps?: boolean;
150
- /** Show the native Computer card: this deployment can connect computers. */
116
+ /** This deployment can pair computers; without it the Computer record goes. */
151
117
  computers?: boolean;
118
+ /** List just the apps that connect with nothing to set up. */
119
+ oneClick?: boolean;
120
+ /** List just the apps that connect these ways. */
121
+ kinds?: readonly DiscoverConnectorKind[];
152
122
  }): CatalogState;
153
- export declare function assembleCatalogEntries({ source, computers, activeQuery, searchDirect, tI18nComplete, discoverPages, managedPages, }: {
154
- source: CatalogSource;
155
- computers: boolean;
156
- activeQuery: string;
157
- searchDirect: boolean;
158
- tI18nComplete: Parameters<typeof computersCatalogEntry>[0];
159
- discoverPages?: Awaited<ReturnType<typeof listDiscoverConnectors>>[];
160
- managedPages?: Awaited<ReturnType<typeof listConnectCatalogPage>>[];
161
- }): CatalogEntry[];
@@ -1,16 +1,12 @@
1
1
  'use client';
2
- import { getConnectStatus, listConnectSections, listConnectToolkits, listDiscoverConnectors, listDiscoverSections, listPipedreamApps, listPipedreamSections, } from '@kortix/sdk';
2
+ import { getConnectStatus, listConnectToolkits, listDiscoverConnectors, listDiscoverSections, listPipedreamApps, } from '@kortix/sdk';
3
3
  import { keepPreviousData, useInfiniteQuery, useQuery } from '@tanstack/react-query';
4
4
  import { useCallback, useMemo } from 'react';
5
5
  import { useDebounce } from '../../../hooks/use-debounce.js';
6
6
  import { useTranslations } from '../../../i18n/index.js';
7
- import { browseSections, connectToolkitApp, sectionsPageFromConnect, sectionsPageFromDiscover, sectionsPageFromPipedream, } from './browse-sections.js';
8
- import { catalogEntryFromDiscover, catalogEntryFromEasyConnect, computersCatalogEntry, } from './catalog-entry.js';
7
+ import { browseSections, sectionsPageFromDiscover } from './browse-sections.js';
8
+ import { catalogEntryFromDiscover, connectToolkitApp } from './catalog-entry.js';
9
9
  import { CATEGORY_ROW_CAP, localizedSectionTitle } from './connector-categories.js';
10
- import { mergeSearchEntries } from './merge-search.js';
11
- /** Apps per request. One page fills several rows of the widest grid, so a
12
- * scroll-triggered fetch is felt as the grid growing rather than as a jump. */
13
- const CATALOG_PAGE_SIZE = 48;
14
10
  /** Cards per section on the browse page, and how many sections it shows.
15
11
  * `CATEGORY_ROW_CAP` is two rows of `xl:grid-cols-3`; 12 sections is a browse
16
12
  * page you can scan without it becoming a directory of headings. */
@@ -76,25 +72,22 @@ export const connectStatusQuery = {
76
72
  queryFn: getConnectStatus,
77
73
  };
78
74
  /**
79
- * The browse page's one request, keyed per catalogue. Exported so the
80
- * Customize prefetch (`use-customize-prefetch.ts`) fills the exact cache entry
81
- * the Discover landing reads.
75
+ * The browse page's one request. Exported so the Customize prefetch
76
+ * (`use-customize-prefetch.ts`) fills the exact cache entry the landing reads.
82
77
  */
83
- export function catalogSectionsQuery(projectId, catalogue) {
78
+ export function catalogSectionsQuery(projectId,
79
+ /** Just the apps that connect with nothing to set up. */
80
+ oneClick = false,
81
+ /** Just the apps that connect these ways. */
82
+ kinds = []) {
84
83
  return {
85
- queryKey: ['catalog-sections', projectId, catalogue],
86
- queryFn: async () => {
87
- const limits = { perCategory: SECTION_CARD_COUNT, maxCategories: SECTION_COUNT };
88
- // `kortix` is the same Discover route: the API serves Kortix's own MCP
89
- // apps to a `connectors_v2` project (apps/api/src/connectors/mcp-apps.ts).
90
- if (catalogue === 'discover' || catalogue === 'kortix') {
91
- return sectionsPageFromDiscover(await listDiscoverSections(projectId, limits));
92
- }
93
- if (catalogue === 'pipedream') {
94
- return sectionsPageFromPipedream(await listPipedreamSections(projectId, limits));
95
- }
96
- return sectionsPageFromConnect(await listConnectSections(projectId, limits));
97
- },
84
+ queryKey: ['catalog-sections', projectId, 'kortix', ...(oneClick ? ['one-click'] : []), ...kinds],
85
+ queryFn: async () => sectionsPageFromDiscover(await listDiscoverSections(projectId, {
86
+ perCategory: SECTION_CARD_COUNT,
87
+ maxCategories: SECTION_COUNT,
88
+ ...(oneClick ? { oneClick } : {}),
89
+ ...(kinds.length ? { kinds: [...kinds] } : {}),
90
+ })),
98
91
  staleTime: 5 * 60_000,
99
92
  };
100
93
  }
@@ -119,129 +112,43 @@ export async function listConnectCatalogPage(input) {
119
112
  };
120
113
  }
121
114
  /**
122
- * The catalogue behind the All tab, from whichever of the two
123
- * sources this project actually has.
124
- *
125
- * **Why two sources.** `connectors_api_discover` resolves to `false` by
126
- * default (`apps/api/src/experimental/features.ts:83`), so the Discover
127
- * catalogue is unavailable to most projects. Easy Connect (Pipedream) is not
128
- * flagged. Falling back keeps the page populated for every project.
129
- *
130
- * **Why not merge them.** The two publish overlapping apps under different
131
- * slugs and different `id` namespaces, and each has its own add flow. A merged
132
- * list would need a cross-catalogue identity that neither API provides.
115
+ * The catalogue behind the All tab: Kortix's apps, every integrations.sh
116
+ * server and API, and the Composio apps, each app once by its best way in
117
+ * (`apps/api/src/connectors/mcp-apps.ts`). One source, the Discover routes.
133
118
  *
134
119
  * **One paging mechanism.** A scroll or a click on "Load more" fetches the next
135
- * page. That is all. This replaces a three-layer arrangement — eager initial
136
- * pages, a per-category auto-deepening effect chain, and a client-side reveal
137
- * window over the top — that existed only because the client had to accumulate
138
- * enough pages to fake a category filter. The server filters by category now
139
- * (`pipedreamCatalogPage`), so the client asks for exactly the page it renders.
140
- *
141
- * **Filtering happens server-side, over the whole catalogue.** Both `q` and
142
- * `category` are query keys, so changing either starts a new list rather than
143
- * re-slicing an accumulated one. Pipedream's own API cannot filter by category
144
- * at all — see `apps/api/src/connectors/pipedream-index.ts`.
145
- *
146
- * **Easy Connect waits for the deployment probe.** No Pipedream request is sent
147
- * until `usePipedreamStatus` has ruled out `absent`, because on a deployment
148
- * without Pipedream credentials every one of them is a `501` — and one landing
149
- * before the probe would paint the error card the probe exists to prevent. The
150
- * cost is one round trip on the first load of the session, spent on a route that
151
- * only reads env vars, and the wait is reported as `isLoading` so the grid holds
152
- * its skeletons instead of flashing an empty result.
120
+ * page. `q`, `oneClick` and `kinds` are query keys, so changing any of them
121
+ * starts a new list rather than re-slicing an accumulated one.
153
122
  */
154
123
  export function useCatalog(projectId, query, opts) {
155
124
  const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
156
125
  const { debouncedValue: activeQuery } = useDebounce(query.trim(), 300);
157
- const computers = opts.computers === true;
126
+ const hideComputerRecord = opts.computers !== true;
158
127
  const searching = activeQuery.length > 0;
159
- // Always probed, whether or not the catalogue is `enabled`: the answer picks
160
- // the source, and `ConnectorsPage` turns the All tab OFF when it is `absent`
161
- // with no API/MCP catalogue either. It is one cached request.
162
- const connectStatus = useConnectProviderStatus(true);
163
- // One catalogue, no source toggle. Managed apps drive browsing; a search also
164
- // asks the API/MCP catalogue (below). With no managed provider on this
165
- // deployment, the API/MCP catalogue is the whole catalogue.
166
- // `unknown` (the probe failed) falls back to the API/MCP catalogue too, as
167
- // before the merge of the two.
168
- const mcpApps = opts.mcpApps === true;
169
- const source = mcpApps ||
170
- (opts.discoverEnabled && (connectStatus.state === 'absent' || connectStatus.state === 'unknown'))
171
- ? 'discover'
172
- : 'easy-connect';
173
- const searchDirect = opts.discoverEnabled && source === 'easy-connect' && searching;
174
- // Keys the Discover cache by the catalogue the API answers with.
175
- const discoverCatalogue = mcpApps ? 'kortix' : 'discover';
176
- // `unknown` proceeds: the probe failed, and refusing to load a catalogue that
177
- // may well exist is the worse of the two mistakes.
178
- const easyConnectRunnable = source === 'easy-connect' &&
179
- (connectStatus.state === 'configured' || connectStatus.state === 'unknown');
180
- const easyConnectProvider = connectStatus.provider ?? 'composio';
128
+ const oneClick = opts.oneClick === true;
129
+ const kinds = useMemo(() => [...(opts.kinds ?? [])], [opts.kinds]);
181
130
  const discoverQuery = useInfiniteQuery({
182
- // An open category is a server-side filter, so it is part of the key. The
183
- // unfiltered key stays exactly the one `discover-catalogue.tsx` shares.
184
- queryKey: mcpApps
185
- ? ['discover-connectors', projectId, activeQuery, 'kortix']
186
- : ['discover-connectors', projectId, activeQuery],
131
+ queryKey: ['discover-connectors', projectId, activeQuery, 'kortix', oneClick, ...kinds],
187
132
  queryFn: ({ pageParam }) => listDiscoverConnectors(projectId, {
188
133
  q: activeQuery || undefined,
189
134
  cursor: pageParam,
135
+ ...(oneClick ? { oneClick } : {}),
136
+ ...(kinds.length ? { kinds } : {}),
190
137
  }),
191
138
  initialPageParam: undefined,
192
139
  getNextPageParam: (last) => (last.hasMore ? last.nextCursor : undefined),
193
140
  staleTime: 5 * 60_000,
194
- enabled: opts.enabled && (source === 'discover' || searchDirect),
195
- placeholderData: keepPreviousData,
196
- });
197
- const easyConnectQuery = useInfiniteQuery({
198
- queryKey: ['easy-connect-apps', projectId, activeQuery, null],
199
- queryFn: ({ pageParam }) => listConnectCatalogPage({
200
- projectId,
201
- provider: easyConnectProvider,
202
- q: activeQuery || undefined,
203
- cursor: pageParam,
204
- limit: CATALOG_PAGE_SIZE,
205
- }),
206
- initialPageParam: undefined,
207
- getNextPageParam: (last) => (last.hasMore ? last.nextCursor : undefined),
208
- staleTime: 60_000,
209
- enabled: opts.enabled && easyConnectRunnable,
141
+ enabled: opts.enabled,
210
142
  placeholderData: keepPreviousData,
211
143
  });
212
- // The browse page, in one request, from whichever catalogue this project
213
- // uses. Every one answers with each category's TRUE size, so a heading never
214
- // reports how many cards one loaded page happened to hold.
215
- //
216
- // Fetched while browsing. Discover and Composio also keep it while a category
217
- // is open: their paged endpoints publish no category facet, and this
218
- // response's facet is what lets the open category's header state its name
219
- // and size. Same key, so opening a category from the browse page costs no
220
- // request. Pipedream's paged endpoint carries its own facet.
221
- const sectionsCatalogue = source === 'discover' ? discoverCatalogue : easyConnectProvider;
144
+ // The browse page, in one request. It answers with each category's TRUE
145
+ // size, so a heading never reports how many cards one loaded page held.
222
146
  const sectionsQuery = useQuery({
223
- ...catalogSectionsQuery(projectId, sectionsCatalogue),
224
- enabled: opts.enabled && (source === 'discover' || easyConnectRunnable) && !searching,
147
+ ...catalogSectionsQuery(projectId, oneClick, kinds),
148
+ enabled: opts.enabled && !searching,
225
149
  });
226
- const active = source === 'discover' ? discoverQuery : easyConnectQuery;
227
- const entries = useMemo(() => assembleCatalogEntries({
228
- source,
229
- computers,
230
- activeQuery,
231
- searchDirect,
232
- tI18nComplete,
233
- discoverPages: discoverQuery.data?.pages,
234
- managedPages: easyConnectQuery.data?.pages,
235
- }), [
236
- searchDirect,
237
- tI18nComplete,
238
- computers,
239
- activeQuery,
240
- source,
241
- easyConnectQuery.data?.pages,
242
- discoverQuery.data?.pages,
243
- ]);
244
- const { fetchNextPage, hasNextPage, isFetchingNextPage, isPlaceholderData, refetch: activeRefetch, } = active;
150
+ const entries = useMemo(() => withoutComputerRecord(hideComputerRecord, (discoverQuery.data?.pages ?? []).flatMap((page) => page.items.map(catalogEntryFromDiscover))), [hideComputerRecord, discoverQuery.data?.pages]);
151
+ const { fetchNextPage, hasNextPage, isFetchingNextPage, isPlaceholderData, refetch: activeRefetch, } = discoverQuery;
245
152
  // Stable identity: `useCatalogAutoload` lists this in its observer effect's
246
153
  // deps, and a new function every render would tear down and rebuild the
247
154
  // `IntersectionObserver` on each one.
@@ -261,27 +168,20 @@ export function useCatalog(projectId, query, opts) {
261
168
  void sectionsRefetch();
262
169
  }, [activeRefetch, sectionsRefetch, showingSections]);
263
170
  /**
264
- * The browse sections, normalised across every catalogue so `ConnectorBrowse`
265
- * renders one shape.
266
- *
267
- * All of them come from the server, complete and fixed, with each section's
268
- * true total. A section key is exactly what the catalogue's category filter
269
- * accepts, so "View all" asks the server for the set the heading counted.
171
+ * The browse sections. They come from the server, complete and fixed, with
172
+ * each section's true total. A section key is exactly what the catalogue's
173
+ * category filter accepts, so "View all" asks for the set the heading counted.
270
174
  */
271
175
  const sections = useMemo(() => {
272
176
  if (searching || !sectionsQuery.data)
273
177
  return [];
274
178
  return browseSections(sectionsQuery.data, {
275
- native: computers ? computersCatalogEntry(tI18nComplete) : null,
276
179
  cardCount: SECTION_CARD_COUNT,
277
180
  title: (label) => localizedSectionTitle(label, tI18nComplete),
278
- });
279
- }, [searching, sectionsQuery.data, tI18nComplete, computers]);
280
- const easyConnectPage = easyConnectQuery.data?.pages[0];
281
- const excludedNoActions = easyConnectPage?.excludedNoActions ?? 0;
282
- const reportedTotal = source === 'discover' ? discoverQuery.data?.pages[0]?.total : easyConnectPage?.total;
283
- const nativeCount = entries.some((entry) => entry.source === 'computer') ? 1 : 0;
284
- const total = typeof reportedTotal === 'number' ? reportedTotal + nativeCount : entries.length;
181
+ }).map((section) => ({ ...section, items: withoutComputerRecord(hideComputerRecord, section.items) }));
182
+ }, [searching, sectionsQuery.data, tI18nComplete, hideComputerRecord]);
183
+ const reportedTotal = discoverQuery.data?.pages[0]?.total;
184
+ const total = typeof reportedTotal === 'number' ? reportedTotal : entries.length;
285
185
  // A failed sections request on the browse page is an error, not an empty
286
186
  // catalogue — without this the grid would say "no connectors" over an outage.
287
187
  const sectionsFailed = showingSections && sectionsQuery.isError;
@@ -289,48 +189,21 @@ export function useCatalog(projectId, query, opts) {
289
189
  entries,
290
190
  total,
291
191
  activeQuery,
292
- source,
293
- excludedNoActions,
294
192
  sections,
295
193
  // `isLoading` is the COLD state only — no cards on screen at all. A search
296
194
  // over a populated catalogue keeps its results and reports `isRefreshing`,
297
195
  // so the grid dims instead of blanking to skeletons.
298
- //
299
- // `asking` counts as loading: the Easy Connect queries are held disabled
300
- // until the deployment probe answers, and a disabled query reports neither
301
- // loading nor data — without this the grid would render "no results" for a
302
- // round trip before the real request had started.
303
- isLoading: opts.enabled &&
304
- (connectStatus.state === 'asking' ||
305
- active.isLoading ||
306
- (showingSections && sectionsQuery.isLoading)),
196
+ isLoading: opts.enabled && (discoverQuery.isLoading || (showingSections && sectionsQuery.isLoading)),
307
197
  isRefreshing: opts.enabled && isPlaceholderData,
308
- isError: active.isError || sectionsFailed,
309
- error: active.isError ? active.error : sectionsFailed ? sectionsQuery.error : null,
198
+ isError: discoverQuery.isError || sectionsFailed,
199
+ error: discoverQuery.isError ? discoverQuery.error : sectionsFailed ? sectionsQuery.error : null,
310
200
  hasMore: opts.enabled && hasNextPage && !isPlaceholderData,
311
201
  isLoadingMore: isFetchingNextPage,
312
202
  loadMore,
313
203
  refetch,
314
204
  };
315
205
  }
316
- export function assembleCatalogEntries({ source, computers, activeQuery, searchDirect, tI18nComplete, discoverPages, managedPages, }) {
317
- const native = computersCatalogEntry(tI18nComplete);
318
- // The native Computers card is ours, not the catalogue's, so it is matched
319
- // locally and hidden inside a category it does not claim.
320
- const includeComputers = computers &&
321
- (!activeQuery ||
322
- `${native.name} ${native.description ?? ''}`
323
- .toLowerCase()
324
- .includes(activeQuery.toLowerCase()));
325
- const nativeEntries = includeComputers ? [native] : [];
326
- if (source === 'discover') {
327
- return nativeEntries.concat((discoverPages ?? []).flatMap((page) => page.items.map(catalogEntryFromDiscover)));
328
- }
329
- const managed = (managedPages ?? []).flatMap((page) => page.apps.map(catalogEntryFromEasyConnect));
330
- if (!searchDirect)
331
- return nativeEntries.concat(managed);
332
- // ponytail: only the API/MCP catalogue's first page joins a search; its
333
- // ranking puts the matches there. Page it too if users miss results.
334
- const direct = (discoverPages?.[0]?.items ?? []).map(catalogEntryFromDiscover);
335
- return nativeEntries.concat(mergeSearchEntries(managed, direct));
206
+ /** The catalogue's Computer record (`native:computer`), dropped where no computer can be paired. */
207
+ function withoutComputerRecord(hide, entries) {
208
+ return hide ? entries.filter((entry) => entry.key !== 'discover:native:computer') : entries;
336
209
  }
@@ -1,21 +1,18 @@
1
1
  import type { AdminConnector } from '@kortix/sdk';
2
2
  /**
3
- * How a connector presents itself — its icon tile and its status pill.
3
+ * How a connector presents its status — the connected mark and the status
4
+ * pill. Its logo is `ConnectorLogo` (`connector-logo.tsx`), shared by every
5
+ * connector surface.
4
6
  *
5
7
  * These two render once per card in the connectors grid, so they sit on the
6
8
  * hottest path of `/projects/[id]/connectors`. They used to live in
7
9
  * `customize/sections/connectors-view.tsx`, which is ~5,100 lines across 50
8
- * components and pulls `HighlightedCode`,
9
- * `PoliciesPanel`, `DiscoverCatalogue` and `ConnectorConnectionModal`. Importing
10
+ * components and pulls `HighlightedCode` and `PoliciesPanel`. Importing
10
11
  * two small components from there put that entire graph in this route's client
11
12
  * chunk — an ES module is all-or-nothing to the bundler.
12
13
  *
13
14
  * The tile-size helper came along because nothing else in the old file used it.
14
15
  */
15
- export declare function ConnectorAppIcon({ connector, size, }: {
16
- connector: AdminConnector;
17
- size?: 'sm' | 'lg';
18
- }): import("react").JSX.Element;
19
16
  /**
20
17
  * Green `✓` for a healthy project connector — same glyph Discovery/All use in
21
18
  * the catalogue card's `trailing` slot. Not a badge: problem states keep the
@@ -26,10 +23,11 @@ export declare function ConnectorConnectedMark({ className }?: {
26
23
  className?: string;
27
24
  }): import("react").JSX.Element;
28
25
  /**
29
- * Problem / setup pills for a project connector. Deliberately returns `null`
30
- * when status is `connected` — put {@link ConnectorConnectedMark} in the card's
31
- * `trailing` slot instead so Connected matches Discovery's `✓` affordance.
26
+ * The state pill for a project connector: Needs account or Error. Connected
27
+ * returns `null`: put {@link ConnectorConnectedMark} in the card's `trailing`
28
+ * slot instead, the catalogue's `✓`.
32
29
  */
33
- export declare function ConnectorStatusBadge({ connector }: {
30
+ export declare function ConnectorStatusBadge({ connector, accountCount, }: {
34
31
  connector: AdminConnector;
32
+ accountCount?: number;
35
33
  }): import("react").JSX.Element | null;