@kortix/ui 0.14.8 → 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 (528) hide show
  1. package/README.md +2 -2
  2. package/dist/_vendor/kortix-shared.js +63 -3
  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/space-slug.d.ts +37 -0
  7. package/dist/access/access/access-detail-shell.js +1 -1
  8. package/dist/access/access/principal-picker.d.ts +11 -0
  9. package/dist/access/access/principal-picker.js +3 -2
  10. package/dist/apps/app-preview-pool.d.ts +7 -2
  11. package/dist/apps/app-preview-pool.js +11 -5
  12. package/dist/apps/app-shared.d.ts +22 -15
  13. package/dist/apps/app-shared.js +37 -19
  14. package/dist/apps/index.d.ts +2 -2
  15. package/dist/apps/index.js +2 -2
  16. package/dist/artifacts/artifact-frame.d.ts +16 -0
  17. package/dist/artifacts/artifact-frame.js +51 -0
  18. package/dist/artifacts/artifact-session.d.ts +18 -0
  19. package/dist/artifacts/artifact-session.js +101 -0
  20. package/dist/artifacts/frame-policy.d.ts +30 -0
  21. package/dist/artifacts/frame-policy.js +61 -0
  22. package/dist/artifacts/index.d.ts +3 -0
  23. package/dist/artifacts/index.js +5 -0
  24. package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
  25. package/dist/browser/sandbox-browser-chrome.js +2 -2
  26. package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
  27. package/dist/customize/agents/agent-grant-pages.js +30 -4
  28. package/dist/customize/agents/agent-page.js +3 -1
  29. package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
  30. package/dist/customize/agents/agent-policy-sets.js +72 -0
  31. package/dist/customize/agents/agent-triggers-section.js +2 -1
  32. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
  33. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
  34. package/dist/customize/connectors/agent-access.d.ts +35 -0
  35. package/dist/customize/connectors/agent-access.js +77 -0
  36. package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
  37. package/dist/customize/connectors/catalog/browse-sections.js +7 -74
  38. package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
  39. package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
  40. package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
  41. package/dist/customize/connectors/catalog/connector-browse.js +19 -50
  42. package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
  43. package/dist/customize/connectors/catalog/use-catalog.js +48 -175
  44. package/dist/customize/connectors/connector-identity.d.ts +9 -11
  45. package/dist/customize/connectors/connector-identity.js +13 -42
  46. package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
  47. package/dist/customize/connectors/connector-moves-banner.js +4 -6
  48. package/dist/customize/connectors/connector-routes.d.ts +21 -9
  49. package/dist/customize/connectors/connector-routes.js +29 -20
  50. package/dist/customize/connectors/connectors-page.js +53 -82
  51. package/dist/customize/connectors/detail/app-page.js +226 -98
  52. package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
  53. package/dist/customize/connectors/detail/computer-app-page.js +39 -0
  54. package/dist/customize/connectors/detail/connector-accounts.js +3 -1
  55. package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
  56. package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
  57. package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
  58. package/dist/customize/connectors/detail/connector-agents.js +69 -0
  59. package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
  60. package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
  61. package/dist/customize/connectors/detail/connector-move-row.js +23 -14
  62. package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
  63. package/dist/customize/connectors/detail/connector-page.js +14 -10
  64. package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
  65. package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
  66. package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
  67. package/dist/customize/connectors/detail/connector-settings.js +7 -3
  68. package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
  69. package/dist/customize/connectors/detail/connector-status.js +34 -10
  70. package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
  71. package/dist/customize/connectors/detail/connector-tabs.js +8 -2
  72. package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
  73. package/dist/customize/connectors/detail/connector-tools.js +105 -48
  74. package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
  75. package/dist/customize/connectors/detail/email-inboxes.js +184 -0
  76. package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
  77. package/dist/customize/connectors/detail/provider-info.js +2 -2
  78. package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
  79. package/dist/customize/connectors/detail/status-badge.js +4 -5
  80. package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
  81. package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
  82. package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
  83. package/dist/customize/connectors/install/install-dialog.js +40 -0
  84. package/dist/customize/connectors/install/install.d.ts +13 -2
  85. package/dist/customize/connectors/install/install.js +9 -4
  86. package/dist/customize/connectors/install/use-install.d.ts +19 -2
  87. package/dist/customize/connectors/install/use-install.js +65 -37
  88. package/dist/customize/connectors/install/way-kind.d.ts +5 -0
  89. package/dist/customize/connectors/install/way-kind.js +16 -0
  90. package/dist/customize/connectors/provider-label.d.ts +2 -1
  91. package/dist/customize/connectors/provider-label.js +13 -3
  92. package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
  93. package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
  94. package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
  95. package/dist/customize/connectors/tools/policy-sets.js +41 -0
  96. package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
  97. package/dist/customize/connectors/tools/tool-groups.js +78 -16
  98. package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
  99. package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
  100. package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
  101. package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
  102. package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
  103. package/dist/customize/connectors/tools/tool-policy.js +74 -8
  104. package/dist/customize/connectors/use-agent-access.d.ts +85 -0
  105. package/dist/customize/connectors/use-agent-access.js +72 -0
  106. package/dist/customize/migrate-to-v2/index.d.ts +1 -2
  107. package/dist/customize/migrate-to-v2/index.js +1 -2
  108. package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -25
  109. package/dist/customize/migrate-to-v2/migration-prompt.js +34 -236
  110. package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
  111. package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
  112. package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
  113. package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
  114. package/dist/customize/providers/provider-accordion.js +17 -2
  115. package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
  116. package/dist/customize/sections/component/channel-access-panel.js +146 -0
  117. package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
  118. package/dist/customize/sections/component/channel-connect-hero.js +3 -2
  119. package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
  120. package/dist/customize/sections/component/channel-hero-frame.js +40 -0
  121. package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
  122. package/dist/customize/sections/component/channel-mocks.js +46 -0
  123. package/dist/customize/sections/component/channel-row.d.ts +13 -3
  124. package/dist/customize/sections/component/channel-row.js +10 -4
  125. package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
  126. package/dist/customize/sections/component/email-connect-form.js +183 -0
  127. package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
  128. package/dist/customize/sections/component/slack-connect-card.js +2 -3
  129. package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
  130. package/dist/customize/sections/component/teams-connect-card.js +2 -3
  131. package/dist/customize/sections/component/telegram-channel-row.js +16 -25
  132. package/dist/customize/sections/connectors-view.d.ts +1 -15
  133. package/dist/customize/sections/connectors-view.js +81 -314
  134. package/dist/customize/sections/view/agent-editor-catalog.js +5 -0
  135. package/dist/customize/sections/view/channels-view.d.ts +5 -1
  136. package/dist/customize/sections/view/channels-view.js +61 -75
  137. package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
  138. package/dist/customize/settings/tabs/experimental-tab.js +35 -16
  139. package/dist/customize/shared/catalog/catalog-empty-state.d.ts +1 -12
  140. package/dist/customize/shared/catalog/catalog-empty-state.js +3 -3
  141. package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
  142. package/dist/customize/shared/channels-switch-dialog.js +30 -0
  143. package/dist/customize/shared/feature-gate-screen.js +27 -9
  144. package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
  145. package/dist/customize/shared/use-customize-prefetch.js +9 -27
  146. package/dist/customize/triggers/schedule/post-to-field.d.ts +18 -0
  147. package/dist/customize/triggers/schedule/post-to-field.js +49 -0
  148. package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
  149. package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
  150. package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
  151. package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
  152. package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
  153. package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
  154. package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
  155. package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
  156. package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
  157. package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
  158. package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
  159. package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
  160. package/dist/customize/triggers/schedule-view.js +5 -2
  161. package/dist/files/index.d.ts +1 -0
  162. package/dist/files/index.js +1 -0
  163. package/dist/files/project/change-request-recovery.d.ts +1 -26
  164. package/dist/files/project/change-request-recovery.js +1 -59
  165. package/dist/files/project/components/change-request-detail-dialog.js +13 -3
  166. package/dist/files/project/components/drive-explorer.js +15 -15
  167. package/dist/files/project/components/drive-toolbar.d.ts +16 -2
  168. package/dist/files/project/components/drive-toolbar.js +14 -5
  169. package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
  170. package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
  171. package/dist/files/project/hooks/use-change-requests.js +11 -2
  172. package/dist/files/renderers/image-frame.d.ts +46 -0
  173. package/dist/files/renderers/image-frame.js +59 -0
  174. package/dist/files/renderers/image-renderer.d.ts +11 -1
  175. package/dist/files/renderers/image-renderer.js +13 -3
  176. package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
  177. package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
  178. package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
  179. package/dist/files/renderers/show-content-renderer.d.ts +9 -1
  180. package/dist/files/renderers/show-content-renderer.js +56 -14
  181. package/dist/files/runtime/file-source.js +2 -0
  182. package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
  183. package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
  184. package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
  185. package/dist/files/runtime/hooks/use-shared-image.js +177 -0
  186. package/dist/files/viewer/file-content-renderer.d.ts +22 -1
  187. package/dist/files/viewer/file-content-renderer.js +50 -7
  188. package/dist/files/viewer/file-header.d.ts +7 -3
  189. package/dist/files/viewer/file-header.js +20 -11
  190. package/dist/files/viewer/file-preview-modal.d.ts +1 -1
  191. package/dist/files/viewer/file-preview-modal.js +10 -22
  192. package/dist/files/viewer/file-source.d.ts +13 -0
  193. package/dist/files/viewer/use-file-content-state.d.ts +2 -0
  194. package/dist/files/viewer/use-file-content-state.js +28 -10
  195. package/dist/files/viewer/viewer-actions.d.ts +3 -1
  196. package/dist/files/viewer/viewer-actions.js +2 -2
  197. package/dist/hooks/use-media-query.d.ts +1 -0
  198. package/dist/hooks/use-mobile.d.ts +5 -0
  199. package/dist/hooks/use-mobile.js +8 -0
  200. package/dist/i18n/en.d.ts +873 -85
  201. package/dist/i18n/en.js +888 -100
  202. package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
  203. package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
  204. package/dist/index.d.ts +2 -2
  205. package/dist/index.js +2 -2
  206. package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
  207. package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
  208. package/dist/internal/account-hub/hub-sheet.js +21 -5
  209. package/dist/internal/account-hub/sections.d.ts +1 -1
  210. package/dist/internal/account-hub/sections.js +2 -1
  211. package/dist/internal/auth/auth-card-shell.js +3 -3
  212. package/dist/internal/components/agent-mark.js +5 -2
  213. package/dist/internal/connector-logo/connector-logo-source.d.ts +63 -0
  214. package/dist/internal/connector-logo/connector-logo-source.js +48 -0
  215. package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
  216. package/dist/internal/connector-logo/connector-logo.js +56 -0
  217. package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
  218. package/dist/internal/connector-logo/connector-mark-files.js +35 -0
  219. package/dist/internal/files/file-read-retry.d.ts +13 -0
  220. package/dist/internal/files/file-read-retry.js +23 -3
  221. package/dist/internal/files/session-drive-files.d.ts +5 -1
  222. package/dist/internal/files/session-drive-files.js +7 -2
  223. package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
  224. package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
  225. package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
  226. package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
  227. package/dist/internal/hooks/connectors/use-add-account.js +1 -1
  228. package/dist/internal/hooks/index.d.ts +1 -1
  229. package/dist/internal/hooks/index.js +1 -1
  230. package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
  231. package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
  232. package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
  233. package/dist/internal/hooks/use-auto-scroll.js +4 -4
  234. package/dist/internal/icons/telegram.d.ts +5 -0
  235. package/dist/internal/icons/telegram.js +6 -1
  236. package/dist/internal/layout/nav-hover-card.d.ts +35 -0
  237. package/dist/internal/layout/nav-hover-card.js +84 -0
  238. package/dist/internal/layout/project-nav-row.d.ts +3 -1
  239. package/dist/internal/layout/project-nav-row.js +3 -2
  240. package/dist/internal/layout/project-page-header.d.ts +4 -2
  241. package/dist/internal/layout/project-page-header.js +4 -3
  242. package/dist/internal/layout/project-settings-nav.js +59 -2
  243. package/dist/internal/lib/browser-error-noise.d.ts +1 -1
  244. package/dist/internal/lib/browser-error-noise.js +1 -1
  245. package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
  246. package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
  247. package/dist/internal/lib/manifest-version.d.ts +1 -1
  248. package/dist/internal/lib/manifest-version.js +2 -2
  249. package/dist/internal/lib/memory-href.d.ts +16 -0
  250. package/dist/internal/lib/memory-href.js +46 -0
  251. package/dist/internal/lib/use-project-feature-flags.js +9 -9
  252. package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
  253. package/dist/internal/lib/utils/heic-convert.js +3 -4
  254. package/dist/internal/lib/web-notifications.d.ts +20 -0
  255. package/dist/internal/lib/web-notifications.js +48 -4
  256. package/dist/internal/notifications/notification-bell.d.ts +4 -1
  257. package/dist/internal/notifications/notification-bell.js +2 -2
  258. package/dist/internal/selection/selection-bar.d.ts +2 -1
  259. package/dist/internal/selection/selection-bar.js +1 -1
  260. package/dist/internal/stores/file-preview-store.d.ts +29 -2
  261. package/dist/internal/stores/file-preview-store.js +19 -1
  262. package/dist/internal/stores/kortix-computer-store.js +3 -0
  263. package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
  264. package/dist/internal/stores/sidebar-nav-store.js +3 -1
  265. package/dist/lib/routes.d.ts +13 -1
  266. package/dist/lib/routes.js +13 -0
  267. package/dist/markdown/index.d.ts +2 -1
  268. package/dist/markdown/index.js +2 -1
  269. package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
  270. package/dist/markdown/setup-links/approval-decision.js +6 -2
  271. package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
  272. package/dist/markdown/setup-links/connector-handshake.js +12 -10
  273. package/dist/markdown/setup-links/secret-intake-form.d.ts +0 -10
  274. package/dist/markdown/setup-links/secret-intake-form.js +1 -1
  275. package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
  276. package/dist/markdown/setup-links/show-connect-hero.js +91 -0
  277. package/dist/markdown/unified-markdown.js +5 -5
  278. package/dist/primitives/badge.d.ts +1 -1
  279. package/dist/primitives/badge.js +2 -0
  280. package/dist/primitives/disclosure.js +14 -2
  281. package/dist/primitives/empty-art.d.ts +12 -0
  282. package/dist/primitives/empty-art.js +11 -0
  283. package/dist/primitives/mermaid-renderer.d.ts +2 -0
  284. package/dist/primitives/mermaid-renderer.js +21 -15
  285. package/dist/primitives/resizable.js +6 -1
  286. package/dist/primitives/resize-seam.d.ts +11 -0
  287. package/dist/primitives/resize-seam.js +12 -0
  288. package/dist/primitives/sidebar-panel.js +4 -7
  289. package/dist/primitives/tabs.d.ts +14 -1
  290. package/dist/primitives/tabs.js +1 -1
  291. package/dist/providers/ui-provider.d.ts +9 -0
  292. package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
  293. package/dist/session/composer/ComposerAboveCard.js +2 -2
  294. package/dist/session/composer/ComposerCard.d.ts +1 -1
  295. package/dist/session/composer/ComposerCard.js +3 -3
  296. package/dist/session/composer/agent-selector.d.ts +13 -1
  297. package/dist/session/composer/agent-selector.js +25 -5
  298. package/dist/session/composer/composer-agent-access.d.ts +15 -0
  299. package/dist/session/composer/composer-agent-access.js +27 -0
  300. package/dist/session/composer/composer-chat-input.d.ts +8 -2
  301. package/dist/session/composer/composer-chat-input.js +8 -6
  302. package/dist/session/composer/composer-logic.d.ts +16 -0
  303. package/dist/session/composer/composer-logic.js +12 -0
  304. package/dist/session/composer/composer-underbar.d.ts +3 -1
  305. package/dist/session/composer/composer-underbar.js +4 -3
  306. package/dist/session/composer/composer.d.ts +15 -1
  307. package/dist/session/composer/composer.js +19 -1
  308. package/dist/session/composer/draft/composer-draft.d.ts +6 -2
  309. package/dist/session/composer/draft/composer-draft.js +5 -1
  310. package/dist/session/composer/reasoning-effort-selector.js +1 -1
  311. package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
  312. package/dist/session/models/chatgpt-connection-button.js +54 -0
  313. package/dist/session/models/model-selector.js +5 -2
  314. package/dist/session/models/use-model-connection-gate.d.ts +5 -5
  315. package/dist/session/models/use-model-connection-gate.js +5 -5
  316. package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
  317. package/dist/session/outcomes/jump-to-outcome.js +11 -0
  318. package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
  319. package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
  320. package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
  321. package/dist/session/outcomes/session-outcomes-provider.js +33 -3
  322. package/dist/session/panel/easy/app-preview.d.ts +10 -0
  323. package/dist/session/panel/easy/app-preview.js +31 -12
  324. package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
  325. package/dist/session/panel/easy/change-requests-card.js +17 -0
  326. package/dist/session/panel/easy/easy-panel-logic.js +7 -1
  327. package/dist/session/panel/easy/easy-panel.js +5 -2
  328. package/dist/session/panel/easy/file-preview.js +1 -1
  329. package/dist/session/panel/easy/outputs-card.d.ts +2 -1
  330. package/dist/session/panel/easy/outputs-card.js +3 -2
  331. package/dist/session/panel/mobile-tool-drawer.js +7 -1
  332. package/dist/session/panel/session-audit-panel.js +9 -2
  333. package/dist/session/panel/session-detail-panel.js +9 -3
  334. package/dist/session/panel/session-files-explorer.d.ts +9 -0
  335. package/dist/session/panel/session-files-explorer.js +12 -3
  336. package/dist/session/panel/session-panel-provider.d.ts +15 -1
  337. package/dist/session/panel/session-panel-provider.js +32 -7
  338. package/dist/session/panel/shared/derive-panels.d.ts +8 -1
  339. package/dist/session/panel/shared/derive-panels.js +12 -2
  340. package/dist/session/panel/shared/output-priority.js +2 -0
  341. package/dist/session/participants/session-participants.d.ts +5 -1
  342. package/dist/session/participants/session-participants.js +9 -2
  343. package/dist/session/prompts/approval-request.d.ts +5 -0
  344. package/dist/session/prompts/approval-request.js +7 -1
  345. package/dist/session/prompts/session-approval-review.d.ts +9 -0
  346. package/dist/session/prompts/session-approval-review.js +18 -0
  347. package/dist/session/status/session-error-banner.js +2 -49
  348. package/dist/session/status/session-starting-loader.d.ts +14 -2
  349. package/dist/session/status/session-starting-loader.js +16 -4
  350. package/dist/session/thread/after-first-prompt.d.ts +7 -0
  351. package/dist/session/thread/after-first-prompt.js +8 -0
  352. package/dist/session/thread/detect-command.d.ts +12 -0
  353. package/dist/session/thread/detect-command.js +20 -0
  354. package/dist/session/thread/session-chat.d.ts +3 -1
  355. package/dist/session/thread/session-chat.js +377 -252
  356. package/dist/session/thread/session-thread.d.ts +3 -1
  357. package/dist/session/thread/session-thread.js +9 -2
  358. package/dist/session/thread/thread-boot-rows.d.ts +36 -0
  359. package/dist/session/thread/thread-boot-rows.js +89 -0
  360. package/dist/session/thread/transcript-rows.d.ts +31 -0
  361. package/dist/session/thread/transcript-rows.js +3 -0
  362. package/dist/session/thread/transcript.d.ts +0 -9
  363. package/dist/session/thread/transcript.js +104 -19
  364. package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
  365. package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
  366. package/dist/session/tool/tool-part-renderer.d.ts +5 -4
  367. package/dist/session/tool/tool-part-renderer.js +8 -3
  368. package/dist/session/tool/tools/bash-tool.js +7 -6
  369. package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
  370. package/dist/session/tool/tools/channel-send.d.ts +2 -1
  371. package/dist/session/tool/tools/codemode-tool.js +1 -1
  372. package/dist/session/tool/tools/connector-tools.js +1 -1
  373. package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
  374. package/dist/session/tool/tools/image-gen-tool.js +240 -53
  375. package/dist/session/tool/tools/show-tool.js +19 -8
  376. package/dist/session/turn/channel-brand.d.ts +8 -3
  377. package/dist/session/turn/channel-brand.js +20 -4
  378. package/dist/session/turn/message-author.d.ts +8 -0
  379. package/dist/session/turn/message-author.js +24 -0
  380. package/dist/session/turn/message-row.d.ts +52 -0
  381. package/dist/session/turn/message-row.js +44 -0
  382. package/dist/session/turn/plan-anchor.d.ts +1 -1
  383. package/dist/session/turn/plan-anchor.js +1 -1
  384. package/dist/session/turn/user-message.d.ts +7 -1
  385. package/dist/session/turn/user-message.js +21 -7
  386. package/dist/styles.css +1 -1
  387. package/dist/workspace/home/access-requests-bell.d.ts +9 -2
  388. package/dist/workspace/home/access-requests-bell.js +20 -6
  389. package/dist/workspace/home/first-chat.d.ts +8 -21
  390. package/dist/workspace/home/first-chat.js +22 -72
  391. package/dist/workspace/index.d.ts +6 -0
  392. package/dist/workspace/index.js +6 -0
  393. package/dist/workspace/layout/project-home.d.ts +14 -2
  394. package/dist/workspace/layout/project-home.js +60 -21
  395. package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
  396. package/dist/workspace/layout/use-project-home-send.js +82 -3
  397. package/dist/workspace/memory/body-doc.d.ts +17 -0
  398. package/dist/workspace/memory/body-doc.js +208 -0
  399. package/dist/workspace/memory/body-extensions.d.ts +38 -0
  400. package/dist/workspace/memory/body-extensions.js +103 -0
  401. package/dist/workspace/memory/company-memory-page.d.ts +8 -0
  402. package/dist/workspace/memory/company-memory-page.js +16 -0
  403. package/dist/workspace/memory/memory-all.d.ts +20 -0
  404. package/dist/workspace/memory/memory-all.js +27 -0
  405. package/dist/workspace/memory/memory-body.d.ts +19 -0
  406. package/dist/workspace/memory/memory-body.js +139 -0
  407. package/dist/workspace/memory/memory-empty.d.ts +13 -0
  408. package/dist/workspace/memory/memory-empty.js +28 -0
  409. package/dist/workspace/memory/memory-history.d.ts +27 -0
  410. package/dist/workspace/memory/memory-history.js +108 -0
  411. package/dist/workspace/memory/memory-labels.d.ts +16 -0
  412. package/dist/workspace/memory/memory-labels.js +47 -0
  413. package/dist/workspace/memory/memory-page-list.d.ts +34 -0
  414. package/dist/workspace/memory/memory-page-list.js +156 -0
  415. package/dist/workspace/memory/memory-reader.d.ts +58 -0
  416. package/dist/workspace/memory/memory-reader.js +123 -0
  417. package/dist/workspace/memory/memory-view.d.ts +21 -0
  418. package/dist/workspace/memory/memory-view.js +124 -0
  419. package/dist/workspace/memory/remember-popover.d.ts +19 -0
  420. package/dist/workspace/memory/remember-popover.js +61 -0
  421. package/dist/workspace/memory/remember-this.d.ts +12 -0
  422. package/dist/workspace/memory/remember-this.js +89 -0
  423. package/dist/workspace/memory/source-mark.d.ts +18 -0
  424. package/dist/workspace/memory/source-mark.js +79 -0
  425. package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
  426. package/dist/workspace/memory/used-memory-chip.js +61 -0
  427. package/dist/workspace/new/advanced-fields.d.ts +2 -1
  428. package/dist/workspace/new/advanced-fields.js +2 -2
  429. package/dist/workspace/new/source-param.d.ts +1 -1
  430. package/dist/workspace/new/source-param.js +3 -1
  431. package/dist/workspace/new/use-create-workspace.d.ts +8 -10
  432. package/dist/workspace/new/use-create-workspace.js +3 -3
  433. package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
  434. package/dist/workspace/projects/onboarding/app-logo.js +6 -13
  435. package/dist/workspace/projects/policies-panel.js +5 -3
  436. package/dist/workspace/review/review-actions.d.ts +4 -2
  437. package/dist/workspace/review/review-actions.js +8 -2
  438. package/dist/workspace/review/review-center.js +11 -7
  439. package/dist/workspace/review/review-detail.d.ts +10 -0
  440. package/dist/workspace/review/review-detail.js +101 -13
  441. package/dist/workspace/saved-session-skeleton.d.ts +2 -2
  442. package/dist/workspace/saved-session-skeleton.js +3 -3
  443. package/dist/workspace/session-workspace.js +15 -13
  444. package/dist/workspace/sessions/project-sessions-view.js +3 -2
  445. package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
  446. package/dist/workspace/sessions/sessions-toolbar.js +2 -2
  447. package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
  448. package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
  449. package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
  450. package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
  451. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
  452. package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
  453. package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
  454. package/dist/workspace/sidebar/nav-row-meta.js +14 -2
  455. package/dist/workspace/sidebar/project-nav-items.js +3 -0
  456. package/dist/workspace/sidebar/project-session-list.js +68 -56
  457. package/dist/workspace/sidebar/project-sidebar.js +9 -2
  458. package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
  459. package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
  460. package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
  461. package/dist/workspace/sidebar/session-group-order.js +25 -0
  462. package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
  463. package/dist/workspace/sidebar/session-group-sections.js +267 -0
  464. package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
  465. package/dist/workspace/sidebar/session-list-chrome.js +50 -0
  466. package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
  467. package/dist/workspace/spaces/channel-glyph.js +6 -0
  468. package/dist/workspace/spaces/channel-setup.d.ts +16 -0
  469. package/dist/workspace/spaces/channel-setup.js +105 -0
  470. package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
  471. package/dist/workspace/spaces/channels-onboarding.js +37 -0
  472. package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
  473. package/dist/workspace/spaces/create-channel-dialog.js +158 -0
  474. package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
  475. package/dist/workspace/spaces/private-channels-not-in.js +69 -0
  476. package/dist/workspace/spaces/space-agents.d.ts +10 -0
  477. package/dist/workspace/spaces/space-agents.js +10 -0
  478. package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
  479. package/dist/workspace/spaces/space-details-dialog.js +176 -0
  480. package/dist/workspace/spaces/space-link-label.d.ts +49 -0
  481. package/dist/workspace/spaces/space-link-label.js +73 -0
  482. package/dist/workspace/spaces/space-links.d.ts +19 -0
  483. package/dist/workspace/spaces/space-links.js +230 -0
  484. package/dist/workspace/spaces/space-members.d.ts +46 -0
  485. package/dist/workspace/spaces/space-members.js +182 -0
  486. package/dist/workspace/spaces/space-roster.d.ts +15 -0
  487. package/dist/workspace/spaces/space-roster.js +44 -0
  488. package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
  489. package/dist/workspace/spaces/space-threads-tab.js +156 -0
  490. package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
  491. package/dist/workspace/spaces/space-timeline-view.js +235 -0
  492. package/dist/workspace/spaces/space-timeline.d.ts +106 -0
  493. package/dist/workspace/spaces/space-timeline.js +183 -0
  494. package/dist/workspace/spaces/space-triggers.d.ts +13 -0
  495. package/dist/workspace/spaces/space-triggers.js +78 -0
  496. package/dist/workspace/spaces/space-view.d.ts +37 -0
  497. package/dist/workspace/spaces/space-view.js +436 -0
  498. package/package.json +27 -36
  499. package/skills/kortix-ui/SKILL.md +3 -3
  500. package/skills/kortix-ui/references/custom-dashboard.md +3 -3
  501. package/skills/kortix-ui/references/modules.md +28 -4
  502. package/skills/kortix-ui/references/theming.md +1 -1
  503. package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
  504. package/dist/customize/connectors/catalog/merge-search.js +0 -26
  505. package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
  506. package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
  507. package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
  508. package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
  509. package/dist/customize/sections/connector-connection-header.d.ts +0 -36
  510. package/dist/customize/sections/connector-connection-header.js +0 -33
  511. package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
  512. package/dist/customize/sections/connector-connection-modal.js +0 -72
  513. package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
  514. package/dist/customize/sections/discover-catalogue-card.js +0 -26
  515. package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
  516. package/dist/customize/sections/discover-catalogue-detail.js +0 -24
  517. package/dist/customize/sections/discover-catalogue.d.ts +0 -17
  518. package/dist/customize/sections/discover-catalogue.js +0 -132
  519. package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
  520. package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
  521. package/dist/files/project/components/drive-empty-art.d.ts +0 -2
  522. package/dist/files/project/components/drive-empty-art.js +0 -5
  523. package/dist/internal/hooks/use-media-query.d.ts +0 -2
  524. package/dist/internal/share/public-share-link-button.d.ts +0 -14
  525. package/dist/internal/share/public-share-link-button.js +0 -17
  526. package/dist/markdown/setup-links/app-credentials-form.d.ts +0 -12
  527. package/dist/markdown/setup-links/app-credentials-form.js +0 -115
  528. /package/dist/{internal/hooks → hooks}/use-media-query.js +0 -0
@@ -0,0 +1,43 @@
1
+ import type { AgentGrantSetV2 } from '@kortix/sdk';
2
+ /**
3
+ * The agent side of connector policy sets: `agents.<a>.policy_sets` maps a
4
+ * connector slug to one of that connector's sets (`connectors[].policy_sets`).
5
+ * An absent key means the base rules.
6
+ */
7
+ export interface PolicySetOption {
8
+ name: string;
9
+ description?: string;
10
+ }
11
+ /**
12
+ * Every connector's set names, read from the root kortix.yaml. The agent page
13
+ * already holds the raw manifest, so the editor needs no request per connector.
14
+ * ponytail: connectors declared in an `imports:` file are not read; an agent
15
+ * that names a set on one still shows its value, flagged as missing.
16
+ */
17
+ export declare function connectorPolicySetOptions(manifestRaw: string | null | undefined): Record<string, PolicySetOption[]>;
18
+ /**
19
+ * One connector's set choice; `null` (or `base`) clears it. Clearing the last
20
+ * entry returns `{}`, never `undefined`: the config PUT keeps the declared
21
+ * `policy_sets` when the key is omitted, so `{}` is what removes it.
22
+ *
23
+ * Entries on connectors the agent no longer holds are kept on purpose: they
24
+ * are inert until the connector is granted again, and dropping one is a set
25
+ * change that needs project.connector.write.
26
+ */
27
+ export declare function withPolicySet(policySets: Record<string, string> | undefined, slug: string, name: string | null): Record<string, string>;
28
+ export interface PolicySetRow {
29
+ slug: string;
30
+ options: PolicySetOption[];
31
+ /** The set the agent names, or null for the base rules. */
32
+ value: string | null;
33
+ /** The agent names a set the connector does not define: calls are blocked. */
34
+ missing: boolean;
35
+ }
36
+ /**
37
+ * The rows of the agent's "Rule sets" list: every granted connector that
38
+ * defines at least one set, plus every connector the agent already names a set
39
+ * on (so a stale entry is visible and can be cleared).
40
+ */
41
+ export declare function policySetRows(grant: AgentGrantSetV2 | undefined, catalog: Record<string, PolicySetOption[]>, policySets: Record<string, string> | undefined,
42
+ /** Slugs of the project's connectors, in display order. */
43
+ connectorSlugs: readonly string[]): PolicySetRow[];
@@ -0,0 +1,72 @@
1
+ import { parseManifestText } from '../../_vendor/kortix-shared.js';
2
+ /**
3
+ * Every connector's set names, read from the root kortix.yaml. The agent page
4
+ * already holds the raw manifest, so the editor needs no request per connector.
5
+ * ponytail: connectors declared in an `imports:` file are not read; an agent
6
+ * that names a set on one still shows its value, flagged as missing.
7
+ */
8
+ export function connectorPolicySetOptions(manifestRaw) {
9
+ let manifest = {};
10
+ try {
11
+ manifest = manifestRaw ? parseManifestText(manifestRaw, 'yaml') : {};
12
+ }
13
+ catch {
14
+ return {};
15
+ }
16
+ const out = Object.create(null);
17
+ const connectors = Array.isArray(manifest.connectors) ? manifest.connectors : [];
18
+ for (const entry of connectors) {
19
+ if (!entry || typeof entry !== 'object')
20
+ continue;
21
+ const { slug, policy_sets: sets } = entry;
22
+ if (typeof slug !== 'string' || !sets || typeof sets !== 'object' || Array.isArray(sets))
23
+ continue;
24
+ const options = Object.entries(sets).map(([name, set]) => {
25
+ const description = set?.description;
26
+ return typeof description === 'string' && description ? { name, description } : { name };
27
+ });
28
+ if (options.length > 0)
29
+ out[slug] = options;
30
+ }
31
+ return out;
32
+ }
33
+ /**
34
+ * One connector's set choice; `null` (or `base`) clears it. Clearing the last
35
+ * entry returns `{}`, never `undefined`: the config PUT keeps the declared
36
+ * `policy_sets` when the key is omitted, so `{}` is what removes it.
37
+ *
38
+ * Entries on connectors the agent no longer holds are kept on purpose: they
39
+ * are inert until the connector is granted again, and dropping one is a set
40
+ * change that needs project.connector.write.
41
+ */
42
+ export function withPolicySet(policySets, slug, name) {
43
+ const next = Object.fromEntries(Object.entries(policySets ?? {}).filter(([key]) => key !== slug));
44
+ if (name && name !== 'base')
45
+ next[slug] = name;
46
+ return next;
47
+ }
48
+ /**
49
+ * The rows of the agent's "Rule sets" list: every granted connector that
50
+ * defines at least one set, plus every connector the agent already names a set
51
+ * on (so a stale entry is visible and can be cleared).
52
+ */
53
+ export function policySetRows(grant, catalog, policySets,
54
+ /** Slugs of the project's connectors, in display order. */
55
+ connectorSlugs) {
56
+ const granted = (slug) => grant === 'all' || (Array.isArray(grant) && grant.includes(slug));
57
+ const assigned = policySets ?? {};
58
+ const slugs = [
59
+ ...connectorSlugs.filter((slug) => granted(slug) && (catalog[slug]?.length || Object.hasOwn(assigned, slug))),
60
+ ...Object.keys(assigned).filter((slug) => !connectorSlugs.includes(slug)),
61
+ ];
62
+ return slugs.map((slug) => {
63
+ const options = catalog[slug] ?? [];
64
+ const value = Object.hasOwn(assigned, slug) ? (assigned[slug] ?? null) : null;
65
+ return {
66
+ slug,
67
+ options,
68
+ value,
69
+ missing: value !== null && !options.some((option) => option.name === value),
70
+ };
71
+ });
72
+ }
@@ -34,7 +34,7 @@ import { useProjectFeatureFlags } from '../../internal/lib/use-project-feature-f
34
34
  import { cn } from '../../internal/lib/utils.js';
35
35
  import { listProjectTriggers } from '@kortix/sdk';
36
36
  import { contract, qk } from '@kortix/sdk/react';
37
- import { LightningIcon, PlusIcon, PulseIcon, TimerIcon, WebhooksLogoIcon, } from '@phosphor-icons/react';
37
+ import { AppWindowIcon, LightningIcon, PlusIcon, PulseIcon, TimerIcon, WebhooksLogoIcon, } from '@phosphor-icons/react';
38
38
  import { useQuery, useQueryClient } from '@tanstack/react-query';
39
39
  import { useCallback, useMemo, useState } from 'react';
40
40
  const KIND_ICON = {
@@ -42,6 +42,7 @@ const KIND_ICON = {
42
42
  webhook: WebhooksLogoIcon,
43
43
  monitor: PulseIcon,
44
44
  event: LightningIcon,
45
+ app: AppWindowIcon,
45
46
  };
46
47
  /**
47
48
  * Whether `trigger` starts `agentName`. A trigger that names no agent is
@@ -6,11 +6,16 @@ import type { McpServerApp } from '../install/mcp-first.js';
6
6
  * provider's consent page. It replaced eight steps through the custom
7
7
  * connector form, Sign in and Add account.
8
8
  */
9
- export declare function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs, onAdded, app, }: {
9
+ export declare function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs, onAdded, app, initial, }: {
10
10
  projectId: string;
11
11
  /** A catalogue app's own MCP server: the URL is filled in and the dialog
12
12
  * is titled for the app. Null for a server the user pastes. */
13
13
  app?: McpServerApp | null;
14
+ /** A pasted server prefilled from a link (an agent's `setup_url`): a person confirms it here. */
15
+ initial?: {
16
+ url: string;
17
+ name?: string;
18
+ } | null;
14
19
  open: boolean;
15
20
  onOpenChange: (open: boolean) => void;
16
21
  /** Slugs of the project's connectors: a new server never reuses one. */
@@ -28,7 +28,7 @@ const NO_PICKS = { memberIds: [], groupIds: [], agentIds: [] };
28
28
  * provider's consent page. It replaced eight steps through the custom
29
29
  * connector form, Sign in and Add account.
30
30
  */
31
- export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs, onAdded, app = null, }) {
31
+ export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs, onAdded, app = null, initial = null, }) {
32
32
  const t = useTranslations('connectorPages');
33
33
  const tSharing = useTranslations('accessSharing');
34
34
  const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
@@ -46,7 +46,7 @@ export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs,
46
46
  const everyoneLabel = projectName
47
47
  ? tSharing('everyone', { project: projectName })
48
48
  : tSharing('visibilityEveryone');
49
- const [url, setUrl] = useState(app?.url ?? '');
49
+ const [url, setUrl] = useState(app?.url ?? initial?.url ?? '');
50
50
  const [audience, setAudience] = useState({ audience: 'private', picked: NO_PICKS });
51
51
  // The catalogue app's own server, unchanged: named after the app, and its
52
52
  // sign-in is known to be one click (`mcpServerFor`).
@@ -57,10 +57,14 @@ export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs,
57
57
  ? mcpAppIdentity(app.name, takenSlugs)
58
58
  : mcpServerIdentity(url, takenSlugs);
59
59
  const urlInvalid = url.trim() !== '' && identity === null;
60
+ // The profile's name: proposed from the app or the URL until the user edits it.
61
+ const [nameEdit, setNameEdit] = useState(initial?.name ?? null);
62
+ const name = (nameEdit ?? identity?.name ?? '').trim();
60
63
  const add = useMutation({
61
64
  mutationFn: () => addMcpServer(projectId, {
62
65
  url,
63
- ...(appServer ? { appName: app.name, signIn: true } : {}),
66
+ ...(name ? { appName: name } : {}),
67
+ ...(appServer ? { signIn: true } : {}),
64
68
  audience: audience.audience,
65
69
  grantees: newAccountGrantees(audience.picked),
66
70
  takenSlugs,
@@ -94,6 +98,7 @@ export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs,
94
98
  audience.picked.groupIds.length +
95
99
  (audience.picked.agentIds?.length ?? 0);
96
100
  const canSubmit = identity !== null &&
101
+ /[a-z0-9]/i.test(name) &&
97
102
  !add.isPending &&
98
103
  (audience.audience === 'private' ||
99
104
  (canManageConnections && (audience.audience === 'project' || (Boolean(accountId) && picks > 0))));
@@ -103,6 +108,7 @@ export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs,
103
108
  onOpenChange(next);
104
109
  if (!next) {
105
110
  setUrl(app?.url ?? '');
111
+ setNameEdit(null);
106
112
  setAudience({ audience: 'private', picked: NO_PICKS });
107
113
  }
108
114
  };
@@ -110,5 +116,5 @@ export function AddMcpServerDialog({ projectId, open, onOpenChange, takenSlugs,
110
116
  event.preventDefault();
111
117
  if (canSubmit)
112
118
  add.mutate();
113
- }, children: [_jsxs(ModalBody, { className: "max-h-[60vh] space-y-4 overflow-y-auto", children: [_jsxs(Field, { children: [_jsx(FieldLabel, { htmlFor: `${id}-url`, children: t('addMcpUrlLabel') }), _jsx(Input, { id: `${id}-url`, type: "url", inputMode: "url", autoComplete: "off", spellCheck: false, value: url, onChange: (event) => setUrl(event.target.value), placeholder: "https://mcp.example.com/mcp", "aria-invalid": urlInvalid || undefined, disabled: add.isPending, autoFocus: !app }), urlInvalid ? (_jsx(FieldDescription, { className: "text-destructive", role: "alert", children: t('addMcpUrlInvalid') })) : (_jsx(FieldDescription, { children: identity ? t('addMcpUrlNamed', { name: identity.name }) : t('addMcpUrlHint') }))] }), _jsx(AudienceFields, { projectId: projectId, value: audience, onChange: setAudience, canShare: canManageConnections, accountId: accountId, everyoneLabel: everyoneLabel, shareRequiresLabel: tSharing('shareRequiresManage'), disabled: add.isPending })] }), _jsxs(ModalFooter, { className: "sm:justify-between", children: [_jsx(Button, { type: "button", variant: "outline-ghost", onClick: () => close(false), disabled: add.isPending, children: tI18nComplete.raw('text19766ed6ccb2') }), _jsxs(Button, { type: "submit", disabled: !canSubmit, children: [add.isPending ? _jsx(Loading, { className: "size-4 shrink-0" }) : null, t('addMcpConnect')] })] })] })] }) }));
119
+ }, children: [_jsxs(ModalBody, { className: "max-h-[60vh] space-y-4 overflow-y-auto", children: [app ? null : (_jsxs(Field, { children: [_jsx(FieldLabel, { htmlFor: `${id}-url`, children: t('addMcpUrlLabel') }), _jsx(Input, { id: `${id}-url`, type: "url", inputMode: "url", autoComplete: "off", spellCheck: false, value: url, onChange: (event) => setUrl(event.target.value), placeholder: "https://mcp.example.com/mcp", "aria-invalid": urlInvalid || undefined, disabled: add.isPending, autoFocus: !app }), urlInvalid ? (_jsx(FieldDescription, { className: "text-destructive", role: "alert", children: t('addMcpUrlInvalid') })) : (_jsx(FieldDescription, { children: t('addMcpUrlHint') }))] })), app && nameEdit === null ? null : (_jsxs(Field, { children: [_jsx(FieldLabel, { htmlFor: `${id}-name`, children: t('installNameLabel') }), _jsx(Input, { id: `${id}-name`, value: nameEdit ?? identity?.name ?? '', onChange: (event) => setNameEdit(event.target.value), autoComplete: "off", disabled: add.isPending || identity === null }), _jsx(FieldDescription, { children: t('installProfileHint') })] })), _jsx(AudienceFields, { projectId: projectId, value: audience, onChange: setAudience, canShare: canManageConnections, accountId: accountId, everyoneLabel: everyoneLabel, shareRequiresLabel: tSharing('shareRequiresManage'), disabled: add.isPending })] }), _jsxs(ModalFooter, { className: "sm:justify-between", children: [app && nameEdit === null ? (_jsx(Button, { type: "button", variant: "text", size: "sm", className: "px-0", onClick: () => setNameEdit(identity?.name ?? app.name), disabled: add.isPending, children: t('installRename') })) : null, _jsx(Button, { type: "button", variant: "outline-ghost", className: app && nameEdit === null ? 'sm:ml-auto' : undefined, onClick: () => close(false), disabled: add.isPending, children: tI18nComplete.raw('text19766ed6ccb2') }), _jsxs(Button, { type: "submit", disabled: !canSubmit, children: [add.isPending ? _jsx(Loading, { className: "size-4 shrink-0" }) : null, t('addMcpConnect')] })] })] })] }) }));
114
120
  }
@@ -0,0 +1,35 @@
1
+ import type { AgentGrantSet } from '@kortix/sdk';
2
+ /**
3
+ * Which agents can use which connector, and with which rule set, read from
4
+ * the root kortix.yaml (v2/v3): `agents.<a>.connectors` is the grant and
5
+ * `agents.<a>.policy_sets.<slug>` the set. The connector page's Agents tab and
6
+ * the Rules matrix both read this, and both write through `setAgentScope`.
7
+ *
8
+ * ponytail: agents declared in an `imports:` file are not read. Read the
9
+ * merged grants from the API when it serves them (`GET …/connectors/{slug}/agents`).
10
+ */
11
+ export interface AgentConnectorAccess {
12
+ granted: boolean;
13
+ /** The set the agent names on this connector, or null for the base rules. */
14
+ policySet: string | null;
15
+ }
16
+ export interface AgentGrants {
17
+ /** `all`, or the granted slugs. An absent grant is none (v2 denies by default). */
18
+ connectors: 'all' | string[];
19
+ policySets: Record<string, string>;
20
+ }
21
+ /** Every declared agent's connector grant and sets, by agent name. Null when the manifest is not v2/v3 YAML. */
22
+ export declare function manifestAgentGrants(manifestRaw: string | null | undefined): Record<string, AgentGrants> | null;
23
+ export declare function agentConnectorAccess(grants: AgentGrants | undefined, slug: string): AgentConnectorAccess;
24
+ /**
25
+ * The agent's connector grant after giving or taking one connector. Taking one
26
+ * from `all` lists every other connector the project has.
27
+ */
28
+ export declare function withConnectorGrant(grants: AgentGrants | undefined, slug: string, on: boolean, allSlugs: readonly string[]): AgentGrantSet;
29
+ /** One rule set of a connector and how many agents use it. */
30
+ export interface RuleSetUsage {
31
+ name: string;
32
+ agents: number;
33
+ }
34
+ /** Each connector's rule sets (`connectors[].policy_sets`) with their agent count, by slug. */
35
+ export declare function connectorRuleSetUsage(manifestRaw: string | null | undefined): Record<string, RuleSetUsage[]>;
@@ -0,0 +1,77 @@
1
+ import { parseManifestText } from '../../_vendor/kortix-shared.js';
2
+ /** Every declared agent's connector grant and sets, by agent name. Null when the manifest is not v2/v3 YAML. */
3
+ export function manifestAgentGrants(manifestRaw) {
4
+ if (!manifestRaw)
5
+ return null;
6
+ let manifest;
7
+ try {
8
+ manifest = parseManifestText(manifestRaw, 'yaml');
9
+ }
10
+ catch {
11
+ return null;
12
+ }
13
+ const version = Number(manifest.kortix_version);
14
+ const agents = manifest.agents;
15
+ if (!(version >= 2))
16
+ return null;
17
+ if (!agents || typeof agents !== 'object' || Array.isArray(agents))
18
+ return {};
19
+ const out = Object.create(null);
20
+ for (const [name, block] of Object.entries(agents)) {
21
+ const entry = (block && typeof block === 'object' ? block : {});
22
+ const connectors = entry.connectors === 'all'
23
+ ? 'all'
24
+ : Array.isArray(entry.connectors)
25
+ ? entry.connectors.filter((slug) => typeof slug === 'string')
26
+ : [];
27
+ const sets = entry.policy_sets && typeof entry.policy_sets === 'object' && !Array.isArray(entry.policy_sets)
28
+ ? Object.fromEntries(Object.entries(entry.policy_sets).filter((pair) => typeof pair[1] === 'string'))
29
+ : {};
30
+ out[name] = { connectors, policySets: sets };
31
+ }
32
+ return out;
33
+ }
34
+ export function agentConnectorAccess(grants, slug) {
35
+ if (!grants)
36
+ return { granted: false, policySet: null };
37
+ return {
38
+ granted: grants.connectors === 'all' || grants.connectors.includes(slug),
39
+ policySet: grants.policySets[slug] ?? null,
40
+ };
41
+ }
42
+ /**
43
+ * The agent's connector grant after giving or taking one connector. Taking one
44
+ * from `all` lists every other connector the project has.
45
+ */
46
+ export function withConnectorGrant(grants, slug, on, allSlugs) {
47
+ const current = grants?.connectors ?? [];
48
+ if (current === 'all')
49
+ return on ? 'all' : allSlugs.filter((other) => other !== slug);
50
+ if (on)
51
+ return current.includes(slug) ? current : [...current, slug];
52
+ return current.filter((other) => other !== slug);
53
+ }
54
+ /** Each connector's rule sets (`connectors[].policy_sets`) with their agent count, by slug. */
55
+ export function connectorRuleSetUsage(manifestRaw) {
56
+ const grants = manifestAgentGrants(manifestRaw);
57
+ if (!grants || !manifestRaw)
58
+ return {};
59
+ let manifest;
60
+ try {
61
+ manifest = parseManifestText(manifestRaw, 'yaml');
62
+ }
63
+ catch {
64
+ return {};
65
+ }
66
+ const out = Object.create(null);
67
+ for (const entry of Array.isArray(manifest.connectors) ? manifest.connectors : []) {
68
+ const { slug, policy_sets: sets } = (entry ?? {});
69
+ if (typeof slug !== 'string' || !sets || typeof sets !== 'object' || Array.isArray(sets))
70
+ continue;
71
+ out[slug] = Object.keys(sets).map((name) => ({
72
+ name,
73
+ agents: Object.values(grants).filter((agent) => agent.policySets[slug] === name).length,
74
+ }));
75
+ }
76
+ return out;
77
+ }
@@ -1,10 +1,7 @@
1
- import type { ConnectSectionsPage, ConnectToolkit, DiscoverSectionsPage, PipedreamApp, PipedreamCategory, PipedreamSection } from '@kortix/sdk';
1
+ import type { DiscoverSectionsPage, PipedreamCategory } from '@kortix/sdk';
2
2
  import { type CatalogEntry } from './catalog-entry.js';
3
3
  import type { CatalogSection } from './use-catalog.js';
4
- export type EasyConnectApp = PipedreamApp & {
5
- provider?: 'composio' | 'pipedream';
6
- };
7
- /** The browse page in one shape for every catalogue, cards already mapped. */
4
+ /** The browse page, cards already mapped. */
8
5
  export interface BrowseSectionsPage {
9
6
  /** The top of the whole catalogue by rank. Only Discover ranks its apps. */
10
7
  popular: CatalogEntry[];
@@ -16,24 +13,6 @@ export interface BrowseSectionsPage {
16
13
  }>;
17
14
  categories: PipedreamCategory[];
18
15
  }
19
- /** A Composio toolkit as the card the Easy Connect grid renders. The paged
20
- * catalogue and the browse sections both use this, so a card is identical in
21
- * a section and behind its "View all". */
22
- export declare function connectToolkitApp(toolkit: ConnectToolkit): EasyConnectApp;
23
- /**
24
- * The Composio browse page.
25
- *
26
- * Labels are replaced by keys. Composio's category names are lowercase
27
- * ("server monitoring"), and the paged grid titles a category by humanizing its
28
- * key — so titling by key keeps a section heading and the header of the
29
- * category it opens spelling the same name.
30
- */
31
- export declare function sectionsPageFromConnect(page: ConnectSectionsPage): BrowseSectionsPage;
32
- /** The Pipedream browse page. Pipedream publishes readable labels, kept as-is. */
33
- export declare function sectionsPageFromPipedream(page: {
34
- sections: PipedreamSection[];
35
- categories: PipedreamCategory[];
36
- }): BrowseSectionsPage;
37
16
  /**
38
17
  * The Discover browse page. Titled by key: Discover sections are the shared
39
18
  * curated buckets, and `localizedSectionTitle` resolves a curated key to our
@@ -49,14 +28,8 @@ export declare function sectionsPageFromDiscover(page: DiscoverSectionsPage): Br
49
28
  * Popular leads when the catalogue ranks anything. It is a per-item rank, not a
50
29
  * category, so its total is its own slice and it never offers "View all" into a
51
30
  * bucket with no more members.
52
- *
53
- * `native` is the Computers card. No catalogue publishes it, and the browse
54
- * page is where it is discovered, so it leads the section for the category it
55
- * claims. It does not change that section's `total`, which counts the
56
- * catalogue the heading's "View all" opens.
57
31
  */
58
32
  export declare function browseSections(page: BrowseSectionsPage, opts: {
59
- native: CatalogEntry | null;
60
33
  cardCount: number;
61
34
  title: (label: string) => string;
62
35
  }): CatalogSection[];
@@ -1,61 +1,5 @@
1
- import { catalogEntryFromDiscover, catalogEntryFromEasyConnect, foldKey, } from './catalog-entry.js';
1
+ import { catalogEntryFromDiscover } from './catalog-entry.js';
2
2
  import { POPULAR_SECTION } from './connector-categories.js';
3
- /** A Composio toolkit as the card the Easy Connect grid renders. The paged
4
- * catalogue and the browse sections both use this, so a card is identical in
5
- * a section and behind its "View all". */
6
- export function connectToolkitApp(toolkit) {
7
- return {
8
- slug: toolkit.slug,
9
- name: toolkit.name,
10
- description: toolkit.description ?? null,
11
- imgSrc: toolkit.logo,
12
- authType: toolkit.isNoAuth ? 'none' : 'oauth',
13
- categories: toolkit.categories ?? [],
14
- hasActions: true,
15
- hasTriggers: false,
16
- featuredWeight: 0,
17
- provider: 'composio',
18
- directId: toolkit.directId ?? null,
19
- directMcpUrl: toolkit.directMcpUrl ?? null,
20
- };
21
- }
22
- /**
23
- * The Composio browse page.
24
- *
25
- * Labels are replaced by keys. Composio's category names are lowercase
26
- * ("server monitoring"), and the paged grid titles a category by humanizing its
27
- * key — so titling by key keeps a section heading and the header of the
28
- * category it opens spelling the same name.
29
- */
30
- export function sectionsPageFromConnect(page) {
31
- return {
32
- popular: [],
33
- sections: page.sections.map((section) => ({
34
- key: section.key,
35
- label: section.key,
36
- total: section.total,
37
- items: section.toolkits.map((toolkit) => catalogEntryFromEasyConnect(connectToolkitApp(toolkit))),
38
- })),
39
- categories: page.categories.map((category) => ({
40
- key: category.key,
41
- label: category.key,
42
- count: category.count,
43
- })),
44
- };
45
- }
46
- /** The Pipedream browse page. Pipedream publishes readable labels, kept as-is. */
47
- export function sectionsPageFromPipedream(page) {
48
- return {
49
- popular: [],
50
- sections: page.sections.map((section) => ({
51
- key: section.key,
52
- label: section.label,
53
- total: section.total,
54
- items: section.apps.map(catalogEntryFromEasyConnect),
55
- })),
56
- categories: page.categories,
57
- };
58
- }
59
3
  /**
60
4
  * The Discover browse page. Titled by key: Discover sections are the shared
61
5
  * curated buckets, and `localizedSectionTitle` resolves a curated key to our
@@ -86,14 +30,8 @@ export function sectionsPageFromDiscover(page) {
86
30
  * Popular leads when the catalogue ranks anything. It is a per-item rank, not a
87
31
  * category, so its total is its own slice and it never offers "View all" into a
88
32
  * bucket with no more members.
89
- *
90
- * `native` is the Computers card. No catalogue publishes it, and the browse
91
- * page is where it is discovered, so it leads the section for the category it
92
- * claims. It does not change that section's `total`, which counts the
93
- * catalogue the heading's "View all" opens.
94
33
  */
95
34
  export function browseSections(page, opts) {
96
- const nativeKeys = new Set((opts.native?.categories ?? []).map(foldKey));
97
35
  const popularItems = page.popular.slice(0, opts.cardCount);
98
36
  const popular = popularItems.length > 0
99
37
  ? [
@@ -105,15 +43,10 @@ export function browseSections(page, opts) {
105
43
  },
106
44
  ]
107
45
  : [];
108
- return popular.concat(page.sections.map((section) => {
109
- const withNative = opts.native && nativeKeys.has(foldKey(section.key))
110
- ? [opts.native, ...section.items]
111
- : section.items;
112
- return {
113
- key: section.key,
114
- label: opts.title(section.label),
115
- total: section.total,
116
- items: withNative.slice(0, opts.cardCount),
117
- };
118
- }));
46
+ return popular.concat(page.sections.map((section) => ({
47
+ key: section.key,
48
+ label: opts.title(section.label),
49
+ total: section.total,
50
+ items: section.items.slice(0, opts.cardCount),
51
+ })));
119
52
  }
@@ -1,51 +1,26 @@
1
- import type { UiTranslator } from '../../../i18n/index.js';
2
- import type { AdminConnector, DiscoverConnector, PipedreamApp } from '@kortix/sdk';
1
+ import type { AdminConnector, ConnectToolkit, DiscoverConnector, PipedreamApp } from '@kortix/sdk';
2
+ import { type ConnectorLogoSource } from '../../../internal/connector-logo/connector-logo-source.js';
3
3
  import { POPULAR_SECTION } from './connector-categories.js';
4
- /**
5
- * Which catalogue an entry came from. This is not cosmetic — it decides which
6
- * install the app page's Install runs. A `discover` entry installs from its
7
- * template (`discoverInstallTarget`); an `easy-connect` entry installs as a
8
- * managed OAuth app via Pipedream (`easyConnectInstallTarget`). The two build
9
- * different connectors and cannot be swapped.
10
- */
11
- export type CatalogSource = 'discover' | 'easy-connect';
12
4
  interface CatalogEntryFields {
13
- /** Stable React key. Prefixed by source, because the two catalogues are
14
- * independent namespaces and both publish a `slack`. */
5
+ /** Stable React key: `discover:<record id>`. */
15
6
  key: string;
16
7
  slug: string;
17
8
  name: string;
18
9
  description: string | null;
19
10
  icon: string | null;
20
11
  categories: string[];
21
- /** Only Discover ranks its catalogue. Easy Connect entries are always
22
- * `null`, which keeps them out of the Popular section rather than sorting
23
- * them to the bottom of it. */
12
+ /** The catalogue's rank; `null` keeps a record out of the Popular section. */
24
13
  popularity: number | null;
25
14
  }
26
15
  /**
27
- * One card in the catalogue, normalised across the two sources so the grid,
28
- * the search, the category grouping and the connected-state join are written
29
- * once instead of twice.
30
- *
31
- * The raw item rides along on the union arm so the page can hand it straight
32
- * back to the matching add flow without a lookup.
16
+ * One card in the catalogue: a Discover record (Kortix apps, integrations.sh
17
+ * servers and APIs, Composio apps). The raw record rides along so the page can
18
+ * hand it straight to the install flow without a lookup.
33
19
  */
34
- export type CatalogEntry = (CatalogEntryFields & {
20
+ export type CatalogEntry = CatalogEntryFields & {
35
21
  source: 'discover';
36
22
  connector: DiscoverConnector;
37
- /** The managed catalogue lists the same app too (`mergeSearchEntries`). */
38
- alsoApp?: boolean;
39
- }) | (CatalogEntryFields & {
40
- source: 'easy-connect';
41
- app: PipedreamApp & {
42
- provider?: 'composio' | 'pipedream';
43
- };
44
- }) | (CatalogEntryFields & {
45
- source: 'computer';
46
- });
47
- /** Native platform provider. Each member's paired machine is one of its accounts. */
48
- export declare function computersCatalogEntry(tI18nComplete: UiTranslator): CatalogEntry;
23
+ };
49
24
  /**
50
25
  * The icon URL a Discover record's card loads.
51
26
  *
@@ -60,10 +35,14 @@ export declare function computersCatalogEntry(tI18nComplete: UiTranslator): Cata
60
35
  * reads the same as the glyph it replaced.
61
36
  */
62
37
  export declare function discoverEntryIcon(connector: Pick<DiscoverConnector, 'icon' | 'domain'>): string | null;
63
- export declare function catalogEntryFromDiscover(connector: DiscoverConnector): CatalogEntry;
64
- export declare function catalogEntryFromEasyConnect(app: PipedreamApp & {
38
+ export type EasyConnectApp = PipedreamApp & {
65
39
  provider?: 'composio' | 'pipedream';
66
- }): CatalogEntry;
40
+ };
41
+ /** A Composio toolkit as the card the Easy Connect grid renders. The paged
42
+ * catalogue and the browse sections both use this, so a card is identical in
43
+ * a section and behind its "View all". */
44
+ export declare function connectToolkitApp(toolkit: ConnectToolkit): EasyConnectApp;
45
+ export declare function catalogEntryFromDiscover(connector: DiscoverConnector): CatalogEntry;
67
46
  /**
68
47
  * The one fact that varies between cards: HOW this entry connects. Short
69
48
  * nouns, shown as the card's quiet line under the title — every card gets
@@ -123,3 +102,5 @@ export declare function catalogEntryConnectors(connectors: readonly AdminConnect
123
102
  * `browseSections` in `browse-sections.ts`. Defined in `connector-categories.ts`
124
103
  * and re-exported here for the modules that already import this one. */
125
104
  export { POPULAR_SECTION };
105
+ /** The logo source of a catalogue card (`ConnectorLogo`): same rule as every other surface. */
106
+ export declare function catalogEntryLogoSource(entry: CatalogEntry): ConnectorLogoSource;