@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
@@ -0,0 +1,16 @@
1
+ /** @internal Kortix apps only. No semver: it may change in any release. */
2
+ import type { ProjectMemoryLayerScope } from '@kortix/sdk';
3
+ /** A memory layer as a link target: its scope and its key (`company` or the space id). */
4
+ export interface MemoryLayerRef {
5
+ scope: ProjectMemoryLayerScope;
6
+ key: string;
7
+ }
8
+ /**
9
+ * Where a memory page opens: the Company Memory page, or its channel's or DM's
10
+ * Memory tab, with `?page=` (`&history=1` opens its History too). A channel or
11
+ * DM the reader is on keeps its other params, so an open thread stays beside
12
+ * the tab. Null when the host serves no such page or the space is not loaded.
13
+ */
14
+ export declare function useMemoryPageHref(projectId: string | null | undefined, enabled?: boolean): (layer: MemoryLayerRef, pageId: string, options?: {
15
+ history?: boolean;
16
+ }) => string | null;
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+ import { useProjectSpaces } from '@kortix/sdk/react';
3
+ import { useCallback } from 'react';
4
+ import { uiRoutes } from '../../lib/routes.js';
5
+ import { useUiPathname, useUiSearchParams } from '../../providers/ui-provider.js';
6
+ /**
7
+ * Where a memory page opens: the Company Memory page, or its channel's or DM's
8
+ * Memory tab, with `?page=` (`&history=1` opens its History too). A channel or
9
+ * DM the reader is on keeps its other params, so an open thread stays beside
10
+ * the tab. Null when the host serves no such page or the space is not loaded.
11
+ */
12
+ export function useMemoryPageHref(projectId, enabled = true) {
13
+ const pathname = useUiPathname();
14
+ const searchParams = useUiSearchParams();
15
+ const spaces = useProjectSpaces(projectId, { enabled }).data;
16
+ return useCallback((layer, pageId, options) => {
17
+ if (!projectId)
18
+ return null;
19
+ if (layer.scope === 'company') {
20
+ const memory = uiRoutes().memory(projectId);
21
+ if (!memory)
22
+ return null;
23
+ const params = new URLSearchParams({ page: pageId });
24
+ if (options?.history)
25
+ params.set('history', '1');
26
+ return `${memory}?${params.toString()}`;
27
+ }
28
+ const space = spaces?.find((candidate) => candidate.space_id === layer.key);
29
+ let path = null;
30
+ if (space?.kind === 'channel' && space.slug)
31
+ path = uiRoutes().channel(projectId, space.slug);
32
+ else if (space?.kind === 'dm' && space.dm_agent_name)
33
+ path = uiRoutes().dm(projectId, space.dm_agent_name);
34
+ if (!path)
35
+ return null;
36
+ const here = pathname === path || !!pathname?.endsWith(path);
37
+ const params = new URLSearchParams(here ? searchParams.toString() : '');
38
+ params.set('tab', 'memory');
39
+ params.set('page', pageId);
40
+ if (options?.history)
41
+ params.set('history', '1');
42
+ else
43
+ params.delete('history');
44
+ return `${here ? pathname : path}?${params.toString()}`;
45
+ }, [projectId, pathname, searchParams, spaces]);
46
+ }
@@ -22,10 +22,7 @@ import { useFeatureFlag } from '@kortix/sdk/react';
22
22
  */
23
23
  export function useProjectFeatureFlags(projectId) {
24
24
  const marketplace = useFeatureFlag(projectId, 'marketplace');
25
- const connectorsApiDiscover = useFeatureFlag(projectId, 'connectors_api_discover');
26
- const agentmailEmail = useFeatureFlag(projectId, 'agentmail_email');
27
25
  const metaAgent = useFeatureFlag(projectId, 'meta_agent');
28
- const monitors = useFeatureFlag(projectId, 'monitors');
29
26
  const reminders = useFeatureFlag(projectId, 'reminders');
30
27
  const warmSessions = useFeatureFlag(projectId, 'warm_sessions');
31
28
  const secretsEgress = useFeatureFlag(projectId, 'secrets_egress');
@@ -38,17 +35,19 @@ export function useProjectFeatureFlags(projectId) {
38
35
  const drives = useFeatureFlag(projectId, 'drives');
39
36
  const sessionLog = useFeatureFlag(projectId, 'session_log');
40
37
  const sessionLogRestore = useFeatureFlag(projectId, 'session_log_restore');
41
- const connectorsV2 = useFeatureFlag(projectId, 'connectors_v2');
38
+ const projectChannels = useFeatureFlag(projectId, 'project_channels');
42
39
  const agentRooms = useFeatureFlag(projectId, 'agent_rooms');
43
40
  const goals = useFeatureFlag(projectId, 'goals');
41
+ const artifacts = useFeatureFlag(projectId, 'artifacts');
42
+ const artifactComments = useFeatureFlag(projectId, 'artifact_comments');
43
+ const emailChannel = useFeatureFlag(projectId, 'email_channel');
44
44
  const workspaceVolume = useFeatureFlag(projectId, 'workspace_volume');
45
+ const sessionGroups = useFeatureFlag(projectId, 'session_groups');
46
+ const chrome = useFeatureFlag(projectId, 'chrome');
45
47
  return {
46
48
  flags: {
47
49
  marketplace: marketplace.enabled,
48
- connectors_api_discover: connectorsApiDiscover.enabled,
49
- agentmail_email: agentmailEmail.enabled,
50
50
  meta_agent: metaAgent.enabled,
51
- monitors: monitors.enabled,
52
51
  reminders: reminders.enabled,
53
52
  warm_sessions: warmSessions.enabled,
54
53
  secrets_egress: secretsEgress.enabled,
@@ -61,12 +60,17 @@ export function useProjectFeatureFlags(projectId) {
61
60
  drives: drives.enabled,
62
61
  session_log: sessionLog.enabled,
63
62
  session_log_restore: sessionLogRestore.enabled,
64
- connectors_v2: connectorsV2.enabled,
63
+ project_channels: projectChannels.enabled,
65
64
  agent_rooms: agentRooms.enabled,
66
65
  goals: goals.enabled,
66
+ artifacts: artifacts.enabled,
67
+ artifact_comments: artifactComments.enabled,
68
+ email_channel: emailChannel.enabled,
67
69
  workspace_volume: workspaceVolume.enabled,
70
+ session_groups: sessionGroups.enabled,
71
+ chrome: chrome.enabled,
68
72
  },
69
73
  // The trailing hook's loading state — keep this on the LAST hook above.
70
- isLoading: workspaceVolume.isLoading,
74
+ isLoading: chrome.isLoading,
71
75
  };
72
76
  }
@@ -1,7 +1,7 @@
1
1
  /** @internal Kortix apps only. No semver: it may change in any release. */
2
2
  /**
3
3
  * HEIC/HEIF → JPEG conversion.
4
- * heic2any is lazy-loaded — zero bundle cost when no HEIC files are opened.
4
+ * The CSP-safe decoder is lazy-loaded; production never permits unsafe-eval.
5
5
  */
6
6
  export declare function isHeicFile(filename: string): boolean;
7
7
  export declare function convertHeicBlobToJpeg(blob: Blob): Promise<Blob>;
@@ -1,13 +1,12 @@
1
1
  /**
2
2
  * HEIC/HEIF → JPEG conversion.
3
- * heic2any is lazy-loaded — zero bundle cost when no HEIC files are opened.
3
+ * The CSP-safe decoder is lazy-loaded; production never permits unsafe-eval.
4
4
  */
5
5
  const HEIC_EXT = new Set(['heic', 'heif']);
6
6
  export function isHeicFile(filename) {
7
7
  return HEIC_EXT.has(filename.split('.').pop()?.toLowerCase() || '');
8
8
  }
9
9
  export async function convertHeicBlobToJpeg(blob) {
10
- const heic2any = (await import('heic2any')).default;
11
- const result = await heic2any({ blob, toType: 'image/jpeg', quality: 0.92 });
12
- return Array.isArray(result) ? result[0] : result;
10
+ const { heicTo } = await import('heic-to/csp');
11
+ return heicTo({ blob, type: 'image/jpeg', quality: 0.92 });
13
12
  }
@@ -2,6 +2,7 @@
2
2
  import type { UiTranslator } from '../../i18n/index.js';
3
3
  import { type TurnCompleteMsg } from './turn-broadcast.js';
4
4
  import { type NotificationPreferences } from '@kortix/sdk';
5
+ import type { QueryClient } from '@tanstack/react-query';
5
6
  /** The push `type` of each inbox kind (`pushTypeOf` in `@kortix/shared/notification-kinds`). */
6
7
  export type WebNotificationType = 'completion' | 'error' | 'question' | 'permission' | 'shared' | 'automation_failed' | 'automation_recovered' | 'capture_device_down' | 'capture_device_recovered' | 'message';
7
8
  export interface WebNotificationPayload {
@@ -36,6 +37,11 @@ export interface WebNotificationPayload {
36
37
  preview?: string;
37
38
  /** Localized "Open session" for the finished-turn toast. */
38
39
  openSessionLabel?: string;
40
+ /**
41
+ * Set when the turn ended while a channel or DM page was on screen: its
42
+ * thread opens in that page's panel (`?thread=`), not on the session page.
43
+ */
44
+ threadHref?: string;
39
45
  /** The open change request the finished turn produced: the toast offers Review. */
40
46
  changeRequest?: {
41
47
  crId: string;
@@ -59,6 +65,20 @@ export declare function setServerPushPreferences(kinds: NotificationPreferences[
59
65
  * via Cmd+Tab / Alt+Tab (`!document.hasFocus()`).
60
66
  */
61
67
  export declare function isTabHidden(): boolean;
68
+ /**
69
+ * A finished turn opens in the thread panel of the channel or DM page on
70
+ * screen (`?thread=<id>`) only when it is one of that space's threads: the
71
+ * path's project is the session's, and the cached thread list of the space
72
+ * holds the session. Null otherwise, so any other session keeps its session
73
+ * page. Reads the query cache; never fetches.
74
+ */
75
+ export declare function spacesThreadHref(location: {
76
+ pathname: string;
77
+ search: string;
78
+ }, session: {
79
+ sessionId: string;
80
+ projectId: string | null | undefined;
81
+ }, cache: QueryClient): string | null;
62
82
  /**
63
83
  * Check if the user is currently viewing a specific session.
64
84
  * Checks the tab store (dashboard session tabs) and the current URL
@@ -33,6 +33,7 @@ import { hasWebPushSubscription } from '../notifications/web-push.js';
33
33
  import { customToast, dismissToast, ToastCard, toastIcon, errorToast, infoToast, successToast, warningToast, } from '../../primitives/toast.js';
34
34
  import { ClockIcon, GitPullRequestIcon } from '@phosphor-icons/react';
35
35
  import { SessionFailedCard, SessionStackCard, } from '../notifications/session-toast-cards.js';
36
+ import { decodeSpaceSegment } from '../../lib/routes.js';
36
37
  import { logger } from './logger.js';
37
38
  import { softNavigate } from './navigation/router-bridge.js';
38
39
  import { projectSessionHref } from './navigation/session-href.js';
@@ -43,6 +44,7 @@ import { openTabAndNavigate, useTabStore } from '../stores/tab-store.js';
43
44
  import { useTurnAttentionStore } from '../stores/turn-attention-store.js';
44
45
  import { useWebNotificationStore } from '../stores/web-notification-store.js';
45
46
  import { listChangeRequests, normalizeAppPathname, } from '@kortix/sdk';
47
+ import { findCachedProjectSession, qk } from '@kortix/sdk/react';
46
48
  // ============================================================================
47
49
  // Server push preference
48
50
  // ============================================================================
@@ -169,6 +171,32 @@ export function isTabHidden() {
169
171
  return false;
170
172
  return document.hidden || !document.hasFocus();
171
173
  }
174
+ /**
175
+ * A finished turn opens in the thread panel of the channel or DM page on
176
+ * screen (`?thread=<id>`) only when it is one of that space's threads: the
177
+ * path's project is the session's, and the cached thread list of the space
178
+ * holds the session. Null otherwise, so any other session keeps its session
179
+ * page. Reads the query cache; never fetches.
180
+ */
181
+ export function spacesThreadHref(location, session, cache) {
182
+ // An optional two-letter locale segment leads (`/de/projects/…`).
183
+ const match = /^(?:\/[a-z]{2})?\/projects\/([^/]+)\/(c|dm)\/([^/]+)\/?$/.exec(normalizeAppPathname(location.pathname));
184
+ if (!match || match[1] !== session.projectId)
185
+ return null;
186
+ const [, projectId, kind, segment] = match;
187
+ const name = decodeSpaceSegment(segment);
188
+ const space = cache
189
+ .getQueryData(qk.project.spaces(projectId))
190
+ ?.find((candidate) => (kind === 'c' ? candidate.slug === name : candidate.dm_agent_name === name));
191
+ if (!space)
192
+ return null;
193
+ const thread = findCachedProjectSession(cache, projectId, (row) => row.session_id === session.sessionId && row.space_id === space.space_id);
194
+ if (!thread)
195
+ return null;
196
+ const params = new URLSearchParams(location.search);
197
+ params.set('thread', session.sessionId);
198
+ return `${location.pathname}?${params.toString()}`;
199
+ }
172
200
  /**
173
201
  * Check if the user is currently viewing a specific session.
174
202
  * Checks the tab store (dashboard session tabs) and the current URL
@@ -199,6 +227,9 @@ export function isViewingSession(sessionId) {
199
227
  const path = normalizeAppPathname(window.location.pathname);
200
228
  if (path.includes(sessionId))
201
229
  return true;
230
+ // A channel or DM page with the thread open in its panel.
231
+ if (new URLSearchParams(window.location.search).get('thread') === sessionId)
232
+ return true;
202
233
  if (path.startsWith('/onboarding'))
203
234
  return true;
204
235
  }
@@ -392,7 +423,10 @@ const NOTIFICATION_TOAST_VARIANT = {
392
423
  };
393
424
  /** Open what the notification is about: its session, or its `href`. */
394
425
  function openPayload(payload, forceNavigation) {
395
- if (payload.sessionId) {
426
+ if (payload.threadHref) {
427
+ softNavigate(payload.threadHref);
428
+ }
429
+ else if (payload.sessionId) {
396
430
  navigateToSession(payload.sessionId, payload.body, {
397
431
  forceNavigation,
398
432
  projectId: payload.projectId,
@@ -594,12 +628,22 @@ handoff) {
594
628
  */
595
629
  export function notifyTaskCompleteFor({ sessionId, sessionTitle, projectId, notificationCenter }, tI18nComplete) {
596
630
  noteTurnCompleteShown(sessionId);
597
- const name = sessionDisplayName(sessionTitle, sessionId);
598
- const label = sessionTitle ? `"${name.slice(0, 60)}"` : name;
631
+ // On a channel or DM page the turn is a thread: it says "thread" and opens
632
+ // in the page's panel. A default title ("New session - <time>") names nothing.
633
+ const cache = getSharedQueryClient();
634
+ const threadHref = typeof window === 'undefined' || !cache
635
+ ? null
636
+ : spacesThreadHref(window.location, { sessionId, projectId }, cache);
637
+ const defaultTitle = !sessionTitle || /^New session(\s-\s|$)/.test(sessionTitle);
638
+ const name = threadHref && defaultTitle
639
+ ? tI18nComplete.raw('untitledThread')
640
+ : sessionDisplayName(sessionTitle, sessionId);
641
+ const label = sessionTitle && !(threadHref && defaultTitle) ? `"${name.slice(0, 60)}"` : name;
599
642
  const payload = {
600
643
  type: 'completion',
601
644
  entityLabel: name,
602
- openSessionLabel: tI18nComplete.raw('textb205bb47f81a'),
645
+ openSessionLabel: threadHref ? tI18nComplete.raw('openThreadAction') : tI18nComplete.raw('textb205bb47f81a'),
646
+ threadHref: threadHref ?? undefined,
603
647
  stackTitle: (count) => tI18nComplete('textc0589750863c', { count }),
604
648
  title: tI18nComplete.raw('text107f1806b5d7'),
605
649
  body: tI18nComplete('text27d628c8b427', { label }),
@@ -1,5 +1,6 @@
1
1
  /** @internal Kortix apps only. No semver: it may change in any release. */
2
2
  import type { InboxNotification } from '@kortix/sdk';
3
+ import { BellIcon } from '@phosphor-icons/react';
3
4
  export interface NotificationPanelProps {
4
5
  rows: readonly InboxNotification[];
5
6
  state: 'loading' | 'error' | 'ready';
@@ -27,10 +28,12 @@ export declare function NotificationPanel({ rows, state, unreadCount, prompt, on
27
28
  * sits. At full size it would tint the whole bell.
28
29
  */
29
30
  export declare const BELL_REFLECTION_MASK = "radial-gradient(circle 12px at 100% 100%, #000 35%, transparent 100%)";
30
- export declare function BellMark({ count, needsYou, surface, }: {
31
+ export declare function BellMark({ count, needsYou, surface, icon: Glyph, }: {
31
32
  count: number;
32
33
  needsYou: boolean;
33
34
  surface?: 'bg-background' | 'bg-sidebar';
35
+ /** The glyph under the count: the bell, or another control's own mark. */
36
+ icon?: typeof BellIcon;
34
37
  }): import("react").JSX.Element;
35
38
  /**
36
39
  * The bell and its popover. Renders nothing, and reads no inbox, while signed
@@ -79,11 +79,11 @@ export function NotificationPanel({ rows, state, unreadCount, prompt, onOpenRow,
79
79
  * sits. At full size it would tint the whole bell.
80
80
  */
81
81
  export const BELL_REFLECTION_MASK = 'radial-gradient(circle 12px at 100% 100%, #000 35%, transparent 100%)';
82
- export function BellMark({ count, needsYou, surface = 'bg-background', }) {
82
+ export function BellMark({ count, needsYou, surface = 'bg-background', icon: Glyph = BellIcon, }) {
83
83
  const tone = needsYou
84
84
  ? { reflection: 'text-kortix-yellow', disc: 'bg-kortix-yellow' }
85
85
  : { reflection: 'text-kortix-blue', disc: 'bg-kortix-blue' };
86
- return (_jsxs("span", { className: "relative size-4 shrink-0", children: [_jsx(BellIcon, { className: "size-4" }), count > 0 ? (_jsxs(_Fragment, { children: [_jsx(BellIcon, { "aria-hidden": true, className: cn('absolute inset-0 size-4', tone.reflection), style: { maskImage: BELL_REFLECTION_MASK, WebkitMaskImage: BELL_REFLECTION_MASK } }), _jsx("span", { "aria-hidden": true, className: cn('absolute -right-2.5 -bottom-2 flex rounded-full p-px', surface), children: _jsx("span", { "data-slot": "bell-count", className: cn('text-background flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-0.5 text-[9px] leading-none font-semibold tabular-nums', // audit:allow a numeral in a 13px disc on a 16px glyph; no type rung fits
86
+ return (_jsxs("span", { className: "relative size-4 shrink-0", children: [_jsx(Glyph, { className: "size-4" }), count > 0 ? (_jsxs(_Fragment, { children: [_jsx(Glyph, { "aria-hidden": true, className: cn('absolute inset-0 size-4', tone.reflection), style: { maskImage: BELL_REFLECTION_MASK, WebkitMaskImage: BELL_REFLECTION_MASK } }), _jsx("span", { "aria-hidden": true, className: cn('absolute -right-2.5 -bottom-2 flex rounded-full p-px', surface), children: _jsx("span", { "data-slot": "bell-count", className: cn('text-background flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-0.5 text-[9px] leading-none font-semibold tabular-nums', // audit:allow a numeral in a 13px disc on a 16px glyph; no type rung fits
87
87
  tone.disc), children: badgeCount(count) }) })] })) : null] }));
88
88
  }
89
89
  /**
@@ -2,7 +2,8 @@
2
2
  export interface SelectionBarAction {
3
3
  id: string;
4
4
  label: string;
5
- tone?: 'default' | 'destructive';
5
+ /** `success` for an approving verb (Approve), `destructive` for a removing one. */
6
+ tone?: 'default' | 'success' | 'destructive';
6
7
  disabled?: boolean;
7
8
  onSelect: () => void;
8
9
  }
@@ -31,7 +31,7 @@ export function SelectionBar({ selectedCount, allSelected, canSelectAll = true,
31
31
  const selectLabel = allSelected ? t.raw('text83b12c2216ef') : t.raw('text1fc9a387654d');
32
32
  // One action: a fixed-height button that reads its label. No glyph: a
33
33
  // verb in a bulk bar is read, not recognised.
34
- const action = (a) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: a.onSelect, disabled: busy || a.disabled, className: cn('h-8 shrink-0', a.tone === 'destructive' && 'text-destructive hover:text-destructive'), children: a.label }, a.id));
34
+ const action = (a) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: a.onSelect, disabled: busy || a.disabled, className: cn('h-8 shrink-0', a.tone === 'destructive' && 'text-destructive hover:text-destructive', a.tone === 'success' && 'text-kortix-green hover:text-kortix-green'), children: a.label }, a.id));
35
35
  return (_jsxs(m.div, { initial: animateIn ? { opacity: 0, transform: reduceMotion ? REST : RISE } : false, animate: {
36
36
  opacity: 1,
37
37
  transform: REST,
@@ -0,0 +1,8 @@
1
+ /** @internal Kortix apps only. No semver: it may change in any release. */
2
+ /** "Apps and extensions" dialog: any trigger (account menu, sidebar row, `?apps=1`) opens the one mounted in the project sidebar. */
3
+ interface AppsModalState {
4
+ open: boolean;
5
+ setOpen: (open: boolean) => void;
6
+ }
7
+ export declare const useAppsModalStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AppsModalState>>;
8
+ export {};
@@ -0,0 +1,6 @@
1
+ 'use client';
2
+ import { create } from 'zustand';
3
+ export const useAppsModalStore = create((set) => ({
4
+ open: false,
5
+ setOpen: (open) => set({ open }),
6
+ }));
@@ -7,9 +7,11 @@
7
7
  * mount and immediately clears, so the prefill only applies once. Scoped
8
8
  * per-project so prefills don't leak across projects.
9
9
  *
10
- * A prefill fills the box. Only `submit: true` also sends it, and only the
11
- * desktop Quick Entry sets that: a prompt the person typed into the app's own
12
- * bar (`components/desktop/desktop-quick-entry.tsx`). A URL (`?q=`) never
10
+ * A prefill fills the box. Only `submit: true` also sends it, and only two
11
+ * callers set that, each for a prompt the person typed into Kortix's own
12
+ * composer: the desktop Quick Entry bar (`components/desktop/desktop-quick-entry.tsx`)
13
+ * and the Kortix in Chrome side panel (`features/chrome/panel/chrome-panel-home.tsx`).
14
+ * A URL (`?q=`) never
13
15
  * sends, because anyone can write a link. The onboarding hand-off that used to
14
16
  * auto-send its kickoff prompt now opens the first chat instead
15
17
  * (`first-chat-store.ts`).
@@ -18,8 +20,13 @@ import type { AttachedFile } from '../../session/composer/types.js';
18
20
  import type { SessionPromptOverrides } from '@kortix/sdk';
19
21
  interface ComposerPrefill {
20
22
  text: string;
21
- /** Send once it lands, exactly as if the person pressed Enter. */
22
- submit?: boolean;
23
+ /**
24
+ * Send once it lands, exactly as if the person pressed Enter. `'when-ready'`
25
+ * waits until the composer can send (models and entitlements loaded, Send
26
+ * enabled): an image for a model that cannot read one then stays in the box,
27
+ * where the composer says why.
28
+ */
29
+ submit?: boolean | 'when-ready';
23
30
  /** Files to attach (desktop Quick Entry screenshots and files). */
24
31
  files?: AttachedFile[];
25
32
  /** The agent, model and effort to select before it lands (desktop Quick Entry). */
@@ -1,4 +1,19 @@
1
1
  /** @internal Kortix apps only. No semver: it may change in any release. */
2
+ /**
3
+ * What the full-screen viewer shows under a file opened with one: a generated
4
+ * image's prompt (`text`) and the model that made it.
5
+ */
6
+ export interface FileCaption {
7
+ text: string;
8
+ model?: string | null;
9
+ /**
10
+ * The sha256 of the image's bytes (R38): the viewer draws those bytes from
11
+ * the shared store at once, with no read.
12
+ */
13
+ sha256?: string;
14
+ }
15
+ /** One key per sandbox file, with or without the `/workspace/` prefix. */
16
+ export declare function fileCaptionKey(path: string): string;
2
17
  interface FilePreviewState {
3
18
  /** Whether the preview dialog is open */
4
19
  isOpen: boolean;
@@ -6,10 +21,22 @@ interface FilePreviewState {
6
21
  filePath: string | null;
7
22
  /** Optional line number to highlight */
8
23
  lineNumber?: number;
9
- /** Open the preview dialog with the given file */
10
- openPreview: (filePath: string, lineNumber?: number) => void;
24
+ /**
25
+ * Captions of the files opened with one, by `fileCaptionKey`. Kept after
26
+ * the open: the session panel's viewer, the Files explorer and this dialog
27
+ * all read it for the path they show.
28
+ */
29
+ captions: Record<string, FileCaption>;
30
+ /** Open the preview dialog with the given file; `caption` shows under it in the viewer. */
31
+ openPreview: (filePath: string, lineNumber?: number, caption?: FileCaption) => void;
11
32
  /** Close the preview dialog */
12
33
  closePreview: () => void;
13
34
  }
14
35
  export declare const useFilePreviewStore: import("zustand").UseBoundStore<import("zustand").StoreApi<FilePreviewState>>;
36
+ /**
37
+ * The caption the viewer shows under `filePath`, when it was opened with one.
38
+ * The live state on both snapshots: a static render (tests, a prerender)
39
+ * reads what was opened, not the store's initial state.
40
+ */
41
+ export declare function useFileCaption(filePath: string): FileCaption | undefined;
15
42
  export {};
@@ -1,10 +1,18 @@
1
1
  import { getActivePanelSessionId, openFileInSessionPanel } from './session-browser-store.js';
2
+ import { useSyncExternalStore } from 'react';
2
3
  import { create } from 'zustand';
4
+ /** One key per sandbox file, with or without the `/workspace/` prefix. */
5
+ export function fileCaptionKey(path) {
6
+ return path.trim().replace(/^\/?workspace\//, '').replace(/^\/+/, '');
7
+ }
3
8
  export const useFilePreviewStore = create((set) => ({
4
9
  isOpen: false,
5
10
  filePath: null,
6
11
  lineNumber: undefined,
7
- openPreview: (filePath, lineNumber) => {
12
+ captions: {},
13
+ openPreview: (filePath, lineNumber, caption) => {
14
+ if (caption)
15
+ set((s) => ({ captions: { ...s.captions, [fileCaptionKey(filePath)]: caption } }));
8
16
  // Inside a session the file opens in the panel's detail layer — the THING,
9
17
  // not the file manager around it (see easy-panel.tsx's handleOpenOutput).
10
18
  // `…Silently` because Easy must never write `viewBySession`: that key is
@@ -22,3 +30,13 @@ export const useFilePreviewStore = create((set) => ({
22
30
  set({ isOpen: false, filePath: null, lineNumber: undefined });
23
31
  },
24
32
  }));
33
+ /**
34
+ * The caption the viewer shows under `filePath`, when it was opened with one.
35
+ * The live state on both snapshots: a static render (tests, a prerender)
36
+ * reads what was opened, not the store's initial state.
37
+ */
38
+ export function useFileCaption(filePath) {
39
+ const key = fileCaptionKey(filePath);
40
+ const read = () => useFilePreviewStore.getState().captions[key];
41
+ return useSyncExternalStore(useFilePreviewStore.subscribe, read, read);
42
+ }
@@ -110,6 +110,9 @@ export const useKortixComputerStore = create()(devtools((set, get) => ({
110
110
  if (!open) {
111
111
  // The person closed it: coming back must not reopen it.
112
112
  forgetActivePanel(get());
113
+ // A tool closed while the computer boots stays closed after the
114
+ // boot→ready handoff: drop the intent it would replant.
115
+ update._bootQuickView = null;
113
116
  update.panelSplit = null;
114
117
  update.panelAspect = null;
115
118
  update.isExpanded = false;
@@ -8,7 +8,7 @@
8
8
  * (`customize-sidebar-modal.tsx` syncs it). A row a project does not offer (a flag is off, a permission is denied)
9
9
  * keeps its place here and simply does not render.
10
10
  */
11
- export declare const SIDEBAR_NAV_ITEM_IDS: readonly ["customize", "apps", "files", "rooms", "goals"];
11
+ export declare const SIDEBAR_NAV_ITEM_IDS: readonly ["customize", "apps", "files", "rooms", "goals", "artifacts"];
12
12
  export type SidebarNavItemId = (typeof SIDEBAR_NAV_ITEM_IDS)[number];
13
13
  /**
14
14
  * `never` moves the row into the More menu (`project-nav-items.tsx`), so its
@@ -13,7 +13,7 @@ import { registerPersistedStore, resetPersistedStore } from './persisted-store-r
13
13
  */
14
14
  // Review (2026-10-17) and Reminders (2026-10-19) left the sidebar for Customize
15
15
  // tabs. A saved layout that still names one drops the id in `normalizeSidebarNav`.
16
- export const SIDEBAR_NAV_ITEM_IDS = ['customize', 'apps', 'files', 'rooms', 'goals'];
16
+ export const SIDEBAR_NAV_ITEM_IDS = ['customize', 'apps', 'files', 'rooms', 'goals', 'artifacts'];
17
17
  /** The layout before anyone customizes it. */
18
18
  export const SIDEBAR_NAV_DEFAULTS = [
19
19
  { id: 'customize', visibility: 'always' },
@@ -24,6 +24,8 @@ export const SIDEBAR_NAV_DEFAULTS = [
24
24
  { id: 'rooms', visibility: 'never' },
25
25
  // Goals (2026-10-21, flag `goals`): objectives agents own until verified done.
26
26
  { id: 'goals', visibility: 'always' },
27
+ // Artifacts (2026-10-23, flag `artifacts`): published docs, slides, boards, dashboards.
28
+ { id: 'artifacts', visibility: 'always' },
27
29
  ];
28
30
  function isItemId(value) {
29
31
  return SIDEBAR_NAV_ITEM_IDS.includes(value);
@@ -6,7 +6,9 @@
6
6
  *
7
7
  * A route that returns null is a page the host does not serve: every link to
8
8
  * it is hidden and no navigation goes there. `project` and `session` are the
9
- * two pages every session host serves, so they cannot be null.
9
+ * two pages every session host serves, so they cannot be null. `channel` and
10
+ * `dm` cannot be null either: the sidebar links them only while the project's
11
+ * `project_channels` flag is on.
10
12
  *
11
13
  * Defaults: apps/web's paths.
12
14
  */
@@ -24,6 +26,8 @@ export interface UiRoutes {
24
26
  rooms: (projectId: string) => string | null;
25
27
  /** The project's goals (flag `goals`); a goal is `<goals>/<scope>/<slug>`. */
26
28
  goals: (projectId: string) => string | null;
29
+ /** The project's artifacts (flag `artifacts`); one is `<artifacts>/<artifact_id>`. */
30
+ artifacts: (projectId: string) => string | null;
27
31
  members: (projectId: string) => string | null;
28
32
  /** The project settings page, on its sandbox section. */
29
33
  sandboxSettings: (projectId: string) => string | null;
@@ -33,11 +37,19 @@ export interface UiRoutes {
33
37
  * capability root, for example `models` or `triggers?id=<slug>`.
34
38
  */
35
39
  customize: (projectId: string, path?: string) => string | null;
40
+ /** A channel of the project, by slug (`project_channels` flag). */
41
+ channel: (projectId: string, slug: string) => string;
42
+ /** The caller's direct messages with one agent, by agent name (`project_channels` flag). */
43
+ dm: (projectId: string, agentName: string) => string;
44
+ /** The project's Company memory (`project_channels` flag); a page is `?page=<page_id>`. */
45
+ memory: (projectId: string) => string | null;
36
46
  }
37
47
  export declare const defaultUiRoutes: UiRoutes;
38
48
  /** Replaces the routes the host passes. Omitted routes keep their default. */
39
49
  export declare function setUiRoutes(overrides: Partial<UiRoutes>): void;
40
50
  export declare function uiRoutes(): UiRoutes;
51
+ /** A channel slug or DM agent name from its URL segment; null when a hand-typed escape is malformed. */
52
+ export declare function decodeSpaceSegment(segment: string): string | null;
41
53
  /**
42
54
  * A capability page's URL for the customize pages themselves: they are mounted
43
55
  * only by a host that serves them, so a null `customize` route falls back to
@@ -7,9 +7,13 @@ const DEFAULT_ROUTES = {
7
7
  apps: (p) => `/projects/${p}/apps`,
8
8
  rooms: (p) => `/projects/${p}/rooms`,
9
9
  goals: (p) => `/projects/${p}/goals`,
10
+ artifacts: (p) => `/projects/${p}/artifacts`,
10
11
  members: (p) => `/projects/${p}/members`,
11
12
  sandboxSettings: (p) => `/projects/${p}/config?section=sandbox`,
12
13
  customize: (p, path) => `/projects/${p}/customize${path ? `/${path}` : ''}`,
14
+ channel: (p, slug) => `/projects/${p}/c/${slug}`,
15
+ dm: (p, agentName) => `/projects/${p}/dm/${encodeURIComponent(agentName)}`,
16
+ memory: (p) => `/projects/${p}/memory`,
13
17
  };
14
18
  export const defaultUiRoutes = DEFAULT_ROUTES;
15
19
  let routes = DEFAULT_ROUTES;
@@ -20,6 +24,15 @@ export function setUiRoutes(overrides) {
20
24
  export function uiRoutes() {
21
25
  return routes;
22
26
  }
27
+ /** A channel slug or DM agent name from its URL segment; null when a hand-typed escape is malformed. */
28
+ export function decodeSpaceSegment(segment) {
29
+ try {
30
+ return decodeURIComponent(segment);
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
23
36
  /**
24
37
  * A capability page's URL for the customize pages themselves: they are mounted
25
38
  * only by a host that serves them, so a null `customize` route falls back to
@@ -10,7 +10,8 @@ export type { MarkdownPolicy, MarkdownTrust, MarkdownVariant } from './markdown-
10
10
  export { UnifiedMarkdown } from './unified-markdown.js';
11
11
  export type { UnifiedMarkdownProps } from './unified-markdown.js';
12
12
  export { CopyOverlay } from './code/index.js';
13
- export { HighlightedCode } from './code/code-block.js';
13
+ export { CodeHighlight, HighlightedCode } from './code/code-block.js';
14
+ export { INLINE_CODE } from './code/inline-chip.js';
14
15
  export { CopyButton } from './copy-button.js';
15
16
  export { MarkdownWithFrontmatter } from './markdown-frontmatter.js';
16
17
  export { languageLabel, normalizeLanguage } from './unified-markdown-utils.js';
@@ -8,7 +8,8 @@
8
8
  export { markdownPolicy } from './markdown-policy.js';
9
9
  export { UnifiedMarkdown } from './unified-markdown.js';
10
10
  export { CopyOverlay } from './code/index.js';
11
- export { HighlightedCode } from './code/code-block.js';
11
+ export { CodeHighlight, HighlightedCode } from './code/code-block.js';
12
+ export { INLINE_CODE } from './code/inline-chip.js';
12
13
  export { CopyButton } from './copy-button.js';
13
14
  export { MarkdownWithFrontmatter } from './markdown-frontmatter.js';
14
15
  export { languageLabel, normalizeLanguage } from './unified-markdown-utils.js';
@@ -8,6 +8,7 @@ import { type ApprovalLinkDetails } from '@kortix/sdk';
8
8
  export declare function approvalIdentity(details: ApprovalLinkDetails): {
9
9
  connector: string | null;
10
10
  action: string | null;
11
+ slug: string | null;
11
12
  iconUrl: string | null;
12
13
  };
13
14
  /**