@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.
- package/README.md +2 -2
- package/dist/_vendor/kortix-shared.js +63 -3
- package/dist/_vendor/shared/app-config.d.ts +175 -0
- package/dist/_vendor/shared/channel-message.d.ts +34 -5
- package/dist/_vendor/shared/index.d.ts +1 -0
- package/dist/_vendor/shared/space-slug.d.ts +37 -0
- package/dist/access/access/access-detail-shell.js +1 -1
- package/dist/access/access/principal-picker.d.ts +11 -0
- package/dist/access/access/principal-picker.js +3 -2
- package/dist/apps/app-preview-pool.d.ts +7 -2
- package/dist/apps/app-preview-pool.js +11 -5
- package/dist/apps/app-shared.d.ts +22 -15
- package/dist/apps/app-shared.js +37 -19
- package/dist/apps/index.d.ts +2 -2
- package/dist/apps/index.js +2 -2
- package/dist/artifacts/artifact-frame.d.ts +16 -0
- package/dist/artifacts/artifact-frame.js +51 -0
- package/dist/artifacts/artifact-session.d.ts +18 -0
- package/dist/artifacts/artifact-session.js +101 -0
- package/dist/artifacts/frame-policy.d.ts +30 -0
- package/dist/artifacts/frame-policy.js +61 -0
- package/dist/artifacts/index.d.ts +3 -0
- package/dist/artifacts/index.js +5 -0
- package/dist/browser/sandbox-browser-chrome.d.ts +4 -1
- package/dist/browser/sandbox-browser-chrome.js +2 -2
- package/dist/customize/agents/agent-grant-pages.d.ts +5 -1
- package/dist/customize/agents/agent-grant-pages.js +30 -4
- package/dist/customize/agents/agent-page.js +3 -1
- package/dist/customize/agents/agent-policy-sets.d.ts +43 -0
- package/dist/customize/agents/agent-policy-sets.js +72 -0
- package/dist/customize/agents/agent-triggers-section.js +2 -1
- package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.d.ts +6 -1
- package/dist/customize/connectors/add-mcp/add-mcp-server-dialog.js +10 -4
- package/dist/customize/connectors/agent-access.d.ts +35 -0
- package/dist/customize/connectors/agent-access.js +77 -0
- package/dist/customize/connectors/catalog/browse-sections.d.ts +2 -29
- package/dist/customize/connectors/catalog/browse-sections.js +7 -74
- package/dist/customize/connectors/catalog/catalog-entry.d.ts +18 -37
- package/dist/customize/connectors/catalog/catalog-entry.js +28 -40
- package/dist/customize/connectors/catalog/connector-browse.d.ts +3 -32
- package/dist/customize/connectors/catalog/connector-browse.js +19 -50
- package/dist/customize/connectors/catalog/use-catalog.d.ts +20 -59
- package/dist/customize/connectors/catalog/use-catalog.js +48 -175
- package/dist/customize/connectors/connector-identity.d.ts +9 -11
- package/dist/customize/connectors/connector-identity.js +13 -42
- package/dist/customize/connectors/connector-moves-banner.d.ts +2 -1
- package/dist/customize/connectors/connector-moves-banner.js +4 -6
- package/dist/customize/connectors/connector-routes.d.ts +21 -9
- package/dist/customize/connectors/connector-routes.js +29 -20
- package/dist/customize/connectors/connectors-page.js +53 -82
- package/dist/customize/connectors/detail/app-page.js +226 -98
- package/dist/customize/connectors/detail/computer-app-page.d.ts +16 -0
- package/dist/customize/connectors/detail/computer-app-page.js +39 -0
- package/dist/customize/connectors/detail/connector-accounts.js +3 -1
- package/dist/customize/connectors/detail/connector-advanced-tools.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-advanced-tools.js +2 -2
- package/dist/customize/connectors/detail/connector-agents.d.ts +14 -0
- package/dist/customize/connectors/detail/connector-agents.js +69 -0
- package/dist/customize/connectors/detail/connector-detail-tabs.js +2 -1
- package/dist/customize/connectors/detail/connector-move-row.d.ts +8 -5
- package/dist/customize/connectors/detail/connector-move-row.js +23 -14
- package/dist/customize/connectors/detail/connector-page.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-page.js +14 -10
- package/dist/customize/connectors/detail/connector-policy-sets.d.ts +28 -0
- package/dist/customize/connectors/detail/connector-policy-sets.js +203 -0
- package/dist/customize/connectors/detail/connector-settings.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-settings.js +7 -3
- package/dist/customize/connectors/detail/connector-status.d.ts +19 -6
- package/dist/customize/connectors/detail/connector-status.js +34 -10
- package/dist/customize/connectors/detail/connector-tabs.d.ts +4 -1
- package/dist/customize/connectors/detail/connector-tabs.js +8 -2
- package/dist/customize/connectors/detail/connector-tools.d.ts +3 -3
- package/dist/customize/connectors/detail/connector-tools.js +105 -48
- package/dist/customize/connectors/detail/email-inboxes.d.ts +43 -0
- package/dist/customize/connectors/detail/email-inboxes.js +184 -0
- package/dist/customize/connectors/detail/provider-info.d.ts +1 -1
- package/dist/customize/connectors/detail/provider-info.js +2 -2
- package/dist/customize/connectors/detail/status-badge.d.ts +1 -1
- package/dist/customize/connectors/detail/status-badge.js +4 -5
- package/dist/customize/connectors/detail/use-connector-detail.d.ts +6 -0
- package/dist/customize/connectors/detail/use-connector-detail.js +14 -4
- package/dist/customize/connectors/install/install-dialog.d.ts +23 -0
- package/dist/customize/connectors/install/install-dialog.js +40 -0
- package/dist/customize/connectors/install/install.d.ts +13 -2
- package/dist/customize/connectors/install/install.js +9 -4
- package/dist/customize/connectors/install/use-install.d.ts +19 -2
- package/dist/customize/connectors/install/use-install.js +65 -37
- package/dist/customize/connectors/install/way-kind.d.ts +5 -0
- package/dist/customize/connectors/install/way-kind.js +16 -0
- package/dist/customize/connectors/provider-label.d.ts +2 -1
- package/dist/customize/connectors/provider-label.js +13 -3
- package/dist/customize/connectors/tools/pattern-rule-draft.d.ts +4 -0
- package/dist/customize/connectors/tools/pattern-rule-draft.js +12 -3
- package/dist/customize/connectors/tools/policy-sets.d.ts +27 -0
- package/dist/customize/connectors/tools/policy-sets.js +41 -0
- package/dist/customize/connectors/tools/tool-groups.d.ts +32 -9
- package/dist/customize/connectors/tools/tool-groups.js +78 -16
- package/dist/customize/connectors/tools/tool-policy-control.d.ts +11 -10
- package/dist/customize/connectors/tools/tool-policy-control.js +15 -16
- package/dist/customize/connectors/tools/tool-policy-labels.d.ts +6 -5
- package/dist/customize/connectors/tools/tool-policy-labels.js +17 -16
- package/dist/customize/connectors/tools/tool-policy.d.ts +50 -4
- package/dist/customize/connectors/tools/tool-policy.js +74 -8
- package/dist/customize/connectors/use-agent-access.d.ts +85 -0
- package/dist/customize/connectors/use-agent-access.js +72 -0
- package/dist/customize/migrate-to-v2/index.d.ts +1 -2
- package/dist/customize/migrate-to-v2/index.js +1 -2
- package/dist/customize/migrate-to-v2/migration-prompt.d.ts +12 -25
- package/dist/customize/migrate-to-v2/migration-prompt.js +34 -236
- package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +1 -1
- package/dist/customize/migrate-to-v2/upgrade-defs.js +7 -6
- package/dist/customize/migrate-to-v2/upgrade-view.js +7 -7
- package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +3 -3
- package/dist/customize/providers/provider-accordion.js +17 -2
- package/dist/customize/sections/component/channel-access-panel.d.ts +16 -0
- package/dist/customize/sections/component/channel-access-panel.js +146 -0
- package/dist/customize/sections/component/channel-connect-hero.d.ts +3 -2
- package/dist/customize/sections/component/channel-connect-hero.js +3 -2
- package/dist/customize/sections/component/channel-hero-frame.d.ts +31 -0
- package/dist/customize/sections/component/channel-hero-frame.js +40 -0
- package/dist/customize/sections/component/channel-mocks.d.ts +6 -0
- package/dist/customize/sections/component/channel-mocks.js +46 -0
- package/dist/customize/sections/component/channel-row.d.ts +13 -3
- package/dist/customize/sections/component/channel-row.js +10 -4
- package/dist/customize/sections/component/email-connect-form.d.ts +27 -0
- package/dist/customize/sections/component/email-connect-form.js +183 -0
- package/dist/customize/sections/component/slack-connect-card.d.ts +7 -0
- package/dist/customize/sections/component/slack-connect-card.js +2 -3
- package/dist/customize/sections/component/teams-connect-card.d.ts +7 -0
- package/dist/customize/sections/component/teams-connect-card.js +2 -3
- package/dist/customize/sections/component/telegram-channel-row.js +16 -25
- package/dist/customize/sections/connectors-view.d.ts +1 -15
- package/dist/customize/sections/connectors-view.js +81 -314
- package/dist/customize/sections/view/agent-editor-catalog.js +5 -0
- package/dist/customize/sections/view/channels-view.d.ts +5 -1
- package/dist/customize/sections/view/channels-view.js +61 -75
- package/dist/customize/sections/view/gateway/gateway-overview.js +10 -2
- package/dist/customize/settings/tabs/experimental-tab.js +35 -16
- package/dist/customize/shared/catalog/catalog-empty-state.d.ts +1 -12
- package/dist/customize/shared/catalog/catalog-empty-state.js +3 -3
- package/dist/customize/shared/channels-switch-dialog.d.ts +18 -0
- package/dist/customize/shared/channels-switch-dialog.js +30 -0
- package/dist/customize/shared/feature-gate-screen.js +27 -9
- package/dist/customize/shared/use-customize-prefetch.d.ts +2 -3
- package/dist/customize/shared/use-customize-prefetch.js +9 -27
- package/dist/customize/triggers/schedule/post-to-field.d.ts +18 -0
- package/dist/customize/triggers/schedule/post-to-field.js +49 -0
- package/dist/customize/triggers/schedule/schedule-copy.d.ts +10 -6
- package/dist/customize/triggers/schedule/schedule-copy.js +42 -11
- package/dist/customize/triggers/schedule/schedule-detail-sheet.js +2 -1
- package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +22 -0
- package/dist/customize/triggers/schedule/trigger-composer-logic.js +25 -0
- package/dist/customize/triggers/schedule/trigger-composer.d.ts +5 -0
- package/dist/customize/triggers/schedule/trigger-composer.js +23 -14
- package/dist/customize/triggers/schedule/trigger-edit-logic.js +3 -0
- package/dist/customize/triggers/schedule/trigger-filter.js +1 -1
- package/dist/customize/triggers/schedule/trigger-runs-logic.d.ts +2 -2
- package/dist/customize/triggers/schedule/trigger-runs-panel.js +1 -0
- package/dist/customize/triggers/schedule/trigger-toast.js +2 -1
- package/dist/customize/triggers/schedule-view.js +5 -2
- package/dist/files/index.d.ts +1 -0
- package/dist/files/index.js +1 -0
- package/dist/files/project/change-request-recovery.d.ts +1 -26
- package/dist/files/project/change-request-recovery.js +1 -59
- package/dist/files/project/components/change-request-detail-dialog.js +13 -3
- package/dist/files/project/components/drive-explorer.js +15 -15
- package/dist/files/project/components/drive-toolbar.d.ts +16 -2
- package/dist/files/project/components/drive-toolbar.js +14 -5
- package/dist/files/project/hooks/use-change-request-recovery.js +3 -19
- package/dist/files/project/hooks/use-change-requests.d.ts +1 -0
- package/dist/files/project/hooks/use-change-requests.js +11 -2
- package/dist/files/renderers/image-frame.d.ts +46 -0
- package/dist/files/renderers/image-frame.js +59 -0
- package/dist/files/renderers/image-renderer.d.ts +11 -1
- package/dist/files/renderers/image-renderer.js +13 -3
- package/dist/files/renderers/pdf/pdf-clipboard.d.ts +2 -0
- package/dist/files/renderers/pdf/pdf-clipboard.js +21 -0
- package/dist/files/renderers/pdf/pdf-viewer.js +4 -2
- package/dist/files/renderers/show-content-renderer.d.ts +9 -1
- package/dist/files/renderers/show-content-renderer.js +56 -14
- package/dist/files/runtime/file-source.js +2 -0
- package/dist/files/runtime/hooks/use-binary-blob.d.ts +10 -1
- package/dist/files/runtime/hooks/use-binary-blob.js +10 -4
- package/dist/files/runtime/hooks/use-shared-image.d.ts +41 -0
- package/dist/files/runtime/hooks/use-shared-image.js +177 -0
- package/dist/files/viewer/file-content-renderer.d.ts +22 -1
- package/dist/files/viewer/file-content-renderer.js +50 -7
- package/dist/files/viewer/file-header.d.ts +7 -3
- package/dist/files/viewer/file-header.js +20 -11
- package/dist/files/viewer/file-preview-modal.d.ts +1 -1
- package/dist/files/viewer/file-preview-modal.js +10 -22
- package/dist/files/viewer/file-source.d.ts +13 -0
- package/dist/files/viewer/use-file-content-state.d.ts +2 -0
- package/dist/files/viewer/use-file-content-state.js +28 -10
- package/dist/files/viewer/viewer-actions.d.ts +3 -1
- package/dist/files/viewer/viewer-actions.js +2 -2
- package/dist/hooks/use-media-query.d.ts +1 -0
- package/dist/hooks/use-mobile.d.ts +5 -0
- package/dist/hooks/use-mobile.js +8 -0
- package/dist/i18n/en.d.ts +873 -85
- package/dist/i18n/en.js +888 -100
- package/dist/i18n/ui-catalog/localize-ui-catalog.js +4 -0
- package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +15 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/internal/account-hub/account-settings-sidebar.js +1 -1
- package/dist/internal/account-hub/hub-sheet.d.ts +9 -1
- package/dist/internal/account-hub/hub-sheet.js +21 -5
- package/dist/internal/account-hub/sections.d.ts +1 -1
- package/dist/internal/account-hub/sections.js +2 -1
- package/dist/internal/auth/auth-card-shell.js +3 -3
- package/dist/internal/components/agent-mark.js +5 -2
- package/dist/internal/connector-logo/connector-logo-source.d.ts +63 -0
- package/dist/internal/connector-logo/connector-logo-source.js +48 -0
- package/dist/internal/connector-logo/connector-logo.d.ts +39 -0
- package/dist/internal/connector-logo/connector-logo.js +56 -0
- package/dist/internal/connector-logo/connector-mark-files.d.ts +11 -0
- package/dist/internal/connector-logo/connector-mark-files.js +35 -0
- package/dist/internal/files/file-read-retry.d.ts +13 -0
- package/dist/internal/files/file-read-retry.js +23 -3
- package/dist/internal/files/session-drive-files.d.ts +5 -1
- package/dist/internal/files/session-drive-files.js +7 -2
- package/dist/internal/hooks/channels/use-channels-installations.d.ts +32 -5
- package/dist/internal/hooks/channels/use-channels-installations.js +55 -7
- package/dist/internal/hooks/channels/use-email-inboxes.d.ts +19 -0
- package/dist/internal/hooks/channels/use-email-inboxes.js +48 -0
- package/dist/internal/hooks/connectors/use-add-account.js +1 -1
- package/dist/internal/hooks/index.d.ts +1 -1
- package/dist/internal/hooks/index.js +1 -1
- package/dist/internal/hooks/projects/use-new-project-session.d.ts +9 -0
- package/dist/internal/hooks/projects/use-new-project-session.js +28 -12
- package/dist/internal/hooks/use-auto-scroll.d.ts +8 -1
- package/dist/internal/hooks/use-auto-scroll.js +4 -4
- package/dist/internal/icons/telegram.d.ts +5 -0
- package/dist/internal/icons/telegram.js +6 -1
- package/dist/internal/layout/nav-hover-card.d.ts +35 -0
- package/dist/internal/layout/nav-hover-card.js +84 -0
- package/dist/internal/layout/project-nav-row.d.ts +3 -1
- package/dist/internal/layout/project-nav-row.js +3 -2
- package/dist/internal/layout/project-page-header.d.ts +4 -2
- package/dist/internal/layout/project-page-header.js +4 -3
- package/dist/internal/layout/project-settings-nav.js +59 -2
- package/dist/internal/lib/browser-error-noise.d.ts +1 -1
- package/dist/internal/lib/browser-error-noise.js +1 -1
- package/dist/internal/lib/browser-noise/rules/injected-scripts.d.ts +7 -0
- package/dist/internal/lib/browser-noise/rules/injected-scripts.js +15 -0
- package/dist/internal/lib/manifest-version.d.ts +1 -1
- package/dist/internal/lib/manifest-version.js +2 -2
- package/dist/internal/lib/memory-href.d.ts +16 -0
- package/dist/internal/lib/memory-href.js +46 -0
- package/dist/internal/lib/use-project-feature-flags.js +9 -9
- package/dist/internal/lib/utils/heic-convert.d.ts +1 -1
- package/dist/internal/lib/utils/heic-convert.js +3 -4
- package/dist/internal/lib/web-notifications.d.ts +20 -0
- package/dist/internal/lib/web-notifications.js +48 -4
- package/dist/internal/notifications/notification-bell.d.ts +4 -1
- package/dist/internal/notifications/notification-bell.js +2 -2
- package/dist/internal/selection/selection-bar.d.ts +2 -1
- package/dist/internal/selection/selection-bar.js +1 -1
- package/dist/internal/stores/file-preview-store.d.ts +29 -2
- package/dist/internal/stores/file-preview-store.js +19 -1
- package/dist/internal/stores/kortix-computer-store.js +3 -0
- package/dist/internal/stores/sidebar-nav-store.d.ts +1 -1
- package/dist/internal/stores/sidebar-nav-store.js +3 -1
- package/dist/lib/routes.d.ts +13 -1
- package/dist/lib/routes.js +13 -0
- package/dist/markdown/index.d.ts +2 -1
- package/dist/markdown/index.js +2 -1
- package/dist/markdown/setup-links/approval-decision.d.ts +1 -0
- package/dist/markdown/setup-links/approval-decision.js +6 -2
- package/dist/markdown/setup-links/connector-handshake.d.ts +3 -1
- package/dist/markdown/setup-links/connector-handshake.js +12 -10
- package/dist/markdown/setup-links/secret-intake-form.d.ts +0 -10
- package/dist/markdown/setup-links/secret-intake-form.js +1 -1
- package/dist/markdown/setup-links/show-connect-hero.d.ts +28 -0
- package/dist/markdown/setup-links/show-connect-hero.js +91 -0
- package/dist/markdown/unified-markdown.js +5 -5
- package/dist/primitives/badge.d.ts +1 -1
- package/dist/primitives/badge.js +2 -0
- package/dist/primitives/disclosure.js +14 -2
- package/dist/primitives/empty-art.d.ts +12 -0
- package/dist/primitives/empty-art.js +11 -0
- package/dist/primitives/mermaid-renderer.d.ts +2 -0
- package/dist/primitives/mermaid-renderer.js +21 -15
- package/dist/primitives/resizable.js +6 -1
- package/dist/primitives/resize-seam.d.ts +11 -0
- package/dist/primitives/resize-seam.js +12 -0
- package/dist/primitives/sidebar-panel.js +4 -7
- package/dist/primitives/tabs.d.ts +14 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/providers/ui-provider.d.ts +9 -0
- package/dist/session/composer/ComposerAboveCard.d.ts +1 -1
- package/dist/session/composer/ComposerAboveCard.js +2 -2
- package/dist/session/composer/ComposerCard.d.ts +1 -1
- package/dist/session/composer/ComposerCard.js +3 -3
- package/dist/session/composer/agent-selector.d.ts +13 -1
- package/dist/session/composer/agent-selector.js +25 -5
- package/dist/session/composer/composer-agent-access.d.ts +15 -0
- package/dist/session/composer/composer-agent-access.js +27 -0
- package/dist/session/composer/composer-chat-input.d.ts +8 -2
- package/dist/session/composer/composer-chat-input.js +8 -6
- package/dist/session/composer/composer-logic.d.ts +16 -0
- package/dist/session/composer/composer-logic.js +12 -0
- package/dist/session/composer/composer-underbar.d.ts +3 -1
- package/dist/session/composer/composer-underbar.js +4 -3
- package/dist/session/composer/composer.d.ts +15 -1
- package/dist/session/composer/composer.js +19 -1
- package/dist/session/composer/draft/composer-draft.d.ts +6 -2
- package/dist/session/composer/draft/composer-draft.js +5 -1
- package/dist/session/composer/reasoning-effort-selector.js +1 -1
- package/dist/session/models/chatgpt-connection-button.d.ts +11 -0
- package/dist/session/models/chatgpt-connection-button.js +54 -0
- package/dist/session/models/model-selector.js +5 -2
- package/dist/session/models/use-model-connection-gate.d.ts +5 -5
- package/dist/session/models/use-model-connection-gate.js +5 -5
- package/dist/session/outcomes/jump-to-outcome.d.ts +10 -0
- package/dist/session/outcomes/jump-to-outcome.js +11 -0
- package/dist/session/outcomes/session-outcomes-bridge.d.ts +14 -0
- package/dist/session/outcomes/session-outcomes-bridge.js +12 -0
- package/dist/session/outcomes/session-outcomes-provider.d.ts +3 -1
- package/dist/session/outcomes/session-outcomes-provider.js +33 -3
- package/dist/session/panel/easy/app-preview.d.ts +10 -0
- package/dist/session/panel/easy/app-preview.js +31 -12
- package/dist/session/panel/easy/change-requests-card.d.ts +7 -0
- package/dist/session/panel/easy/change-requests-card.js +17 -0
- package/dist/session/panel/easy/easy-panel-logic.js +7 -1
- package/dist/session/panel/easy/easy-panel.js +5 -2
- package/dist/session/panel/easy/file-preview.js +1 -1
- package/dist/session/panel/easy/outputs-card.d.ts +2 -1
- package/dist/session/panel/easy/outputs-card.js +3 -2
- package/dist/session/panel/mobile-tool-drawer.js +7 -1
- package/dist/session/panel/session-audit-panel.js +9 -2
- package/dist/session/panel/session-detail-panel.js +9 -3
- package/dist/session/panel/session-files-explorer.d.ts +9 -0
- package/dist/session/panel/session-files-explorer.js +12 -3
- package/dist/session/panel/session-panel-provider.d.ts +15 -1
- package/dist/session/panel/session-panel-provider.js +32 -7
- package/dist/session/panel/shared/derive-panels.d.ts +8 -1
- package/dist/session/panel/shared/derive-panels.js +12 -2
- package/dist/session/panel/shared/output-priority.js +2 -0
- package/dist/session/participants/session-participants.d.ts +5 -1
- package/dist/session/participants/session-participants.js +9 -2
- package/dist/session/prompts/approval-request.d.ts +5 -0
- package/dist/session/prompts/approval-request.js +7 -1
- package/dist/session/prompts/session-approval-review.d.ts +9 -0
- package/dist/session/prompts/session-approval-review.js +18 -0
- package/dist/session/status/session-error-banner.js +2 -49
- package/dist/session/status/session-starting-loader.d.ts +14 -2
- package/dist/session/status/session-starting-loader.js +16 -4
- package/dist/session/thread/after-first-prompt.d.ts +7 -0
- package/dist/session/thread/after-first-prompt.js +8 -0
- package/dist/session/thread/detect-command.d.ts +12 -0
- package/dist/session/thread/detect-command.js +20 -0
- package/dist/session/thread/session-chat.d.ts +3 -1
- package/dist/session/thread/session-chat.js +377 -252
- package/dist/session/thread/session-thread.d.ts +3 -1
- package/dist/session/thread/session-thread.js +9 -2
- package/dist/session/thread/thread-boot-rows.d.ts +36 -0
- package/dist/session/thread/thread-boot-rows.js +89 -0
- package/dist/session/thread/transcript-rows.d.ts +31 -0
- package/dist/session/thread/transcript-rows.js +3 -0
- package/dist/session/thread/transcript.d.ts +0 -9
- package/dist/session/thread/transcript.js +104 -19
- package/dist/session/tool/shared/infrastructure-contexts.d.ts +28 -0
- package/dist/session/tool/shared/infrastructure-contexts.js +31 -3
- package/dist/session/tool/tool-part-renderer.d.ts +5 -4
- package/dist/session/tool/tool-part-renderer.js +8 -3
- package/dist/session/tool/tools/bash-tool.js +7 -6
- package/dist/session/tool/tools/channel-send-card.d.ts +1 -2
- package/dist/session/tool/tools/channel-send.d.ts +2 -1
- package/dist/session/tool/tools/codemode-tool.js +1 -1
- package/dist/session/tool/tools/connector-tools.js +1 -1
- package/dist/session/tool/tools/image-gen-tool.d.ts +1 -1
- package/dist/session/tool/tools/image-gen-tool.js +240 -53
- package/dist/session/tool/tools/show-tool.js +19 -8
- package/dist/session/turn/channel-brand.d.ts +8 -3
- package/dist/session/turn/channel-brand.js +20 -4
- package/dist/session/turn/message-author.d.ts +8 -0
- package/dist/session/turn/message-author.js +24 -0
- package/dist/session/turn/message-row.d.ts +52 -0
- package/dist/session/turn/message-row.js +44 -0
- package/dist/session/turn/plan-anchor.d.ts +1 -1
- package/dist/session/turn/plan-anchor.js +1 -1
- package/dist/session/turn/user-message.d.ts +7 -1
- package/dist/session/turn/user-message.js +21 -7
- package/dist/styles.css +1 -1
- package/dist/workspace/home/access-requests-bell.d.ts +9 -2
- package/dist/workspace/home/access-requests-bell.js +20 -6
- package/dist/workspace/home/first-chat.d.ts +8 -21
- package/dist/workspace/home/first-chat.js +22 -72
- package/dist/workspace/index.d.ts +6 -0
- package/dist/workspace/index.js +6 -0
- package/dist/workspace/layout/project-home.d.ts +14 -2
- package/dist/workspace/layout/project-home.js +60 -21
- package/dist/workspace/layout/use-project-home-send.d.ts +9 -1
- package/dist/workspace/layout/use-project-home-send.js +82 -3
- package/dist/workspace/memory/body-doc.d.ts +17 -0
- package/dist/workspace/memory/body-doc.js +208 -0
- package/dist/workspace/memory/body-extensions.d.ts +38 -0
- package/dist/workspace/memory/body-extensions.js +103 -0
- package/dist/workspace/memory/company-memory-page.d.ts +8 -0
- package/dist/workspace/memory/company-memory-page.js +16 -0
- package/dist/workspace/memory/memory-all.d.ts +20 -0
- package/dist/workspace/memory/memory-all.js +27 -0
- package/dist/workspace/memory/memory-body.d.ts +19 -0
- package/dist/workspace/memory/memory-body.js +139 -0
- package/dist/workspace/memory/memory-empty.d.ts +13 -0
- package/dist/workspace/memory/memory-empty.js +28 -0
- package/dist/workspace/memory/memory-history.d.ts +27 -0
- package/dist/workspace/memory/memory-history.js +108 -0
- package/dist/workspace/memory/memory-labels.d.ts +16 -0
- package/dist/workspace/memory/memory-labels.js +47 -0
- package/dist/workspace/memory/memory-page-list.d.ts +34 -0
- package/dist/workspace/memory/memory-page-list.js +156 -0
- package/dist/workspace/memory/memory-reader.d.ts +58 -0
- package/dist/workspace/memory/memory-reader.js +123 -0
- package/dist/workspace/memory/memory-view.d.ts +21 -0
- package/dist/workspace/memory/memory-view.js +124 -0
- package/dist/workspace/memory/remember-popover.d.ts +19 -0
- package/dist/workspace/memory/remember-popover.js +61 -0
- package/dist/workspace/memory/remember-this.d.ts +12 -0
- package/dist/workspace/memory/remember-this.js +89 -0
- package/dist/workspace/memory/source-mark.d.ts +18 -0
- package/dist/workspace/memory/source-mark.js +79 -0
- package/dist/workspace/memory/used-memory-chip.d.ts +14 -0
- package/dist/workspace/memory/used-memory-chip.js +61 -0
- package/dist/workspace/new/advanced-fields.d.ts +2 -1
- package/dist/workspace/new/advanced-fields.js +2 -2
- package/dist/workspace/new/source-param.d.ts +1 -1
- package/dist/workspace/new/source-param.js +3 -1
- package/dist/workspace/new/use-create-workspace.d.ts +8 -10
- package/dist/workspace/new/use-create-workspace.js +3 -3
- package/dist/workspace/projects/onboarding/app-logo.d.ts +7 -2
- package/dist/workspace/projects/onboarding/app-logo.js +6 -13
- package/dist/workspace/projects/policies-panel.js +5 -3
- package/dist/workspace/review/review-actions.d.ts +4 -2
- package/dist/workspace/review/review-actions.js +8 -2
- package/dist/workspace/review/review-center.js +11 -7
- package/dist/workspace/review/review-detail.d.ts +10 -0
- package/dist/workspace/review/review-detail.js +101 -13
- package/dist/workspace/saved-session-skeleton.d.ts +2 -2
- package/dist/workspace/saved-session-skeleton.js +3 -3
- package/dist/workspace/session-workspace.js +15 -13
- package/dist/workspace/sessions/project-sessions-view.js +3 -2
- package/dist/workspace/sessions/sessions-toolbar.d.ts +3 -1
- package/dist/workspace/sessions/sessions-toolbar.js +2 -2
- package/dist/workspace/sidebar/footer/project-apps-nav.d.ts +5 -0
- package/dist/workspace/sidebar/footer/project-apps-nav.js +41 -2
- package/dist/workspace/sidebar/footer/project-artifacts-nav.d.ts +6 -0
- package/dist/workspace/sidebar/footer/project-artifacts-nav.js +22 -0
- package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +13 -13
- package/dist/workspace/sidebar/footer/project-memory-nav.d.ts +7 -0
- package/dist/workspace/sidebar/footer/project-memory-nav.js +19 -0
- package/dist/workspace/sidebar/nav-row-meta.js +14 -2
- package/dist/workspace/sidebar/project-nav-items.js +3 -0
- package/dist/workspace/sidebar/project-session-list.js +68 -56
- package/dist/workspace/sidebar/project-sidebar.js +9 -2
- package/dist/workspace/sidebar/project-spaces-nav.d.ts +8 -0
- package/dist/workspace/sidebar/project-spaces-nav.js +69 -0
- package/dist/workspace/sidebar/session-group-order.d.ts +9 -0
- package/dist/workspace/sidebar/session-group-order.js +25 -0
- package/dist/workspace/sidebar/session-group-sections.d.ts +62 -0
- package/dist/workspace/sidebar/session-group-sections.js +267 -0
- package/dist/workspace/sidebar/session-list-chrome.d.ts +28 -0
- package/dist/workspace/sidebar/session-list-chrome.js +50 -0
- package/dist/workspace/spaces/channel-glyph.d.ts +5 -0
- package/dist/workspace/spaces/channel-glyph.js +6 -0
- package/dist/workspace/spaces/channel-setup.d.ts +16 -0
- package/dist/workspace/spaces/channel-setup.js +105 -0
- package/dist/workspace/spaces/channels-onboarding.d.ts +13 -0
- package/dist/workspace/spaces/channels-onboarding.js +37 -0
- package/dist/workspace/spaces/create-channel-dialog.d.ts +16 -0
- package/dist/workspace/spaces/create-channel-dialog.js +158 -0
- package/dist/workspace/spaces/private-channels-not-in.d.ts +9 -0
- package/dist/workspace/spaces/private-channels-not-in.js +69 -0
- package/dist/workspace/spaces/space-agents.d.ts +10 -0
- package/dist/workspace/spaces/space-agents.js +10 -0
- package/dist/workspace/spaces/space-details-dialog.d.ts +20 -0
- package/dist/workspace/spaces/space-details-dialog.js +176 -0
- package/dist/workspace/spaces/space-link-label.d.ts +49 -0
- package/dist/workspace/spaces/space-link-label.js +73 -0
- package/dist/workspace/spaces/space-links.d.ts +19 -0
- package/dist/workspace/spaces/space-links.js +230 -0
- package/dist/workspace/spaces/space-members.d.ts +46 -0
- package/dist/workspace/spaces/space-members.js +182 -0
- package/dist/workspace/spaces/space-roster.d.ts +15 -0
- package/dist/workspace/spaces/space-roster.js +44 -0
- package/dist/workspace/spaces/space-threads-tab.d.ts +56 -0
- package/dist/workspace/spaces/space-threads-tab.js +156 -0
- package/dist/workspace/spaces/space-timeline-view.d.ts +254 -0
- package/dist/workspace/spaces/space-timeline-view.js +235 -0
- package/dist/workspace/spaces/space-timeline.d.ts +106 -0
- package/dist/workspace/spaces/space-timeline.js +183 -0
- package/dist/workspace/spaces/space-triggers.d.ts +13 -0
- package/dist/workspace/spaces/space-triggers.js +78 -0
- package/dist/workspace/spaces/space-view.d.ts +37 -0
- package/dist/workspace/spaces/space-view.js +436 -0
- package/package.json +27 -36
- package/skills/kortix-ui/SKILL.md +3 -3
- package/skills/kortix-ui/references/custom-dashboard.md +3 -3
- package/skills/kortix-ui/references/modules.md +28 -4
- package/skills/kortix-ui/references/theming.md +1 -1
- package/dist/customize/connectors/catalog/merge-search.d.ts +0 -10
- package/dist/customize/connectors/catalog/merge-search.js +0 -26
- package/dist/customize/connectors/detail/find-easy-connect-app.d.ts +0 -29
- package/dist/customize/connectors/detail/find-easy-connect-app.js +0 -22
- package/dist/customize/migrate-to-v2/use-migrate-to-v2.d.ts +0 -9
- package/dist/customize/migrate-to-v2/use-migrate-to-v2.js +0 -24
- package/dist/customize/sections/connector-connection-header.d.ts +0 -36
- package/dist/customize/sections/connector-connection-header.js +0 -33
- package/dist/customize/sections/connector-connection-modal.d.ts +0 -34
- package/dist/customize/sections/connector-connection-modal.js +0 -72
- package/dist/customize/sections/discover-catalogue-card.d.ts +0 -19
- package/dist/customize/sections/discover-catalogue-card.js +0 -26
- package/dist/customize/sections/discover-catalogue-detail.d.ts +0 -15
- package/dist/customize/sections/discover-catalogue-detail.js +0 -24
- package/dist/customize/sections/discover-catalogue.d.ts +0 -17
- package/dist/customize/sections/discover-catalogue.js +0 -132
- package/dist/customize/sections/llm-provider/provider-access-menu.d.ts +0 -10
- package/dist/customize/sections/llm-provider/provider-access-menu.js +0 -23
- package/dist/files/project/components/drive-empty-art.d.ts +0 -2
- package/dist/files/project/components/drive-empty-art.js +0 -5
- package/dist/internal/hooks/use-media-query.d.ts +0 -2
- package/dist/internal/share/public-share-link-button.d.ts +0 -14
- package/dist/internal/share/public-share-link-button.js +0 -17
- package/dist/markdown/setup-links/app-credentials-form.d.ts +0 -12
- package/dist/markdown/setup-links/app-credentials-form.js +0 -115
- /package/dist/{internal/hooks → hooks}/use-media-query.js +0 -0
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
* same title-bar classes as the Customize tab bar (`CapabilityTabs`), so it
|
|
6
6
|
* has the same height and clears the desktop window controls the same way.
|
|
7
7
|
* A page has one view, so the title is plain text, not a one-tab underline
|
|
8
|
-
* bar. `
|
|
8
|
+
* bar. `titleAccessory` sits right after the title (a docs link). `children`
|
|
9
|
+
* sit at the trailing edge (page actions).
|
|
9
10
|
*
|
|
10
11
|
* The e2e journey `18-apps-ui` finds the page by the
|
|
11
12
|
* `<h1>`.
|
|
12
13
|
*/
|
|
13
|
-
export declare function ProjectPageHeader({ title, children, }: {
|
|
14
|
+
export declare function ProjectPageHeader({ title, titleAccessory, children, }: {
|
|
14
15
|
title: string;
|
|
16
|
+
titleAccessory?: React.ReactNode;
|
|
15
17
|
children?: React.ReactNode;
|
|
16
18
|
}): import("react").JSX.Element;
|
|
@@ -8,12 +8,13 @@ import { SidebarToggle } from './sidebar-toggle.js';
|
|
|
8
8
|
* same title-bar classes as the Customize tab bar (`CapabilityTabs`), so it
|
|
9
9
|
* has the same height and clears the desktop window controls the same way.
|
|
10
10
|
* A page has one view, so the title is plain text, not a one-tab underline
|
|
11
|
-
* bar. `
|
|
11
|
+
* bar. `titleAccessory` sits right after the title (a docs link). `children`
|
|
12
|
+
* sit at the trailing edge (page actions).
|
|
12
13
|
*
|
|
13
14
|
* The e2e journey `18-apps-ui` finds the page by the
|
|
14
15
|
* `<h1>`.
|
|
15
16
|
*/
|
|
16
|
-
export function ProjectPageHeader({ title, children, }) {
|
|
17
|
+
export function ProjectPageHeader({ title, titleAccessory, children, }) {
|
|
17
18
|
const sidebar = useOptionalSidebar();
|
|
18
|
-
return (_jsxs("div", { className: "kx-titlebar-row kx-capability-titlebar relative flex shrink-0 items-center gap-1 border-b px-2", "data-sidebar-collapsed": sidebar?.state === 'collapsed' || undefined, children: [_jsx(SidebarToggle, {}),
|
|
19
|
+
return (_jsxs("div", { className: "kx-titlebar-row kx-capability-titlebar relative flex shrink-0 items-center gap-1 border-b px-2", "data-sidebar-collapsed": sidebar?.state === 'collapsed' || undefined, children: [_jsx(SidebarToggle, {}), _jsxs("div", { className: "kx-titlebar-tabs flex h-10 min-w-0 flex-1 items-center gap-1.5 px-3", children: [_jsx("h1", { className: "text-foreground truncate text-sm font-medium", children: title }), titleAccessory] }), children ? _jsx("div", { className: "flex shrink-0 items-center gap-1", children: children }) : null] }));
|
|
19
20
|
}
|
|
@@ -7,11 +7,37 @@ export { CustomizeGlyph } from '../icons/customize.js';
|
|
|
7
7
|
import { useTranslations } from '../../i18n/index.js';
|
|
8
8
|
import { useUiPathname } from '../../providers/ui-provider.js';
|
|
9
9
|
import { CountBadge } from '../../primitives/count-badge.js';
|
|
10
|
-
import {
|
|
10
|
+
import { cn } from '../lib/utils.js';
|
|
11
|
+
import { CAPABILITY_TABS, activeCapabilityTab, capabilityTabHref, } from '../lib/capability-tab-routes.js';
|
|
11
12
|
import { PROJECT_ACTIONS } from '../lib/project-actions.js';
|
|
12
13
|
import { useFeatureFlag } from '@kortix/sdk/react';
|
|
13
14
|
import { useProjectPageCans } from '../lib/use-project-can.js';
|
|
14
15
|
import { useReviewSessionSummary } from '../hooks/use-review-session-summary.js';
|
|
16
|
+
import { HubLink } from '../account-hub/account-hub-location.js';
|
|
17
|
+
import { hubTarget } from '../stores/account-panel-store.js';
|
|
18
|
+
import { HoverPrefetchLink } from '../components/hover-prefetch-link.js';
|
|
19
|
+
import { NavHoverCardContent, NavHoverCardList, useNavHoverCard } from './nav-hover-card.js';
|
|
20
|
+
import { useLocalizedUiCatalog } from '../../i18n/ui-catalog/use-localized-ui-catalog.js';
|
|
21
|
+
import { MENU_SEPARATOR, menuRow } from '../../primitives/menu-recipe.js';
|
|
22
|
+
import { Popover, PopoverAnchor } from '../../primitives/popover.js';
|
|
23
|
+
import { getProjectDetail } from '@kortix/sdk';
|
|
24
|
+
import { contract, qk } from '@kortix/sdk/react';
|
|
25
|
+
import { useQuery } from '@tanstack/react-query';
|
|
26
|
+
import { AlarmIcon, CalendarIcon, CpuIcon, GearSixIcon, GitBranchIcon, LockKeyIcon, PlugIcon, RobotIcon, SquaresFourIcon, TrayIcon, UsersIcon, } from '@phosphor-icons/react';
|
|
27
|
+
import { Fragment } from 'react';
|
|
28
|
+
/** Each tab's glyph: the one the command palette shows for the same page (`menu-registry.ts`). */
|
|
29
|
+
const TAB_ICONS = {
|
|
30
|
+
agent: RobotIcon,
|
|
31
|
+
skills: SquaresFourIcon,
|
|
32
|
+
connectors: PlugIcon,
|
|
33
|
+
triggers: AlarmIcon,
|
|
34
|
+
reminders: CalendarIcon,
|
|
35
|
+
models: CpuIcon,
|
|
36
|
+
secrets: LockKeyIcon,
|
|
37
|
+
files: GitBranchIcon,
|
|
38
|
+
review: TrayIcon,
|
|
39
|
+
config: GearSixIcon,
|
|
40
|
+
};
|
|
15
41
|
/**
|
|
16
42
|
* The one project-configuration entry in the sidebar:
|
|
17
43
|
* ProjectCustomizeNavItem, top of the panel under New session, navigating to
|
|
@@ -197,10 +223,41 @@ export function ProjectCustomizeNavItem({ projectId }) {
|
|
|
197
223
|
// Connectors or one agent's page, not just on the landing tab.
|
|
198
224
|
const isActive = !!pathname &&
|
|
199
225
|
(pathname === customizePath(projectId) || activeCapabilityTab(pathname) !== null);
|
|
226
|
+
const card = useNavHoverCard({ enabled: !!tab && !!projectId });
|
|
200
227
|
if (!tab)
|
|
201
228
|
return null;
|
|
202
229
|
// No project id means no valid href, so there is nothing to render.
|
|
203
230
|
if (!projectId)
|
|
204
231
|
return null;
|
|
205
|
-
return (_jsxs(ProjectNavRow, { active: isActive, label: t('customize'), href: capabilityTabHref(projectId, tab), prefetch: true, children: [_jsx("span", { className: "shrink-0", children: _jsx(CustomizeGlyph, {}) }), t('customize'), reviewCount > 0 ? (_jsx("span", { className: "ml-auto flex shrink-0 items-center gap-1", children: _jsx(CountBadge, { count: reviewCount, tone: "waiting" }) })) : null] }));
|
|
232
|
+
return (_jsxs(Popover, { open: card.open, onOpenChange: card.setOpen, children: [_jsx(PopoverAnchor, { virtualRef: card.anchorRef }), _jsxs(ProjectNavRow, { active: isActive, label: t('customize'), href: capabilityTabHref(projectId, tab), prefetch: true, ...card.rowProps, children: [_jsx("span", { className: "shrink-0", children: _jsx(CustomizeGlyph, {}) }), t('customize'), reviewCount > 0 ? (_jsx("span", { className: "ml-auto flex shrink-0 items-center gap-1", children: _jsx(CountBadge, { count: reviewCount, tone: "waiting" }) })) : null] }), _jsx(NavHoverCardContent, { ...card.contentProps, children: _jsx(CustomizeCardList, { projectId: projectId, tabs: access.tabs, reviewCount: reviewCount, onOpen: () => card.setOpen(false) }) })] }));
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* The Customize card: every tab the caller may open, in the tab bar's order
|
|
236
|
+
* and with its seams (Agents | the library | Members and Settings), so the
|
|
237
|
+
* card and the bar read as one list. Members is the bar's launcher into the
|
|
238
|
+
* Access hub, gated the same way (`project.members.read`).
|
|
239
|
+
*/
|
|
240
|
+
function CustomizeCardList({ projectId, tabs, reviewCount, onOpen, }) {
|
|
241
|
+
const tI18nComplete = useTranslations('hardcodedUi.i18nComplete');
|
|
242
|
+
const allTabs = useLocalizedUiCatalog(CAPABILITY_TABS);
|
|
243
|
+
const { data } = useQuery({
|
|
244
|
+
queryKey: qk.project.detail(projectId),
|
|
245
|
+
queryFn: () => getProjectDetail(projectId),
|
|
246
|
+
...contract('config'),
|
|
247
|
+
});
|
|
248
|
+
const canReadMembers = useProjectPageCans(projectId)[PROJECT_ACTIONS.PROJECT_MEMBERS_READ]?.allowed === true;
|
|
249
|
+
const accountId = data?.project?.account_id;
|
|
250
|
+
const allowed = new Set(tabs);
|
|
251
|
+
const shown = allTabs.filter((entry) => allowed.has(entry.key));
|
|
252
|
+
const rowClass = menuRow('sm', 'default', 'cursor-pointer');
|
|
253
|
+
const tabRow = (entry) => {
|
|
254
|
+
const TabIcon = TAB_ICONS[entry.key];
|
|
255
|
+
return (_jsx("li", { children: _jsxs(HoverPrefetchLink, { href: capabilityTabHref(projectId, entry.key), onClick: onOpen, className: rowClass, children: [_jsx(TabIcon, { "aria-hidden": true }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: entry.label }), entry.key === 'review' && reviewCount > 0 ? _jsx(CountBadge, { count: reviewCount, tone: "waiting" }) : null] }) }, entry.key));
|
|
256
|
+
};
|
|
257
|
+
const primary = shown.filter((entry) => entry.key === 'agent');
|
|
258
|
+
const library = shown.filter((entry) => entry.key !== 'agent' && entry.key !== 'config');
|
|
259
|
+
const trailing = shown.filter((entry) => entry.key === 'config');
|
|
260
|
+
const members = canReadMembers && accountId ? (_jsx("li", { children: _jsxs(HubLink, { to: hubTarget(accountId, { tab: 'access-projects', project: projectId }), onClick: onOpen, className: rowClass, children: [_jsx(UsersIcon, { "aria-hidden": true }), _jsx("span", { className: "min-w-0 flex-1 truncate", children: tI18nComplete.raw('text1044a4c056d0') })] }) }, "members")) : null;
|
|
261
|
+
const groups = [primary.map(tabRow), library.map(tabRow), [members, ...trailing.map(tabRow)].filter(Boolean)].filter((group) => group.length > 0);
|
|
262
|
+
return (_jsx(NavHoverCardList, { children: groups.map((group, index) => (_jsxs(Fragment, { children: [index > 0 ? _jsx("li", { "aria-hidden": true, className: cn(MENU_SEPARATOR, '-mx-1') }) : null, group] }, index))) }));
|
|
206
263
|
}
|
|
@@ -4,7 +4,7 @@ export { isEmptyMessageUnresolvedBrowserChunkNoise, isStaleWebpackRuntimeCallNoi
|
|
|
4
4
|
export { isClientRequestTimeoutMessage, isExpectedBillingGateMessage, isExpectedCompactionNoModelMessage, isGitMirrorUnavailableNoiseMessage, isModelNotServableNoise, isRuntimeNotReadyNoiseMessage, isServerDeadlineNoiseMessage, } from './browser-noise/rules/expected-states.js';
|
|
5
5
|
export { isCaptchaInterceptorNoise, isExtensionRejectedObjectNoise, isExtensionSource, isInjectedAppSource, isInjectedScriptSendMessageNoise, isInpageJsNoErrorMessageNoise, isInpageWalletStreamNoise, isTronLinkProxyNoise, isUserscriptManagerNoise, } from './browser-noise/rules/extensions.js';
|
|
6
6
|
export { isCanvasImageDataOOMNoise, isPaperShaderImageUniformNoise, isPaperShaderNullContextNoise, isPaperShaderWebGLUnsupportedNoise, isSpoofedWebGLGetParameterNoise, } from './browser-noise/rules/graphics.js';
|
|
7
|
-
export { isOneTrustJsonParseNoise, isRedefineInjectedWalletNoise, isRedefineWebdriverNoise, isVercelLiveFeedbackNoise, } from './browser-noise/rules/injected-scripts.js';
|
|
7
|
+
export { isGoogletagUndefinedNoise, isOneTrustJsonParseNoise, isRedefineInjectedWalletNoise, isRedefineWebdriverNoise, isVercelLiveFeedbackNoise, } from './browser-noise/rules/injected-scripts.js';
|
|
8
8
|
export { isKnownBrowserNoiseMessage, isKnownTestNoiseMessage, } from './browser-noise/rules/messages.js';
|
|
9
9
|
export { isConnectionClosedNoise, isFailedToSendMessageNoise, isFramelessNetworkErrorNoise, isSignalTimeoutNoise, } from './browser-noise/rules/network.js';
|
|
10
10
|
export { isIosWebViewInjectedStackOverflowNoise, isOldBrowserDomNullDerefNoise, isFirefoxDeadObjectUnattributableNoise, isOldBrowserSyntaxParseError, isOldWebkitRegexNoiseMessage, isUndefinedVariableThirdPartyNoise, isUnresolvableStackOverflowNoise, } from './browser-noise/rules/old-browsers.js';
|
|
@@ -29,7 +29,7 @@ export { isEmptyMessageUnresolvedBrowserChunkNoise, isStaleWebpackRuntimeCallNoi
|
|
|
29
29
|
export { isClientRequestTimeoutMessage, isExpectedBillingGateMessage, isExpectedCompactionNoModelMessage, isGitMirrorUnavailableNoiseMessage, isModelNotServableNoise, isRuntimeNotReadyNoiseMessage, isServerDeadlineNoiseMessage, } from './browser-noise/rules/expected-states.js';
|
|
30
30
|
export { isCaptchaInterceptorNoise, isExtensionRejectedObjectNoise, isExtensionSource, isInjectedAppSource, isInjectedScriptSendMessageNoise, isInpageJsNoErrorMessageNoise, isInpageWalletStreamNoise, isTronLinkProxyNoise, isUserscriptManagerNoise, } from './browser-noise/rules/extensions.js';
|
|
31
31
|
export { isCanvasImageDataOOMNoise, isPaperShaderImageUniformNoise, isPaperShaderNullContextNoise, isPaperShaderWebGLUnsupportedNoise, isSpoofedWebGLGetParameterNoise, } from './browser-noise/rules/graphics.js';
|
|
32
|
-
export { isOneTrustJsonParseNoise, isRedefineInjectedWalletNoise, isRedefineWebdriverNoise, isVercelLiveFeedbackNoise, } from './browser-noise/rules/injected-scripts.js';
|
|
32
|
+
export { isGoogletagUndefinedNoise, isOneTrustJsonParseNoise, isRedefineInjectedWalletNoise, isRedefineWebdriverNoise, isVercelLiveFeedbackNoise, } from './browser-noise/rules/injected-scripts.js';
|
|
33
33
|
export { isKnownBrowserNoiseMessage, isKnownTestNoiseMessage, } from './browser-noise/rules/messages.js';
|
|
34
34
|
export { isConnectionClosedNoise, isFailedToSendMessageNoise, isFramelessNetworkErrorNoise, isSignalTimeoutNoise, } from './browser-noise/rules/network.js';
|
|
35
35
|
export { isIosWebViewInjectedStackOverflowNoise, isOldBrowserDomNullDerefNoise, isFirefoxDeadObjectUnattributableNoise, isOldBrowserSyntaxParseError, isOldWebkitRegexNoiseMessage, isUndefinedVariableThirdPartyNoise, isUnresolvableStackOverflowNoise, } from './browser-noise/rules/old-browsers.js';
|
|
@@ -70,6 +70,13 @@ export declare function isInjectedWalletProviderWriteNoise(input: {
|
|
|
70
70
|
filename?: unknown;
|
|
71
71
|
} | undefined>;
|
|
72
72
|
}): boolean;
|
|
73
|
+
export declare function isGoogletagUndefinedNoise(input: {
|
|
74
|
+
message?: unknown;
|
|
75
|
+
filename?: unknown;
|
|
76
|
+
frames?: Array<{
|
|
77
|
+
filename?: unknown;
|
|
78
|
+
} | undefined>;
|
|
79
|
+
}): boolean;
|
|
73
80
|
/** Vercel toolbar frames have a reserved source path outside app bundles. */
|
|
74
81
|
export declare function isVercelLiveFeedbackNoise(input: {
|
|
75
82
|
filename?: unknown;
|
|
@@ -213,6 +213,20 @@ export function isInjectedWalletProviderWriteNoise(input) {
|
|
|
213
213
|
return (UNDEFINED_WALLET_PROVIDER_WRITE_MESSAGE.test(stripped) &&
|
|
214
214
|
!sources.some((source) => isBrowserBundleSource(source) || isFirstPartyResolvedSource(source)));
|
|
215
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* A tag that calls Google Publisher Tag (`googletag`) before its library
|
|
218
|
+
* loads: `googletag is not defined` (V8, Gecko) or `Can't find variable:
|
|
219
|
+
* googletag` (WebKit). Better Stack, Kortix Frontend prod, 2026-10-27
|
|
220
|
+
* (KRTX-3549): 71 events in 2 s from one `<anonymous>` frame, 0 users. Kortix
|
|
221
|
+
* never loads or calls `googletag`; its Google Tag Manager writes only to
|
|
222
|
+
* `dataLayer`. A frame in our bundles or resolved first-party source keeps
|
|
223
|
+
* reporting.
|
|
224
|
+
*/
|
|
225
|
+
const GOOGLETAG_UNDEFINED_MESSAGE = /^(?:googletag is not defined|Can't find variable: googletag)$/;
|
|
226
|
+
export function isGoogletagUndefinedNoise(input) {
|
|
227
|
+
return (GOOGLETAG_UNDEFINED_MESSAGE.test(stripErrorWrappers(normalizeString(input.message))) &&
|
|
228
|
+
!sourcesOf(input).some((source) => isBrowserBundleSource(source) || isFirstPartyResolvedSource(source)));
|
|
229
|
+
}
|
|
216
230
|
/** Vercel toolbar frames have a reserved source path outside app bundles. */
|
|
217
231
|
export function isVercelLiveFeedbackNoise(input) {
|
|
218
232
|
const sources = sourcesOf(input);
|
|
@@ -225,5 +239,6 @@ export const INJECTED_SCRIPT_RULES = [
|
|
|
225
239
|
{ id: 'redefine-webdriver', appliesTo: 'both', match: isRedefineWebdriverNoise },
|
|
226
240
|
{ id: 'redefine-wallet-provider', appliesTo: 'both', match: isRedefineInjectedWalletNoise },
|
|
227
241
|
{ id: 'wallet-provider-write', appliesTo: 'both', match: isInjectedWalletProviderWriteNoise },
|
|
242
|
+
{ id: 'googletag-undefined', appliesTo: 'both', match: isGoogletagUndefinedNoise },
|
|
228
243
|
{ id: 'vercel-live-feedback', appliesTo: 'both', match: isVercelLiveFeedbackNoise },
|
|
229
244
|
];
|
|
@@ -3,7 +3,7 @@ export type ManifestVersion = 1 | 2 | 3;
|
|
|
3
3
|
export declare function detectManifestVersion(manifestRaw: string | null | undefined): ManifestVersion;
|
|
4
4
|
/** The manifest file a version lives in. An unresolved read (`null`) reads as v1. */
|
|
5
5
|
export declare function manifestFilename(version: number | null): 'kortix.toml' | 'kortix.yaml';
|
|
6
|
-
/**
|
|
6
|
+
/** A v1 or v2 project is offered the upgrade to v3. `null` (not read yet) is not. */
|
|
7
7
|
export declare function manifestNeedsUpgrade(version: ManifestVersion | null): boolean;
|
|
8
8
|
export interface ProjectManifestVersionState {
|
|
9
9
|
/** `null` while the project-detail fetch is still in flight — callers that
|
|
@@ -27,9 +27,9 @@ export function detectManifestVersion(manifestRaw) {
|
|
|
27
27
|
export function manifestFilename(version) {
|
|
28
28
|
return (version ?? 1) >= 2 ? 'kortix.yaml' : 'kortix.toml';
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
30
|
+
/** A v1 or v2 project is offered the upgrade to v3. `null` (not read yet) is not. */
|
|
31
31
|
export function manifestNeedsUpgrade(version) {
|
|
32
|
-
return version === 1;
|
|
32
|
+
return version === 1 || version === 2;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* Reads the SAME `qk.project.detail(id)` query the rest of Customize already
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
import type { ProjectMemoryLayerScope } from '@kortix/sdk';
|
|
3
|
+
/** A memory layer as a link target: its scope and its key (`company` or the space id). */
|
|
4
|
+
export interface MemoryLayerRef {
|
|
5
|
+
scope: ProjectMemoryLayerScope;
|
|
6
|
+
key: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Where a memory page opens: the Company Memory page, or its channel's or DM's
|
|
10
|
+
* Memory tab, with `?page=` (`&history=1` opens its History too). A channel or
|
|
11
|
+
* DM the reader is on keeps its other params, so an open thread stays beside
|
|
12
|
+
* the tab. Null when the host serves no such page or the space is not loaded.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useMemoryPageHref(projectId: string | null | undefined, enabled?: boolean): (layer: MemoryLayerRef, pageId: string, options?: {
|
|
15
|
+
history?: boolean;
|
|
16
|
+
}) => string | null;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useProjectSpaces } from '@kortix/sdk/react';
|
|
3
|
+
import { useCallback } from 'react';
|
|
4
|
+
import { uiRoutes } from '../../lib/routes.js';
|
|
5
|
+
import { useUiPathname, useUiSearchParams } from '../../providers/ui-provider.js';
|
|
6
|
+
/**
|
|
7
|
+
* Where a memory page opens: the Company Memory page, or its channel's or DM's
|
|
8
|
+
* Memory tab, with `?page=` (`&history=1` opens its History too). A channel or
|
|
9
|
+
* DM the reader is on keeps its other params, so an open thread stays beside
|
|
10
|
+
* the tab. Null when the host serves no such page or the space is not loaded.
|
|
11
|
+
*/
|
|
12
|
+
export function useMemoryPageHref(projectId, enabled = true) {
|
|
13
|
+
const pathname = useUiPathname();
|
|
14
|
+
const searchParams = useUiSearchParams();
|
|
15
|
+
const spaces = useProjectSpaces(projectId, { enabled }).data;
|
|
16
|
+
return useCallback((layer, pageId, options) => {
|
|
17
|
+
if (!projectId)
|
|
18
|
+
return null;
|
|
19
|
+
if (layer.scope === 'company') {
|
|
20
|
+
const memory = uiRoutes().memory(projectId);
|
|
21
|
+
if (!memory)
|
|
22
|
+
return null;
|
|
23
|
+
const params = new URLSearchParams({ page: pageId });
|
|
24
|
+
if (options?.history)
|
|
25
|
+
params.set('history', '1');
|
|
26
|
+
return `${memory}?${params.toString()}`;
|
|
27
|
+
}
|
|
28
|
+
const space = spaces?.find((candidate) => candidate.space_id === layer.key);
|
|
29
|
+
let path = null;
|
|
30
|
+
if (space?.kind === 'channel' && space.slug)
|
|
31
|
+
path = uiRoutes().channel(projectId, space.slug);
|
|
32
|
+
else if (space?.kind === 'dm' && space.dm_agent_name)
|
|
33
|
+
path = uiRoutes().dm(projectId, space.dm_agent_name);
|
|
34
|
+
if (!path)
|
|
35
|
+
return null;
|
|
36
|
+
const here = pathname === path || !!pathname?.endsWith(path);
|
|
37
|
+
const params = new URLSearchParams(here ? searchParams.toString() : '');
|
|
38
|
+
params.set('tab', 'memory');
|
|
39
|
+
params.set('page', pageId);
|
|
40
|
+
if (options?.history)
|
|
41
|
+
params.set('history', '1');
|
|
42
|
+
else
|
|
43
|
+
params.delete('history');
|
|
44
|
+
return `${here ? pathname : path}?${params.toString()}`;
|
|
45
|
+
}, [projectId, pathname, searchParams, spaces]);
|
|
46
|
+
}
|
|
@@ -22,10 +22,7 @@ import { useFeatureFlag } from '@kortix/sdk/react';
|
|
|
22
22
|
*/
|
|
23
23
|
export function useProjectFeatureFlags(projectId) {
|
|
24
24
|
const marketplace = useFeatureFlag(projectId, 'marketplace');
|
|
25
|
-
const connectorsApiDiscover = useFeatureFlag(projectId, 'connectors_api_discover');
|
|
26
|
-
const agentmailEmail = useFeatureFlag(projectId, 'agentmail_email');
|
|
27
25
|
const metaAgent = useFeatureFlag(projectId, 'meta_agent');
|
|
28
|
-
const monitors = useFeatureFlag(projectId, 'monitors');
|
|
29
26
|
const reminders = useFeatureFlag(projectId, 'reminders');
|
|
30
27
|
const warmSessions = useFeatureFlag(projectId, 'warm_sessions');
|
|
31
28
|
const secretsEgress = useFeatureFlag(projectId, 'secrets_egress');
|
|
@@ -38,17 +35,17 @@ export function useProjectFeatureFlags(projectId) {
|
|
|
38
35
|
const drives = useFeatureFlag(projectId, 'drives');
|
|
39
36
|
const sessionLog = useFeatureFlag(projectId, 'session_log');
|
|
40
37
|
const sessionLogRestore = useFeatureFlag(projectId, 'session_log_restore');
|
|
41
|
-
const
|
|
38
|
+
const projectChannels = useFeatureFlag(projectId, 'project_channels');
|
|
42
39
|
const agentRooms = useFeatureFlag(projectId, 'agent_rooms');
|
|
43
40
|
const goals = useFeatureFlag(projectId, 'goals');
|
|
41
|
+
const artifacts = useFeatureFlag(projectId, 'artifacts');
|
|
42
|
+
const emailChannel = useFeatureFlag(projectId, 'email_channel');
|
|
44
43
|
const workspaceVolume = useFeatureFlag(projectId, 'workspace_volume');
|
|
44
|
+
const sessionGroups = useFeatureFlag(projectId, 'session_groups');
|
|
45
45
|
return {
|
|
46
46
|
flags: {
|
|
47
47
|
marketplace: marketplace.enabled,
|
|
48
|
-
connectors_api_discover: connectorsApiDiscover.enabled,
|
|
49
|
-
agentmail_email: agentmailEmail.enabled,
|
|
50
48
|
meta_agent: metaAgent.enabled,
|
|
51
|
-
monitors: monitors.enabled,
|
|
52
49
|
reminders: reminders.enabled,
|
|
53
50
|
warm_sessions: warmSessions.enabled,
|
|
54
51
|
secrets_egress: secretsEgress.enabled,
|
|
@@ -61,12 +58,15 @@ export function useProjectFeatureFlags(projectId) {
|
|
|
61
58
|
drives: drives.enabled,
|
|
62
59
|
session_log: sessionLog.enabled,
|
|
63
60
|
session_log_restore: sessionLogRestore.enabled,
|
|
64
|
-
|
|
61
|
+
project_channels: projectChannels.enabled,
|
|
65
62
|
agent_rooms: agentRooms.enabled,
|
|
66
63
|
goals: goals.enabled,
|
|
64
|
+
artifacts: artifacts.enabled,
|
|
65
|
+
email_channel: emailChannel.enabled,
|
|
67
66
|
workspace_volume: workspaceVolume.enabled,
|
|
67
|
+
session_groups: sessionGroups.enabled,
|
|
68
68
|
},
|
|
69
69
|
// The trailing hook's loading state — keep this on the LAST hook above.
|
|
70
|
-
isLoading:
|
|
70
|
+
isLoading: sessionGroups.isLoading,
|
|
71
71
|
};
|
|
72
72
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
2
|
/**
|
|
3
3
|
* HEIC/HEIF → JPEG conversion.
|
|
4
|
-
*
|
|
4
|
+
* The CSP-safe decoder is lazy-loaded; production never permits unsafe-eval.
|
|
5
5
|
*/
|
|
6
6
|
export declare function isHeicFile(filename: string): boolean;
|
|
7
7
|
export declare function convertHeicBlobToJpeg(blob: Blob): Promise<Blob>;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* HEIC/HEIF → JPEG conversion.
|
|
3
|
-
*
|
|
3
|
+
* The CSP-safe decoder is lazy-loaded; production never permits unsafe-eval.
|
|
4
4
|
*/
|
|
5
5
|
const HEIC_EXT = new Set(['heic', 'heif']);
|
|
6
6
|
export function isHeicFile(filename) {
|
|
7
7
|
return HEIC_EXT.has(filename.split('.').pop()?.toLowerCase() || '');
|
|
8
8
|
}
|
|
9
9
|
export async function convertHeicBlobToJpeg(blob) {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
return Array.isArray(result) ? result[0] : result;
|
|
10
|
+
const { heicTo } = await import('heic-to/csp');
|
|
11
|
+
return heicTo({ blob, type: 'image/jpeg', quality: 0.92 });
|
|
13
12
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import type { UiTranslator } from '../../i18n/index.js';
|
|
3
3
|
import { type TurnCompleteMsg } from './turn-broadcast.js';
|
|
4
4
|
import { type NotificationPreferences } from '@kortix/sdk';
|
|
5
|
+
import type { QueryClient } from '@tanstack/react-query';
|
|
5
6
|
/** The push `type` of each inbox kind (`pushTypeOf` in `@kortix/shared/notification-kinds`). */
|
|
6
7
|
export type WebNotificationType = 'completion' | 'error' | 'question' | 'permission' | 'shared' | 'automation_failed' | 'automation_recovered' | 'capture_device_down' | 'capture_device_recovered' | 'message';
|
|
7
8
|
export interface WebNotificationPayload {
|
|
@@ -36,6 +37,11 @@ export interface WebNotificationPayload {
|
|
|
36
37
|
preview?: string;
|
|
37
38
|
/** Localized "Open session" for the finished-turn toast. */
|
|
38
39
|
openSessionLabel?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Set when the turn ended while a channel or DM page was on screen: its
|
|
42
|
+
* thread opens in that page's panel (`?thread=`), not on the session page.
|
|
43
|
+
*/
|
|
44
|
+
threadHref?: string;
|
|
39
45
|
/** The open change request the finished turn produced: the toast offers Review. */
|
|
40
46
|
changeRequest?: {
|
|
41
47
|
crId: string;
|
|
@@ -59,6 +65,20 @@ export declare function setServerPushPreferences(kinds: NotificationPreferences[
|
|
|
59
65
|
* via Cmd+Tab / Alt+Tab (`!document.hasFocus()`).
|
|
60
66
|
*/
|
|
61
67
|
export declare function isTabHidden(): boolean;
|
|
68
|
+
/**
|
|
69
|
+
* A finished turn opens in the thread panel of the channel or DM page on
|
|
70
|
+
* screen (`?thread=<id>`) only when it is one of that space's threads: the
|
|
71
|
+
* path's project is the session's, and the cached thread list of the space
|
|
72
|
+
* holds the session. Null otherwise, so any other session keeps its session
|
|
73
|
+
* page. Reads the query cache; never fetches.
|
|
74
|
+
*/
|
|
75
|
+
export declare function spacesThreadHref(location: {
|
|
76
|
+
pathname: string;
|
|
77
|
+
search: string;
|
|
78
|
+
}, session: {
|
|
79
|
+
sessionId: string;
|
|
80
|
+
projectId: string | null | undefined;
|
|
81
|
+
}, cache: QueryClient): string | null;
|
|
62
82
|
/**
|
|
63
83
|
* Check if the user is currently viewing a specific session.
|
|
64
84
|
* Checks the tab store (dashboard session tabs) and the current URL
|
|
@@ -33,6 +33,7 @@ import { hasWebPushSubscription } from '../notifications/web-push.js';
|
|
|
33
33
|
import { customToast, dismissToast, ToastCard, toastIcon, errorToast, infoToast, successToast, warningToast, } from '../../primitives/toast.js';
|
|
34
34
|
import { ClockIcon, GitPullRequestIcon } from '@phosphor-icons/react';
|
|
35
35
|
import { SessionFailedCard, SessionStackCard, } from '../notifications/session-toast-cards.js';
|
|
36
|
+
import { decodeSpaceSegment } from '../../lib/routes.js';
|
|
36
37
|
import { logger } from './logger.js';
|
|
37
38
|
import { softNavigate } from './navigation/router-bridge.js';
|
|
38
39
|
import { projectSessionHref } from './navigation/session-href.js';
|
|
@@ -43,6 +44,7 @@ import { openTabAndNavigate, useTabStore } from '../stores/tab-store.js';
|
|
|
43
44
|
import { useTurnAttentionStore } from '../stores/turn-attention-store.js';
|
|
44
45
|
import { useWebNotificationStore } from '../stores/web-notification-store.js';
|
|
45
46
|
import { listChangeRequests, normalizeAppPathname, } from '@kortix/sdk';
|
|
47
|
+
import { findCachedProjectSession, qk } from '@kortix/sdk/react';
|
|
46
48
|
// ============================================================================
|
|
47
49
|
// Server push preference
|
|
48
50
|
// ============================================================================
|
|
@@ -169,6 +171,32 @@ export function isTabHidden() {
|
|
|
169
171
|
return false;
|
|
170
172
|
return document.hidden || !document.hasFocus();
|
|
171
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* A finished turn opens in the thread panel of the channel or DM page on
|
|
176
|
+
* screen (`?thread=<id>`) only when it is one of that space's threads: the
|
|
177
|
+
* path's project is the session's, and the cached thread list of the space
|
|
178
|
+
* holds the session. Null otherwise, so any other session keeps its session
|
|
179
|
+
* page. Reads the query cache; never fetches.
|
|
180
|
+
*/
|
|
181
|
+
export function spacesThreadHref(location, session, cache) {
|
|
182
|
+
// An optional two-letter locale segment leads (`/de/projects/…`).
|
|
183
|
+
const match = /^(?:\/[a-z]{2})?\/projects\/([^/]+)\/(c|dm)\/([^/]+)\/?$/.exec(normalizeAppPathname(location.pathname));
|
|
184
|
+
if (!match || match[1] !== session.projectId)
|
|
185
|
+
return null;
|
|
186
|
+
const [, projectId, kind, segment] = match;
|
|
187
|
+
const name = decodeSpaceSegment(segment);
|
|
188
|
+
const space = cache
|
|
189
|
+
.getQueryData(qk.project.spaces(projectId))
|
|
190
|
+
?.find((candidate) => (kind === 'c' ? candidate.slug === name : candidate.dm_agent_name === name));
|
|
191
|
+
if (!space)
|
|
192
|
+
return null;
|
|
193
|
+
const thread = findCachedProjectSession(cache, projectId, (row) => row.session_id === session.sessionId && row.space_id === space.space_id);
|
|
194
|
+
if (!thread)
|
|
195
|
+
return null;
|
|
196
|
+
const params = new URLSearchParams(location.search);
|
|
197
|
+
params.set('thread', session.sessionId);
|
|
198
|
+
return `${location.pathname}?${params.toString()}`;
|
|
199
|
+
}
|
|
172
200
|
/**
|
|
173
201
|
* Check if the user is currently viewing a specific session.
|
|
174
202
|
* Checks the tab store (dashboard session tabs) and the current URL
|
|
@@ -199,6 +227,9 @@ export function isViewingSession(sessionId) {
|
|
|
199
227
|
const path = normalizeAppPathname(window.location.pathname);
|
|
200
228
|
if (path.includes(sessionId))
|
|
201
229
|
return true;
|
|
230
|
+
// A channel or DM page with the thread open in its panel.
|
|
231
|
+
if (new URLSearchParams(window.location.search).get('thread') === sessionId)
|
|
232
|
+
return true;
|
|
202
233
|
if (path.startsWith('/onboarding'))
|
|
203
234
|
return true;
|
|
204
235
|
}
|
|
@@ -392,7 +423,10 @@ const NOTIFICATION_TOAST_VARIANT = {
|
|
|
392
423
|
};
|
|
393
424
|
/** Open what the notification is about: its session, or its `href`. */
|
|
394
425
|
function openPayload(payload, forceNavigation) {
|
|
395
|
-
if (payload.
|
|
426
|
+
if (payload.threadHref) {
|
|
427
|
+
softNavigate(payload.threadHref);
|
|
428
|
+
}
|
|
429
|
+
else if (payload.sessionId) {
|
|
396
430
|
navigateToSession(payload.sessionId, payload.body, {
|
|
397
431
|
forceNavigation,
|
|
398
432
|
projectId: payload.projectId,
|
|
@@ -594,12 +628,22 @@ handoff) {
|
|
|
594
628
|
*/
|
|
595
629
|
export function notifyTaskCompleteFor({ sessionId, sessionTitle, projectId, notificationCenter }, tI18nComplete) {
|
|
596
630
|
noteTurnCompleteShown(sessionId);
|
|
597
|
-
|
|
598
|
-
|
|
631
|
+
// On a channel or DM page the turn is a thread: it says "thread" and opens
|
|
632
|
+
// in the page's panel. A default title ("New session - <time>") names nothing.
|
|
633
|
+
const cache = getSharedQueryClient();
|
|
634
|
+
const threadHref = typeof window === 'undefined' || !cache
|
|
635
|
+
? null
|
|
636
|
+
: spacesThreadHref(window.location, { sessionId, projectId }, cache);
|
|
637
|
+
const defaultTitle = !sessionTitle || /^New session(\s-\s|$)/.test(sessionTitle);
|
|
638
|
+
const name = threadHref && defaultTitle
|
|
639
|
+
? tI18nComplete.raw('untitledThread')
|
|
640
|
+
: sessionDisplayName(sessionTitle, sessionId);
|
|
641
|
+
const label = sessionTitle && !(threadHref && defaultTitle) ? `"${name.slice(0, 60)}"` : name;
|
|
599
642
|
const payload = {
|
|
600
643
|
type: 'completion',
|
|
601
644
|
entityLabel: name,
|
|
602
|
-
openSessionLabel: tI18nComplete.raw('textb205bb47f81a'),
|
|
645
|
+
openSessionLabel: threadHref ? tI18nComplete.raw('openThreadAction') : tI18nComplete.raw('textb205bb47f81a'),
|
|
646
|
+
threadHref: threadHref ?? undefined,
|
|
603
647
|
stackTitle: (count) => tI18nComplete('textc0589750863c', { count }),
|
|
604
648
|
title: tI18nComplete.raw('text107f1806b5d7'),
|
|
605
649
|
body: tI18nComplete('text27d628c8b427', { label }),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
2
|
import type { InboxNotification } from '@kortix/sdk';
|
|
3
|
+
import { BellIcon } from '@phosphor-icons/react';
|
|
3
4
|
export interface NotificationPanelProps {
|
|
4
5
|
rows: readonly InboxNotification[];
|
|
5
6
|
state: 'loading' | 'error' | 'ready';
|
|
@@ -27,10 +28,12 @@ export declare function NotificationPanel({ rows, state, unreadCount, prompt, on
|
|
|
27
28
|
* sits. At full size it would tint the whole bell.
|
|
28
29
|
*/
|
|
29
30
|
export declare const BELL_REFLECTION_MASK = "radial-gradient(circle 12px at 100% 100%, #000 35%, transparent 100%)";
|
|
30
|
-
export declare function BellMark({ count, needsYou, surface, }: {
|
|
31
|
+
export declare function BellMark({ count, needsYou, surface, icon: Glyph, }: {
|
|
31
32
|
count: number;
|
|
32
33
|
needsYou: boolean;
|
|
33
34
|
surface?: 'bg-background' | 'bg-sidebar';
|
|
35
|
+
/** The glyph under the count: the bell, or another control's own mark. */
|
|
36
|
+
icon?: typeof BellIcon;
|
|
34
37
|
}): import("react").JSX.Element;
|
|
35
38
|
/**
|
|
36
39
|
* The bell and its popover. Renders nothing, and reads no inbox, while signed
|
|
@@ -79,11 +79,11 @@ export function NotificationPanel({ rows, state, unreadCount, prompt, onOpenRow,
|
|
|
79
79
|
* sits. At full size it would tint the whole bell.
|
|
80
80
|
*/
|
|
81
81
|
export const BELL_REFLECTION_MASK = 'radial-gradient(circle 12px at 100% 100%, #000 35%, transparent 100%)';
|
|
82
|
-
export function BellMark({ count, needsYou, surface = 'bg-background', }) {
|
|
82
|
+
export function BellMark({ count, needsYou, surface = 'bg-background', icon: Glyph = BellIcon, }) {
|
|
83
83
|
const tone = needsYou
|
|
84
84
|
? { reflection: 'text-kortix-yellow', disc: 'bg-kortix-yellow' }
|
|
85
85
|
: { reflection: 'text-kortix-blue', disc: 'bg-kortix-blue' };
|
|
86
|
-
return (_jsxs("span", { className: "relative size-4 shrink-0", children: [_jsx(
|
|
86
|
+
return (_jsxs("span", { className: "relative size-4 shrink-0", children: [_jsx(Glyph, { className: "size-4" }), count > 0 ? (_jsxs(_Fragment, { children: [_jsx(Glyph, { "aria-hidden": true, className: cn('absolute inset-0 size-4', tone.reflection), style: { maskImage: BELL_REFLECTION_MASK, WebkitMaskImage: BELL_REFLECTION_MASK } }), _jsx("span", { "aria-hidden": true, className: cn('absolute -right-2.5 -bottom-2 flex rounded-full p-px', surface), children: _jsx("span", { "data-slot": "bell-count", className: cn('text-background flex h-3.5 min-w-3.5 items-center justify-center rounded-full px-0.5 text-[9px] leading-none font-semibold tabular-nums', // audit:allow a numeral in a 13px disc on a 16px glyph; no type rung fits
|
|
87
87
|
tone.disc), children: badgeCount(count) }) })] })) : null] }));
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
export interface SelectionBarAction {
|
|
3
3
|
id: string;
|
|
4
4
|
label: string;
|
|
5
|
-
|
|
5
|
+
/** `success` for an approving verb (Approve), `destructive` for a removing one. */
|
|
6
|
+
tone?: 'default' | 'success' | 'destructive';
|
|
6
7
|
disabled?: boolean;
|
|
7
8
|
onSelect: () => void;
|
|
8
9
|
}
|
|
@@ -31,7 +31,7 @@ export function SelectionBar({ selectedCount, allSelected, canSelectAll = true,
|
|
|
31
31
|
const selectLabel = allSelected ? t.raw('text83b12c2216ef') : t.raw('text1fc9a387654d');
|
|
32
32
|
// One action: a fixed-height button that reads its label. No glyph: a
|
|
33
33
|
// verb in a bulk bar is read, not recognised.
|
|
34
|
-
const action = (a) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: a.onSelect, disabled: busy || a.disabled, className: cn('h-8 shrink-0', a.tone === 'destructive' && 'text-destructive hover:text-destructive'), children: a.label }, a.id));
|
|
34
|
+
const action = (a) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: a.onSelect, disabled: busy || a.disabled, className: cn('h-8 shrink-0', a.tone === 'destructive' && 'text-destructive hover:text-destructive', a.tone === 'success' && 'text-kortix-green hover:text-kortix-green'), children: a.label }, a.id));
|
|
35
35
|
return (_jsxs(m.div, { initial: animateIn ? { opacity: 0, transform: reduceMotion ? REST : RISE } : false, animate: {
|
|
36
36
|
opacity: 1,
|
|
37
37
|
transform: REST,
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
/**
|
|
3
|
+
* What the full-screen viewer shows under a file opened with one: a generated
|
|
4
|
+
* image's prompt (`text`) and the model that made it.
|
|
5
|
+
*/
|
|
6
|
+
export interface FileCaption {
|
|
7
|
+
text: string;
|
|
8
|
+
model?: string | null;
|
|
9
|
+
/**
|
|
10
|
+
* The sha256 of the image's bytes (R38): the viewer draws those bytes from
|
|
11
|
+
* the shared store at once, with no read.
|
|
12
|
+
*/
|
|
13
|
+
sha256?: string;
|
|
14
|
+
}
|
|
15
|
+
/** One key per sandbox file, with or without the `/workspace/` prefix. */
|
|
16
|
+
export declare function fileCaptionKey(path: string): string;
|
|
2
17
|
interface FilePreviewState {
|
|
3
18
|
/** Whether the preview dialog is open */
|
|
4
19
|
isOpen: boolean;
|
|
@@ -6,10 +21,22 @@ interface FilePreviewState {
|
|
|
6
21
|
filePath: string | null;
|
|
7
22
|
/** Optional line number to highlight */
|
|
8
23
|
lineNumber?: number;
|
|
9
|
-
/**
|
|
10
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Captions of the files opened with one, by `fileCaptionKey`. Kept after
|
|
26
|
+
* the open: the session panel's viewer, the Files explorer and this dialog
|
|
27
|
+
* all read it for the path they show.
|
|
28
|
+
*/
|
|
29
|
+
captions: Record<string, FileCaption>;
|
|
30
|
+
/** Open the preview dialog with the given file; `caption` shows under it in the viewer. */
|
|
31
|
+
openPreview: (filePath: string, lineNumber?: number, caption?: FileCaption) => void;
|
|
11
32
|
/** Close the preview dialog */
|
|
12
33
|
closePreview: () => void;
|
|
13
34
|
}
|
|
14
35
|
export declare const useFilePreviewStore: import("zustand").UseBoundStore<import("zustand").StoreApi<FilePreviewState>>;
|
|
36
|
+
/**
|
|
37
|
+
* The caption the viewer shows under `filePath`, when it was opened with one.
|
|
38
|
+
* The live state on both snapshots: a static render (tests, a prerender)
|
|
39
|
+
* reads what was opened, not the store's initial state.
|
|
40
|
+
*/
|
|
41
|
+
export declare function useFileCaption(filePath: string): FileCaption | undefined;
|
|
15
42
|
export {};
|