@kortix/ui 0.14.8 → 0.14.10

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 (567) hide show
  1. package/README.md +2 -2
  2. package/dist/_vendor/kortix-shared.js +116 -3
  3. package/dist/_vendor/shared/app-config.d.ts +175 -0
  4. package/dist/_vendor/shared/artifact-comments.d.ts +235 -0
  5. package/dist/_vendor/shared/channel-descriptors.d.ts +96 -0
  6. package/dist/_vendor/shared/channel-message.d.ts +45 -5
  7. package/dist/_vendor/shared/index.d.ts +2 -0
  8. package/dist/_vendor/shared/space-slug.d.ts +37 -0
  9. package/dist/access/access/access-detail-shell.js +1 -1
  10. package/dist/access/access/principal-picker.d.ts +11 -0
  11. package/dist/access/access/principal-picker.js +3 -2
  12. package/dist/apps/app-preview-pool.d.ts +7 -2
  13. package/dist/apps/app-preview-pool.js +30 -7
  14. package/dist/apps/app-shared.d.ts +22 -15
  15. package/dist/apps/app-shared.js +37 -19
  16. package/dist/apps/index.d.ts +2 -2
  17. package/dist/apps/index.js +2 -2
  18. package/dist/artifacts/artifact-frame.d.ts +16 -0
  19. package/dist/artifacts/artifact-frame.js +55 -0
  20. package/dist/artifacts/artifact-session.d.ts +18 -0
  21. package/dist/artifacts/artifact-session.js +101 -0
  22. package/dist/artifacts/frame-policy.d.ts +30 -0
  23. package/dist/artifacts/frame-policy.js +61 -0
  24. package/dist/artifacts/index.d.ts +3 -0
  25. package/dist/artifacts/index.js +5 -0
  26. package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
  27. package/dist/browser/sandbox-browser-chrome.js +2 -2
  28. package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
  29. package/dist/customize/agents/agent-grant-pages.js +30 -4
  30. package/dist/customize/agents/agent-page.js +3 -1
  31. package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
  32. package/dist/customize/agents/agent-policy-sets.js +72 -0
  33. package/dist/customize/agents/agent-triggers-section.js +2 -1
  34. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
  35. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
  36. package/dist/customize/connectors/agent-access.d.ts +35 -0
  37. package/dist/customize/connectors/agent-access.js +77 -0
  38. package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
  39. package/dist/customize/connectors/catalog/browse-sections.js +7 -74
  40. package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
  41. package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
  42. package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
  43. package/dist/customize/connectors/catalog/connector-browse.js +19 -50
  44. package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
  45. package/dist/customize/connectors/catalog/use-catalog.js +48 -175
  46. package/dist/customize/connectors/connector-identity.d.ts +9 -11
  47. package/dist/customize/connectors/connector-identity.js +13 -42
  48. package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
  49. package/dist/customize/connectors/connector-moves-banner.js +4 -6
  50. package/dist/customize/connectors/connector-routes.d.ts +21 -9
  51. package/dist/customize/connectors/connector-routes.js +29 -20
  52. package/dist/customize/connectors/connectors-page.js +53 -82
  53. package/dist/customize/connectors/detail/app-page.js +226 -98
  54. package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
  55. package/dist/customize/connectors/detail/computer-app-page.js +39 -0
  56. package/dist/customize/connectors/detail/connector-accounts.js +3 -1
  57. package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
  58. package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
  59. package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
  60. package/dist/customize/connectors/detail/connector-agents.js +69 -0
  61. package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
  62. package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
  63. package/dist/customize/connectors/detail/connector-move-row.js +23 -14
  64. package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
  65. package/dist/customize/connectors/detail/connector-page.js +14 -10
  66. package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
  67. package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
  68. package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
  69. package/dist/customize/connectors/detail/connector-settings.js +7 -3
  70. package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
  71. package/dist/customize/connectors/detail/connector-status.js +34 -10
  72. package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
  73. package/dist/customize/connectors/detail/connector-tabs.js +8 -2
  74. package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
  75. package/dist/customize/connectors/detail/connector-tools.js +105 -48
  76. package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
  77. package/dist/customize/connectors/detail/email-inboxes.js +184 -0
  78. package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
  79. package/dist/customize/connectors/detail/provider-info.js +2 -2
  80. package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
  81. package/dist/customize/connectors/detail/status-badge.js +4 -5
  82. package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
  83. package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
  84. package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
  85. package/dist/customize/connectors/install/install-dialog.js +40 -0
  86. package/dist/customize/connectors/install/install.d.ts +13 -2
  87. package/dist/customize/connectors/install/install.js +9 -4
  88. package/dist/customize/connectors/install/use-install.d.ts +19 -2
  89. package/dist/customize/connectors/install/use-install.js +65 -37
  90. package/dist/customize/connectors/install/way-kind.d.ts +5 -0
  91. package/dist/customize/connectors/install/way-kind.js +16 -0
  92. package/dist/customize/connectors/provider-label.d.ts +2 -1
  93. package/dist/customize/connectors/provider-label.js +13 -3
  94. package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
  95. package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
  96. package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
  97. package/dist/customize/connectors/tools/policy-sets.js +41 -0
  98. package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
  99. package/dist/customize/connectors/tools/tool-groups.js +78 -16
  100. package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
  101. package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
  102. package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
  103. package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
  104. package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
  105. package/dist/customize/connectors/tools/tool-policy.js +74 -8
  106. package/dist/customize/connectors/use-agent-access.d.ts +85 -0
  107. package/dist/customize/connectors/use-agent-access.js +72 -0
  108. package/dist/customize/migrate-to-v2/index.d.ts +1 -2
  109. package/dist/customize/migrate-to-v2/index.js +1 -2
  110. package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -25
  111. package/dist/customize/migrate-to-v2/migration-prompt.js +34 -236
  112. package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
  113. package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
  114. package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
  115. package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
  116. package/dist/customize/providers/provider-accordion.js +17 -2
  117. package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
  118. package/dist/customize/sections/component/channel-access-panel.js +146 -0
  119. package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
  120. package/dist/customize/sections/component/channel-connect-hero.js +3 -2
  121. package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
  122. package/dist/customize/sections/component/channel-hero-frame.js +40 -0
  123. package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
  124. package/dist/customize/sections/component/channel-mocks.js +46 -0
  125. package/dist/customize/sections/component/channel-row.d.ts +13 -3
  126. package/dist/customize/sections/component/channel-row.js +10 -4
  127. package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
  128. package/dist/customize/sections/component/email-connect-form.js +183 -0
  129. package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
  130. package/dist/customize/sections/component/slack-connect-card.js +2 -3
  131. package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
  132. package/dist/customize/sections/component/teams-connect-card.js +2 -3
  133. package/dist/customize/sections/component/telegram-channel-row.js +21 -28
  134. package/dist/customize/sections/connectors-view.d.ts +1 -15
  135. package/dist/customize/sections/connectors-view.js +81 -314
  136. package/dist/customize/sections/view/agent-editor-catalog.js +10 -0
  137. package/dist/customize/sections/view/channels-view.d.ts +6 -1
  138. package/dist/customize/sections/view/channels-view.js +72 -81
  139. package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
  140. package/dist/customize/settings/rail.js +9 -0
  141. package/dist/customize/settings/settings-tabs.d.ts +1 -1
  142. package/dist/customize/settings/settings-tabs.js +1 -0
  143. package/dist/customize/settings/tabs/chrome-connections-tab.d.ts +6 -0
  144. package/dist/customize/settings/tabs/chrome-connections-tab.js +99 -0
  145. package/dist/customize/settings/tabs/experimental-tab.js +35 -16
  146. package/dist/customize/shared/catalog/catalog-empty-state.d.ts +4 -15
  147. package/dist/customize/shared/catalog/catalog-empty-state.js +9 -7
  148. package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
  149. package/dist/customize/shared/channels-switch-dialog.js +30 -0
  150. package/dist/customize/shared/feature-gate-screen.js +27 -9
  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/triggers/schedule/post-to-field.d.ts +18 -0
  154. package/dist/customize/triggers/schedule/post-to-field.js +49 -0
  155. package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
  156. package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
  157. package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
  158. package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
  159. package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
  160. package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
  161. package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
  162. package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
  163. package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
  164. package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
  165. package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
  166. package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
  167. package/dist/customize/triggers/schedule-view.js +5 -2
  168. package/dist/files/index.d.ts +1 -0
  169. package/dist/files/index.js +1 -0
  170. package/dist/files/project/change-request-recovery.d.ts +1 -26
  171. package/dist/files/project/change-request-recovery.js +1 -59
  172. package/dist/files/project/components/change-request-detail-dialog.js +13 -3
  173. package/dist/files/project/components/drive-explorer.js +15 -15
  174. package/dist/files/project/components/drive-toolbar.d.ts +16 -2
  175. package/dist/files/project/components/drive-toolbar.js +14 -5
  176. package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
  177. package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
  178. package/dist/files/project/hooks/use-change-requests.js +11 -2
  179. package/dist/files/renderers/image-frame.d.ts +48 -0
  180. package/dist/files/renderers/image-frame.js +59 -0
  181. package/dist/files/renderers/image-renderer.d.ts +11 -1
  182. package/dist/files/renderers/image-renderer.js +13 -3
  183. package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
  184. package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
  185. package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
  186. package/dist/files/renderers/show-content-renderer.d.ts +9 -1
  187. package/dist/files/renderers/show-content-renderer.js +56 -14
  188. package/dist/files/runtime/file-source.js +2 -0
  189. package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
  190. package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
  191. package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
  192. package/dist/files/runtime/hooks/use-shared-image.js +177 -0
  193. package/dist/files/viewer/file-content-renderer.d.ts +22 -1
  194. package/dist/files/viewer/file-content-renderer.js +50 -7
  195. package/dist/files/viewer/file-header.d.ts +7 -3
  196. package/dist/files/viewer/file-header.js +20 -11
  197. package/dist/files/viewer/file-preview-modal.d.ts +1 -1
  198. package/dist/files/viewer/file-preview-modal.js +10 -22
  199. package/dist/files/viewer/file-source.d.ts +13 -0
  200. package/dist/files/viewer/use-file-content-state.d.ts +2 -0
  201. package/dist/files/viewer/use-file-content-state.js +28 -10
  202. package/dist/files/viewer/viewer-actions.d.ts +3 -1
  203. package/dist/files/viewer/viewer-actions.js +2 -2
  204. package/dist/hooks/use-media-query.d.ts +1 -0
  205. package/dist/hooks/use-mobile.d.ts +5 -0
  206. package/dist/hooks/use-mobile.js +8 -0
  207. package/dist/i18n/en.d.ts +1062 -85
  208. package/dist/i18n/en.js +1078 -101
  209. package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
  210. package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
  211. package/dist/index.d.ts +2 -2
  212. package/dist/index.js +2 -2
  213. package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
  214. package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
  215. package/dist/internal/account-hub/hub-sheet.js +21 -5
  216. package/dist/internal/account-hub/sections.d.ts +1 -1
  217. package/dist/internal/account-hub/sections.js +2 -1
  218. package/dist/internal/apps-and-extensions/apps-modal.d.ts +9 -0
  219. package/dist/internal/apps-and-extensions/apps-modal.js +107 -0
  220. package/dist/internal/auth/auth-card-shell.js +3 -3
  221. package/dist/internal/chrome/browser-icon.d.ts +24 -0
  222. package/dist/internal/chrome/browser-icon.js +58 -0
  223. package/dist/internal/chrome/chrome-card-state.d.ts +16 -0
  224. package/dist/internal/chrome/chrome-card-state.js +9 -0
  225. package/dist/internal/chrome/chrome-connect.d.ts +69 -0
  226. package/dist/internal/chrome/chrome-connect.js +178 -0
  227. package/dist/internal/chrome/chrome-mock.d.ts +4 -0
  228. package/dist/internal/chrome/chrome-mock.js +15 -0
  229. package/dist/internal/chrome/chrome-names.d.ts +15 -0
  230. package/dist/internal/chrome/chrome-names.js +35 -0
  231. package/dist/internal/chrome/extension.d.ts +47 -0
  232. package/dist/internal/chrome/extension.js +91 -0
  233. package/dist/internal/chrome/use-chrome-offered.d.ts +11 -0
  234. package/dist/internal/chrome/use-chrome-offered.js +22 -0
  235. package/dist/internal/components/agent-mark.js +5 -2
  236. package/dist/internal/connector-logo/connector-logo-source.d.ts +64 -0
  237. package/dist/internal/connector-logo/connector-logo-source.js +49 -0
  238. package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
  239. package/dist/internal/connector-logo/connector-logo.js +56 -0
  240. package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
  241. package/dist/internal/connector-logo/connector-mark-files.js +35 -0
  242. package/dist/internal/files/file-read-retry.d.ts +13 -0
  243. package/dist/internal/files/file-read-retry.js +23 -3
  244. package/dist/internal/files/session-drive-files.d.ts +5 -1
  245. package/dist/internal/files/session-drive-files.js +7 -2
  246. package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
  247. package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
  248. package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
  249. package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
  250. package/dist/internal/hooks/connectors/use-add-account.js +1 -1
  251. package/dist/internal/hooks/index.d.ts +1 -1
  252. package/dist/internal/hooks/index.js +1 -1
  253. package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
  254. package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
  255. package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
  256. package/dist/internal/hooks/use-auto-scroll.js +4 -4
  257. package/dist/internal/icons/edge.d.ts +5 -0
  258. package/dist/internal/icons/edge.js +10 -0
  259. package/dist/internal/icons/telegram.d.ts +5 -0
  260. package/dist/internal/icons/telegram.js +6 -1
  261. package/dist/internal/layout/nav-hover-card.d.ts +35 -0
  262. package/dist/internal/layout/nav-hover-card.js +84 -0
  263. package/dist/internal/layout/project-nav-row.d.ts +3 -1
  264. package/dist/internal/layout/project-nav-row.js +3 -2
  265. package/dist/internal/layout/project-page-header.d.ts +4 -2
  266. package/dist/internal/layout/project-page-header.js +4 -3
  267. package/dist/internal/layout/project-settings-nav.js +59 -2
  268. package/dist/internal/lib/browser-error-noise.d.ts +1 -1
  269. package/dist/internal/lib/browser-error-noise.js +1 -1
  270. package/dist/internal/lib/browser-noise/rules/extensions.js +17 -3
  271. package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
  272. package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
  273. package/dist/internal/lib/detect-os.d.ts +43 -0
  274. package/dist/internal/lib/detect-os.js +70 -0
  275. package/dist/internal/lib/manifest-version.d.ts +1 -1
  276. package/dist/internal/lib/manifest-version.js +2 -2
  277. package/dist/internal/lib/memory-href.d.ts +16 -0
  278. package/dist/internal/lib/memory-href.js +46 -0
  279. package/dist/internal/lib/use-project-feature-flags.js +13 -9
  280. package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
  281. package/dist/internal/lib/utils/heic-convert.js +3 -4
  282. package/dist/internal/lib/web-notifications.d.ts +20 -0
  283. package/dist/internal/lib/web-notifications.js +48 -4
  284. package/dist/internal/notifications/notification-bell.d.ts +4 -1
  285. package/dist/internal/notifications/notification-bell.js +2 -2
  286. package/dist/internal/selection/selection-bar.d.ts +2 -1
  287. package/dist/internal/selection/selection-bar.js +1 -1
  288. package/dist/internal/stores/apps-modal-store.d.ts +8 -0
  289. package/dist/internal/stores/apps-modal-store.js +6 -0
  290. package/dist/internal/stores/composer-prefill-store.d.ts +12 -5
  291. package/dist/internal/stores/file-preview-store.d.ts +29 -2
  292. package/dist/internal/stores/file-preview-store.js +19 -1
  293. package/dist/internal/stores/kortix-computer-store.js +3 -0
  294. package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
  295. package/dist/internal/stores/sidebar-nav-store.js +3 -1
  296. package/dist/lib/routes.d.ts +13 -1
  297. package/dist/lib/routes.js +13 -0
  298. package/dist/markdown/index.d.ts +2 -1
  299. package/dist/markdown/index.js +2 -1
  300. package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
  301. package/dist/markdown/setup-links/approval-decision.js +9 -3
  302. package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
  303. package/dist/markdown/setup-links/connector-handshake.js +12 -10
  304. package/dist/markdown/setup-links/secret-intake-form.d.ts +0 -10
  305. package/dist/markdown/setup-links/secret-intake-form.js +1 -1
  306. package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
  307. package/dist/markdown/setup-links/show-connect-hero.js +91 -0
  308. package/dist/markdown/unified-markdown.js +5 -5
  309. package/dist/primitives/badge.d.ts +1 -1
  310. package/dist/primitives/badge.js +2 -0
  311. package/dist/primitives/disclosure.js +14 -2
  312. package/dist/primitives/empty-art.d.ts +12 -0
  313. package/dist/primitives/empty-art.js +11 -0
  314. package/dist/primitives/empty-state.d.ts +2 -2
  315. package/dist/primitives/empty-state.js +6 -5
  316. package/dist/primitives/mermaid-renderer.d.ts +2 -0
  317. package/dist/primitives/mermaid-renderer.js +21 -15
  318. package/dist/primitives/resizable.js +6 -1
  319. package/dist/primitives/resize-seam.d.ts +11 -0
  320. package/dist/primitives/resize-seam.js +12 -0
  321. package/dist/primitives/sidebar-panel.js +4 -7
  322. package/dist/primitives/tabs.d.ts +14 -1
  323. package/dist/primitives/tabs.js +1 -1
  324. package/dist/providers/ui-provider.d.ts +9 -0
  325. package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
  326. package/dist/session/composer/ComposerAboveCard.js +2 -2
  327. package/dist/session/composer/ComposerCard.d.ts +1 -1
  328. package/dist/session/composer/ComposerCard.js +3 -3
  329. package/dist/session/composer/agent-selector.d.ts +13 -1
  330. package/dist/session/composer/agent-selector.js +25 -5
  331. package/dist/session/composer/composer-agent-access.d.ts +15 -0
  332. package/dist/session/composer/composer-agent-access.js +27 -0
  333. package/dist/session/composer/composer-chat-input.d.ts +8 -2
  334. package/dist/session/composer/composer-chat-input.js +8 -6
  335. package/dist/session/composer/composer-logic.d.ts +16 -0
  336. package/dist/session/composer/composer-logic.js +12 -0
  337. package/dist/session/composer/composer-underbar.d.ts +3 -1
  338. package/dist/session/composer/composer-underbar.js +4 -3
  339. package/dist/session/composer/composer.d.ts +15 -1
  340. package/dist/session/composer/composer.js +19 -1
  341. package/dist/session/composer/draft/composer-draft.d.ts +6 -2
  342. package/dist/session/composer/draft/composer-draft.js +5 -1
  343. package/dist/session/composer/reasoning-effort-selector.js +1 -1
  344. package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
  345. package/dist/session/models/chatgpt-connection-button.js +54 -0
  346. package/dist/session/models/model-selector.js +5 -2
  347. package/dist/session/models/use-model-connection-gate.d.ts +5 -5
  348. package/dist/session/models/use-model-connection-gate.js +5 -5
  349. package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
  350. package/dist/session/outcomes/jump-to-outcome.js +11 -0
  351. package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
  352. package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
  353. package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
  354. package/dist/session/outcomes/session-outcomes-provider.js +33 -3
  355. package/dist/session/panel/easy/app-preview.d.ts +10 -0
  356. package/dist/session/panel/easy/app-preview.js +31 -12
  357. package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
  358. package/dist/session/panel/easy/change-requests-card.js +17 -0
  359. package/dist/session/panel/easy/easy-panel-logic.js +7 -1
  360. package/dist/session/panel/easy/easy-panel.js +5 -2
  361. package/dist/session/panel/easy/file-preview.js +1 -1
  362. package/dist/session/panel/easy/outputs-card.d.ts +2 -1
  363. package/dist/session/panel/easy/outputs-card.js +3 -2
  364. package/dist/session/panel/mobile-tool-drawer.js +7 -1
  365. package/dist/session/panel/session-audit-panel.js +9 -2
  366. package/dist/session/panel/session-audit-shared.js +3 -1
  367. package/dist/session/panel/session-detail-panel.js +9 -3
  368. package/dist/session/panel/session-files-explorer.d.ts +9 -0
  369. package/dist/session/panel/session-files-explorer.js +12 -3
  370. package/dist/session/panel/session-panel-provider.d.ts +15 -1
  371. package/dist/session/panel/session-panel-provider.js +32 -7
  372. package/dist/session/panel/shared/derive-panels.d.ts +8 -1
  373. package/dist/session/panel/shared/derive-panels.js +12 -2
  374. package/dist/session/panel/shared/output-priority.js +2 -0
  375. package/dist/session/participants/session-participants.d.ts +8 -2
  376. package/dist/session/participants/session-participants.js +11 -4
  377. package/dist/session/prompts/approval-request.d.ts +5 -0
  378. package/dist/session/prompts/approval-request.js +9 -1
  379. package/dist/session/prompts/session-approval-review.d.ts +9 -0
  380. package/dist/session/prompts/session-approval-review.js +18 -0
  381. package/dist/session/status/session-error-banner.js +2 -49
  382. package/dist/session/status/session-starting-loader.d.ts +14 -2
  383. package/dist/session/status/session-starting-loader.js +16 -4
  384. package/dist/session/thread/after-first-prompt.d.ts +7 -0
  385. package/dist/session/thread/after-first-prompt.js +8 -0
  386. package/dist/session/thread/detect-command.d.ts +12 -0
  387. package/dist/session/thread/detect-command.js +20 -0
  388. package/dist/session/thread/session-chat.d.ts +3 -1
  389. package/dist/session/thread/session-chat.js +377 -252
  390. package/dist/session/thread/session-thread.d.ts +15 -1
  391. package/dist/session/thread/session-thread.js +20 -3
  392. package/dist/session/thread/session-transcript-class.d.ts +5 -1
  393. package/dist/session/thread/session-transcript-class.js +5 -1
  394. package/dist/session/thread/thread-boot-rows.d.ts +36 -0
  395. package/dist/session/thread/thread-boot-rows.js +89 -0
  396. package/dist/session/thread/transcript-rows.d.ts +31 -0
  397. package/dist/session/thread/transcript-rows.js +3 -0
  398. package/dist/session/thread/transcript.d.ts +0 -9
  399. package/dist/session/thread/transcript.js +104 -19
  400. package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
  401. package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
  402. package/dist/session/tool/tool-part-renderer.d.ts +5 -4
  403. package/dist/session/tool/tool-part-renderer.js +8 -3
  404. package/dist/session/tool/tools/bash-tool.js +7 -6
  405. package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
  406. package/dist/session/tool/tools/channel-send.d.ts +2 -1
  407. package/dist/session/tool/tools/codemode-tool.js +1 -1
  408. package/dist/session/tool/tools/connector-tools.js +1 -1
  409. package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
  410. package/dist/session/tool/tools/image-gen-tool.js +241 -53
  411. package/dist/session/tool/tools/show-tool.js +19 -8
  412. package/dist/session/turn/channel-brand.d.ts +8 -3
  413. package/dist/session/turn/channel-brand.js +20 -4
  414. package/dist/session/turn/message-author.d.ts +8 -0
  415. package/dist/session/turn/message-author.js +24 -0
  416. package/dist/session/turn/message-row.d.ts +52 -0
  417. package/dist/session/turn/message-row.js +44 -0
  418. package/dist/session/turn/plan-anchor.d.ts +1 -1
  419. package/dist/session/turn/plan-anchor.js +1 -1
  420. package/dist/session/turn/user-message.d.ts +14 -6
  421. package/dist/session/turn/user-message.js +35 -15
  422. package/dist/styles.css +1 -1
  423. package/dist/workspace/home/access-requests-bell.d.ts +9 -2
  424. package/dist/workspace/home/access-requests-bell.js +20 -6
  425. package/dist/workspace/home/first-chat.d.ts +8 -21
  426. package/dist/workspace/home/first-chat.js +22 -72
  427. package/dist/workspace/index.d.ts +6 -0
  428. package/dist/workspace/index.js +6 -0
  429. package/dist/workspace/layout/project-home.d.ts +14 -2
  430. package/dist/workspace/layout/project-home.js +60 -21
  431. package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
  432. package/dist/workspace/layout/use-project-home-send.js +82 -3
  433. package/dist/workspace/memory/body-doc.d.ts +17 -0
  434. package/dist/workspace/memory/body-doc.js +208 -0
  435. package/dist/workspace/memory/body-extensions.d.ts +38 -0
  436. package/dist/workspace/memory/body-extensions.js +103 -0
  437. package/dist/workspace/memory/company-memory-page.d.ts +8 -0
  438. package/dist/workspace/memory/company-memory-page.js +16 -0
  439. package/dist/workspace/memory/memory-all.d.ts +20 -0
  440. package/dist/workspace/memory/memory-all.js +27 -0
  441. package/dist/workspace/memory/memory-body.d.ts +19 -0
  442. package/dist/workspace/memory/memory-body.js +139 -0
  443. package/dist/workspace/memory/memory-empty.d.ts +13 -0
  444. package/dist/workspace/memory/memory-empty.js +28 -0
  445. package/dist/workspace/memory/memory-history.d.ts +27 -0
  446. package/dist/workspace/memory/memory-history.js +108 -0
  447. package/dist/workspace/memory/memory-labels.d.ts +16 -0
  448. package/dist/workspace/memory/memory-labels.js +47 -0
  449. package/dist/workspace/memory/memory-page-list.d.ts +34 -0
  450. package/dist/workspace/memory/memory-page-list.js +156 -0
  451. package/dist/workspace/memory/memory-reader.d.ts +58 -0
  452. package/dist/workspace/memory/memory-reader.js +123 -0
  453. package/dist/workspace/memory/memory-view.d.ts +21 -0
  454. package/dist/workspace/memory/memory-view.js +124 -0
  455. package/dist/workspace/memory/remember-popover.d.ts +19 -0
  456. package/dist/workspace/memory/remember-popover.js +61 -0
  457. package/dist/workspace/memory/remember-this.d.ts +12 -0
  458. package/dist/workspace/memory/remember-this.js +89 -0
  459. package/dist/workspace/memory/source-mark.d.ts +18 -0
  460. package/dist/workspace/memory/source-mark.js +79 -0
  461. package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
  462. package/dist/workspace/memory/used-memory-chip.js +61 -0
  463. package/dist/workspace/new/advanced-fields.d.ts +2 -1
  464. package/dist/workspace/new/advanced-fields.js +2 -2
  465. package/dist/workspace/new/source-param.d.ts +1 -1
  466. package/dist/workspace/new/source-param.js +3 -1
  467. package/dist/workspace/new/use-create-workspace.d.ts +8 -10
  468. package/dist/workspace/new/use-create-workspace.js +3 -3
  469. package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
  470. package/dist/workspace/projects/onboarding/app-logo.js +6 -13
  471. package/dist/workspace/projects/policies-panel.js +5 -3
  472. package/dist/workspace/review/review-actions.d.ts +4 -2
  473. package/dist/workspace/review/review-actions.js +8 -2
  474. package/dist/workspace/review/review-center.js +11 -7
  475. package/dist/workspace/review/review-detail.d.ts +10 -0
  476. package/dist/workspace/review/review-detail.js +101 -13
  477. package/dist/workspace/saved-session-skeleton.d.ts +2 -2
  478. package/dist/workspace/saved-session-skeleton.js +3 -3
  479. package/dist/workspace/session-workspace.js +15 -13
  480. package/dist/workspace/sessions/project-sessions-view.js +3 -2
  481. package/dist/workspace/sessions/session-label-badges.js +2 -1
  482. package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
  483. package/dist/workspace/sessions/sessions-toolbar.js +2 -2
  484. package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
  485. package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
  486. package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
  487. package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
  488. package/dist/workspace/sidebar/footer/project-chrome-nav.d.ts +10 -0
  489. package/dist/workspace/sidebar/footer/project-chrome-nav.js +56 -0
  490. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
  491. package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
  492. package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
  493. package/dist/workspace/sidebar/nav-row-meta.js +14 -2
  494. package/dist/workspace/sidebar/project-nav-items.js +3 -0
  495. package/dist/workspace/sidebar/project-session-list.js +68 -56
  496. package/dist/workspace/sidebar/project-sidebar.js +13 -2
  497. package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
  498. package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
  499. package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
  500. package/dist/workspace/sidebar/session-group-order.js +25 -0
  501. package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
  502. package/dist/workspace/sidebar/session-group-sections.js +267 -0
  503. package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
  504. package/dist/workspace/sidebar/session-list-chrome.js +50 -0
  505. package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
  506. package/dist/workspace/spaces/channel-glyph.js +6 -0
  507. package/dist/workspace/spaces/channel-setup.d.ts +16 -0
  508. package/dist/workspace/spaces/channel-setup.js +105 -0
  509. package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
  510. package/dist/workspace/spaces/channels-onboarding.js +37 -0
  511. package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
  512. package/dist/workspace/spaces/create-channel-dialog.js +158 -0
  513. package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
  514. package/dist/workspace/spaces/private-channels-not-in.js +69 -0
  515. package/dist/workspace/spaces/space-agents.d.ts +10 -0
  516. package/dist/workspace/spaces/space-agents.js +10 -0
  517. package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
  518. package/dist/workspace/spaces/space-details-dialog.js +176 -0
  519. package/dist/workspace/spaces/space-link-label.d.ts +49 -0
  520. package/dist/workspace/spaces/space-link-label.js +73 -0
  521. package/dist/workspace/spaces/space-links.d.ts +19 -0
  522. package/dist/workspace/spaces/space-links.js +230 -0
  523. package/dist/workspace/spaces/space-members.d.ts +46 -0
  524. package/dist/workspace/spaces/space-members.js +182 -0
  525. package/dist/workspace/spaces/space-roster.d.ts +15 -0
  526. package/dist/workspace/spaces/space-roster.js +44 -0
  527. package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
  528. package/dist/workspace/spaces/space-threads-tab.js +156 -0
  529. package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
  530. package/dist/workspace/spaces/space-timeline-view.js +235 -0
  531. package/dist/workspace/spaces/space-timeline.d.ts +106 -0
  532. package/dist/workspace/spaces/space-timeline.js +183 -0
  533. package/dist/workspace/spaces/space-triggers.d.ts +13 -0
  534. package/dist/workspace/spaces/space-triggers.js +78 -0
  535. package/dist/workspace/spaces/space-view.d.ts +37 -0
  536. package/dist/workspace/spaces/space-view.js +436 -0
  537. package/package.json +67 -36
  538. package/skills/kortix-ui/SKILL.md +3 -3
  539. package/skills/kortix-ui/references/custom-dashboard.md +3 -3
  540. package/skills/kortix-ui/references/modules.md +29 -5
  541. package/skills/kortix-ui/references/theming.md +1 -1
  542. package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
  543. package/dist/customize/connectors/catalog/merge-search.js +0 -26
  544. package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
  545. package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
  546. package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
  547. package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
  548. package/dist/customize/sections/connector-connection-header.d.ts +0 -36
  549. package/dist/customize/sections/connector-connection-header.js +0 -33
  550. package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
  551. package/dist/customize/sections/connector-connection-modal.js +0 -72
  552. package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
  553. package/dist/customize/sections/discover-catalogue-card.js +0 -26
  554. package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
  555. package/dist/customize/sections/discover-catalogue-detail.js +0 -24
  556. package/dist/customize/sections/discover-catalogue.d.ts +0 -17
  557. package/dist/customize/sections/discover-catalogue.js +0 -132
  558. package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
  559. package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
  560. package/dist/files/project/components/drive-empty-art.d.ts +0 -2
  561. package/dist/files/project/components/drive-empty-art.js +0 -5
  562. package/dist/internal/hooks/use-media-query.d.ts +0 -2
  563. package/dist/internal/share/public-share-link-button.d.ts +0 -14
  564. package/dist/internal/share/public-share-link-button.js +0 -17
  565. package/dist/markdown/setup-links/app-credentials-form.d.ts +0 -12
  566. package/dist/markdown/setup-links/app-credentials-form.js +0 -115
  567. /package/dist/{internal/hooks → hooks}/use-media-query.js +0 -0
@@ -10,13 +10,18 @@ import type { ChannelPlatform } from './channel-message.js';
10
10
  * The hues are the platforms' own brand colors, not themeable tokens — which
11
11
  * is why they live here as named constants rather than as classes. Slack has
12
12
  * none to tint a label with: its mark is four colors and its wordmark is the
13
- * text color, black or white. It was Material pink (#E91E63).
13
+ * text color, black or white. It was Material pink (#E91E63). Email is no
14
+ * brand: its envelope and its label take the text color too.
14
15
  */
15
16
  export declare const CHANNEL_BRAND_COLOR: Record<ChannelPlatform, string | undefined>;
16
- /** The platform's own mark, in its brand colors. */
17
+ /**
18
+ * The platform's own mark, in its brand colors. Email draws the envelope an
19
+ * email session wears in the sidebar. A platform this build does not know (a
20
+ * newer `@kortix/shared`) draws a neutral chat glyph, never another brand.
21
+ */
17
22
  export declare function ChannelBrandMark({ platform, className, }: {
18
23
  platform: ChannelPlatform;
19
24
  className?: string;
20
25
  }): import("react").JSX.Element;
21
- /** The platform's display name; only Teams has a catalog string (its full name). */
26
+ /** The platform's display name: Teams (its full name) and Email have catalog strings, the brands are their own words. */
22
27
  export declare function channelPlatformLabel(platform: ChannelPlatform, tI18nComplete: UiTranslator): string;
@@ -1,5 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { ChatCircleIcon } from '@phosphor-icons/react';
4
+ import { Email } from '../../internal/icons/email.js';
3
5
  import { MicrosoftTeams } from '../../internal/icons/microsoft-teams.js';
4
6
  import { Slack } from '../../internal/icons/slack.js';
5
7
  /**
@@ -12,23 +14,37 @@ import { Slack } from '../../internal/icons/slack.js';
12
14
  * The hues are the platforms' own brand colors, not themeable tokens — which
13
15
  * is why they live here as named constants rather than as classes. Slack has
14
16
  * none to tint a label with: its mark is four colors and its wordmark is the
15
- * text color, black or white. It was Material pink (#E91E63).
17
+ * text color, black or white. It was Material pink (#E91E63). Email is no
18
+ * brand: its envelope and its label take the text color too.
16
19
  */
17
20
  export const CHANNEL_BRAND_COLOR = {
18
21
  Telegram: '#29B6F6',
19
22
  Slack: undefined,
20
23
  Teams: '#5B5FC7',
24
+ Email: undefined,
21
25
  };
22
26
  const TELEGRAM_PATH = 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm4.64 6.8c-.15 1.58-.8 5.42-1.13 7.19-.14.75-.42 1-.68 1.03-.58.05-1.02-.38-1.58-.75-.88-.58-1.38-.94-2.23-1.5-.99-.65-.35-1.01.22-1.59.15-.15 2.71-2.48 2.76-2.69a.2.2 0 00-.05-.18c-.06-.05-.14-.03-.21-.02-.09.02-1.49.95-4.22 2.79-.4.27-.76.41-1.08.4-.36-.01-1.04-.2-1.55-.37-.63-.2-1.12-.31-1.08-.66.02-.18.27-.36.74-.55 2.92-1.27 4.86-2.11 5.83-2.51 2.78-1.16 3.35-1.36 3.73-1.36.08 0 .27.02.39.12.1.08.13.19.14.27-.01.06.01.24 0 .38z';
23
- /** The platform's own mark, in its brand colors. */
27
+ /**
28
+ * The platform's own mark, in its brand colors. Email draws the envelope an
29
+ * email session wears in the sidebar. A platform this build does not know (a
30
+ * newer `@kortix/shared`) draws a neutral chat glyph, never another brand.
31
+ */
24
32
  export function ChannelBrandMark({ platform, className = 'size-3.5 shrink-0', }) {
25
33
  if (platform === 'Teams')
26
34
  return _jsx(MicrosoftTeams, { className: className });
27
35
  if (platform === 'Slack')
28
36
  return _jsx(Slack, { className: className });
37
+ if (platform === 'Email')
38
+ return _jsx(Email, { className: className });
39
+ if (platform !== 'Telegram')
40
+ return _jsx(ChatCircleIcon, { className: className, "aria-hidden": "true" });
29
41
  return (_jsx("svg", { className: className, viewBox: "0 0 24 24", fill: CHANNEL_BRAND_COLOR.Telegram, "aria-hidden": "true", children: _jsx("path", { d: TELEGRAM_PATH }) }));
30
42
  }
31
- /** The platform's display name; only Teams has a catalog string (its full name). */
43
+ /** The platform's display name: Teams (its full name) and Email have catalog strings, the brands are their own words. */
32
44
  export function channelPlatformLabel(platform, tI18nComplete) {
33
- return platform === 'Teams' ? tI18nComplete.raw('texta7b52b269a23') : platform;
45
+ if (platform === 'Teams')
46
+ return tI18nComplete.raw('texta7b52b269a23');
47
+ if (platform === 'Email')
48
+ return tI18nComplete.raw('text969ccbd3cf63');
49
+ return platform;
34
50
  }
@@ -44,4 +44,12 @@ export declare function stoppedByName(data: SessionMessageAuthors | undefined, m
44
44
  export declare function awaitsAgent(prompt: {
45
45
  no_reply?: boolean;
46
46
  }): boolean;
47
+ /**
48
+ * The user messages the viewer may edit and rewind to: their own, with no
49
+ * other person's message after it (a rewind deletes everything after the
50
+ * target). An agent's message, or one with no recorded author, belongs to the
51
+ * thread's starter and never blocks a later rewind. The server applies the same
52
+ * rule (`rewind-authority.ts`). Null with no viewer id: nothing to filter on.
53
+ */
54
+ export declare function rewindableMessageIds(messageIds: readonly string[], authors: ReadonlyMap<string, SessionMessageAuthor>, viewerId: string | undefined, starterId: string | null | undefined): Set<string> | null;
47
55
  export {};
@@ -73,3 +73,27 @@ export function stoppedByName(data, messageId, viewerId) {
73
73
  export function awaitsAgent(prompt) {
74
74
  return !prompt.no_reply;
75
75
  }
76
+ /**
77
+ * The user messages the viewer may edit and rewind to: their own, with no
78
+ * other person's message after it (a rewind deletes everything after the
79
+ * target). An agent's message, or one with no recorded author, belongs to the
80
+ * thread's starter and never blocks a later rewind. The server applies the same
81
+ * rule (`rewind-authority.ts`). Null with no viewer id: nothing to filter on.
82
+ */
83
+ export function rewindableMessageIds(messageIds, authors, viewerId, starterId) {
84
+ if (viewerId === undefined)
85
+ return null;
86
+ const allowed = new Set();
87
+ for (let i = messageIds.length - 1; i >= 0; i--) {
88
+ const author = authors.get(messageIds[i]);
89
+ if (author?.kind === 'member') {
90
+ if (author.user_id !== viewerId)
91
+ break;
92
+ allowed.add(messageIds[i]);
93
+ }
94
+ else if (!starterId || starterId === viewerId) {
95
+ allowed.add(messageIds[i]);
96
+ }
97
+ }
98
+ return allowed;
99
+ }
@@ -0,0 +1,52 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * A message body's type: the app's default `text-sm` at 500. A row's markdown
4
+ * answer is set to `text-sm` too (`MessageRow`'s body), so a prompt, its answer
5
+ * and the channel row of the same prompt read at one size and weight. The 600
6
+ * name above it, at the same size, carries the row's hierarchy.
7
+ */
8
+ export declare const MESSAGE_TEXT_CLASS = "text-foreground text-sm leading-relaxed font-medium";
9
+ /**
10
+ * One message in a channel or a thread: the author's 36px avatar in a fixed
11
+ * gutter, the name and the time on one baseline, the body under them. The
12
+ * channel timeline and the thread panel draw every row with it, so a reply
13
+ * reads the same as the message it answers.
14
+ *
15
+ * A `compact` row continues the author's previous message: no avatar, no
16
+ * name. Its time shows in the gutter on hover, inside the gutter's own width,
17
+ * so it never touches the body.
18
+ *
19
+ * The hover fill is instant: a dense list re-hovers too often to animate.
20
+ */
21
+ export declare function MessageRow({ avatar, name, time, compact, selected, toolbar, className, children, }: {
22
+ /** The 36px avatar: `UserAvatar size="lg"` for a person, `EntityAvatar size="lg"` for an agent. */
23
+ avatar?: ReactNode;
24
+ name?: ReactNode;
25
+ /** `label` beside the name; `gutter` (a shorter form) in a compact row's gutter; `title`, the full date, in the hover hint. */
26
+ time?: {
27
+ iso: string;
28
+ label: string;
29
+ gutter?: string;
30
+ title: string;
31
+ } | null;
32
+ compact?: boolean;
33
+ selected?: boolean;
34
+ /** The row's actions, floating at its top-right on hover or keyboard focus. */
35
+ toolbar?: ReactNode;
36
+ className?: string;
37
+ children?: ReactNode;
38
+ }): import("react").JSX.Element;
39
+ /**
40
+ * The floating action group at a row's top-right. Transparent, not unmounted,
41
+ * so Tab reaches its buttons and their focus reveals it. `p-[2px]`: the group
42
+ * is `rounded-lg` (10px), so 2px of inset gives the `rounded-md` (8px)
43
+ * buttons concentric corners. Its buttons are `icon-sm` (h-7), so the group is
44
+ * ~32px tall; `-top-3.5` sits it on the row's top edge, half above it.
45
+ *
46
+ * A thread's first message is the one row whose overhang is cut off (its turn
47
+ * paints with `content-visibility: auto`, which clips to the turn): that row
48
+ * moves the group inside with `[&_[data-slot=row-toolbar]]:top-0.5`.
49
+ */
50
+ export declare function RowToolbar({ children }: {
51
+ children: ReactNode;
52
+ }): import("react").JSX.Element;
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from '../../lib/utils.js';
4
+ import Hint from '../../primitives/hint.js';
5
+ /**
6
+ * A message body's type: the app's default `text-sm` at 500. A row's markdown
7
+ * answer is set to `text-sm` too (`MessageRow`'s body), so a prompt, its answer
8
+ * and the channel row of the same prompt read at one size and weight. The 600
9
+ * name above it, at the same size, carries the row's hierarchy.
10
+ */
11
+ export const MESSAGE_TEXT_CLASS = 'text-foreground text-sm leading-relaxed font-medium';
12
+ /**
13
+ * One message in a channel or a thread: the author's 36px avatar in a fixed
14
+ * gutter, the name and the time on one baseline, the body under them. The
15
+ * channel timeline and the thread panel draw every row with it, so a reply
16
+ * reads the same as the message it answers.
17
+ *
18
+ * A `compact` row continues the author's previous message: no avatar, no
19
+ * name. Its time shows in the gutter on hover, inside the gutter's own width,
20
+ * so it never touches the body.
21
+ *
22
+ * The hover fill is instant: a dense list re-hovers too often to animate.
23
+ */
24
+ export function MessageRow({ avatar, name, time, compact = false, selected = false, toolbar, className, children, }) {
25
+ return (_jsxs("div", { "data-slot": "message-row", className: cn('group/message hover:bg-hover relative flex gap-2 px-5',
26
+ // Baseline: a compact row's gutter time sits on the body's first line.
27
+ compact ? 'items-baseline py-0.5' : 'items-start pt-2 pb-1.5', selected && 'bg-active hover:bg-active', className), children: [_jsx("div", { className: "w-10 shrink-0 [&_[data-slot=avatar]]:rounded-md [&_[data-slot=avatar]]:after:hidden", children: compact ? (time ? (_jsx(Hint, { label: time.title, side: "top", sideOffset: 6, children: _jsx("time", { dateTime: time.iso, className: "text-muted-foreground invisible block cursor-default text-right text-xs font-normal whitespace-nowrap tabular-nums group-focus-within/message:visible group-hover/message:visible", children: time.gutter ?? time.label }) })) : null) : (avatar) }), _jsxs("div", { className: "min-w-0 flex-1 [&_.kortix-markdown]:text-sm", children: [compact ? null : (_jsxs("div", { className: "flex min-w-0 items-baseline gap-2", children: [_jsx("span", { className: "text-foreground truncate text-sm font-semibold", children: name }), time ? (
28
+ // The full date in the app's tooltip, not the browser's `title`.
29
+ _jsx(Hint, { label: time.title, side: "top", sideOffset: 6, children: _jsx("time", { dateTime: time.iso, className: "text-muted-foreground shrink-0 cursor-default text-xs font-normal tabular-nums", children: time.label }) })) : null] })), children] }), toolbar ? _jsx(RowToolbar, { children: toolbar }) : null] }));
30
+ }
31
+ /**
32
+ * The floating action group at a row's top-right. Transparent, not unmounted,
33
+ * so Tab reaches its buttons and their focus reveals it. `p-[2px]`: the group
34
+ * is `rounded-lg` (10px), so 2px of inset gives the `rounded-md` (8px)
35
+ * buttons concentric corners. Its buttons are `icon-sm` (h-7), so the group is
36
+ * ~32px tall; `-top-3.5` sits it on the row's top edge, half above it.
37
+ *
38
+ * A thread's first message is the one row whose overhang is cut off (its turn
39
+ * paints with `content-visibility: auto`, which clips to the turn): that row
40
+ * moves the group inside with `[&_[data-slot=row-toolbar]]:top-0.5`.
41
+ */
42
+ export function RowToolbar({ children }) {
43
+ return (_jsx("div", { "data-slot": "row-toolbar", className: "bg-popover pointer-events-none absolute -top-3.5 right-5 z-10 flex items-center rounded-lg border p-[2px] opacity-0 shadow-md group-focus-within/message:pointer-events-auto group-focus-within/message:opacity-100 group-hover/message:pointer-events-auto group-hover/message:opacity-100 has-[[data-state=open]]:pointer-events-auto has-[[data-state=open]]:opacity-100", children: children }));
44
+ }
@@ -20,7 +20,7 @@
20
20
  * is live, and `chatPlanAnchorId` turns this whole module off for the other.
21
21
  * See `action-panel/easy/plan-card.tsx`.
22
22
  *
23
- * No React import. Every rule here is unit-tested in plan-anchor.test.ts.
23
+ * No React import.
24
24
  */
25
25
  import { type SessionLogTurn } from '@kortix/sdk';
26
26
  /**
@@ -20,7 +20,7 @@
20
20
  * is live, and `chatPlanAnchorId` turns this whole module off for the other.
21
21
  * See `action-panel/easy/plan-card.tsx`.
22
22
  *
23
- * No React import. Every rule here is unit-tested in plan-anchor.test.ts.
23
+ * No React import.
24
24
  */
25
25
  import { shouldShowToolPart, toolKind } from '@kortix/sdk';
26
26
  /**
@@ -29,13 +29,15 @@ export declare function ChannelOrigin({ info, platform }: {
29
29
  }): import("react").JSX.Element;
30
30
  /**
31
31
  * A message that arrived from a chat channel (Slack / Microsoft Teams /
32
- * Telegram): a source pill — mark, platform, sender — over the same bubble a
33
- * typed message gets. Every `@name` in the text (`@Kortix`, `@KortixDev`,
34
- * `@here`) is a `MentionChip`, the chip the composer draws, static because a
35
- * channel mention opens nothing here. Exported for `channel-message-card.test.tsx`.
32
+ * Telegram): a source pill — mark, platform, sender — over the files the
33
+ * sender sent (the strip a composer upload gets) and the same bubble a typed
34
+ * message gets. Every `@name` in the text (`@Kortix`, `@KortixDev`, `@here`)
35
+ * is a `MentionChip`, the chip the composer draws, static because a channel
36
+ * mention opens nothing here. Exported for `channel-message-card.test.tsx`.
36
37
  */
37
- export declare function ChannelMessage({ info, actions, }: {
38
+ export declare function ChannelMessage({ info, attachments, actions, }: {
38
39
  info: ChannelMessageInfo;
40
+ attachments?: NormalizedAttachment[];
39
41
  actions?: React.ReactNode;
40
42
  }): import("react").JSX.Element;
41
43
  export interface NormalizedAttachment {
@@ -248,7 +250,13 @@ export declare function UserMessageBubble({ canExpand, expanded, onToggle, fullW
248
250
  * Shared with `OptimisticTurn` so the pending turn and the server turn cannot
249
251
  * drift — the same reason `MessageAttachments` is shared.
250
252
  */
251
- export declare function UserMessageActions({ timestamp, copyText, messageId, rewindPromptText, onRewind, rewindDisabled, deliveryStatus, }: {
253
+ export declare function UserMessageActions({ timestamp, copyText, messageId, rewindPromptText, onRewind, rewindDisabled, deliveryStatus, toolbar, }: {
254
+ /**
255
+ * A message row (`TranscriptRowsContext`): the row's header shows the time,
256
+ * so the buttons float in its toolbar and only the delivery status stays in
257
+ * the flow.
258
+ */
259
+ toolbar?: boolean;
252
260
  /** Epoch milliseconds, or `null` when the backend never stamped one. */
253
261
  timestamp: number | null;
254
262
  /** Omitted when there is nothing to copy — the row then carries meta alone
@@ -6,13 +6,15 @@ import { getFileCategory } from '../../files/viewer/preview-policy.js';
6
6
  import { uiRoutes } from '../../lib/routes.js';
7
7
  import { MessageSenderAbove } from '../participants/session-participants.js';
8
8
  import { MessageAuthorLabel } from './message-author-label.js';
9
+ import { MESSAGE_TEXT_CLASS, RowToolbar } from './message-row.js';
10
+ import { TranscriptRowsContext } from '../thread/transcript-rows.js';
9
11
  import { errorToast } from '../../primitives/toast.js';
10
12
  import { fetchSessionAttachment, isSessionAttachmentRef, } from '@kortix/sdk';
11
13
  /** Moved from session-chat.tsx (`UserMessageRow`) so the turn module owns the
12
14
  * user-message card. Full-width card, no reference chips. */
13
15
  import { useTranslations } from '../../i18n/index.js';
14
- import { expandPastedContent, neutralizePastedTags, sanitizePromptUploadFilename, serializePromptWithPastes, splitPastedContent, } from '../../_vendor/kortix-shared.js';
15
- import { useEffect, useMemo, useRef, useState } from 'react';
16
+ import { channelPromptTail, isChannelFileLabel, expandPastedContent, neutralizePastedTags, sanitizePromptUploadFilename, serializePromptWithPastes, splitPastedContent, } from '../../_vendor/kortix-shared.js';
17
+ import { useContext, useEffect, useMemo, useRef, useState } from 'react';
16
18
  import { PencilSimpleIcon, AlarmIcon, ChatsTeardropIcon, LightningIcon, } from '@phosphor-icons/react';
17
19
  import { CopyButton } from '../../markdown/copy-button.js';
18
20
  import { HoverPrefetchLink } from '../../internal/components/hover-prefetch-link.js';
@@ -97,15 +99,16 @@ export function ChannelOrigin({ info, platform }) {
97
99
  }
98
100
  /**
99
101
  * A message that arrived from a chat channel (Slack / Microsoft Teams /
100
- * Telegram): a source pill — mark, platform, sender — over the same bubble a
101
- * typed message gets. Every `@name` in the text (`@Kortix`, `@KortixDev`,
102
- * `@here`) is a `MentionChip`, the chip the composer draws, static because a
103
- * channel mention opens nothing here. Exported for `channel-message-card.test.tsx`.
102
+ * Telegram): a source pill — mark, platform, sender — over the files the
103
+ * sender sent (the strip a composer upload gets) and the same bubble a typed
104
+ * message gets. Every `@name` in the text (`@Kortix`, `@KortixDev`, `@here`)
105
+ * is a `MentionChip`, the chip the composer draws, static because a channel
106
+ * mention opens nothing here. Exported for `channel-message-card.test.tsx`.
104
107
  */
105
- export function ChannelMessage({ info, actions, }) {
108
+ export function ChannelMessage({ info, attachments = [], actions, }) {
106
109
  const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
107
110
  const platform = channelPlatformLabel(info.platform, tI18nComplete);
108
- return (_jsxs("div", { className: "flex flex-col items-end gap-1.5", children: [_jsx(SourcePill, { mark: _jsx(ChannelBrandMark, { platform: info.platform, className: "size-3 shrink-0" }), source: platform, sourceColor: CHANNEL_BRAND_COLOR[info.platform], sender: info.userName, card: _jsx(ChannelOrigin, { info: info, platform: platform }) }), info.messageText && (_jsx("div", { className: cn(BUBBLE_SURFACE, 'max-w-[80%]'), children: _jsx("div", { className: BUBBLE_TEXT, children: buildMentionSegments({ text: info.messageText }).map((segment, i) => segment.type ? (_jsx(MentionChip, { kind: "user", label: segment.text.slice(1) }, i)) : (_jsx("span", { children: segment.text }, i))) }) })), actions] }));
111
+ return (_jsxs("div", { className: "flex flex-col items-end gap-1.5", children: [_jsx(SourcePill, { mark: _jsx(ChannelBrandMark, { platform: info.platform, className: "size-3 shrink-0" }), source: platform, sourceColor: CHANNEL_BRAND_COLOR[info.platform], sender: info.userName, card: _jsx(ChannelOrigin, { info: info, platform: platform }) }), _jsx(MessageAttachments, { attachments: attachments }), info.messageText && !(attachments.length > 0 && isChannelFileLabel(info.messageText)) && (_jsx("div", { className: cn(BUBBLE_SURFACE, 'max-w-[80%]'), children: _jsx("div", { className: BUBBLE_TEXT, children: buildMentionSegments({ text: info.messageText }).map((segment, i) => segment.type ? (_jsx(MentionChip, { kind: "user", label: segment.text.slice(1) }, i)) : (_jsx("span", { children: segment.text }, i))) }) })), actions] }));
109
112
  }
110
113
  /**
111
114
  * A prompt the platform wrote — a reminder fire or a trigger fire — drawn the
@@ -672,7 +675,7 @@ export function UserMessageBubble({ canExpand, expanded, onToggle, fullWidth, te
672
675
  * Shared with `OptimisticTurn` so the pending turn and the server turn cannot
673
676
  * drift — the same reason `MessageAttachments` is shared.
674
677
  */
675
- export function UserMessageActions({ timestamp, copyText, messageId, rewindPromptText, onRewind, rewindDisabled, deliveryStatus, }) {
678
+ export function UserMessageActions({ timestamp, copyText, messageId, rewindPromptText, onRewind, rewindDisabled, deliveryStatus, toolbar = false, }) {
676
679
  const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
677
680
  // Copy stays available while the agent is busy / rewind is locked.
678
681
  // Only edit-from-here is gated — hiding the whole bar was wrong.
@@ -681,6 +684,15 @@ export function UserMessageActions({ timestamp, copyText, messageId, rewindPromp
681
684
  // Nothing to say and nothing to do — don't leave an empty row behind.
682
685
  if (!hasMeta && !copyText && !deliveryStatus)
683
686
  return null;
687
+ const buttons = copyText ? (_jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [canRewind && (_jsx(Hint, { label: tI18nComplete.raw('textc72e5d059e24'), side: "top", align: "center", children: _jsx(Button, { type: "button", variant: "ghost", size: toolbar ? 'icon-sm' : 'icon-xs',
688
+ // 24px visible, 40px target — grown with a pseudo-element so the
689
+ // dense action row keeps its rhythm.
690
+ className: toolbar ? undefined : 'hit-area-2', "aria-label": tI18nComplete.raw('text673d6a594efa'), onClick: () => onRewind?.(messageId, rewindPromptText ?? ''), children: _jsx(PencilSimpleIcon, { weight: "regular", className: cn('text-foreground', toolbar ? 'size-3.5' : 'size-4') }) }) })), _jsx(CopyButton, { code: copyText, size: toolbar ? 'md' : 'sm',
691
+ // In a row's toolbar every glyph is 14px (`size-3.5`), the channel row's too.
692
+ className: toolbar ? 'focus-visible:ring-ring focus-visible:ring-2 [&_svg]:size-3.5!' : undefined, hintSide: "top", label: tI18nComplete.raw('texte21f935f11d7') })] })) : null;
693
+ if (toolbar) {
694
+ return (_jsxs(_Fragment, { children: [deliveryStatus, buttons ? _jsx(RowToolbar, { children: buttons }) : null] }));
695
+ }
684
696
  return (
685
697
  // The fade sits on the ROW, so the timestamp and the buttons reveal
686
698
  // together as one object rather than a label with controls growing out of
@@ -710,10 +722,7 @@ export function UserMessageActions({ timestamp, copyText, messageId, rewindPromp
710
722
  // counterpart. The two `opacity-100` variants it sits beside
711
723
  // agree with it, so no ordering assumption is being made and the
712
724
  // desktop string is unchanged.
713
- 'opacity-0 group-hover/turn:opacity-100 focus-within:opacity-100 max-md:opacity-100'), children: [hasMeta && (_jsx(InlineMeta, { children: timestamp !== null && _jsx(MessageTimeLabel, { timestamp: timestamp }) })), copyText && (_jsxs("div", { className: "flex shrink-0 items-center gap-0.5", children: [canRewind && (_jsx(Hint, { label: tI18nComplete.raw('textc72e5d059e24'), side: "top", align: "center", children: _jsx(Button, { type: "button", variant: "ghost", size: "icon-xs",
714
- // 24px visible, 40px target — grown with a pseudo-element so the
715
- // dense action row keeps its rhythm.
716
- className: "hit-area-2", "aria-label": tI18nComplete.raw('text673d6a594efa'), onClick: () => onRewind?.(messageId, rewindPromptText ?? ''), children: _jsx(PencilSimpleIcon, { weight: "regular", className: "text-foreground size-4" }) }) })), _jsx(CopyButton, { code: copyText, size: "sm", hintSide: "top", label: tI18nComplete.raw('texte21f935f11d7') })] }))] }), deliveryStatus] }));
725
+ 'opacity-0 group-hover/turn:opacity-100 focus-within:opacity-100 max-md:opacity-100'), children: [hasMeta && (_jsx(InlineMeta, { children: timestamp !== null && _jsx(MessageTimeLabel, { timestamp: timestamp }) })), buttons] }), deliveryStatus] }));
717
726
  }
718
727
  // ============================================================================
719
728
  // Inline edit-from-here editor
@@ -892,6 +901,11 @@ export function UserMessage({ message, author, showAuthor, agentNames, commandIn
892
901
  // scaffolds these prompts with ids and turn instructions the person never
893
902
  // typed, so the card shows only the platform, the sender, and their words.
894
903
  const channelMessageInfo = useMemo(() => parseChannelMessage(rawText), [rawText]);
904
+ // Its files: the `<file>` tags Kortix wrote after the sender's text, and nothing else. A tag the sender
905
+ // typed is text; the image block pi records for a tag repeats it, and names no path when the sender typed one.
906
+ const channelAttachments = useMemo(() => channelMessageInfo
907
+ ? normalizeAttachments([], parseFileReferences(channelPromptTail(rawText, channelMessageInfo.platform)).files)
908
+ : [], [channelMessageInfo, rawText]);
895
909
  // Detect trigger_event in user message
896
910
  const triggerEventInfo = useMemo(() => parseTriggerEvent(rawText), [rawText]);
897
911
  // A reminder fire: platform-written `[REMINDER …]` header + the reminder text.
@@ -908,7 +922,8 @@ export function UserMessage({ message, author, showAuthor, agentNames, commandIn
908
922
  // `copyText` is gated on `onRewind` to keep the buttons exactly as they were:
909
923
  // a read-only turn shows no controls. The row itself still renders, because
910
924
  // the timestamp is meta, not a control, and should not vanish with them.
911
- const actions = (_jsx(UserMessageActions, { timestamp: Number.isFinite(createdAt) && createdAt > 0 ? createdAt : null, copyText: copyText && onRewind ? copyText : undefined, messageId: message.message_id, rewindPromptText: rewindPromptText, onRewind: onRewind, rewindDisabled: rewindDisabled, deliveryStatus: deliveryStatus }));
925
+ const rows = useContext(TranscriptRowsContext) !== null;
926
+ const actions = (_jsx(UserMessageActions, { toolbar: rows, timestamp: Number.isFinite(createdAt) && createdAt > 0 ? createdAt : null, copyText: copyText && onRewind ? copyText : undefined, messageId: message.message_id, rewindPromptText: rewindPromptText, onRewind: onRewind, rewindDisabled: rewindDisabled, deliveryStatus: deliveryStatus }));
912
927
  const [expanded, setExpanded] = useState(false);
913
928
  const [canExpand, setCanExpand] = useState(false);
914
929
  const textRef = useRef(null);
@@ -1052,7 +1067,7 @@ export function UserMessage({ message, author, showAuthor, agentNames, commandIn
1052
1067
  }
1053
1068
  // Channel messages (Slack / Microsoft Teams / Telegram): a branded card with the sender
1054
1069
  if (channelMessageInfo) {
1055
- return _jsx(ChannelMessage, { info: channelMessageInfo, actions: actions });
1070
+ return _jsx(ChannelMessage, { info: channelMessageInfo, attachments: channelAttachments, actions: actions });
1056
1071
  }
1057
1072
  if (reminderInfo) {
1058
1073
  return _jsx(ReminderMessage, { info: reminderInfo, actions: actions });
@@ -1074,6 +1089,11 @@ export function UserMessage({ message, author, showAuthor, agentNames, commandIn
1074
1089
  // branch returned before the main path — silently dropped the message's
1075
1090
  // attachments. A command is now just a message whose first token is a chip,
1076
1091
  // so it falls through to the one bubble below.
1092
+ // A message row: the row draws the author and the time, so the message is
1093
+ // its text, left-aligned and unboxed, with its files under it.
1094
+ if (rows) {
1095
+ return (_jsxs("div", { className: "flex w-full min-w-0 flex-col items-start gap-1.5", children: [(bodyText || quotedPieces || effectiveCommandInfo) && (_jsx("div", { className: cn(MESSAGE_TEXT_CLASS, 'w-full min-w-0 whitespace-pre-wrap wrap-anywhere select-text'), children: quotedPieces ? (_jsx(QuotedMessageBody, { pieces: quotedPieces, renderText: renderQuotedRun })) : (_jsxs(_Fragment, { children: [commandLead, renderSegments(segments)] })) })), (allAttachments.length > 0 || uploadStatus?.state === 'failed') && (_jsx(MessageAttachments, { attachments: allAttachments, status: uploadStatus, onOpenPastedContent: onOpenPastedContent })), systemNotifications.length > 0 && !effectiveCommandInfo && (_jsx("div", { className: "flex w-full flex-col gap-1.5", children: withContentKeys(systemNotifications, (n) => `mixed-${n.tag}`).map(({ key, item }) => (_jsx(SystemNotificationCard, { notification: item }, key))) })), actions] }));
1096
+ }
1077
1097
  return (
1078
1098
  // The whole message is ONE right-aligned column capped at 80%, so the
1079
1099
  // bubble, its attachments and its actions all hang off the same rail and