@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
@@ -1,8 +1,10 @@
1
1
  'use client';
2
- import { startSessionWithPrompt, writeStartStash } from '@kortix/sdk/react';
2
+ import { qk, removeCachedProjectSession, startSessionWithPrompt, upsertCachedProjectSession, writeStartStash, } from '@kortix/sdk/react';
3
+ import { useQueryClient } from '@tanstack/react-query';
3
4
  import { useCallback, useState } from 'react';
4
5
  import { useTranslations } from '../../i18n/index.js';
5
6
  import { useNewProjectSession } from '../../internal/hooks/projects/use-new-project-session.js';
7
+ import { useUiViewer } from '../../providers/ui-provider.js';
6
8
  import { errorToast } from '../../primitives/toast.js';
7
9
  import { postWhenUploaded, sentFailureMessage, } from '../../session/composer/attachment-submission.js';
8
10
  import { useFirstPromptPreviewStore } from '../../session/composer/stores/session-composer-handoff-store.js';
@@ -14,10 +16,12 @@ import { buildNewSessionCreateInput } from './new-session-create.js';
14
16
  * message on its first frame. `ProjectHome` uses it when the host passes no
15
17
  * `onSend`.
16
18
  */
17
- export function useProjectHomeSend(projectId, { beforeSend } = {}) {
19
+ export function useProjectHomeSend(projectId, { beforeSend, space } = {}) {
18
20
  const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
19
21
  const tComposerAttachments = useTranslations('hardcodedUi.composerAttachments');
20
22
  const newSession = useNewProjectSession(projectId);
23
+ const queryClient = useQueryClient();
24
+ const viewer = useUiViewer();
21
25
  // Composer sending state: spans Enter → create confirmed → navigation. Reset
22
26
  // only on create failure (success navigates this page away).
23
27
  const [sending, setSending] = useState(false);
@@ -77,10 +81,28 @@ export function useProjectHomeSend(projectId, { beforeSend } = {}) {
77
81
  // creates it with these same options. By then the Promise below has
78
82
  // rejected, so nothing after the `await` runs.
79
83
  let refused = false;
84
+ let optimisticId = null;
80
85
  const sessionId = await new Promise((resolve, reject) => {
81
86
  newSession({
87
+ // A space draws the new thread the instant Enter is pressed; the
88
+ // create's server row replaces it in place (same id).
89
+ onCreating: space
90
+ ? (id) => {
91
+ optimisticId = id;
92
+ seedOptimisticThread(queryClient, {
93
+ projectId,
94
+ spaceId: space.spaceId,
95
+ sessionId: id,
96
+ text,
97
+ agent: options?.agent ?? null,
98
+ viewer,
99
+ sentAtMs,
100
+ });
101
+ }
102
+ : undefined,
82
103
  create: {
83
104
  ...buildNewSessionCreateInput(options),
105
+ ...(space ? { space_id: space.spaceId } : {}),
84
106
  ...(heldAttachments
85
107
  ? {}
86
108
  : {
@@ -100,6 +122,8 @@ export function useProjectHomeSend(projectId, { beforeSend } = {}) {
100
122
  // composer restores its submitted draft and keeps every handle.
101
123
  onError: () => {
102
124
  refused = true;
125
+ if (optimisticId)
126
+ removeCachedProjectSession(queryClient, projectId, optimisticId);
103
127
  setSending(false);
104
128
  reject(new Error('Session creation failed'));
105
129
  },
@@ -122,15 +146,70 @@ export function useProjectHomeSend(projectId, { beforeSend } = {}) {
122
146
  heldAttachments.resubmit();
123
147
  startHeldPost(heldAttachments, sessionId);
124
148
  }
149
+ // A space opens the thread beside its timeline (a gate Retry too).
150
+ space?.onOpen(sessionId);
125
151
  resolve(sessionId);
126
152
  },
127
153
  });
128
154
  });
155
+ // A space composer stays on screen: it is ready for the next message.
156
+ if (space)
157
+ setSending(false);
129
158
  if (!heldAttachments) {
130
159
  attachments?.release();
131
160
  return;
132
161
  }
133
162
  startHeldPost(heldAttachments, sessionId);
134
- }, [beforeSend, newSession, projectId, tI18nComplete, tComposerAttachments]);
163
+ }, [beforeSend, space, newSession, projectId, tI18nComplete, tComposerAttachments, queryClient, viewer]);
135
164
  return { send, sending };
136
165
  }
166
+ /**
167
+ * The new thread's row in its space's cached list, before the create POST: the
168
+ * viewer as its author (avatar and name, never only an email), the prompt as
169
+ * its message, and `provisioning`, so the "is working" line shows at once. An
170
+ * in-flight read of that list is cancelled first: it was sent before this row
171
+ * existed and would drop it when it lands.
172
+ */
173
+ function seedOptimisticThread(queryClient, { projectId, spaceId, sessionId, text, agent, viewer, sentAtMs, }) {
174
+ const prefix = qk.project.sessionsScope(projectId);
175
+ void queryClient.cancelQueries({
176
+ queryKey: prefix,
177
+ predicate: (query) => query.queryKey[prefix.length] === 'list-paged' &&
178
+ query.queryKey[prefix.length + 2]?.spaceId === spaceId,
179
+ });
180
+ const name = viewer?.metadata?.full_name ?? viewer?.metadata?.name;
181
+ const avatar = viewer?.metadata?.avatar_url;
182
+ const at = new Date(sentAtMs).toISOString();
183
+ const row = {
184
+ session_id: sessionId,
185
+ account_id: '',
186
+ project_id: projectId,
187
+ space_id: spaceId,
188
+ branch_name: '',
189
+ base_ref: '',
190
+ sandbox_provider: null,
191
+ sandbox_id: null,
192
+ sandbox_url: null,
193
+ opencode_session_id: null,
194
+ opencode_sessions: [],
195
+ name: null,
196
+ custom_name: null,
197
+ agent_name: agent,
198
+ status: 'provisioning',
199
+ error: null,
200
+ metadata: {},
201
+ first_prompt: text,
202
+ reply_count: 0,
203
+ parent_session_id: null,
204
+ created_by: viewer?.id ?? null,
205
+ owner_email: viewer?.email ?? null,
206
+ owner_name: typeof name === 'string' ? name : null,
207
+ owner_avatar_url: typeof avatar === 'string' ? avatar : null,
208
+ owner_type: 'user',
209
+ initiator: { type: 'member', id: viewer?.id ?? null, label: null },
210
+ is_owner: true,
211
+ created_at: at,
212
+ updated_at: at,
213
+ };
214
+ upsertCachedProjectSession(queryClient, projectId, row);
215
+ }
@@ -0,0 +1,17 @@
1
+ import type { JSONContent } from '@tiptap/core';
2
+ export declare function markdownToDoc(markdown: string): JSONContent;
3
+ /** The document as canonical Markdown; empty paragraphs drop out. */
4
+ export declare function docToMarkdown(doc: JSONContent): string;
5
+ /** 12 → "¹²": the font's own superscript figures, sized and set by the font. */
6
+ export declare function superscript(n: number): string;
7
+ /**
8
+ * A link in a memory file, as the reader opens it: an http(s) URL in a new
9
+ * tab, a relative path (`profile.md`, `people/priya.md`, `../Notes.md`) as the
10
+ * memory file it names, resolved against the open file's Drive path. Null
11
+ * for anything else (an anchor, `mailto:`): the browser handles it.
12
+ */
13
+ export declare function memoryLinkTarget(href: string, fromPath: string): {
14
+ url: string;
15
+ } | {
16
+ path: string;
17
+ } | null;
@@ -0,0 +1,208 @@
1
+ import remarkGfm from 'remark-gfm';
2
+ import remarkParse from 'remark-parse';
3
+ import { unified } from 'unified';
4
+ const TOKEN = /⟦(\d+)⟧/g;
5
+ /** A text run: ⟦n⟧ becomes a source node, a newline a soft break. */
6
+ function textNodes(value, marks) {
7
+ const out = [];
8
+ const push = (text) => {
9
+ text.split('\n').forEach((line, i) => {
10
+ if (i > 0)
11
+ out.push({ type: 'memorySoftBreak' });
12
+ if (line)
13
+ out.push(marks.length ? { type: 'text', text: line, marks } : { type: 'text', text: line });
14
+ });
15
+ };
16
+ let at = 0;
17
+ for (const match of value.matchAll(TOKEN)) {
18
+ push(value.slice(at, match.index));
19
+ out.push({ type: 'memorySource', attrs: { number: Number(match[1]) } });
20
+ at = match.index + match[0].length;
21
+ }
22
+ push(value.slice(at));
23
+ return out;
24
+ }
25
+ function raw(node, source) {
26
+ const { start, end } = node.position ?? { start: {}, end: {} };
27
+ return start.offset !== undefined && end.offset !== undefined ? source.slice(start.offset, end.offset) : (node.value ?? '');
28
+ }
29
+ function inlines(nodes, source, marks = []) {
30
+ return (nodes ?? []).flatMap((node) => {
31
+ switch (node.type) {
32
+ case 'text':
33
+ return textNodes(node.value ?? '', marks);
34
+ case 'inlineCode':
35
+ return [{ type: 'text', text: node.value ?? '', marks: [...marks, { type: 'code' }] }];
36
+ case 'strong':
37
+ return inlines(node.children, source, [...marks, { type: 'bold' }]);
38
+ case 'emphasis':
39
+ return inlines(node.children, source, [...marks, { type: 'italic' }]);
40
+ case 'delete':
41
+ return inlines(node.children, source, [...marks, { type: 'strike' }]);
42
+ case 'link':
43
+ return inlines(node.children, source, [...marks, { type: 'link', attrs: { href: node.url ?? '' } }]);
44
+ case 'break':
45
+ return [{ type: 'hardBreak' }];
46
+ default:
47
+ return textNodes(raw(node, source), marks);
48
+ }
49
+ });
50
+ }
51
+ const withContent = (node, content) => content.length ? { ...node, content } : node;
52
+ function blocks(nodes, source) {
53
+ return (nodes ?? []).map((node) => {
54
+ switch (node.type) {
55
+ case 'paragraph':
56
+ return withContent({ type: 'paragraph' }, inlines(node.children, source));
57
+ case 'heading':
58
+ return withContent({ type: 'heading', attrs: { level: node.depth ?? 1 } }, inlines(node.children, source));
59
+ case 'thematicBreak':
60
+ return { type: 'horizontalRule' };
61
+ case 'blockquote':
62
+ return { type: 'blockquote', content: blocks(node.children, source) };
63
+ case 'code':
64
+ return withContent({ type: 'codeBlock', attrs: { language: node.lang ?? null } }, node.value ? [{ type: 'text', text: node.value }] : []);
65
+ case 'list': {
66
+ const items = node.children ?? [];
67
+ // A task list is one whose every item has a box; a box in a mixed list stays as its text.
68
+ const task = items.every((item) => typeof item.checked === 'boolean');
69
+ const content = items.map((item) => {
70
+ const inner = blocks(item.children, source);
71
+ const body = inner.length ? inner : [{ type: 'paragraph' }];
72
+ if (task)
73
+ return { type: 'taskItem', attrs: { checked: !!item.checked }, content: body };
74
+ if (typeof item.checked === 'boolean' && body[0]?.type === 'paragraph') {
75
+ body[0] = { ...body[0], content: [{ type: 'text', text: item.checked ? '[x] ' : '[ ] ' }, ...(body[0].content ?? [])] };
76
+ }
77
+ return { type: 'listItem', content: body };
78
+ });
79
+ if (task)
80
+ return { type: 'taskList', content };
81
+ return node.ordered
82
+ ? { type: 'orderedList', attrs: { start: node.start ?? 1 }, content }
83
+ : { type: 'bulletList', content };
84
+ }
85
+ case 'table':
86
+ return {
87
+ type: 'table',
88
+ content: (node.children ?? []).map((row, r) => ({
89
+ type: 'tableRow',
90
+ content: (row.children ?? []).map((cell) => ({
91
+ type: r === 0 ? 'tableHeader' : 'tableCell',
92
+ content: [withContent({ type: 'paragraph' }, inlines(cell.children, source))],
93
+ })),
94
+ })),
95
+ };
96
+ default:
97
+ return withContent({ type: 'paragraph' }, textNodes(raw(node, source), []));
98
+ }
99
+ });
100
+ }
101
+ export function markdownToDoc(markdown) {
102
+ const source = markdown.replace(/\r\n?/g, '\n');
103
+ const tree = unified().use(remarkParse).use(remarkGfm).parse(source);
104
+ const content = blocks(tree.children, source);
105
+ return { type: 'doc', content: content.length ? content : [{ type: 'paragraph' }] };
106
+ }
107
+ /** Text that would read as Markdown is escaped; `_` only where it could open or close emphasis. */
108
+ function escapeText(text) {
109
+ return text.replace(/[\\*`[\]]|~~|(?<!\w)_|_(?!\w)/g, (m) => (m === '~~' ? '\\~\\~' : `\\${m}`));
110
+ }
111
+ const isUrl = (href) => /^https?:\/\/\S+$/.test(href);
112
+ function inlineMarkdown(nodes) {
113
+ return (nodes ?? [])
114
+ .map((node) => {
115
+ if (node.type === 'memorySource')
116
+ return `⟦${node.attrs?.number}⟧`;
117
+ if (node.type === 'memorySoftBreak')
118
+ return '\n';
119
+ if (node.type === 'hardBreak')
120
+ return '\\\n';
121
+ const marks = new Map((node.marks ?? []).map((mark) => [mark.type, mark]));
122
+ const plain = node.text ?? '';
123
+ let text = marks.has('code') ? `\`${plain}\`` : escapeText(plain);
124
+ const href = marks.get('link')?.attrs?.href;
125
+ if (href !== undefined)
126
+ text = href === plain && isUrl(href) && !marks.has('code') ? plain : `[${text}](${href})`;
127
+ if (marks.has('italic'))
128
+ text = `*${text}*`;
129
+ if (marks.has('strike'))
130
+ text = `~~${text}~~`;
131
+ if (marks.has('bold'))
132
+ text = `**${text}**`;
133
+ return text;
134
+ })
135
+ .join('');
136
+ }
137
+ const indent = (text, by) => text.replace(/\n(?=.)/g, `\n${by}`);
138
+ function listMarkdown(node) {
139
+ return (node.content ?? [])
140
+ .map((item, i) => {
141
+ const marker = node.type === 'orderedList'
142
+ ? `${Number(node.attrs?.start ?? 1) + i}. `
143
+ : node.type === 'taskList'
144
+ ? `- [${item.attrs?.checked ? 'x' : ' '}] `
145
+ : '- ';
146
+ // A nested list sits right under its item; other blocks a blank line apart.
147
+ const parts = (item.content ?? []).map((child) => ({ list: /List$/.test(child.type ?? ''), text: blockMarkdown(child) }));
148
+ const body = parts.reduce((acc, part, j) => (j === 0 ? part.text : `${acc}${part.list ? '\n' : '\n\n'}${part.text}`), '');
149
+ return marker + indent(body, ' '.repeat(node.type === 'taskList' ? 2 : marker.length));
150
+ })
151
+ .join('\n');
152
+ }
153
+ function tableMarkdown(node) {
154
+ const rows = (node.content ?? []).map((row) => (row.content ?? []).map((cell) => (cell.content ?? []).map((p) => inlineMarkdown(p.content)).join(' ').replace(/\n/g, ' ').replace(/\|/g, '\\|')));
155
+ const line = (cells) => `| ${cells.join(' | ')} |`;
156
+ const [head = [], ...body] = rows;
157
+ return [line(head), line(head.map(() => '---')), ...body.map(line)].join('\n');
158
+ }
159
+ function blockMarkdown(node) {
160
+ switch (node.type) {
161
+ case 'heading':
162
+ return `${'#'.repeat(Number(node.attrs?.level ?? 1))} ${inlineMarkdown(node.content)}`;
163
+ case 'bulletList':
164
+ case 'orderedList':
165
+ case 'taskList':
166
+ return listMarkdown(node);
167
+ case 'blockquote':
168
+ return docToMarkdown(node)
169
+ .split('\n')
170
+ .map((line) => (line ? `> ${line}` : '>'))
171
+ .join('\n');
172
+ case 'codeBlock':
173
+ return `\`\`\`${node.attrs?.language ?? ''}\n${(node.content ?? []).map((c) => c.text ?? '').join('')}\n\`\`\``;
174
+ case 'horizontalRule':
175
+ return '---';
176
+ case 'table':
177
+ return tableMarkdown(node);
178
+ default:
179
+ return inlineMarkdown(node.content);
180
+ }
181
+ }
182
+ /** The document as canonical Markdown; empty paragraphs drop out. */
183
+ export function docToMarkdown(doc) {
184
+ return (doc.content ?? [])
185
+ .map(blockMarkdown)
186
+ .filter((text) => text.trim())
187
+ .join('\n\n');
188
+ }
189
+ const SUPERSCRIPT = '⁰¹²³⁴⁵⁶⁷⁸⁹';
190
+ /** 12 → "¹²": the font's own superscript figures, sized and set by the font. */
191
+ export function superscript(n) {
192
+ return String(n).replace(/\d/g, (digit) => SUPERSCRIPT[Number(digit)]);
193
+ }
194
+ /**
195
+ * A link in a memory file, as the reader opens it: an http(s) URL in a new
196
+ * tab, a relative path (`profile.md`, `people/priya.md`, `../Notes.md`) as the
197
+ * memory file it names, resolved against the open file's Drive path. Null
198
+ * for anything else (an anchor, `mailto:`): the browser handles it.
199
+ */
200
+ export function memoryLinkTarget(href, fromPath) {
201
+ if (isUrl(href))
202
+ return { url: href };
203
+ if (!href || /^[a-z][a-z0-9+.-]*:/i.test(href) || href.startsWith('#'))
204
+ return null;
205
+ const dir = fromPath.slice(0, fromPath.lastIndexOf('/') + 1) || '/';
206
+ const resolved = new URL(href.split('#')[0], `file://${dir}`).pathname;
207
+ return { path: decodeURIComponent(resolved) };
208
+ }
@@ -0,0 +1,38 @@
1
+ import { type Extensions, type NodeViewRenderer } from '@tiptap/core';
2
+ /** The body's type, on the V1 scale: one set of classes draws the page and edits it. */
3
+ export declare const BODY_CLASS: {
4
+ readonly root: "flex flex-col gap-4 outline-none";
5
+ readonly paragraph: "text-base leading-relaxed text-pretty";
6
+ readonly heading: "text-base font-semibold";
7
+ readonly bulletList: "marker:text-muted-foreground flex list-disc flex-col gap-2 pl-5";
8
+ readonly orderedList: "marker:text-muted-foreground flex list-decimal flex-col gap-2 pl-5";
9
+ readonly listItem: "text-base leading-relaxed [&>ol]:mt-2 [&>ul]:mt-2";
10
+ readonly taskList: "flex flex-col gap-2";
11
+ readonly taskItem: "flex items-start gap-2 text-base leading-relaxed [&_input]:accent-foreground [&>label]:mt-1.5 [&>label]:flex [&>label]:shrink-0 [&>div]:min-w-0 [&>div]:flex-1";
12
+ readonly blockquote: "text-muted-foreground flex flex-col gap-4 border-l-2 pl-4";
13
+ readonly codeBlock: "bg-muted overflow-x-auto rounded-md p-3 font-mono text-xs";
14
+ readonly horizontalRule: "border-border my-2";
15
+ readonly table: "w-full border-collapse text-sm";
16
+ readonly tableCell: "border-border border px-3 py-1.5 text-left align-top";
17
+ readonly tableHeader: "border-border border px-3 py-1.5 text-left align-top font-semibold";
18
+ readonly code: "bg-muted rounded-sm px-1 font-mono";
19
+ readonly bold: "font-semibold";
20
+ readonly italic: "italic";
21
+ readonly strike: "line-through";
22
+ readonly link: "underline underline-offset-2 cursor-pointer";
23
+ /** `SourceMark`'s classes, without its hover. */
24
+ readonly source: "text-foreground -mx-0.5 -my-1 rounded-sm px-0.5 py-1";
25
+ };
26
+ interface MemorySourceOptions {
27
+ /** The page's source numbers; a number outside it draws nothing and is kept. Null draws every number. */
28
+ known: ReadonlySet<number> | null;
29
+ /** The host's view of a number (the reader's `SourceMark`); absent, a plain superscript. */
30
+ view: NodeViewRenderer | null;
31
+ }
32
+ /**
33
+ * The memory body's schema: the GFM subset `body-doc.ts` reads and writes,
34
+ * with its Markdown shortcuts (`## `, `- `, `1. `, `[ ] `, `> `, `**bold**`,
35
+ * `*italic*`, `` `code` ``, ``` fences, `---`). No toolbar.
36
+ */
37
+ export declare function memoryBodyExtensions(options?: Partial<MemorySourceOptions>): Extensions;
38
+ export {};
@@ -0,0 +1,103 @@
1
+ import { Node } from '@tiptap/core';
2
+ import { TaskItem, TaskList } from '@tiptap/extension-list';
3
+ import { TableKit } from '@tiptap/extension-table';
4
+ import StarterKit from '@tiptap/starter-kit';
5
+ import { superscript } from './body-doc.js';
6
+ /** The body's type, on the V1 scale: one set of classes draws the page and edits it. */
7
+ export const BODY_CLASS = {
8
+ root: 'flex flex-col gap-4 outline-none',
9
+ paragraph: 'text-base leading-relaxed text-pretty',
10
+ heading: 'text-base font-semibold',
11
+ bulletList: 'marker:text-muted-foreground flex list-disc flex-col gap-2 pl-5',
12
+ orderedList: 'marker:text-muted-foreground flex list-decimal flex-col gap-2 pl-5',
13
+ listItem: 'text-base leading-relaxed [&>ol]:mt-2 [&>ul]:mt-2',
14
+ taskList: 'flex flex-col gap-2',
15
+ taskItem: 'flex items-start gap-2 text-base leading-relaxed [&_input]:accent-foreground [&>label]:mt-1.5 [&>label]:flex [&>label]:shrink-0 [&>div]:min-w-0 [&>div]:flex-1',
16
+ blockquote: 'text-muted-foreground flex flex-col gap-4 border-l-2 pl-4',
17
+ codeBlock: 'bg-muted overflow-x-auto rounded-md p-3 font-mono text-xs',
18
+ horizontalRule: 'border-border my-2',
19
+ table: 'w-full border-collapse text-sm',
20
+ tableCell: 'border-border border px-3 py-1.5 text-left align-top',
21
+ tableHeader: 'border-border border px-3 py-1.5 text-left align-top font-semibold',
22
+ code: 'bg-muted rounded-sm px-1 font-mono',
23
+ bold: 'font-semibold',
24
+ italic: 'italic',
25
+ strike: 'line-through',
26
+ link: 'underline underline-offset-2 cursor-pointer',
27
+ /** `SourceMark`'s classes, without its hover. */
28
+ source: 'text-foreground -mx-0.5 -my-1 rounded-sm px-0.5 py-1',
29
+ };
30
+ /**
31
+ * ⟦n⟧: the source number, a superscript that the caret steps over and
32
+ * Backspace deletes whole.
33
+ */
34
+ const MemorySource = Node.create({
35
+ name: 'memorySource',
36
+ addOptions: () => ({ known: null, view: null }),
37
+ group: 'inline',
38
+ inline: true,
39
+ atom: true,
40
+ selectable: false,
41
+ addAttributes: () => ({ number: { default: 1 } }),
42
+ parseHTML: () => [{ tag: 'span[data-memory-source]' }],
43
+ renderHTML({ node }) {
44
+ const number = Number(node.attrs.number);
45
+ const shown = !this.options.known || this.options.known.has(number);
46
+ return [
47
+ 'span',
48
+ { 'data-memory-source': number, contenteditable: 'false', class: shown ? BODY_CLASS.source : 'hidden' },
49
+ shown ? superscript(number) : '',
50
+ ];
51
+ },
52
+ addNodeView() {
53
+ return this.options.view;
54
+ },
55
+ renderText: ({ node }) => `⟦${node.attrs.number}⟧`,
56
+ });
57
+ /** A line break inside a paragraph's Markdown: drawn as the space Markdown makes of it. */
58
+ const MemorySoftBreak = Node.create({
59
+ name: 'memorySoftBreak',
60
+ group: 'inline',
61
+ inline: true,
62
+ atom: true,
63
+ selectable: false,
64
+ parseHTML: () => [{ tag: 'span[data-memory-soft-break]' }],
65
+ renderHTML: () => ['span', { 'data-memory-soft-break': '' }, ' '],
66
+ renderText: () => ' ',
67
+ });
68
+ /**
69
+ * The memory body's schema: the GFM subset `body-doc.ts` reads and writes,
70
+ * with its Markdown shortcuts (`## `, `- `, `1. `, `[ ] `, `> `, `**bold**`,
71
+ * `*italic*`, `` `code` ``, ``` fences, `---`). No toolbar.
72
+ */
73
+ export function memoryBodyExtensions(options = {}) {
74
+ const attrs = (name) => ({ HTMLAttributes: { class: BODY_CLASS[name] } });
75
+ return [
76
+ StarterKit.configure({
77
+ underline: false,
78
+ trailingNode: false,
79
+ paragraph: attrs('paragraph'),
80
+ heading: attrs('heading'),
81
+ bulletList: attrs('bulletList'),
82
+ orderedList: attrs('orderedList'),
83
+ listItem: attrs('listItem'),
84
+ blockquote: attrs('blockquote'),
85
+ codeBlock: attrs('codeBlock'),
86
+ horizontalRule: attrs('horizontalRule'),
87
+ code: attrs('code'),
88
+ bold: attrs('bold'),
89
+ italic: attrs('italic'),
90
+ strike: attrs('strike'),
91
+ link: { openOnClick: false, autolink: false, HTMLAttributes: { class: BODY_CLASS.link, rel: null, target: null } },
92
+ }),
93
+ TaskList.configure(attrs('taskList')),
94
+ TaskItem.configure({ nested: true, ...attrs('taskItem') }),
95
+ TableKit.configure({
96
+ table: { resizable: false, HTMLAttributes: { class: BODY_CLASS.table } },
97
+ tableCell: attrs('tableCell'),
98
+ tableHeader: attrs('tableHeader'),
99
+ }),
100
+ MemorySource.configure({ known: options.known ?? null, view: options.view ?? null }),
101
+ MemorySoftBreak,
102
+ ];
103
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The project's Memory page: the Company layer, what every agent in the
3
+ * project knows. The titlebar row of a channel, then the same `MemoryView` a
4
+ * channel's Memory tab draws. The host gates it on `project_channels`.
5
+ */
6
+ export declare function CompanyMemoryPage({ projectId }: {
7
+ projectId: string;
8
+ }): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useTranslations } from '../../i18n/index.js';
4
+ import { SidebarToggle } from '../../internal/layout/sidebar-toggle.js';
5
+ import { useOptionalSidebar } from '../../primitives/sidebar.js';
6
+ import { MemoryView } from './memory-view.js';
7
+ /**
8
+ * The project's Memory page: the Company layer, what every agent in the
9
+ * project knows. The titlebar row of a channel, then the same `MemoryView` a
10
+ * channel's Memory tab draws. The host gates it on `project_channels`.
11
+ */
12
+ export function CompanyMemoryPage({ projectId }) {
13
+ const t = useTranslations('spaces.memory.company');
14
+ const sidebar = useOptionalSidebar();
15
+ return (_jsxs("div", { className: "bg-background flex min-h-0 flex-1 flex-col overflow-hidden", children: [_jsxs("div", { className: "kx-titlebar-row kx-capability-titlebar relative flex shrink-0 items-center gap-2 border-b px-2", "data-sidebar-collapsed": sidebar?.state === 'collapsed' || undefined, children: [_jsx(SidebarToggle, {}), _jsxs("div", { className: "kx-titlebar-tabs flex h-12 min-w-0 flex-1 items-baseline gap-2 px-2", children: [_jsx("h1", { className: "shrink-0 self-center text-lg font-semibold", children: t('title') }), _jsx("p", { className: "text-muted-foreground min-w-0 truncate self-center text-xs", children: t('subtitle') })] })] }), _jsx("div", { className: "relative min-h-0 flex-1 overflow-hidden", children: _jsx("div", { className: "absolute inset-0 flex flex-col", children: _jsx(MemoryView, { projectId: projectId, layerKey: "company", place: t('place') }) }) })] }));
16
+ }
@@ -0,0 +1,20 @@
1
+ import type { ProjectMemoryPageSummary } from '@kortix/sdk';
2
+ /**
3
+ * The layer at a glance, the landing view of a channel's, a DM's and the
4
+ * Company memory: "All" and "16 pages", one line on what memory is, then a
5
+ * card per page in the list's groups (About first). A card shows the title,
6
+ * "Updated 2h ago" and the page's opening, fading out; it opens the page.
7
+ */
8
+ export declare function MemoryAll({ kind, place, pages, onSelect, className, }: {
9
+ kind: 'company' | 'channel' | 'dm';
10
+ /** "#marketing" or the DM's agent. */
11
+ place: string;
12
+ /** Sorted by `sortMemoryPages`. */
13
+ pages: readonly ProjectMemoryPageSummary[];
14
+ onSelect: (pageId: string) => void;
15
+ className?: string;
16
+ }): import("react").JSX.Element;
17
+ /** The All view's line boxes while the layer loads. */
18
+ export declare function MemoryAllSkeleton({ className }: {
19
+ className?: string;
20
+ }): import("react").JSX.Element;
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { SunDimIcon } from '@phosphor-icons/react';
4
+ import { useLocale, useTranslations } from '../../i18n/index.js';
5
+ import { relativeTime } from '../../internal/lib/relative-time.js';
6
+ import { cn } from '../../lib/utils.js';
7
+ import { Skeleton } from '../../primitives/skeleton.js';
8
+ import { groupMemoryPages } from './memory-page-list.js';
9
+ import { Line } from './memory-reader.js';
10
+ /** The reader's frame: the All view and its skeleton sit where a page's title does. */
11
+ const FRAME = 'flex flex-col px-6 py-8 @2xl/reader:px-16 @2xl/reader:py-10';
12
+ const GRID = 'grid grid-cols-[repeat(auto-fill,minmax(12.5rem,1fr))] gap-3';
13
+ /**
14
+ * The layer at a glance, the landing view of a channel's, a DM's and the
15
+ * Company memory: "All" and "16 pages", one line on what memory is, then a
16
+ * card per page in the list's groups (About first). A card shows the title,
17
+ * "Updated 2h ago" and the page's opening, fading out; it opens the page.
18
+ */
19
+ export function MemoryAll({ kind, place, pages, onSelect, className, }) {
20
+ const t = useTranslations('spaces.memory');
21
+ const locale = useLocale();
22
+ return (_jsx("div", { className: cn('@container/reader min-h-0 flex-1 overflow-y-auto', className), children: _jsxs("div", { className: FRAME, children: [_jsxs("header", { className: "flex flex-col gap-1.5", children: [_jsx("h2", { className: "text-2xl leading-tight font-semibold tracking-tight", children: t('all.title') }), _jsx("p", { className: "text-muted-foreground text-xs leading-snug tabular-nums", children: t('pageCount', { count: pages.length }) })] }), _jsxs("p", { className: "text-muted-foreground mt-6 flex items-center gap-2.5 rounded-md border px-3 py-2 text-xs", children: [_jsx("span", { className: "bg-muted text-foreground flex size-6 shrink-0 items-center justify-center rounded-sm", children: _jsx(SunDimIcon, { "aria-hidden": true, className: "size-3.5" }) }), _jsx("span", { className: "min-w-0 text-pretty", children: t(kind === 'company' ? 'all.explainCompany' : kind === 'dm' ? 'all.explainDm' : 'all.explainChannel', { place }) })] }), groupMemoryPages(pages).map((group) => (_jsxs("section", { "aria-label": t(`group.${group.type}`), className: "mt-8 flex flex-col gap-2", children: [_jsx("h3", { className: "text-muted-foreground text-xs", children: t(`group.${group.type}`) }), _jsx("ul", { className: GRID, children: group.pages.map((page) => (_jsx("li", { className: "flex", children: _jsxs("button", { type: "button", onClick: () => onSelect(page.page_id), className: "hover:bg-secondary focus-visible:ring-ring duration-fast flex w-full flex-col gap-1 rounded-md border px-3 py-2.5 text-left outline-none transition-colors focus-visible:ring-2", children: [_jsx("span", { className: "text-foreground line-clamp-2 text-sm font-medium text-pretty [overflow-wrap:anywhere]", children: page.title }), _jsx("span", { className: "text-muted-foreground text-xs", children: t('updatedAt', { time: relativeTime(page.updated_at, locale) }) }), page.excerpt ? (_jsx("span", { className: "text-muted-foreground mt-1 line-clamp-4 mask-b-from-50% text-xs leading-relaxed [overflow-wrap:anywhere]", children: page.excerpt })) : null] }) }, page.page_id))) })] }, group.type)))] }) }));
23
+ }
24
+ /** The All view's line boxes while the layer loads. */
25
+ export function MemoryAllSkeleton({ className }) {
26
+ return (_jsx("div", { "aria-hidden": true, className: cn('@container/reader min-h-0 flex-1 overflow-hidden', className), children: _jsxs("div", { className: FRAME, children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(Line, { line: "text-2xl leading-tight", className: "h-5 w-16" }), _jsx(Line, { line: "text-xs leading-snug", className: "h-2.5 w-14" })] }), _jsx(Skeleton, { className: "mt-6 h-11 w-full rounded-md py-0" }), _jsxs("div", { className: "mt-8 flex flex-col gap-2", children: [_jsx(Skeleton, { className: "h-2.5 w-12 rounded-sm py-0" }), _jsx("div", { className: GRID, children: [0, 1, 2].map((index) => (_jsx(Skeleton, { className: "h-32 rounded-md py-0" }, index))) })] })] }) }));
27
+ }
@@ -0,0 +1,19 @@
1
+ import { type ProjectMemoryPage, type ProjectMemoryPageSummary } from '@kortix/sdk';
2
+ /**
3
+ * The page's body, read and edited with one renderer: the reader's look is
4
+ * the editor's, so Edit changes nothing but the caret. While editing: Markdown
5
+ * shortcuts, no toolbar, Cancel and Save under it; Esc cancels, ⌘Enter saves.
6
+ * A link opens while reading: a URL in a new tab, a relative path as the
7
+ * memory page it names. Save sends the version it started from; a page
8
+ * changed meanwhile answers `version_conflict`, and Reload loads it.
9
+ */
10
+ export declare function MemoryBody({ projectId, page, pages, editing, onSelectPage, onDone, onReload, }: {
11
+ projectId: string;
12
+ page: ProjectMemoryPage;
13
+ /** The layer's pages: where a relative link goes. */
14
+ pages: readonly ProjectMemoryPageSummary[];
15
+ editing: boolean;
16
+ onSelectPage: (pageId: string) => void;
17
+ onDone: () => void;
18
+ onReload: () => void;
19
+ }): import("react").JSX.Element;