@kortix/ui 0.14.8 → 0.14.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/README.md +2 -2
  2. package/dist/_vendor/kortix-shared.js +63 -3
  3. package/dist/_vendor/shared/app-config.d.ts +175 -0
  4. package/dist/_vendor/shared/channel-message.d.ts +34 -5
  5. package/dist/_vendor/shared/index.d.ts +1 -0
  6. package/dist/_vendor/shared/space-slug.d.ts +37 -0
  7. package/dist/access/access/access-detail-shell.js +1 -1
  8. package/dist/access/access/principal-picker.d.ts +11 -0
  9. package/dist/access/access/principal-picker.js +3 -2
  10. package/dist/apps/app-preview-pool.d.ts +7 -2
  11. package/dist/apps/app-preview-pool.js +11 -5
  12. package/dist/apps/app-shared.d.ts +22 -15
  13. package/dist/apps/app-shared.js +37 -19
  14. package/dist/apps/index.d.ts +2 -2
  15. package/dist/apps/index.js +2 -2
  16. package/dist/artifacts/artifact-frame.d.ts +16 -0
  17. package/dist/artifacts/artifact-frame.js +51 -0
  18. package/dist/artifacts/artifact-session.d.ts +18 -0
  19. package/dist/artifacts/artifact-session.js +101 -0
  20. package/dist/artifacts/frame-policy.d.ts +30 -0
  21. package/dist/artifacts/frame-policy.js +61 -0
  22. package/dist/artifacts/index.d.ts +3 -0
  23. package/dist/artifacts/index.js +5 -0
  24. package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
  25. package/dist/browser/sandbox-browser-chrome.js +2 -2
  26. package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
  27. package/dist/customize/agents/agent-grant-pages.js +30 -4
  28. package/dist/customize/agents/agent-page.js +3 -1
  29. package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
  30. package/dist/customize/agents/agent-policy-sets.js +72 -0
  31. package/dist/customize/agents/agent-triggers-section.js +2 -1
  32. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
  33. package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
  34. package/dist/customize/connectors/agent-access.d.ts +35 -0
  35. package/dist/customize/connectors/agent-access.js +77 -0
  36. package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
  37. package/dist/customize/connectors/catalog/browse-sections.js +7 -74
  38. package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
  39. package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
  40. package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
  41. package/dist/customize/connectors/catalog/connector-browse.js +19 -50
  42. package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
  43. package/dist/customize/connectors/catalog/use-catalog.js +48 -175
  44. package/dist/customize/connectors/connector-identity.d.ts +9 -11
  45. package/dist/customize/connectors/connector-identity.js +13 -42
  46. package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
  47. package/dist/customize/connectors/connector-moves-banner.js +4 -6
  48. package/dist/customize/connectors/connector-routes.d.ts +21 -9
  49. package/dist/customize/connectors/connector-routes.js +29 -20
  50. package/dist/customize/connectors/connectors-page.js +53 -82
  51. package/dist/customize/connectors/detail/app-page.js +226 -98
  52. package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
  53. package/dist/customize/connectors/detail/computer-app-page.js +39 -0
  54. package/dist/customize/connectors/detail/connector-accounts.js +3 -1
  55. package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
  56. package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
  57. package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
  58. package/dist/customize/connectors/detail/connector-agents.js +69 -0
  59. package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
  60. package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
  61. package/dist/customize/connectors/detail/connector-move-row.js +23 -14
  62. package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
  63. package/dist/customize/connectors/detail/connector-page.js +14 -10
  64. package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
  65. package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
  66. package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
  67. package/dist/customize/connectors/detail/connector-settings.js +7 -3
  68. package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
  69. package/dist/customize/connectors/detail/connector-status.js +34 -10
  70. package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
  71. package/dist/customize/connectors/detail/connector-tabs.js +8 -2
  72. package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
  73. package/dist/customize/connectors/detail/connector-tools.js +105 -48
  74. package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
  75. package/dist/customize/connectors/detail/email-inboxes.js +184 -0
  76. package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
  77. package/dist/customize/connectors/detail/provider-info.js +2 -2
  78. package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
  79. package/dist/customize/connectors/detail/status-badge.js +4 -5
  80. package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
  81. package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
  82. package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
  83. package/dist/customize/connectors/install/install-dialog.js +40 -0
  84. package/dist/customize/connectors/install/install.d.ts +13 -2
  85. package/dist/customize/connectors/install/install.js +9 -4
  86. package/dist/customize/connectors/install/use-install.d.ts +19 -2
  87. package/dist/customize/connectors/install/use-install.js +65 -37
  88. package/dist/customize/connectors/install/way-kind.d.ts +5 -0
  89. package/dist/customize/connectors/install/way-kind.js +16 -0
  90. package/dist/customize/connectors/provider-label.d.ts +2 -1
  91. package/dist/customize/connectors/provider-label.js +13 -3
  92. package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
  93. package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
  94. package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
  95. package/dist/customize/connectors/tools/policy-sets.js +41 -0
  96. package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
  97. package/dist/customize/connectors/tools/tool-groups.js +78 -16
  98. package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
  99. package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
  100. package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
  101. package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
  102. package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
  103. package/dist/customize/connectors/tools/tool-policy.js +74 -8
  104. package/dist/customize/connectors/use-agent-access.d.ts +85 -0
  105. package/dist/customize/connectors/use-agent-access.js +72 -0
  106. package/dist/customize/migrate-to-v2/index.d.ts +1 -2
  107. package/dist/customize/migrate-to-v2/index.js +1 -2
  108. package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -25
  109. package/dist/customize/migrate-to-v2/migration-prompt.js +34 -236
  110. package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
  111. package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
  112. package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
  113. package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
  114. package/dist/customize/providers/provider-accordion.js +17 -2
  115. package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
  116. package/dist/customize/sections/component/channel-access-panel.js +146 -0
  117. package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
  118. package/dist/customize/sections/component/channel-connect-hero.js +3 -2
  119. package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
  120. package/dist/customize/sections/component/channel-hero-frame.js +40 -0
  121. package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
  122. package/dist/customize/sections/component/channel-mocks.js +46 -0
  123. package/dist/customize/sections/component/channel-row.d.ts +13 -3
  124. package/dist/customize/sections/component/channel-row.js +10 -4
  125. package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
  126. package/dist/customize/sections/component/email-connect-form.js +183 -0
  127. package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
  128. package/dist/customize/sections/component/slack-connect-card.js +2 -3
  129. package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
  130. package/dist/customize/sections/component/teams-connect-card.js +2 -3
  131. package/dist/customize/sections/component/telegram-channel-row.js +16 -25
  132. package/dist/customize/sections/connectors-view.d.ts +1 -15
  133. package/dist/customize/sections/connectors-view.js +81 -314
  134. package/dist/customize/sections/view/agent-editor-catalog.js +5 -0
  135. package/dist/customize/sections/view/channels-view.d.ts +5 -1
  136. package/dist/customize/sections/view/channels-view.js +61 -75
  137. package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
  138. package/dist/customize/settings/tabs/experimental-tab.js +35 -16
  139. package/dist/customize/shared/catalog/catalog-empty-state.d.ts +1 -12
  140. package/dist/customize/shared/catalog/catalog-empty-state.js +3 -3
  141. package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
  142. package/dist/customize/shared/channels-switch-dialog.js +30 -0
  143. package/dist/customize/shared/feature-gate-screen.js +27 -9
  144. package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
  145. package/dist/customize/shared/use-customize-prefetch.js +9 -27
  146. package/dist/customize/triggers/schedule/post-to-field.d.ts +18 -0
  147. package/dist/customize/triggers/schedule/post-to-field.js +49 -0
  148. package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
  149. package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
  150. package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
  151. package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
  152. package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
  153. package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
  154. package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
  155. package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
  156. package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
  157. package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
  158. package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
  159. package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
  160. package/dist/customize/triggers/schedule-view.js +5 -2
  161. package/dist/files/index.d.ts +1 -0
  162. package/dist/files/index.js +1 -0
  163. package/dist/files/project/change-request-recovery.d.ts +1 -26
  164. package/dist/files/project/change-request-recovery.js +1 -59
  165. package/dist/files/project/components/change-request-detail-dialog.js +13 -3
  166. package/dist/files/project/components/drive-explorer.js +15 -15
  167. package/dist/files/project/components/drive-toolbar.d.ts +16 -2
  168. package/dist/files/project/components/drive-toolbar.js +14 -5
  169. package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
  170. package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
  171. package/dist/files/project/hooks/use-change-requests.js +11 -2
  172. package/dist/files/renderers/image-frame.d.ts +46 -0
  173. package/dist/files/renderers/image-frame.js +59 -0
  174. package/dist/files/renderers/image-renderer.d.ts +11 -1
  175. package/dist/files/renderers/image-renderer.js +13 -3
  176. package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
  177. package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
  178. package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
  179. package/dist/files/renderers/show-content-renderer.d.ts +9 -1
  180. package/dist/files/renderers/show-content-renderer.js +56 -14
  181. package/dist/files/runtime/file-source.js +2 -0
  182. package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
  183. package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
  184. package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
  185. package/dist/files/runtime/hooks/use-shared-image.js +177 -0
  186. package/dist/files/viewer/file-content-renderer.d.ts +22 -1
  187. package/dist/files/viewer/file-content-renderer.js +50 -7
  188. package/dist/files/viewer/file-header.d.ts +7 -3
  189. package/dist/files/viewer/file-header.js +20 -11
  190. package/dist/files/viewer/file-preview-modal.d.ts +1 -1
  191. package/dist/files/viewer/file-preview-modal.js +10 -22
  192. package/dist/files/viewer/file-source.d.ts +13 -0
  193. package/dist/files/viewer/use-file-content-state.d.ts +2 -0
  194. package/dist/files/viewer/use-file-content-state.js +28 -10
  195. package/dist/files/viewer/viewer-actions.d.ts +3 -1
  196. package/dist/files/viewer/viewer-actions.js +2 -2
  197. package/dist/hooks/use-media-query.d.ts +1 -0
  198. package/dist/hooks/use-mobile.d.ts +5 -0
  199. package/dist/hooks/use-mobile.js +8 -0
  200. package/dist/i18n/en.d.ts +873 -85
  201. package/dist/i18n/en.js +888 -100
  202. package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
  203. package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
  204. package/dist/index.d.ts +2 -2
  205. package/dist/index.js +2 -2
  206. package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
  207. package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
  208. package/dist/internal/account-hub/hub-sheet.js +21 -5
  209. package/dist/internal/account-hub/sections.d.ts +1 -1
  210. package/dist/internal/account-hub/sections.js +2 -1
  211. package/dist/internal/auth/auth-card-shell.js +3 -3
  212. package/dist/internal/components/agent-mark.js +5 -2
  213. package/dist/internal/connector-logo/connector-logo-source.d.ts +63 -0
  214. package/dist/internal/connector-logo/connector-logo-source.js +48 -0
  215. package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
  216. package/dist/internal/connector-logo/connector-logo.js +56 -0
  217. package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
  218. package/dist/internal/connector-logo/connector-mark-files.js +35 -0
  219. package/dist/internal/files/file-read-retry.d.ts +13 -0
  220. package/dist/internal/files/file-read-retry.js +23 -3
  221. package/dist/internal/files/session-drive-files.d.ts +5 -1
  222. package/dist/internal/files/session-drive-files.js +7 -2
  223. package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
  224. package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
  225. package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
  226. package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
  227. package/dist/internal/hooks/connectors/use-add-account.js +1 -1
  228. package/dist/internal/hooks/index.d.ts +1 -1
  229. package/dist/internal/hooks/index.js +1 -1
  230. package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
  231. package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
  232. package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
  233. package/dist/internal/hooks/use-auto-scroll.js +4 -4
  234. package/dist/internal/icons/telegram.d.ts +5 -0
  235. package/dist/internal/icons/telegram.js +6 -1
  236. package/dist/internal/layout/nav-hover-card.d.ts +35 -0
  237. package/dist/internal/layout/nav-hover-card.js +84 -0
  238. package/dist/internal/layout/project-nav-row.d.ts +3 -1
  239. package/dist/internal/layout/project-nav-row.js +3 -2
  240. package/dist/internal/layout/project-page-header.d.ts +4 -2
  241. package/dist/internal/layout/project-page-header.js +4 -3
  242. package/dist/internal/layout/project-settings-nav.js +59 -2
  243. package/dist/internal/lib/browser-error-noise.d.ts +1 -1
  244. package/dist/internal/lib/browser-error-noise.js +1 -1
  245. package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
  246. package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
  247. package/dist/internal/lib/manifest-version.d.ts +1 -1
  248. package/dist/internal/lib/manifest-version.js +2 -2
  249. package/dist/internal/lib/memory-href.d.ts +16 -0
  250. package/dist/internal/lib/memory-href.js +46 -0
  251. package/dist/internal/lib/use-project-feature-flags.js +9 -9
  252. package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
  253. package/dist/internal/lib/utils/heic-convert.js +3 -4
  254. package/dist/internal/lib/web-notifications.d.ts +20 -0
  255. package/dist/internal/lib/web-notifications.js +48 -4
  256. package/dist/internal/notifications/notification-bell.d.ts +4 -1
  257. package/dist/internal/notifications/notification-bell.js +2 -2
  258. package/dist/internal/selection/selection-bar.d.ts +2 -1
  259. package/dist/internal/selection/selection-bar.js +1 -1
  260. package/dist/internal/stores/file-preview-store.d.ts +29 -2
  261. package/dist/internal/stores/file-preview-store.js +19 -1
  262. package/dist/internal/stores/kortix-computer-store.js +3 -0
  263. package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
  264. package/dist/internal/stores/sidebar-nav-store.js +3 -1
  265. package/dist/lib/routes.d.ts +13 -1
  266. package/dist/lib/routes.js +13 -0
  267. package/dist/markdown/index.d.ts +2 -1
  268. package/dist/markdown/index.js +2 -1
  269. package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
  270. package/dist/markdown/setup-links/approval-decision.js +6 -2
  271. package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
  272. package/dist/markdown/setup-links/connector-handshake.js +12 -10
  273. package/dist/markdown/setup-links/secret-intake-form.d.ts +0 -10
  274. package/dist/markdown/setup-links/secret-intake-form.js +1 -1
  275. package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
  276. package/dist/markdown/setup-links/show-connect-hero.js +91 -0
  277. package/dist/markdown/unified-markdown.js +5 -5
  278. package/dist/primitives/badge.d.ts +1 -1
  279. package/dist/primitives/badge.js +2 -0
  280. package/dist/primitives/disclosure.js +14 -2
  281. package/dist/primitives/empty-art.d.ts +12 -0
  282. package/dist/primitives/empty-art.js +11 -0
  283. package/dist/primitives/mermaid-renderer.d.ts +2 -0
  284. package/dist/primitives/mermaid-renderer.js +21 -15
  285. package/dist/primitives/resizable.js +6 -1
  286. package/dist/primitives/resize-seam.d.ts +11 -0
  287. package/dist/primitives/resize-seam.js +12 -0
  288. package/dist/primitives/sidebar-panel.js +4 -7
  289. package/dist/primitives/tabs.d.ts +14 -1
  290. package/dist/primitives/tabs.js +1 -1
  291. package/dist/providers/ui-provider.d.ts +9 -0
  292. package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
  293. package/dist/session/composer/ComposerAboveCard.js +2 -2
  294. package/dist/session/composer/ComposerCard.d.ts +1 -1
  295. package/dist/session/composer/ComposerCard.js +3 -3
  296. package/dist/session/composer/agent-selector.d.ts +13 -1
  297. package/dist/session/composer/agent-selector.js +25 -5
  298. package/dist/session/composer/composer-agent-access.d.ts +15 -0
  299. package/dist/session/composer/composer-agent-access.js +27 -0
  300. package/dist/session/composer/composer-chat-input.d.ts +8 -2
  301. package/dist/session/composer/composer-chat-input.js +8 -6
  302. package/dist/session/composer/composer-logic.d.ts +16 -0
  303. package/dist/session/composer/composer-logic.js +12 -0
  304. package/dist/session/composer/composer-underbar.d.ts +3 -1
  305. package/dist/session/composer/composer-underbar.js +4 -3
  306. package/dist/session/composer/composer.d.ts +15 -1
  307. package/dist/session/composer/composer.js +19 -1
  308. package/dist/session/composer/draft/composer-draft.d.ts +6 -2
  309. package/dist/session/composer/draft/composer-draft.js +5 -1
  310. package/dist/session/composer/reasoning-effort-selector.js +1 -1
  311. package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
  312. package/dist/session/models/chatgpt-connection-button.js +54 -0
  313. package/dist/session/models/model-selector.js +5 -2
  314. package/dist/session/models/use-model-connection-gate.d.ts +5 -5
  315. package/dist/session/models/use-model-connection-gate.js +5 -5
  316. package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
  317. package/dist/session/outcomes/jump-to-outcome.js +11 -0
  318. package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
  319. package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
  320. package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
  321. package/dist/session/outcomes/session-outcomes-provider.js +33 -3
  322. package/dist/session/panel/easy/app-preview.d.ts +10 -0
  323. package/dist/session/panel/easy/app-preview.js +31 -12
  324. package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
  325. package/dist/session/panel/easy/change-requests-card.js +17 -0
  326. package/dist/session/panel/easy/easy-panel-logic.js +7 -1
  327. package/dist/session/panel/easy/easy-panel.js +5 -2
  328. package/dist/session/panel/easy/file-preview.js +1 -1
  329. package/dist/session/panel/easy/outputs-card.d.ts +2 -1
  330. package/dist/session/panel/easy/outputs-card.js +3 -2
  331. package/dist/session/panel/mobile-tool-drawer.js +7 -1
  332. package/dist/session/panel/session-audit-panel.js +9 -2
  333. package/dist/session/panel/session-detail-panel.js +9 -3
  334. package/dist/session/panel/session-files-explorer.d.ts +9 -0
  335. package/dist/session/panel/session-files-explorer.js +12 -3
  336. package/dist/session/panel/session-panel-provider.d.ts +15 -1
  337. package/dist/session/panel/session-panel-provider.js +32 -7
  338. package/dist/session/panel/shared/derive-panels.d.ts +8 -1
  339. package/dist/session/panel/shared/derive-panels.js +12 -2
  340. package/dist/session/panel/shared/output-priority.js +2 -0
  341. package/dist/session/participants/session-participants.d.ts +5 -1
  342. package/dist/session/participants/session-participants.js +9 -2
  343. package/dist/session/prompts/approval-request.d.ts +5 -0
  344. package/dist/session/prompts/approval-request.js +7 -1
  345. package/dist/session/prompts/session-approval-review.d.ts +9 -0
  346. package/dist/session/prompts/session-approval-review.js +18 -0
  347. package/dist/session/status/session-error-banner.js +2 -49
  348. package/dist/session/status/session-starting-loader.d.ts +14 -2
  349. package/dist/session/status/session-starting-loader.js +16 -4
  350. package/dist/session/thread/after-first-prompt.d.ts +7 -0
  351. package/dist/session/thread/after-first-prompt.js +8 -0
  352. package/dist/session/thread/detect-command.d.ts +12 -0
  353. package/dist/session/thread/detect-command.js +20 -0
  354. package/dist/session/thread/session-chat.d.ts +3 -1
  355. package/dist/session/thread/session-chat.js +377 -252
  356. package/dist/session/thread/session-thread.d.ts +3 -1
  357. package/dist/session/thread/session-thread.js +9 -2
  358. package/dist/session/thread/thread-boot-rows.d.ts +36 -0
  359. package/dist/session/thread/thread-boot-rows.js +89 -0
  360. package/dist/session/thread/transcript-rows.d.ts +31 -0
  361. package/dist/session/thread/transcript-rows.js +3 -0
  362. package/dist/session/thread/transcript.d.ts +0 -9
  363. package/dist/session/thread/transcript.js +104 -19
  364. package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
  365. package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
  366. package/dist/session/tool/tool-part-renderer.d.ts +5 -4
  367. package/dist/session/tool/tool-part-renderer.js +8 -3
  368. package/dist/session/tool/tools/bash-tool.js +7 -6
  369. package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
  370. package/dist/session/tool/tools/channel-send.d.ts +2 -1
  371. package/dist/session/tool/tools/codemode-tool.js +1 -1
  372. package/dist/session/tool/tools/connector-tools.js +1 -1
  373. package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
  374. package/dist/session/tool/tools/image-gen-tool.js +240 -53
  375. package/dist/session/tool/tools/show-tool.js +19 -8
  376. package/dist/session/turn/channel-brand.d.ts +8 -3
  377. package/dist/session/turn/channel-brand.js +20 -4
  378. package/dist/session/turn/message-author.d.ts +8 -0
  379. package/dist/session/turn/message-author.js +24 -0
  380. package/dist/session/turn/message-row.d.ts +52 -0
  381. package/dist/session/turn/message-row.js +44 -0
  382. package/dist/session/turn/plan-anchor.d.ts +1 -1
  383. package/dist/session/turn/plan-anchor.js +1 -1
  384. package/dist/session/turn/user-message.d.ts +7 -1
  385. package/dist/session/turn/user-message.js +21 -7
  386. package/dist/styles.css +1 -1
  387. package/dist/workspace/home/access-requests-bell.d.ts +9 -2
  388. package/dist/workspace/home/access-requests-bell.js +20 -6
  389. package/dist/workspace/home/first-chat.d.ts +8 -21
  390. package/dist/workspace/home/first-chat.js +22 -72
  391. package/dist/workspace/index.d.ts +6 -0
  392. package/dist/workspace/index.js +6 -0
  393. package/dist/workspace/layout/project-home.d.ts +14 -2
  394. package/dist/workspace/layout/project-home.js +60 -21
  395. package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
  396. package/dist/workspace/layout/use-project-home-send.js +82 -3
  397. package/dist/workspace/memory/body-doc.d.ts +17 -0
  398. package/dist/workspace/memory/body-doc.js +208 -0
  399. package/dist/workspace/memory/body-extensions.d.ts +38 -0
  400. package/dist/workspace/memory/body-extensions.js +103 -0
  401. package/dist/workspace/memory/company-memory-page.d.ts +8 -0
  402. package/dist/workspace/memory/company-memory-page.js +16 -0
  403. package/dist/workspace/memory/memory-all.d.ts +20 -0
  404. package/dist/workspace/memory/memory-all.js +27 -0
  405. package/dist/workspace/memory/memory-body.d.ts +19 -0
  406. package/dist/workspace/memory/memory-body.js +139 -0
  407. package/dist/workspace/memory/memory-empty.d.ts +13 -0
  408. package/dist/workspace/memory/memory-empty.js +28 -0
  409. package/dist/workspace/memory/memory-history.d.ts +27 -0
  410. package/dist/workspace/memory/memory-history.js +108 -0
  411. package/dist/workspace/memory/memory-labels.d.ts +16 -0
  412. package/dist/workspace/memory/memory-labels.js +47 -0
  413. package/dist/workspace/memory/memory-page-list.d.ts +34 -0
  414. package/dist/workspace/memory/memory-page-list.js +156 -0
  415. package/dist/workspace/memory/memory-reader.d.ts +58 -0
  416. package/dist/workspace/memory/memory-reader.js +123 -0
  417. package/dist/workspace/memory/memory-view.d.ts +21 -0
  418. package/dist/workspace/memory/memory-view.js +124 -0
  419. package/dist/workspace/memory/remember-popover.d.ts +19 -0
  420. package/dist/workspace/memory/remember-popover.js +61 -0
  421. package/dist/workspace/memory/remember-this.d.ts +12 -0
  422. package/dist/workspace/memory/remember-this.js +89 -0
  423. package/dist/workspace/memory/source-mark.d.ts +18 -0
  424. package/dist/workspace/memory/source-mark.js +79 -0
  425. package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
  426. package/dist/workspace/memory/used-memory-chip.js +61 -0
  427. package/dist/workspace/new/advanced-fields.d.ts +2 -1
  428. package/dist/workspace/new/advanced-fields.js +2 -2
  429. package/dist/workspace/new/source-param.d.ts +1 -1
  430. package/dist/workspace/new/source-param.js +3 -1
  431. package/dist/workspace/new/use-create-workspace.d.ts +8 -10
  432. package/dist/workspace/new/use-create-workspace.js +3 -3
  433. package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
  434. package/dist/workspace/projects/onboarding/app-logo.js +6 -13
  435. package/dist/workspace/projects/policies-panel.js +5 -3
  436. package/dist/workspace/review/review-actions.d.ts +4 -2
  437. package/dist/workspace/review/review-actions.js +8 -2
  438. package/dist/workspace/review/review-center.js +11 -7
  439. package/dist/workspace/review/review-detail.d.ts +10 -0
  440. package/dist/workspace/review/review-detail.js +101 -13
  441. package/dist/workspace/saved-session-skeleton.d.ts +2 -2
  442. package/dist/workspace/saved-session-skeleton.js +3 -3
  443. package/dist/workspace/session-workspace.js +15 -13
  444. package/dist/workspace/sessions/project-sessions-view.js +3 -2
  445. package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
  446. package/dist/workspace/sessions/sessions-toolbar.js +2 -2
  447. package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
  448. package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
  449. package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
  450. package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
  451. package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
  452. package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
  453. package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
  454. package/dist/workspace/sidebar/nav-row-meta.js +14 -2
  455. package/dist/workspace/sidebar/project-nav-items.js +3 -0
  456. package/dist/workspace/sidebar/project-session-list.js +68 -56
  457. package/dist/workspace/sidebar/project-sidebar.js +9 -2
  458. package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
  459. package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
  460. package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
  461. package/dist/workspace/sidebar/session-group-order.js +25 -0
  462. package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
  463. package/dist/workspace/sidebar/session-group-sections.js +267 -0
  464. package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
  465. package/dist/workspace/sidebar/session-list-chrome.js +50 -0
  466. package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
  467. package/dist/workspace/spaces/channel-glyph.js +6 -0
  468. package/dist/workspace/spaces/channel-setup.d.ts +16 -0
  469. package/dist/workspace/spaces/channel-setup.js +105 -0
  470. package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
  471. package/dist/workspace/spaces/channels-onboarding.js +37 -0
  472. package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
  473. package/dist/workspace/spaces/create-channel-dialog.js +158 -0
  474. package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
  475. package/dist/workspace/spaces/private-channels-not-in.js +69 -0
  476. package/dist/workspace/spaces/space-agents.d.ts +10 -0
  477. package/dist/workspace/spaces/space-agents.js +10 -0
  478. package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
  479. package/dist/workspace/spaces/space-details-dialog.js +176 -0
  480. package/dist/workspace/spaces/space-link-label.d.ts +49 -0
  481. package/dist/workspace/spaces/space-link-label.js +73 -0
  482. package/dist/workspace/spaces/space-links.d.ts +19 -0
  483. package/dist/workspace/spaces/space-links.js +230 -0
  484. package/dist/workspace/spaces/space-members.d.ts +46 -0
  485. package/dist/workspace/spaces/space-members.js +182 -0
  486. package/dist/workspace/spaces/space-roster.d.ts +15 -0
  487. package/dist/workspace/spaces/space-roster.js +44 -0
  488. package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
  489. package/dist/workspace/spaces/space-threads-tab.js +156 -0
  490. package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
  491. package/dist/workspace/spaces/space-timeline-view.js +235 -0
  492. package/dist/workspace/spaces/space-timeline.d.ts +106 -0
  493. package/dist/workspace/spaces/space-timeline.js +183 -0
  494. package/dist/workspace/spaces/space-triggers.d.ts +13 -0
  495. package/dist/workspace/spaces/space-triggers.js +78 -0
  496. package/dist/workspace/spaces/space-view.d.ts +37 -0
  497. package/dist/workspace/spaces/space-view.js +436 -0
  498. package/package.json +27 -36
  499. package/skills/kortix-ui/SKILL.md +3 -3
  500. package/skills/kortix-ui/references/custom-dashboard.md +3 -3
  501. package/skills/kortix-ui/references/modules.md +28 -4
  502. package/skills/kortix-ui/references/theming.md +1 -1
  503. package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
  504. package/dist/customize/connectors/catalog/merge-search.js +0 -26
  505. package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
  506. package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
  507. package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
  508. package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
  509. package/dist/customize/sections/connector-connection-header.d.ts +0 -36
  510. package/dist/customize/sections/connector-connection-header.js +0 -33
  511. package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
  512. package/dist/customize/sections/connector-connection-modal.js +0 -72
  513. package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
  514. package/dist/customize/sections/discover-catalogue-card.js +0 -26
  515. package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
  516. package/dist/customize/sections/discover-catalogue-detail.js +0 -24
  517. package/dist/customize/sections/discover-catalogue.d.ts +0 -17
  518. package/dist/customize/sections/discover-catalogue.js +0 -132
  519. package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
  520. package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
  521. package/dist/files/project/components/drive-empty-art.d.ts +0 -2
  522. package/dist/files/project/components/drive-empty-art.js +0 -5
  523. package/dist/internal/hooks/use-media-query.d.ts +0 -2
  524. package/dist/internal/share/public-share-link-button.d.ts +0 -14
  525. package/dist/internal/share/public-share-link-button.js +0 -17
  526. package/dist/markdown/setup-links/app-credentials-form.d.ts +0 -12
  527. package/dist/markdown/setup-links/app-credentials-form.js +0 -115
  528. /package/dist/{internal/hooks → hooks}/use-media-query.js +0 -0
@@ -0,0 +1,156 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ChatsCircleIcon, FunnelSimpleIcon, MagnifyingGlassIcon, XIcon } from '@phosphor-icons/react';
4
+ import { useEffect, useMemo, useState } from 'react';
5
+ import { useTranslations } from '../../i18n/index.js';
6
+ import { Close } from '../../icons/close.js';
7
+ import { AgentMark } from '../../internal/components/agent-mark.js';
8
+ import { useSessionNeedsYouCounts } from '../../internal/hooks/use-review-session-summary.js';
9
+ import { useDebounce } from '../../internal/hooks/use-debounced-value.js';
10
+ import { Button } from '../../primitives/button.js';
11
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, } from '../../primitives/dropdown-menu.js';
12
+ import { EmptyArt } from '../../primitives/empty-art.js';
13
+ import { EmptyState } from '../../primitives/empty-state.js';
14
+ import { InputGroupSearch, InputGroupSearchIcon, InputGroupSearchInput, } from '../../primitives/input-group.js';
15
+ import { UserAvatar } from '../../primitives/user-avatar.js';
16
+ import { useUiViewerId } from '../../providers/ui-provider.js';
17
+ import { participantLabel } from '../../session/participants/session-participants.js';
18
+ import { SessionStatusMark } from '../sidebar/session-status-mark.js';
19
+ import { agentLabel, spaceRoster, THREAD_ACTIVITIES, THREAD_STATUSES, threadActivitySince, threadFiltersFromParams, threadStatus, } from './space-timeline.js';
20
+ import { SpaceThreadList, useSpaceThreads } from './space-timeline-view.js';
21
+ /** Milliseconds between the last keystroke and the server search. */
22
+ const SEARCH_DEBOUNCE_MS = 250;
23
+ /** Shorter queries do not search: one letter matches nearly every thread. */
24
+ const SEARCH_MIN_CHARS = 2;
25
+ /** The URL keys of the search and the filters. */
26
+ const FILTER_PARAMS = ['q', 'status', 'by', 'agent', 'active'];
27
+ /** The radio value of a facet's "Any" row (Radix needs a non-empty value). */
28
+ const ANY = 'any';
29
+ /** The session list's mark for each Status value, so a row and its filter look the same. */
30
+ const STATUS_MARK = {
31
+ working: 'running',
32
+ 'needs-you': 'needs-you',
33
+ failed: 'failed',
34
+ done: 'done',
35
+ };
36
+ const STATUS_KEY = { working: 'working', 'needs-you': 'needsYou', failed: 'failed', done: 'done' };
37
+ /**
38
+ * The Threads tab of a channel or DM: a search over titles and first prompts,
39
+ * one Filter menu (Status, Started by, Agent, Activity), the active filters
40
+ * as removable tokens, and the rows. Search, person, agent and activity run
41
+ * on the server; Status reads the loaded rows, as on the Sessions page. The
42
+ * URL holds every value (`?q=&status=&by=&agent=&active=`).
43
+ */
44
+ export function SpaceThreadsTab({ projectId, space, threads, selectedId, onOpenThread, params, setParams, }) {
45
+ const t = useTranslations('spaces.view');
46
+ const tf = useTranslations('spaces.view.threadFilter');
47
+ const viewerId = useUiViewerId();
48
+ const filters = threadFiltersFromParams(params, space.kind);
49
+ const setParam = (key, value) => setParams((next) => (value ? next.set(key, value) : next.delete(key)));
50
+ const updatedAfter = useMemo(() => (filters.active ? threadActivitySince(filters.active, new Date()) : undefined), [filters.active]);
51
+ const filtered = useProjectThreads(projectId, space, filters, updatedAfter);
52
+ const needsYou = useSessionNeedsYouCounts(projectId);
53
+ const rows = useMemo(() => filters.status
54
+ ? filtered.sessions.filter((session) => threadStatus(session, needsYou[session.session_id]) === filters.status)
55
+ : filtered.sessions, [filtered.sessions, filters.status, needsYou]);
56
+ const roster = useMemo(() => spaceRoster(threads.sessions, space.dm_agent_name), [threads.sessions, space.dm_agent_name]);
57
+ const people = roster.people.filter((person) => person.id !== viewerId);
58
+ const personName = (id) => {
59
+ const person = roster.people.find((candidate) => candidate.id === id);
60
+ const row = filtered.sessions.find((session) => session.created_by === id);
61
+ return (participantLabel({ name: person?.name ?? row?.owner_name ?? null, email: person?.email ?? row?.owner_email ?? null }) ||
62
+ t('authorFallback'));
63
+ };
64
+ const statusLabel = (status) => tf(`statusValue.${STATUS_KEY[status]}`);
65
+ const activityLabel = (active) => tf(`activityValue.${active}`);
66
+ const byLabel = (by) => (by === 'me' || by === viewerId ? tf('me') : personName(by));
67
+ const tokens = [];
68
+ if (filters.status) {
69
+ tokens.push({
70
+ key: 'status',
71
+ facet: tf('status'),
72
+ label: statusLabel(filters.status),
73
+ icon: _jsx(SessionStatusMark, { status: STATUS_MARK[filters.status] }),
74
+ });
75
+ }
76
+ if (filters.by)
77
+ tokens.push({ key: 'by', facet: tf('startedBy'), label: byLabel(filters.by) });
78
+ if (filters.agent) {
79
+ tokens.push({
80
+ key: 'agent',
81
+ facet: tf('agent'),
82
+ label: agentLabel(filters.agent),
83
+ icon: _jsx(AgentMark, { slug: filters.agent, size: 14 }),
84
+ });
85
+ }
86
+ if (filters.active)
87
+ tokens.push({ key: 'active', facet: tf('activity'), label: activityLabel(filters.active) });
88
+ const filtering = tokens.length > 0 || filters.q.length >= SEARCH_MIN_CHARS;
89
+ const clearAll = () => setParams((next) => FILTER_PARAMS.forEach((key) => next.delete(key)));
90
+ return (_jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex shrink-0 flex-wrap items-center gap-2 px-5 pt-3 pb-1", children: [_jsx(FilterSearch, { value: filters.q, placeholder: tf('search'), minChars: SEARCH_MIN_CHARS, onSearch: (q) => setParam('q', q || null) }), _jsx(ThreadFilterMenu, { kind: space.kind, filters: filters, people: people, agents: roster.agents, statusLabel: statusLabel, activityLabel: activityLabel, byLabel: byLabel, onChange: setParam }), _jsx(FilterTokens, { tokens: tokens, onRemove: (key) => setParam(key, null), onClear: clearAll })] }), _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: _jsx(SpaceThreadList, { projectId: projectId, threads: filtered, sessions: rows, selectedId: selectedId, onOpenThread: onOpenThread, empty: filtering ? (_jsx(EmptyState, { className: "min-h-full", media: _jsx(EmptyArt, { icon: MagnifyingGlassIcon }), title: tf('noMatch'), description: tf('noMatchHint'), action: _jsxs(Button, { variant: "outline", size: "sm", className: "gap-1.5", onClick: clearAll, children: [_jsx(XIcon, { className: "size-3.5 shrink-0" }), tf('clearFilters')] }) })) : (_jsx(EmptyState, { className: "min-h-full", media: _jsx(EmptyArt, { icon: ChatsCircleIcon }), title: t('threadsEmptyTitle'), description: t('threadsEmpty') })) }) })] }));
91
+ }
92
+ /** The space's threads under the server-side filters. No filter: the Chat tab's cache entry. */
93
+ function useProjectThreads(projectId, space, filters, updatedAfter) {
94
+ const by = filters.by;
95
+ return useSpaceThreads(projectId, space.space_id, {
96
+ q: filters.q.length >= SEARCH_MIN_CHARS ? filters.q : undefined,
97
+ startedBy: by === 'me' ? 'me' : undefined,
98
+ createdBy: by && by !== 'me' ? by : undefined,
99
+ agent: filters.agent ?? undefined,
100
+ updatedAfter,
101
+ keepPreviousData: true,
102
+ });
103
+ }
104
+ /** One quiet menu: a submenu per facet, each a single choice with "Any" first. A DM has no person or agent facet. */
105
+ function ThreadFilterMenu({ kind, filters, people, agents, statusLabel, activityLabel, byLabel, onChange, }) {
106
+ const tf = useTranslations('spaces.view.threadFilter');
107
+ const pick = (key) => (value) => onChange(key, value === ANY ? null : value);
108
+ return (_jsxs(FilterMenu, { children: [_jsx(Facet, { label: tf('status'), value: filters.status ? statusLabel(filters.status) : tf('any'), children: _jsxs(DropdownMenuRadioGroup, { value: filters.status ?? ANY, onValueChange: pick('status'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('any') }), THREAD_STATUSES.map((status) => (_jsxs(DropdownMenuRadioItem, { value: status, children: [_jsx(SessionStatusMark, { status: STATUS_MARK[status] }), statusLabel(status)] }, status)))] }) }), kind === 'channel' ? (_jsx(Facet, { label: tf('startedBy'), value: filters.by ? byLabel(filters.by) : tf('anyone'), wide: true, children: _jsxs(DropdownMenuRadioGroup, { value: filters.by ?? ANY, onValueChange: pick('by'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('anyone') }), _jsx(DropdownMenuRadioItem, { value: "me", children: tf('me') }), people.length > 0 ? _jsx(DropdownMenuSeparator, {}) : null, people.map((person) => {
109
+ const name = participantLabel(person);
110
+ return (_jsxs(DropdownMenuRadioItem, { value: person.id, children: [_jsx(UserAvatar, { size: "xs", name: name, email: person.email ?? '', avatarUrl: person.avatarUrl }), _jsx("span", { className: "min-w-0 truncate", children: name })] }, person.id));
111
+ })] }) })) : null, kind === 'channel' && (agents.length > 0 || filters.agent) ? (_jsx(Facet, { label: tf('agent'), value: filters.agent ? agentLabel(filters.agent) : tf('anyAgent'), wide: true, children: _jsxs(DropdownMenuRadioGroup, { value: filters.agent ?? ANY, onValueChange: pick('agent'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('anyAgent') }), agents.map((agent) => (_jsxs(DropdownMenuRadioItem, { value: agent, children: [_jsx(AgentMark, { slug: agent, size: 14 }), _jsx("span", { className: "min-w-0 truncate", children: agentLabel(agent) })] }, agent)))] }) })) : null, _jsx(Facet, { label: tf('activity'), value: filters.active ? activityLabel(filters.active) : tf('anyTime'), children: _jsxs(DropdownMenuRadioGroup, { value: filters.active ?? ANY, onValueChange: pick('active'), children: [_jsx(DropdownMenuRadioItem, { value: ANY, children: tf('anyTime') }), THREAD_ACTIVITIES.map((active) => (_jsx(DropdownMenuRadioItem, { value: active, children: activityLabel(active) }, active)))] }) })] }));
112
+ }
113
+ /**
114
+ * The search field of a channel tab's toolbar (Threads, Links). The text is
115
+ * local while typing; `onSearch` gets the settled query ('' below `minChars`),
116
+ * and Esc clears it. A new `value` (Clear, the back button) replaces the text.
117
+ */
118
+ export function FilterSearch({ value, placeholder, minChars = 1, onSearch, }) {
119
+ const [text, setText] = useState(value);
120
+ const [seen, setSeen] = useState(value);
121
+ if (value !== seen) {
122
+ setSeen(value);
123
+ setText(value);
124
+ }
125
+ const debounced = useDebounce(text.trim(), SEARCH_DEBOUNCE_MS);
126
+ useEffect(() => {
127
+ const q = debounced.length >= minChars ? debounced : '';
128
+ if (q !== value)
129
+ onSearch(q);
130
+ // Only a settled keystroke searches; a new `value` resets `text` above.
131
+ // eslint-disable-next-line react-hooks/exhaustive-deps
132
+ }, [debounced]);
133
+ return (_jsxs(InputGroupSearch, { className: "max-w-64 min-w-40 flex-1", children: [_jsx(InputGroupSearchIcon, { children: _jsx(MagnifyingGlassIcon, {}) }), _jsx(InputGroupSearchInput, { size: "xs", type: "search", placeholder: placeholder, "aria-label": placeholder, value: text, onChange: (event) => setText(event.target.value), onKeyDown: (event) => {
134
+ if (event.key !== 'Escape' || !text)
135
+ return;
136
+ event.stopPropagation();
137
+ setText('');
138
+ onSearch('');
139
+ } })] }));
140
+ }
141
+ /** The quiet "Filter" button and its menu; the children are `Facet` rows. */
142
+ export function FilterMenu({ children }) {
143
+ const tf = useTranslations('spaces.view.threadFilter');
144
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "sm", className: "text-muted-foreground hover:text-foreground", children: [_jsx(FunnelSimpleIcon, { className: "size-4 shrink-0" }), tf('filter')] }) }), _jsx(DropdownMenuContent, { align: "start", className: "w-56 p-1", children: children })] }));
145
+ }
146
+ /** The active filters as removable tokens, then Clear. */
147
+ export function FilterTokens({ tokens, onRemove, onClear, }) {
148
+ const tf = useTranslations('spaces.view.threadFilter');
149
+ if (tokens.length === 0)
150
+ return null;
151
+ return (_jsxs(_Fragment, { children: [tokens.map((token) => (_jsxs(Button, { variant: "secondary", size: "xs", "aria-label": tf('remove', { facet: token.facet, value: token.label }), onClick: () => onRemove(token.key), className: "max-w-48 gap-1.5", children: [token.icon, _jsx("span", { className: "min-w-0 truncate", children: token.label }), _jsx(Close, { className: "text-muted-foreground size-3.5 shrink-0" })] }, token.key))), _jsx(Button, { variant: "ghost", size: "xs", onClick: onClear, className: "text-muted-foreground", children: tf('clear') })] }));
152
+ }
153
+ /** A facet row: its name, its current value muted on the right, its choices in a submenu. */
154
+ export function Facet({ label, value, wide, children }) {
155
+ return (_jsxs(DropdownMenuSub, { children: [_jsxs(DropdownMenuSubTrigger, { children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: label }), _jsx("span", { className: "text-muted-foreground max-w-24 truncate text-xs", children: value })] }), _jsx(DropdownMenuSubContent, { className: wide ? 'max-h-80 w-56 overflow-y-auto p-1' : 'w-48 p-1', children: children })] }));
156
+ }
@@ -0,0 +1,254 @@
1
+ import type { ProjectSession, ProjectSpace } from '@kortix/sdk';
2
+ import { type UseProjectSessionsOptions } from '@kortix/sdk/react';
3
+ import { type ReactNode } from 'react';
4
+ /**
5
+ * The space's threads: top-level sessions only (`parent: 'root'`, a child
6
+ * thread is part of its parent). Polls page one every 5 s while an agent works
7
+ * so the "is working" line settles, else every 15 s so a member's new thread
8
+ * shows up. Active threads sort first, so page one holds them; older pages the
9
+ * viewer loaded are not re-read on each tick. `filters` narrow it on the
10
+ * server (the Threads tab); without them it is the Chat tab's list, one cache
11
+ * entry for both tabs.
12
+ */
13
+ export declare function useSpaceThreads(projectId: string, spaceId: string | undefined, filters?: Pick<UseProjectSessionsOptions, 'q' | 'startedBy' | 'createdBy' | 'agent' | 'updatedAfter' | 'keepPreviousData'>): {
14
+ isScanning: boolean;
15
+ sessions: ProjectSession[];
16
+ data: import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>;
17
+ error: Error;
18
+ isError: true;
19
+ isPending: false;
20
+ isLoading: false;
21
+ isLoadingError: false;
22
+ isRefetchError: true;
23
+ isSuccess: false;
24
+ isPlaceholderData: false;
25
+ status: "error";
26
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
27
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
28
+ hasNextPage: boolean;
29
+ hasPreviousPage: boolean;
30
+ isFetchNextPageError: boolean;
31
+ isFetchingNextPage: boolean;
32
+ isFetchPreviousPageError: boolean;
33
+ isFetchingPreviousPage: boolean;
34
+ dataUpdatedAt: number;
35
+ errorUpdatedAt: number;
36
+ failureCount: number;
37
+ failureReason: Error | null;
38
+ errorUpdateCount: number;
39
+ isFetched: boolean;
40
+ isFetchedAfterMount: boolean;
41
+ isFetching: boolean;
42
+ isInitialLoading: boolean;
43
+ isPaused: boolean;
44
+ isRefetching: boolean;
45
+ isStale: boolean;
46
+ isEnabled: boolean;
47
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
48
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
49
+ } | {
50
+ isScanning: boolean;
51
+ sessions: ProjectSession[];
52
+ data: import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>;
53
+ error: null;
54
+ isError: false;
55
+ isPending: false;
56
+ isLoading: false;
57
+ isLoadingError: false;
58
+ isRefetchError: false;
59
+ isFetchNextPageError: false;
60
+ isFetchPreviousPageError: false;
61
+ isSuccess: true;
62
+ isPlaceholderData: false;
63
+ status: "success";
64
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
65
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
66
+ hasNextPage: boolean;
67
+ hasPreviousPage: boolean;
68
+ isFetchingNextPage: boolean;
69
+ isFetchingPreviousPage: boolean;
70
+ dataUpdatedAt: number;
71
+ errorUpdatedAt: number;
72
+ failureCount: number;
73
+ failureReason: Error | null;
74
+ errorUpdateCount: number;
75
+ isFetched: boolean;
76
+ isFetchedAfterMount: boolean;
77
+ isFetching: boolean;
78
+ isInitialLoading: boolean;
79
+ isPaused: boolean;
80
+ isRefetching: boolean;
81
+ isStale: boolean;
82
+ isEnabled: boolean;
83
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
84
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
85
+ } | {
86
+ isScanning: boolean;
87
+ sessions: ProjectSession[];
88
+ data: undefined;
89
+ error: Error;
90
+ isError: true;
91
+ isPending: false;
92
+ isLoading: false;
93
+ isLoadingError: true;
94
+ isRefetchError: false;
95
+ isFetchNextPageError: false;
96
+ isFetchPreviousPageError: false;
97
+ isSuccess: false;
98
+ isPlaceholderData: false;
99
+ status: "error";
100
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
101
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
102
+ hasNextPage: boolean;
103
+ hasPreviousPage: boolean;
104
+ isFetchingNextPage: boolean;
105
+ isFetchingPreviousPage: boolean;
106
+ dataUpdatedAt: number;
107
+ errorUpdatedAt: number;
108
+ failureCount: number;
109
+ failureReason: Error | null;
110
+ errorUpdateCount: number;
111
+ isFetched: boolean;
112
+ isFetchedAfterMount: boolean;
113
+ isFetching: boolean;
114
+ isInitialLoading: boolean;
115
+ isPaused: boolean;
116
+ isRefetching: boolean;
117
+ isStale: boolean;
118
+ isEnabled: boolean;
119
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
120
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
121
+ } | {
122
+ isScanning: boolean;
123
+ sessions: ProjectSession[];
124
+ data: undefined;
125
+ error: null;
126
+ isError: false;
127
+ isPending: true;
128
+ isLoading: true;
129
+ isLoadingError: false;
130
+ isRefetchError: false;
131
+ isFetchNextPageError: false;
132
+ isFetchPreviousPageError: false;
133
+ isSuccess: false;
134
+ isPlaceholderData: false;
135
+ status: "pending";
136
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
137
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
138
+ hasNextPage: boolean;
139
+ hasPreviousPage: boolean;
140
+ isFetchingNextPage: boolean;
141
+ isFetchingPreviousPage: boolean;
142
+ dataUpdatedAt: number;
143
+ errorUpdatedAt: number;
144
+ failureCount: number;
145
+ failureReason: Error | null;
146
+ errorUpdateCount: number;
147
+ isFetched: boolean;
148
+ isFetchedAfterMount: boolean;
149
+ isFetching: boolean;
150
+ isInitialLoading: boolean;
151
+ isPaused: boolean;
152
+ isRefetching: boolean;
153
+ isStale: boolean;
154
+ isEnabled: boolean;
155
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
156
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
157
+ } | {
158
+ isScanning: boolean;
159
+ sessions: ProjectSession[];
160
+ data: undefined;
161
+ error: null;
162
+ isError: false;
163
+ isPending: true;
164
+ isLoadingError: false;
165
+ isRefetchError: false;
166
+ isFetchNextPageError: false;
167
+ isFetchPreviousPageError: false;
168
+ isSuccess: false;
169
+ isPlaceholderData: false;
170
+ status: "pending";
171
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
172
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
173
+ hasNextPage: boolean;
174
+ hasPreviousPage: boolean;
175
+ isFetchingNextPage: boolean;
176
+ isFetchingPreviousPage: boolean;
177
+ dataUpdatedAt: number;
178
+ errorUpdatedAt: number;
179
+ failureCount: number;
180
+ failureReason: Error | null;
181
+ errorUpdateCount: number;
182
+ isFetched: boolean;
183
+ isFetchedAfterMount: boolean;
184
+ isFetching: boolean;
185
+ isLoading: boolean;
186
+ isInitialLoading: boolean;
187
+ isPaused: boolean;
188
+ isRefetching: boolean;
189
+ isStale: boolean;
190
+ isEnabled: boolean;
191
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
192
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
193
+ } | {
194
+ isScanning: boolean;
195
+ sessions: ProjectSession[];
196
+ data: import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>;
197
+ isError: false;
198
+ error: null;
199
+ isPending: false;
200
+ isLoading: false;
201
+ isLoadingError: false;
202
+ isRefetchError: false;
203
+ isSuccess: true;
204
+ isPlaceholderData: true;
205
+ isFetchNextPageError: false;
206
+ isFetchPreviousPageError: false;
207
+ status: "success";
208
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
209
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
210
+ hasNextPage: boolean;
211
+ hasPreviousPage: boolean;
212
+ isFetchingNextPage: boolean;
213
+ isFetchingPreviousPage: boolean;
214
+ dataUpdatedAt: number;
215
+ errorUpdatedAt: number;
216
+ failureCount: number;
217
+ failureReason: Error | null;
218
+ errorUpdateCount: number;
219
+ isFetched: boolean;
220
+ isFetchedAfterMount: boolean;
221
+ isFetching: boolean;
222
+ isInitialLoading: boolean;
223
+ isPaused: boolean;
224
+ isRefetching: boolean;
225
+ isStale: boolean;
226
+ isEnabled: boolean;
227
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<import("@kortix/sdk").ProjectSessionPage, unknown>, Error>>;
228
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
229
+ };
230
+ export type SpaceThreads = ReturnType<typeof useSpaceThreads>;
231
+ /**
232
+ * The Chat tab: the welcome block, then one row per thread, oldest at the top,
233
+ * grouped under day dividers. The column is reversed, so it opens scrolled to
234
+ * the newest thread and stays there as threads arrive.
235
+ */
236
+ export declare function SpaceTimeline({ projectId, space, threads, selectedId, onOpenThread, }: {
237
+ projectId: string;
238
+ space: ProjectSpace;
239
+ threads: SpaceThreads;
240
+ selectedId: string | null;
241
+ onOpenThread: (sessionId: string) => void;
242
+ }): import("react").JSX.Element;
243
+ /**
244
+ * The Threads tab's rows, last activity first. `sessions` are the rows to
245
+ * show (the tab filters `threads`); `empty` is drawn when there are none.
246
+ */
247
+ export declare function SpaceThreadList({ projectId, threads, sessions, empty, selectedId, onOpenThread, }: {
248
+ projectId: string;
249
+ threads: SpaceThreads;
250
+ sessions: readonly ProjectSession[];
251
+ empty: ReactNode;
252
+ selectedId: string | null;
253
+ onOpenThread: (sessionId: string) => void;
254
+ }): import("react").JSX.Element | null;