@kortix/ui 0.14.12 → 0.14.14
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 +1 -1
- package/dist/_vendor/kortix-shared.js +521 -7045
- package/dist/_vendor/shared/app-config.d.ts +8 -0
- package/dist/_vendor/shared/artifact-annotations.d.ts +708 -0
- package/dist/_vendor/shared/artifact-comments.d.ts +327 -0
- package/dist/_vendor/shared/index.d.ts +3 -1
- package/dist/_vendor/shared/my-kortix-agent.d.ts +40 -0
- package/dist/_vendor/shared/peer-message-prompt.d.ts +35 -0
- package/dist/_vendor/shared/pixel-mark.d.ts +11 -0
- package/dist/_vendor/shared/prompt-attachments.d.ts +1 -0
- package/dist/_vendor/shared/reminder-prompt.d.ts +8 -2
- package/dist/_vendor/shared/runtime-versions.d.ts +8 -0
- package/dist/artifacts/artifact-frame.d.ts +1 -0
- package/dist/artifacts/artifact-frame.js +18 -5
- package/dist/artifacts/frame-policy.d.ts +1 -1
- package/dist/artifacts/frame-policy.js +10 -5
- package/dist/customize/agents/agent-access-text.d.ts +16 -0
- package/dist/customize/agents/agent-access-text.js +54 -0
- package/dist/customize/agents/agent-approval-rules.d.ts +8 -0
- package/dist/customize/agents/agent-approval-rules.js +26 -0
- package/dist/customize/agents/agent-authority-card.js +4 -1
- package/dist/customize/agents/agent-cover-card.d.ts +4 -1
- package/dist/customize/agents/agent-cover-card.js +2 -2
- package/dist/customize/agents/agent-detail-aside.d.ts +1 -2
- package/dist/customize/agents/agent-detail-aside.js +8 -11
- package/dist/customize/agents/agent-drives-section.d.ts +23 -7
- package/dist/customize/agents/agent-drives-section.js +107 -41
- package/dist/customize/agents/agent-instructions.d.ts +11 -0
- package/dist/customize/agents/agent-instructions.js +114 -0
- package/dist/customize/agents/agent-model-view.d.ts +17 -0
- package/dist/customize/agents/agent-model-view.js +67 -0
- package/dist/customize/agents/agent-overview.d.ts +53 -0
- package/dist/customize/agents/agent-overview.js +242 -0
- package/dist/customize/agents/agent-page-chrome.d.ts +128 -0
- package/dist/customize/agents/agent-page-chrome.js +145 -0
- package/dist/customize/agents/agent-page.d.ts +13 -1
- package/dist/customize/agents/agent-page.js +478 -367
- package/dist/customize/agents/agent-pin-button.d.ts +10 -0
- package/dist/customize/agents/agent-pin-button.js +20 -0
- package/dist/customize/agents/agent-policy-sets-section.d.ts +16 -0
- package/dist/customize/agents/agent-policy-sets-section.js +80 -0
- package/dist/customize/agents/agent-policy-sets.js +1 -1
- package/dist/customize/agents/agent-section-rail.d.ts +21 -0
- package/dist/customize/agents/agent-section-rail.js +23 -0
- package/dist/customize/agents/agent-share-control.d.ts +4 -3
- package/dist/customize/agents/agent-share-control.js +15 -16
- package/dist/customize/agents/{agent-people-section.d.ts → agent-share-dialog.d.ts} +3 -1
- package/dist/customize/agents/{agent-people-section.js → agent-share-dialog.js} +21 -21
- package/dist/customize/agents/agent-tabs.d.ts +95 -0
- package/dist/customize/agents/agent-tabs.js +199 -0
- package/dist/customize/agents/agents-page.d.ts +0 -21
- package/dist/customize/agents/agents-page.js +104 -118
- package/dist/customize/agents/connectors-required.d.ts +16 -0
- package/dist/customize/agents/connectors-required.js +19 -0
- package/dist/customize/agents/create-agent-modal.d.ts +19 -0
- package/dist/customize/agents/create-agent-modal.js +94 -0
- package/dist/customize/connectors/agent-access.d.ts +4 -4
- package/dist/customize/connectors/agent-access.js +7 -10
- package/dist/customize/connectors/connector-identity.d.ts +12 -0
- package/dist/customize/connectors/connector-identity.js +15 -2
- package/dist/customize/connectors/connector-routes.js +2 -2
- package/dist/customize/connectors/connectors-page.d.ts +14 -1
- package/dist/customize/connectors/connectors-page.js +101 -32
- package/dist/customize/connectors/detail/app-page.js +1 -1
- package/dist/customize/connectors/detail/connector-agents.js +0 -3
- package/dist/customize/connectors/detail/connector-page.d.ts +1 -1
- package/dist/customize/connectors/detail/connector-page.js +5 -2
- package/dist/customize/connectors/detail/connector-policy-sets.js +1 -1
- package/dist/customize/connectors/detail/connector-triggers.js +2 -2
- package/dist/customize/connectors/use-agent-access.d.ts +7 -5
- package/dist/customize/connectors/use-agent-access.js +2 -6
- package/dist/customize/models/models-page.d.ts +7 -1
- package/dist/customize/models/models-page.js +2 -2
- package/dist/customize/project-settings/project-admin-sections.d.ts +63 -0
- package/dist/customize/project-settings/project-admin-sections.js +80 -0
- package/dist/customize/project-settings/project-settings-page.d.ts +1 -1
- package/dist/customize/project-settings/project-settings-page.js +4 -13
- package/dist/customize/project-settings/project-settings-sections.d.ts +5 -5
- package/dist/customize/project-settings/project-settings-sections.js +6 -20
- package/dist/customize/providers/provider-accordion.js +29 -17
- package/dist/customize/providers/provider-connect.js +1 -1
- package/dist/customize/providers/provider-sheet.d.ts +4 -1
- package/dist/customize/providers/provider-sheet.js +15 -5
- package/dist/customize/secrets/secrets-page.d.ts +5 -1
- package/dist/customize/secrets/secrets-page.js +2 -2
- package/dist/customize/sections/gateway-view.d.ts +10 -2
- package/dist/customize/sections/gateway-view.js +16 -4
- package/dist/customize/sections/llm-provider/chatgpt-subscription-connect.d.ts +12 -5
- package/dist/customize/sections/llm-provider/chatgpt-subscription-connect.js +131 -8
- package/dist/customize/sections/llm-provider/claude-code-step.d.ts +10 -0
- package/dist/customize/sections/llm-provider/claude-code-step.js +32 -0
- package/dist/customize/sections/llm-provider/models-tab.js +5 -1
- package/dist/customize/sections/view/account-secret-resources-panel.d.ts +5 -3
- package/dist/customize/sections/view/account-secret-resources-panel.js +122 -19
- package/dist/customize/sections/view/agent-editor-access-fields.d.ts +1 -1
- package/dist/customize/sections/view/agent-editor-access-fields.js +8 -4
- package/dist/customize/sections/view/agent-editor-basics-fields.d.ts +4 -1
- package/dist/customize/sections/view/agent-editor-basics-fields.js +33 -4
- package/dist/customize/sections/view/agent-editor-catalog.d.ts +2 -2
- package/dist/customize/sections/view/agent-editor-catalog.js +10 -12
- package/dist/customize/sections/view/agent-editor-primitives.d.ts +1 -1
- package/dist/customize/sections/view/agent-editor-primitives.js +4 -4
- package/dist/customize/sections/view/agent-editor.d.ts +37 -26
- package/dist/customize/sections/view/agent-editor.js +19 -19
- package/dist/customize/sections/view/grant-mode-field.d.ts +8 -20
- package/dist/customize/sections/view/grant-mode-field.js +31 -57
- package/dist/customize/sections/view/permission-editor.d.ts +3 -1
- package/dist/customize/sections/view/permission-editor.js +19 -10
- package/dist/customize/sections/view/review-view.d.ts +8 -0
- package/dist/customize/sections/view/review-view.js +12 -1
- package/dist/customize/sections/view/secret-delivery.js +1 -4
- package/dist/customize/sections/view/secrets-view.d.ts +7 -1
- package/dist/customize/sections/view/secrets-view.js +42 -6
- package/dist/customize/settings/rail.js +2 -8
- package/dist/customize/settings/settings-tabs.d.ts +2 -2
- package/dist/customize/settings/settings-tabs.js +17 -19
- package/dist/customize/settings/tabs/experimental-tab.d.ts +3 -0
- package/dist/customize/settings/tabs/experimental-tab.js +6 -1
- package/dist/customize/settings/tabs/sandbox-tab.d.ts +4 -6
- package/dist/customize/settings/tabs/sandbox-tab.js +9 -9
- package/dist/customize/shared/access-list.d.ts +39 -0
- package/dist/customize/shared/access-list.js +62 -0
- package/dist/customize/shared/agent-resource-scope.d.ts +87 -0
- package/dist/customize/shared/agent-resource-scope.js +123 -0
- package/dist/customize/shared/capability-library.d.ts +41 -0
- package/dist/customize/shared/capability-library.js +271 -0
- package/dist/customize/shared/capability-page-shell.d.ts +18 -1
- package/dist/customize/shared/capability-page-shell.js +21 -1
- package/dist/customize/shared/catalog/catalog-space-tabs.d.ts +14 -0
- package/dist/customize/shared/catalog/catalog-space-tabs.js +20 -0
- package/dist/customize/shared/customize-tab-bar.d.ts +13 -0
- package/dist/customize/shared/customize-tab-bar.js +95 -0
- package/dist/customize/shared/entity/entity-modal.d.ts +17 -1
- package/dist/customize/shared/entity/entity-modal.js +10 -9
- package/dist/customize/shared/leave-guard.d.ts +23 -0
- package/dist/customize/shared/leave-guard.js +87 -0
- package/dist/customize/shared/standalone-settings-nav.js +4 -1
- package/dist/customize/shared/tool-rules.d.ts +11 -0
- package/dist/customize/shared/tool-rules.js +29 -0
- package/dist/customize/skills/builtin-skill-modal.d.ts +6 -0
- package/dist/customize/skills/builtin-skill-modal.js +41 -0
- package/dist/customize/skills/skills-page.d.ts +21 -18
- package/dist/customize/skills/skills-page.js +16 -110
- package/dist/customize/triggers/runtime-triggers.d.ts +17 -0
- package/dist/customize/triggers/runtime-triggers.js +57 -0
- package/dist/customize/triggers/schedule/event-trigger-copy.js +2 -2
- package/dist/customize/triggers/schedule/post-to-field.js +2 -2
- package/dist/customize/triggers/schedule/schedule-copy.d.ts +11 -6
- package/dist/customize/triggers/schedule/schedule-copy.js +29 -8
- package/dist/customize/triggers/schedule/schedule-detail-sheet.js +7 -3
- package/dist/customize/triggers/schedule/trigger-composer-logic.d.ts +26 -1
- package/dist/customize/triggers/schedule/trigger-composer-logic.js +64 -3
- package/dist/customize/triggers/schedule/trigger-composer.js +57 -20
- package/dist/customize/triggers/schedule/trigger-edit-logic.js +18 -5
- package/dist/customize/triggers/schedule/trigger-filter.d.ts +10 -0
- package/dist/customize/triggers/schedule/trigger-filter.js +16 -0
- 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/use-trigger-mutations.d.ts +1 -1
- package/dist/customize/triggers/schedule/use-trigger-mutations.js +1 -1
- package/dist/customize/triggers/schedule/when-app.d.ts +15 -0
- package/dist/customize/triggers/schedule/when-app.js +21 -0
- package/dist/customize/triggers/schedule/when-change-request.d.ts +10 -0
- package/dist/customize/triggers/schedule/when-change-request.js +15 -0
- package/dist/customize/triggers/schedule-view.d.ts +17 -3
- package/dist/customize/triggers/schedule-view.js +46 -16
- package/dist/customize/triggers/triggers-page.d.ts +3 -3
- package/dist/customize/triggers/triggers-page.js +2 -2
- package/dist/customize/use-configure-thread.d.ts +8 -2
- package/dist/customize/use-configure-thread.js +30 -18
- package/dist/files/project/components/change-request-detail-dialog.js +2 -3
- package/dist/files/project/components/drive-explorer.js +6 -5
- package/dist/files/project/explorer-source.d.ts +3 -0
- package/dist/files/project/upload-batch.d.ts +3 -3
- package/dist/files/project/upload-batch.js +7 -6
- package/dist/files/runtime/sandbox-explorer-source.js +3 -3
- package/dist/i18n/en.d.ts +1330 -53
- package/dist/i18n/en.js +1422 -145
- package/dist/i18n/ui-catalog/remaining-ui-translation-keys.generated.js +16 -7
- package/dist/internal/auth/auth-primitives.d.ts +1 -3
- package/dist/internal/auth/auth-primitives.js +2 -2
- package/dist/internal/billing/session-cost-format.d.ts +1 -0
- package/dist/internal/billing/session-cost-format.js +11 -0
- package/dist/internal/components/agent-mark.d.ts +12 -1
- package/dist/internal/components/agent-mark.js +34 -11
- package/dist/internal/components/nav-rail.d.ts +22 -0
- package/dist/internal/components/nav-rail.js +16 -0
- package/dist/internal/components/repository-disconnected.js +2 -2
- package/dist/internal/goals/goal-meta.d.ts +15 -1
- package/dist/internal/goals/goal-meta.js +42 -2
- package/dist/internal/hooks/projects/use-agent-config.d.ts +11 -7
- package/dist/internal/hooks/projects/use-agent-config.js +28 -11
- package/dist/internal/hooks/use-slash-focus.d.ts +7 -1
- package/dist/internal/hooks/use-slash-focus.js +9 -3
- package/dist/internal/layout/project-capability-nav.d.ts +24 -0
- package/dist/internal/layout/project-capability-nav.js +86 -0
- package/dist/internal/layout/project-page-header.d.ts +1 -1
- package/dist/internal/layout/project-page-header.js +1 -1
- package/dist/internal/layout/project-settings-nav.d.ts +3 -2
- package/dist/internal/layout/project-settings-nav.js +5 -3
- package/dist/internal/lib/browser-noise/rules/old-browsers.js +1 -1
- package/dist/internal/lib/capability-tab-routes.d.ts +34 -3
- package/dist/internal/lib/capability-tab-routes.js +76 -8
- package/dist/internal/lib/manifest-health.d.ts +10 -0
- package/dist/internal/lib/manifest-health.js +20 -0
- package/dist/internal/lib/pixel-mark.d.ts +4 -1
- package/dist/internal/lib/pixel-mark.js +33 -6
- package/dist/internal/lib/project-actions.d.ts +1 -1
- package/dist/internal/lib/project-actions.js +0 -4
- package/dist/internal/lib/provider-branding.js +2 -0
- package/dist/internal/lib/space-scope.d.ts +29 -0
- package/dist/internal/lib/space-scope.js +28 -0
- package/dist/internal/lib/use-project-feature-flags.js +3 -3
- package/dist/internal/lib/web-notifications.d.ts +74 -8
- package/dist/internal/lib/web-notifications.js +243 -117
- package/dist/internal/notifications/notification-rows.d.ts +14 -7
- package/dist/internal/notifications/notification-rows.js +21 -14
- package/dist/internal/notifications/session-toast-cards.d.ts +2 -2
- package/dist/internal/reminders/reminder-format.d.ts +6 -2
- package/dist/internal/reminders/reminder-format.js +7 -1
- package/dist/internal/stores/active-space-store.d.ts +35 -0
- package/dist/internal/stores/active-space-store.js +29 -0
- package/dist/internal/stores/kortix-computer-store.js +13 -4
- package/dist/internal/stores/pinned-agents-store.d.ts +26 -0
- package/dist/internal/stores/pinned-agents-store.js +20 -0
- package/dist/internal/stores/session-panel-memory-store.js +3 -0
- package/dist/internal/stores/turn-attention-store.d.ts +5 -4
- package/dist/lib/routes.d.ts +16 -1
- package/dist/lib/routes.js +15 -3
- package/dist/markdown/doc-editor/doc-embed.d.ts +31 -0
- package/dist/markdown/doc-editor/doc-embed.js +168 -0
- package/dist/markdown/doc-editor/doc-extensions.d.ts +26 -0
- package/dist/markdown/doc-editor/doc-extensions.js +149 -0
- package/dist/markdown/doc-editor/doc-menus.d.ts +9 -0
- package/dist/markdown/doc-editor/doc-menus.js +56 -0
- package/dist/markdown/doc-editor/markdown.d.ts +12 -0
- package/dist/markdown/doc-editor/markdown.js +140 -0
- package/dist/markdown/genui/components/inline.d.ts +1 -1
- package/dist/primitives/badge.d.ts +1 -1
- package/dist/primitives/button.d.ts +1 -1
- package/dist/primitives/pixel-kortix-mark.d.ts +5 -4
- package/dist/primitives/pixel-kortix-mark.js +5 -15
- package/dist/primitives/tag.d.ts +1 -1
- package/dist/primitives/textarea.js +14 -0
- package/dist/primitives/toast.d.ts +2 -0
- package/dist/primitives/toast.js +4 -2
- package/dist/providers/ui-provider.d.ts +16 -0
- package/dist/session/actions/session-label.d.ts +1 -1
- package/dist/session/actions/session-label.js +3 -3
- package/dist/session/agents/agent-model.d.ts +92 -0
- package/dist/session/agents/agent-model.js +123 -0
- package/dist/session/agents/agent-state-mark.d.ts +10 -0
- package/dist/session/agents/agent-state-mark.js +22 -0
- package/dist/session/agents/agent-strip.d.ts +58 -0
- package/dist/session/agents/agent-strip.js +259 -0
- package/dist/session/agents/held-messages.d.ts +33 -0
- package/dist/session/agents/held-messages.js +50 -0
- package/dist/session/agents/legacy-subagent-chat.d.ts +11 -0
- package/dist/session/agents/legacy-subagent-chat.js +19 -0
- package/dist/session/agents/session-peek.d.ts +20 -0
- package/dist/session/agents/session-peek.js +67 -0
- package/dist/session/agents/session-prompt.d.ts +13 -0
- package/dist/session/agents/session-prompt.js +18 -0
- package/dist/session/agents/steer-session.d.ts +13 -0
- package/dist/session/agents/steer-session.js +29 -0
- package/dist/session/agents/subagent-dialog-content.d.ts +11 -0
- package/dist/session/agents/subagent-dialog-content.js +115 -0
- package/dist/session/agents/subagent-view.d.ts +8 -0
- package/dist/session/agents/subagent-view.js +18 -0
- package/dist/session/agents/tasks-panel.d.ts +13 -0
- package/dist/session/agents/tasks-panel.js +41 -0
- package/dist/session/agents/workflow-run-controls.d.ts +43 -0
- package/dist/session/agents/workflow-run-controls.js +141 -0
- package/dist/session/composer/ComposerCard.d.ts +1 -1
- package/dist/session/composer/ComposerCard.js +3 -3
- package/dist/session/composer/agent-selector.js +13 -19
- package/dist/session/composer/composer-underbar.d.ts +3 -1
- package/dist/session/composer/composer-underbar.js +2 -2
- package/dist/session/composer/composer.d.ts +5 -0
- package/dist/session/composer/composer.js +16 -10
- package/dist/session/composer/editor/composer-editor.js +19 -8
- package/dist/session/composer/editor/ultracode.d.ts +34 -0
- package/dist/session/composer/editor/ultracode.js +127 -0
- package/dist/session/composer/send-blockers.d.ts +1 -11
- package/dist/session/composer/send-blockers.js +1 -11
- package/dist/session/composer/session-composer-readiness.d.ts +1 -28
- package/dist/session/composer/session-composer-readiness.js +5 -16
- package/dist/session/header/reminder-parts.d.ts +1 -1
- package/dist/session/header/session-site-header.js +6 -3
- package/dist/session/header/subagent-hover-card.d.ts +0 -2
- package/dist/session/header/subagent-hover-card.js +1 -4
- package/dist/session/models/claude-connection-slot.d.ts +11 -0
- package/dist/session/models/claude-connection-slot.js +30 -0
- package/dist/session/models/model-availability.d.ts +3 -1
- package/dist/session/models/model-availability.js +3 -0
- package/dist/session/models/model-selector.js +11 -12
- package/dist/session/models/model-tags.d.ts +9 -0
- package/dist/session/models/model-tags.js +8 -0
- package/dist/session/panel/easy/easy-panel.js +1 -1
- package/dist/session/panel/easy/step-icon.js +5 -1
- package/dist/session/panel/mobile-tool-drawer.js +1 -1
- package/dist/session/panel/session-action-panel-column.js +1 -1
- package/dist/session/panel/session-desktop.js +41 -14
- package/dist/session/panel/session-panel-provider.d.ts +1 -1
- package/dist/session/panel/session-panel-provider.js +7 -11
- package/dist/session/prompts/question-prompt.js +3 -1
- package/dist/session/status/session-error-banner.js +4 -1
- package/dist/session/thread/session-chat.js +286 -296
- package/dist/session/thread/session-context-modal.js +29 -10
- package/dist/session/thread/session-context-spawned-sessions.d.ts +13 -0
- package/dist/session/thread/session-context-spawned-sessions.js +44 -0
- package/dist/session/thread/session-context-sub-sessions.js +3 -8
- package/dist/session/thread/transcript.d.ts +3 -0
- package/dist/session/thread/transcript.js +32 -8
- package/dist/session/tool/shared/full-view-action.d.ts +29 -0
- package/dist/session/tool/shared/full-view-action.js +43 -0
- package/dist/session/tool/tool-part-renderer.js +10 -2
- package/dist/session/tool/tools/agent-message-tool.js +2 -2
- package/dist/session/tool/tools/agent-spawn-tool.js +2 -2
- package/dist/session/tool/tools/agent-status-tool.js +2 -2
- package/dist/session/tool/tools/kortix-action-tool.d.ts +2 -0
- package/dist/session/tool/tools/kortix-action-tool.js +148 -0
- package/dist/session/tool/tools/kortix-tool-card.d.ts +83 -0
- package/dist/session/tool/tools/kortix-tool-card.js +186 -0
- package/dist/session/tool/tools/multi-agent-tool-bodies.d.ts +11 -0
- package/dist/session/tool/tools/multi-agent-tool-bodies.js +141 -0
- package/dist/session/tool/tools/multi-agent-tool-data.d.ts +63 -0
- package/dist/session/tool/tools/multi-agent-tool-data.js +118 -0
- package/dist/session/tool/tools/multi-agent-tools.d.ts +9 -0
- package/dist/session/tool/tools/multi-agent-tools.js +38 -0
- package/dist/session/tool/tools/question-tool.js +1 -1
- package/dist/session/tool/tools/register.d.ts +3 -0
- package/dist/session/tool/tools/register.js +3 -0
- package/dist/session/tool/tools/session-spawn-tool.js +2 -2
- package/dist/session/tool/tools/task-tool.d.ts +1 -1
- package/dist/session/tool/tools/task-tool.js +29 -41
- package/dist/session/tool/tools/workflow-progress.d.ts +34 -0
- package/dist/session/tool/tools/workflow-progress.js +186 -0
- package/dist/session/tool/tools/workflow-run.d.ts +128 -0
- package/dist/session/tool/tools/workflow-run.js +251 -0
- package/dist/session/tool/tools/workflow-tool.d.ts +9 -0
- package/dist/session/tool/tools/workflow-tool.js +253 -0
- package/dist/session/turn/notice-batch-group.d.ts +12 -0
- package/dist/session/turn/notice-batch-group.js +17 -0
- package/dist/session/turn/peer-message-row.d.ts +14 -0
- package/dist/session/turn/peer-message-row.js +57 -0
- package/dist/session/turn/subagent-notice-row.d.ts +4 -0
- package/dist/session/turn/subagent-notice-row.js +50 -0
- package/dist/session/turn/subagent-notice.d.ts +58 -0
- package/dist/session/turn/subagent-notice.js +111 -0
- package/dist/session/turn/user-message.js +24 -5
- package/dist/styles/tokens.css +2 -0
- package/dist/styles.css +1 -1
- package/dist/terminal/session-terminal-connect-bar.js +1 -1
- package/dist/workspace/admin/project-admin-dashboard.d.ts +53 -0
- package/dist/workspace/admin/project-admin-dashboard.js +252 -0
- package/dist/workspace/admin/project-admin-nav.d.ts +20 -0
- package/dist/workspace/admin/project-admin-nav.js +41 -0
- package/dist/workspace/home/welcome-body.js +25 -3
- package/dist/workspace/index.d.ts +6 -2
- package/dist/workspace/index.js +12 -2
- package/dist/workspace/layout/new-session-create.js +3 -3
- package/dist/workspace/layout/project-home.js +3 -3
- package/dist/workspace/memory/memory-labels.js +5 -0
- package/dist/workspace/repository-disconnected.js +2 -2
- package/dist/workspace/sessions/board-dispatch.d.ts +52 -0
- package/dist/workspace/sessions/board-dispatch.js +110 -0
- package/dist/workspace/sessions/board-grouping.d.ts +63 -0
- package/dist/workspace/sessions/board-grouping.js +141 -0
- package/dist/workspace/sessions/board-peek.d.ts +15 -0
- package/dist/workspace/sessions/board-peek.js +54 -0
- package/dist/workspace/sessions/board-state-mark.d.ts +15 -0
- package/dist/workspace/sessions/board-state-mark.js +24 -0
- package/dist/workspace/sessions/project-sessions-view.js +42 -31
- package/dist/workspace/sessions/sessions-board.d.ts +12 -0
- package/dist/workspace/sessions/sessions-board.js +214 -0
- package/dist/workspace/sidebar/footer/project-manifest-issues-alert.d.ts +46 -0
- package/dist/workspace/sidebar/footer/project-manifest-issues-alert.js +85 -0
- package/dist/workspace/sidebar/footer/sidebar-alert.js +1 -1
- package/dist/workspace/sidebar/new-agent-modal-provider.d.ts +12 -0
- package/dist/workspace/sidebar/new-agent-modal-provider.js +19 -0
- package/dist/workspace/sidebar/project-nav-items.d.ts +3 -1
- package/dist/workspace/sidebar/project-nav-items.js +53 -5
- package/dist/workspace/sidebar/project-session-list.js +35 -12
- package/dist/workspace/sidebar/project-sidebar.js +6 -3
- package/dist/workspace/sidebar/session-filter-menu.js +2 -1
- package/dist/workspace/space/space-blocks.d.ts +25 -0
- package/dist/workspace/space/space-blocks.js +124 -0
- package/dist/workspace/space/space-filter-tabs.d.ts +17 -0
- package/dist/workspace/space/space-filter-tabs.js +31 -0
- package/dist/workspace/space/space-page.d.ts +24 -0
- package/dist/workspace/space/space-page.js +157 -0
- package/dist/workspace/space/space-room.d.ts +20 -0
- package/dist/workspace/space/space-room.js +27 -0
- package/dist/workspace/space/space-tab-menu.d.ts +14 -0
- package/dist/workspace/space/space-tab-menu.js +127 -0
- package/dist/workspace/space/space-tab-panels.d.ts +9 -0
- package/dist/workspace/space/space-tab-panels.js +203 -0
- package/dist/workspace/space/space-templates.d.ts +34 -0
- package/dist/workspace/space/space-templates.js +71 -0
- package/dist/workspace/space/use-space-filter.d.ts +10 -0
- package/dist/workspace/space/use-space-filter.js +40 -0
- package/dist/workspace/space/use-space-manifest.d.ts +8 -0
- package/dist/workspace/space/use-space-manifest.js +27 -0
- package/dist/workspace/spaces/space-timeline.js +2 -2
- package/package.json +56 -53
- package/skills/kortix-ui/SKILL.md +1 -1
- package/skills/kortix-ui/references/custom-dashboard.md +10 -4
- package/skills/kortix-ui/references/modules.md +10 -8
- package/dist/_vendor/shared/meta-agent.d.ts +0 -7
- package/dist/customize/agents/agent-grant-pages.d.ts +0 -37
- package/dist/customize/agents/agent-grant-pages.js +0 -226
- package/dist/customize/agents/agent-triggers-section.d.ts +0 -17
- package/dist/customize/agents/agent-triggers-section.js +0 -109
- package/dist/customize/migrate-to-v2/index.d.ts +0 -5
- package/dist/customize/migrate-to-v2/index.js +0 -5
- package/dist/customize/migrate-to-v2/migration-prompt.d.ts +0 -16
- package/dist/customize/migrate-to-v2/migration-prompt.js +0 -59
- package/dist/customize/migrate-to-v2/upgrade-defs.d.ts +0 -30
- package/dist/customize/migrate-to-v2/upgrade-defs.js +0 -43
- package/dist/customize/migrate-to-v2/upgrade-view.d.ts +0 -32
- package/dist/customize/migrate-to-v2/upgrade-view.js +0 -152
- package/dist/customize/migrate-to-v2/use-run-upgrade.d.ts +0 -18
- package/dist/customize/migrate-to-v2/use-run-upgrade.js +0 -16
- package/dist/customize/shared/capability-tabs.d.ts +0 -3
- package/dist/customize/shared/capability-tabs.js +0 -137
- package/dist/customize/skills/skill-scope.d.ts +0 -14
- package/dist/customize/skills/skill-scope.js +0 -18
- package/dist/internal/lib/manifest-version.d.ts +0 -21
- package/dist/internal/lib/manifest-version.js +0 -55
- package/dist/session/composer/hooks/use-composer-escape-stop.d.ts +0 -6
- package/dist/session/composer/hooks/use-composer-escape-stop.js +0 -28
- package/dist/session/thread/sub-session-modal-content.d.ts +0 -8
- package/dist/session/thread/sub-session-modal-content.js +0 -23
- package/dist/session/thread/sub-session-modal.d.ts +0 -2
- package/dist/session/thread/sub-session-modal.js +0 -14
- package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.d.ts +0 -13
- package/dist/workspace/sidebar/footer/project-manifest-upgrade-alert.js +0 -48
|
@@ -3,9 +3,6 @@ import { type AgentGrants } from './agent-access.js';
|
|
|
3
3
|
* The project's agents and their connector grants and rule sets, plus the two
|
|
4
4
|
* writes: give or take a connector, and pick an agent's rule set on it. Both
|
|
5
5
|
* commit kortix.yaml through `PUT …/agents/{name}/scope`.
|
|
6
|
-
*
|
|
7
|
-
* `supported` is false on a v1 manifest: its agents are a TOML overlay this
|
|
8
|
-
* reader does not parse, and rule sets need v2.
|
|
9
6
|
*/
|
|
10
7
|
export declare function useAgentAccess(projectId: string): {
|
|
11
8
|
isPending: boolean;
|
|
@@ -17,8 +14,12 @@ export declare function useAgentAccess(projectId: string): {
|
|
|
17
14
|
is_kortix_repo: boolean;
|
|
18
15
|
signals: Record<string, boolean>;
|
|
19
16
|
manifest_raw: string | null;
|
|
17
|
+
manifest_health?: import("@kortix/sdk").ProjectManifestHealth;
|
|
20
18
|
open_code_raw: string | null;
|
|
21
19
|
open_code_default_agent: string | null;
|
|
20
|
+
builtin_agents?: {
|
|
21
|
+
my_kortix: boolean;
|
|
22
|
+
};
|
|
22
23
|
agent_discovery: "opencode" | "declarative";
|
|
23
24
|
agents: Array<{
|
|
24
25
|
name: string;
|
|
@@ -27,10 +28,11 @@ export declare function useAgentAccess(projectId: string): {
|
|
|
27
28
|
mode: string | null;
|
|
28
29
|
hidden?: boolean;
|
|
29
30
|
model?: string | null;
|
|
30
|
-
source?: "opencode" | "kortix.toml";
|
|
31
|
+
source?: "opencode" | "kortix.yaml" | "kortix.toml";
|
|
31
32
|
enabled?: boolean;
|
|
32
33
|
platform?: boolean;
|
|
33
34
|
sandbox?: string | null;
|
|
35
|
+
space?: string | null;
|
|
34
36
|
scope?: {
|
|
35
37
|
env: string[] | "all";
|
|
36
38
|
connectors: string[] | "all";
|
|
@@ -53,13 +55,13 @@ export declare function useAgentAccess(projectId: string): {
|
|
|
53
55
|
required: string[];
|
|
54
56
|
optional: string[];
|
|
55
57
|
};
|
|
58
|
+
spaces?: import("@kortix/sdk").ManifestSpace[];
|
|
56
59
|
};
|
|
57
60
|
project: import("@kortix/sdk").KortixProject;
|
|
58
61
|
git_connection?: import("@kortix/sdk").ProjectGitConnection | null;
|
|
59
62
|
file_count: number;
|
|
60
63
|
files: import("@kortix/sdk").ProjectFileEntry[];
|
|
61
64
|
}, Error>>;
|
|
62
|
-
supported: boolean;
|
|
63
65
|
canEdit: boolean;
|
|
64
66
|
agents: string[];
|
|
65
67
|
grantsOf: (agent: string) => AgentGrants | undefined;
|
|
@@ -12,9 +12,6 @@ const ACTIONS = [PROJECT_ACTIONS.PROJECT_AGENT_WRITE, PROJECT_ACTIONS.PROJECT_CO
|
|
|
12
12
|
* The project's agents and their connector grants and rule sets, plus the two
|
|
13
13
|
* writes: give or take a connector, and pick an agent's rule set on it. Both
|
|
14
14
|
* commit kortix.yaml through `PUT …/agents/{name}/scope`.
|
|
15
|
-
*
|
|
16
|
-
* `supported` is false on a v1 manifest: its agents are a TOML overlay this
|
|
17
|
-
* reader does not parse, and rule sets need v2.
|
|
18
15
|
*/
|
|
19
16
|
export function useAgentAccess(projectId) {
|
|
20
17
|
const queryClient = useQueryClient();
|
|
@@ -30,7 +27,7 @@ export function useAgentAccess(projectId) {
|
|
|
30
27
|
const config = projectQuery.data?.config;
|
|
31
28
|
const grants = useMemo(() => manifestAgentGrants(config?.manifest_raw), [config?.manifest_raw]);
|
|
32
29
|
const agents = useMemo(() => {
|
|
33
|
-
const names = new Set(Object.keys(grants
|
|
30
|
+
const names = new Set(Object.keys(grants));
|
|
34
31
|
for (const agent of config?.agents ?? [])
|
|
35
32
|
if (!agent.hidden)
|
|
36
33
|
names.add(agent.name);
|
|
@@ -44,13 +41,12 @@ export function useAgentAccess(projectId) {
|
|
|
44
41
|
void queryClient.invalidateQueries({ queryKey: ['connector-policy-sets', projectId] });
|
|
45
42
|
},
|
|
46
43
|
});
|
|
47
|
-
const grantsOf = (agent) => grants
|
|
44
|
+
const grantsOf = (agent) => grants[agent];
|
|
48
45
|
return {
|
|
49
46
|
isPending: projectQuery.isPending,
|
|
50
47
|
isError: projectQuery.isError,
|
|
51
48
|
error: projectQuery.error,
|
|
52
49
|
refetch: projectQuery.refetch,
|
|
53
|
-
supported: grants !== null,
|
|
54
50
|
canEdit,
|
|
55
51
|
agents,
|
|
56
52
|
grantsOf,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type { ResourceScope } from '../shared/agent-resource-scope.js';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
1
3
|
/**
|
|
2
4
|
* The page body for /projects/[id]/models — Models graduated out of the
|
|
3
5
|
* project Settings sub-nav into its own top-level Customize tab, alongside
|
|
@@ -23,6 +25,10 @@
|
|
|
23
25
|
* `useStandaloneCapabilityNav` is that provider's value for a page that is
|
|
24
26
|
* not the overlay or `/config`.
|
|
25
27
|
*/
|
|
26
|
-
export declare function ModelsPage({ projectId }: {
|
|
28
|
+
export declare function ModelsPage({ projectId, surface, agentSettings, }: {
|
|
27
29
|
projectId: string;
|
|
30
|
+
/** `agent` renders the same page on one agent's editor (`agent-page.tsx`),
|
|
31
|
+
* with `agentSettings` as its leading "This agent" tab. */
|
|
32
|
+
surface?: ResourceScope;
|
|
33
|
+
agentSettings?: ReactNode;
|
|
28
34
|
}): import("react").JSX.Element;
|
|
@@ -29,7 +29,7 @@ import { AppReturnBar } from './app-return-bar.js';
|
|
|
29
29
|
* `useStandaloneCapabilityNav` is that provider's value for a page that is
|
|
30
30
|
* not the overlay or `/config`.
|
|
31
31
|
*/
|
|
32
|
-
export function ModelsPage({ projectId }) {
|
|
32
|
+
export function ModelsPage({ projectId, surface, agentSettings, }) {
|
|
33
33
|
const settingsNav = useStandaloneCapabilityNav(projectId, 'models');
|
|
34
|
-
return (_jsxs(SettingsNavProvider, { value: settingsNav, children: [_jsx(LlmManagementView, { projectId: projectId }), _jsx(AppReturnBar, { projectId: projectId })] }));
|
|
34
|
+
return (_jsxs(SettingsNavProvider, { value: settingsNav, children: [_jsx(LlmManagementView, { projectId: projectId, surface: surface, agentSettings: agentSettings }), _jsx(AppReturnBar, { projectId: projectId })] }));
|
|
35
35
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type Icon } from '@phosphor-icons/react';
|
|
2
|
+
import type { CapabilityTab } from '../../internal/lib/capability-tab-routes.js';
|
|
3
|
+
import { type ProjectSettingsSectionKey } from './project-settings-sections.js';
|
|
4
|
+
/**
|
|
5
|
+
* The sections of Project admin (`/projects/<id>/admin`).
|
|
6
|
+
*
|
|
7
|
+
* Customize is agent-first: each agent's page configures what THAT agent draws
|
|
8
|
+
* on. Project admin is the other view: the project-wide libraries an agent is
|
|
9
|
+
* granted from, plus every project setting. Two rail groups:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Project resources** — the global variant of each library page.
|
|
12
|
+
* 2. **Settings** — the sections of `project-settings-sections.ts`, unchanged.
|
|
13
|
+
*
|
|
14
|
+
* A key IS its URL segment (`/admin/<key>`), so renaming one breaks live links. The
|
|
15
|
+
* settings keys are the Settings page's own keys, so `?section=git` means the
|
|
16
|
+
* same section on both surfaces.
|
|
17
|
+
*/
|
|
18
|
+
export type ProjectAdminResourceKey = 'connectors' | 'skills' | 'tools' | 'extensions' | 'triggers' | 'models' | 'secrets' | 'apps' | 'drives' | 'repo';
|
|
19
|
+
/**
|
|
20
|
+
* The Settings sections this page lists. Review is not one: it is its own
|
|
21
|
+
* standalone surface, and `projectSettingsSections` never lists it.
|
|
22
|
+
*/
|
|
23
|
+
export type ProjectAdminSettingsKey = Exclude<ProjectSettingsSectionKey, 'review'>;
|
|
24
|
+
export type ProjectAdminSectionKey = ProjectAdminResourceKey | ProjectAdminSettingsKey;
|
|
25
|
+
export interface ProjectAdminResource {
|
|
26
|
+
key: ProjectAdminResourceKey;
|
|
27
|
+
icon: Icon;
|
|
28
|
+
/**
|
|
29
|
+
* The Customize tab whose access rule (`capabilityAccess`) decides whether
|
|
30
|
+
* the row shows. Null: the page gates itself (Apps reads `useProjectCan`).
|
|
31
|
+
*/
|
|
32
|
+
capability: CapabilityTab['key'] | null;
|
|
33
|
+
/**
|
|
34
|
+
* The page lives in the host app, not in `@kortix/ui`: the host passes it
|
|
35
|
+
* through `hostSections`, and the row hides when it does not.
|
|
36
|
+
*/
|
|
37
|
+
host: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* The flag the row needs. Repo is a library only with `drives` on; with it
|
|
40
|
+
* off, the sidebar's Files row is the repo browser (`projectNavRows`).
|
|
41
|
+
*/
|
|
42
|
+
flag?: 'drives';
|
|
43
|
+
}
|
|
44
|
+
/** Rail order. Icons match the agent editor's tabs (`agent-page.tsx`). */
|
|
45
|
+
export declare const PROJECT_ADMIN_RESOURCES: readonly ProjectAdminResource[];
|
|
46
|
+
/** `/projects/<id>/admin` with no section opens the first resource. */
|
|
47
|
+
export declare const DEFAULT_PROJECT_ADMIN_SECTION: ProjectAdminSectionKey;
|
|
48
|
+
export declare function isProjectAdminResource(key: ProjectAdminSectionKey): key is ProjectAdminResourceKey;
|
|
49
|
+
export declare function parseProjectAdminSection(raw: string | null | undefined): ProjectAdminSectionKey | null;
|
|
50
|
+
/**
|
|
51
|
+
* The link to one section: `/projects/<id>/admin/<section>`. `extra` adds page
|
|
52
|
+
* params (`scope=channels` for the Connectors page's Channels scope).
|
|
53
|
+
*/
|
|
54
|
+
export declare function projectAdminHref(projectId: string, key?: ProjectAdminSectionKey, extra?: Record<string, string>): string;
|
|
55
|
+
/**
|
|
56
|
+
* The section a legacy settings-nav id names. Panes still call
|
|
57
|
+
* `navigate('llm-providers')`, `navigate('experimental')` or
|
|
58
|
+
* `navigate('channels')` in the overlay's vocabulary; inside Project admin
|
|
59
|
+
* each of those lands on a section of this page. Null: the id is not a
|
|
60
|
+
* section here (`members`, `review`, a personal overlay tab).
|
|
61
|
+
*/
|
|
62
|
+
export declare function projectAdminNavTarget(tab: string): ProjectAdminSectionKey | null;
|
|
63
|
+
export declare const RESOURCE_LABEL_KEYS: Partial<Record<ProjectAdminResourceKey, string>>;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { AppWindowIcon, BookOpenTextIcon, CpuIcon, FoldersIcon, HardDrivesIcon, KeyIcon, PlugsConnectedIcon, PuzzlePieceIcon, TimerIcon, WrenchIcon, } from '@phosphor-icons/react';
|
|
2
|
+
import { adminPath } from '../../lib/routes.js';
|
|
3
|
+
import { parseProjectSettingsSection, } from './project-settings-sections.js';
|
|
4
|
+
/** Rail order. Icons match the agent editor's tabs (`agent-page.tsx`). */
|
|
5
|
+
export const PROJECT_ADMIN_RESOURCES = [
|
|
6
|
+
{ key: 'connectors', icon: PlugsConnectedIcon, capability: 'connectors', host: false },
|
|
7
|
+
{ key: 'secrets', icon: KeyIcon, capability: 'secrets', host: false },
|
|
8
|
+
{ key: 'skills', icon: BookOpenTextIcon, capability: 'skills', host: false },
|
|
9
|
+
{ key: 'tools', icon: WrenchIcon, capability: 'agent', host: false },
|
|
10
|
+
{ key: 'extensions', icon: PuzzlePieceIcon, capability: 'agent', host: false },
|
|
11
|
+
{ key: 'drives', icon: HardDrivesIcon, capability: null, host: false, flag: 'drives' },
|
|
12
|
+
{ key: 'apps', icon: AppWindowIcon, capability: null, host: true },
|
|
13
|
+
// Triggers: kortix.yaml triggers and runtime triggers (loops) on one page.
|
|
14
|
+
// The key stays `triggers`: it is the URL segment, and live links name it.
|
|
15
|
+
{ key: 'triggers', icon: TimerIcon, capability: 'triggers', host: false },
|
|
16
|
+
{ key: 'models', icon: CpuIcon, capability: 'models', host: false },
|
|
17
|
+
{ key: 'repo', icon: FoldersIcon, capability: 'files', host: false, flag: 'drives' },
|
|
18
|
+
];
|
|
19
|
+
/** `/projects/<id>/admin` with no section opens the first resource. */
|
|
20
|
+
export const DEFAULT_PROJECT_ADMIN_SECTION = 'connectors';
|
|
21
|
+
export function isProjectAdminResource(key) {
|
|
22
|
+
return PROJECT_ADMIN_RESOURCES.some((r) => r.key === key);
|
|
23
|
+
}
|
|
24
|
+
export function parseProjectAdminSection(raw) {
|
|
25
|
+
if (!raw)
|
|
26
|
+
return null;
|
|
27
|
+
// `/admin/loops` was the Loops page until 2026-10-28: loops are triggers now.
|
|
28
|
+
if (raw === 'loops')
|
|
29
|
+
return 'triggers';
|
|
30
|
+
const resource = PROJECT_ADMIN_RESOURCES.find((r) => r.key === raw);
|
|
31
|
+
if (resource)
|
|
32
|
+
return resource.key;
|
|
33
|
+
const setting = parseProjectSettingsSection(raw);
|
|
34
|
+
return setting === 'review' ? null : setting;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The link to one section: `/projects/<id>/admin/<section>`. `extra` adds page
|
|
38
|
+
* params (`scope=channels` for the Connectors page's Channels scope).
|
|
39
|
+
*/
|
|
40
|
+
export function projectAdminHref(projectId, key = DEFAULT_PROJECT_ADMIN_SECTION, extra) {
|
|
41
|
+
const query = new URLSearchParams(extra).toString();
|
|
42
|
+
return `${adminPath(projectId, key)}${query ? `?${query}` : ''}`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The section a legacy settings-nav id names. Panes still call
|
|
46
|
+
* `navigate('llm-providers')`, `navigate('experimental')` or
|
|
47
|
+
* `navigate('channels')` in the overlay's vocabulary; inside Project admin
|
|
48
|
+
* each of those lands on a section of this page. Null: the id is not a
|
|
49
|
+
* section here (`members`, `review`, a personal overlay tab).
|
|
50
|
+
*/
|
|
51
|
+
export function projectAdminNavTarget(tab) {
|
|
52
|
+
const direct = parseProjectAdminSection(tab);
|
|
53
|
+
if (direct)
|
|
54
|
+
return direct;
|
|
55
|
+
if (tab.startsWith('llm-'))
|
|
56
|
+
return 'models';
|
|
57
|
+
if (tab === 'channels')
|
|
58
|
+
return 'connectors';
|
|
59
|
+
if (tab === 'reminders')
|
|
60
|
+
return 'triggers';
|
|
61
|
+
if (tab === 'settings' || tab === 'workspace')
|
|
62
|
+
return 'general';
|
|
63
|
+
if (tab === 'experimental')
|
|
64
|
+
return 'feature-flags';
|
|
65
|
+
if (tab === 'snapshots')
|
|
66
|
+
return 'sandbox';
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
/* Rail labels, keyed by section: the `hardcodedUi.i18nComplete` strings the
|
|
70
|
+
Customize bar and the sidebar already show for these libraries. */
|
|
71
|
+
export const RESOURCE_LABEL_KEYS = {
|
|
72
|
+
connectors: 'textc3d2e79ebdd0',
|
|
73
|
+
skills: 'text66d0f523a379',
|
|
74
|
+
// "Triggers": kortix.yaml triggers and loops are one page (2026-10-28).
|
|
75
|
+
triggers: 'texte62f2148a64d',
|
|
76
|
+
models: 'textd17d2d78d76e',
|
|
77
|
+
secrets: 'textd8707d411d99',
|
|
78
|
+
apps: 'text89dd748442c1',
|
|
79
|
+
repo: 'text91dba14806eb',
|
|
80
|
+
};
|
|
@@ -8,7 +8,7 @@ import { type ProjectSettingsSectionKey } from './project-settings-sections.js';
|
|
|
8
8
|
*
|
|
9
9
|
* These six sections used to live in the Settings overlay behind the
|
|
10
10
|
* sidebar's gear icon, in its `Workspace` and `Agent` rail groups plus the
|
|
11
|
-
*
|
|
11
|
+
* `experimental` row. They configure a project, and
|
|
12
12
|
* the person allowed to change them is already the person who can open
|
|
13
13
|
* Customize — a second overlay with a second rail and a second keyboard
|
|
14
14
|
* shortcut was one surface too many. The overlay keeps what is genuinely
|
|
@@ -14,8 +14,6 @@ import { SettingsSectionHeader } from '../../primitives/settings-section-header.
|
|
|
14
14
|
import { Tabs, TabsList, TabsTrigger } from '../../primitives/tabs.js';
|
|
15
15
|
import { SETTINGS_SIDEBAR_WIDTH_PX } from '../../internal/account-hub/account-settings-shell.js';
|
|
16
16
|
import { useReviewSessionSummary } from '../../internal/hooks/use-review-session-summary.js';
|
|
17
|
-
import { detectManifestVersion } from '../../internal/lib/manifest-version.js';
|
|
18
|
-
import { UpgradesView } from '../migrate-to-v2/upgrade-view.js';
|
|
19
17
|
import { GitView } from '../sections/view/git-view.js';
|
|
20
18
|
import { ReviewView } from '../sections/view/review-view.js';
|
|
21
19
|
import { ACCOUNT_GRADUATED, isAccountGraduatedSection, parseSettingsTab, } from '../settings/settings-tabs.js';
|
|
@@ -37,7 +35,7 @@ import { DEFAULT_PROJECT_SETTINGS_SECTION, parseProjectSettingsSection, projectS
|
|
|
37
35
|
*
|
|
38
36
|
* These six sections used to live in the Settings overlay behind the
|
|
39
37
|
* sidebar's gear icon, in its `Workspace` and `Agent` rail groups plus the
|
|
40
|
-
*
|
|
38
|
+
* `experimental` row. They configure a project, and
|
|
41
39
|
* the person allowed to change them is already the person who can open
|
|
42
40
|
* Customize — a second overlay with a second rail and a second keyboard
|
|
43
41
|
* shortcut was one surface too many. The overlay keeps what is genuinely
|
|
@@ -114,11 +112,6 @@ export function ProjectSettingsPage({ projectId }) {
|
|
|
114
112
|
(sections.some((s) => s.key === DEFAULT_PROJECT_SETTINGS_SECTION)
|
|
115
113
|
? DEFAULT_PROJECT_SETTINGS_SECTION
|
|
116
114
|
: (sections[0]?.key ?? DEFAULT_PROJECT_SETTINGS_SECTION));
|
|
117
|
-
// Pin Upgrades' attention dot only once the manifest read resolved to v1 —
|
|
118
|
-
// while the detail query is in flight (or on a v2 project) the dot stays off.
|
|
119
|
-
const upgradeAttention = detail.data
|
|
120
|
-
? detectManifestVersion(detail.data.config.manifest_raw) === 1
|
|
121
|
-
: false;
|
|
122
115
|
// "Needs you" count for the Review row — the SAME shared inbox summary the
|
|
123
116
|
// sidebar Review pill and the per-session dots read, so they cannot drift.
|
|
124
117
|
const reviewNeedsYou = useReviewSessionSummary(projectId).totalNeedsYou;
|
|
@@ -134,7 +127,7 @@ export function ProjectSettingsPage({ projectId }) {
|
|
|
134
127
|
navigateTo,
|
|
135
128
|
}), [projectId, active, membersTab, project?.account_id, navigateTo]);
|
|
136
129
|
const activeSection = sections.find((s) => s.key === active);
|
|
137
|
-
const sectionTriggers = (horizontal) => sections.map((section) => (_jsx(SectionTrigger, { projectId: projectId, section: section, horizontal: horizontal, count: section.key === 'review' ? reviewNeedsYou : undefined
|
|
130
|
+
const sectionTriggers = (horizontal) => sections.map((section) => (_jsx(SectionTrigger, { projectId: projectId, section: section, horizontal: horizontal, count: section.key === 'review' ? reviewNeedsYou : undefined }, section.key)));
|
|
138
131
|
return (_jsx(SettingsNavProvider, { value: settingsNav, children: _jsxs("div", { className: cn('min-h-0 flex-1', isMobile ? 'flex flex-col overflow-hidden' : 'grid overflow-hidden'),
|
|
139
132
|
// The Preferences overlay's rail width (`settings-panel.tsx`), so the
|
|
140
133
|
// two settings surfaces a person meets are one shape (Marko,
|
|
@@ -160,7 +153,7 @@ export function ProjectSettingsPage({ projectId }) {
|
|
|
160
153
|
* `onValueChange` push: the section is URL state, so it has to be a link a
|
|
161
154
|
* person can middle-click, copy, and land on directly.
|
|
162
155
|
*/
|
|
163
|
-
function SectionTrigger({ projectId, section, count,
|
|
156
|
+
function SectionTrigger({ projectId, section, count, horizontal = false, }) {
|
|
164
157
|
const Icon = section.icon;
|
|
165
158
|
const showCount = count != null && count > 0;
|
|
166
159
|
return (_jsx(TabsTrigger, { value: section.key, asChild: true, size: horizontal ? undefined : 'md', className: horizontal
|
|
@@ -169,7 +162,7 @@ function SectionTrigger({ projectId, section, count, attention, horizontal = fal
|
|
|
169
162
|
// The Preferences overlay's exact rail-row dialect
|
|
170
163
|
// (`settings-panel.tsx`'s `TabsTrigger` in its aside), so the
|
|
171
164
|
// two rails are one component in two places.
|
|
172
|
-
'gap-2 px-2.5 py-1 font-normal transition-none has-[>svg]:px-2.5', 'text-foreground data-[state=inactive]:text-foreground hover:bg-hover hover:text-foreground', 'data-[state=active]:bg-active data-[state=active]:font-medium', '[&_svg]:text-muted-foreground data-[state=active]:[&_svg]:text-foreground'), children: _jsxs(Link, { href: projectSettingsSectionHref(projectId, section.key), prefetch: true, children: [_jsx(Icon, { className: "size-4 shrink-0" }), _jsx("span", { className: cn(!horizontal && 'truncate'), children: section.label }), showCount ? (_jsx(CountBadge, { count: count, className: cn(!horizontal && 'ml-auto') })) :
|
|
165
|
+
'gap-2 px-2.5 py-1 font-normal transition-none has-[>svg]:px-2.5', 'text-foreground data-[state=inactive]:text-foreground hover:bg-hover hover:text-foreground', 'data-[state=active]:bg-active data-[state=active]:font-medium', '[&_svg]:text-muted-foreground data-[state=active]:[&_svg]:text-foreground'), children: _jsxs(Link, { href: projectSettingsSectionHref(projectId, section.key), prefetch: true, children: [_jsx(Icon, { className: "size-4 shrink-0" }), _jsx("span", { className: cn(!horizontal && 'truncate'), children: section.label }), showCount ? (_jsx(CountBadge, { count: count, className: cn(!horizontal && 'ml-auto') })) : null] }) }));
|
|
173
166
|
}
|
|
174
167
|
/**
|
|
175
168
|
* The pane for the active section. Every component is mounted exactly as the
|
|
@@ -193,8 +186,6 @@ function ProjectSettingsSectionPane({ sectionKey, projectId, }) {
|
|
|
193
186
|
return _jsx(ReviewView, { projectId: projectId });
|
|
194
187
|
case 'feature-flags':
|
|
195
188
|
return _jsx(ExperimentalTab, { projectId: projectId });
|
|
196
|
-
case 'upgrades':
|
|
197
|
-
return _jsx(UpgradesView, { projectId: projectId });
|
|
198
189
|
}
|
|
199
190
|
}
|
|
200
191
|
/**
|
|
@@ -7,7 +7,7 @@ import type { CustomizeSection } from '../../internal/lib/project-actions.js';
|
|
|
7
7
|
*
|
|
8
8
|
* These six sections used to be part of the `Workspace` and `Agent` groups of
|
|
9
9
|
* the Settings overlay's rail (`packages/ui/src/customize/settings/rail.ts`), plus
|
|
10
|
-
* its
|
|
10
|
+
* its `experimental` row. All of them configure a
|
|
11
11
|
* PROJECT, and every one of them is reachable by exactly the people who can
|
|
12
12
|
* already see Customize — so they belong on the Customize bar, not behind a
|
|
13
13
|
* separate gear icon with a separate rail. The overlay keeps only what is
|
|
@@ -33,11 +33,11 @@ import type { CustomizeSection } from '../../internal/lib/project-actions.js';
|
|
|
33
33
|
* which is what the pane is called everywhere else in the codebase (it is
|
|
34
34
|
* already the `CustomizeSection` id, see `packages/ui/src/internal/lib/project-actions.ts`).
|
|
35
35
|
*
|
|
36
|
-
* A `key` IS its
|
|
36
|
+
* A `key` IS its Project admin segment (`/admin/<key>`), so renaming one breaks live links.
|
|
37
37
|
* `settings-tabs.ts`'s `GRADUATED` map points every retired `SettingsTab` id
|
|
38
38
|
* at the key below that replaced it.
|
|
39
39
|
*/
|
|
40
|
-
export type ProjectSettingsSectionKey = 'general' | 'git' | 'sandbox' | 'review' | 'feature-flags'
|
|
40
|
+
export type ProjectSettingsSectionKey = 'general' | 'git' | 'sandbox' | 'review' | 'feature-flags';
|
|
41
41
|
/**
|
|
42
42
|
* **One flat list, no headings.** The sub-nav used to carry the rail's three
|
|
43
43
|
* group labels — `Workspace`, `Agent`, `Advanced` — over six to eight rows.
|
|
@@ -64,7 +64,7 @@ export interface ProjectSettingsSection {
|
|
|
64
64
|
gate: CustomizeSection;
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
|
-
* The sub-nav: the static sections, then Feature flags
|
|
67
|
+
* The sub-nav: the static sections, then Feature flags. No row is
|
|
68
68
|
* flag-gated any more. Marketplace and Voice were removed from the product;
|
|
69
69
|
* Review is a capability tab of its own and graduated out of the flag system.
|
|
70
70
|
*/
|
|
@@ -78,7 +78,7 @@ export declare const ALL_PROJECT_SETTINGS_SECTIONS: readonly ProjectSettingsSect
|
|
|
78
78
|
*/
|
|
79
79
|
export declare const DEFAULT_PROJECT_SETTINGS_SECTION: ProjectSettingsSectionKey;
|
|
80
80
|
export declare function parseProjectSettingsSection(raw: string | null | undefined): ProjectSettingsSectionKey | null;
|
|
81
|
-
/** The canonical link to one section
|
|
81
|
+
/** The canonical link to one section: its Project admin page, `/admin/<key>`. Review is its own page. */
|
|
82
82
|
export declare function projectSettingsSectionHref(projectId: string, key: ProjectSettingsSectionKey): string;
|
|
83
83
|
/** The copy for one section, independent of any flag — used by pane headings. */
|
|
84
84
|
export declare function projectSettingsSection(key: ProjectSettingsSectionKey): ProjectSettingsSection | undefined;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ShippingContainerIcon as Container, FlaskIcon as Flask, GitBranchIcon as GitBranch, GearSixIcon as Settings, } from '@phosphor-icons/react';
|
|
2
2
|
import { capabilityTabHref } from '../../internal/lib/capability-tab-routes.js';
|
|
3
|
+
import { adminPath } from '../../lib/routes.js';
|
|
3
4
|
import { localizeUiCatalog } from '../../i18n/ui-catalog/localize-ui-catalog.js';
|
|
4
5
|
import { REMAINING_UI_TRANSLATION_KEYS } from '../../i18n/ui-catalog/remaining-ui-translation-keys.generated.js';
|
|
5
6
|
/** The sections every project shows, in sub-nav order. */
|
|
@@ -40,25 +41,12 @@ const FEATURE_FLAGS_SECTION = {
|
|
|
40
41
|
description: 'Features you can switch on before they are generally available.',
|
|
41
42
|
gate: 'feature-flags',
|
|
42
43
|
};
|
|
43
|
-
/**
|
|
44
|
-
* Upgrades — the agent-driven codebase upgrade runner. Not billing: it opens a
|
|
45
|
-
* change request against this workspace's own repo. It sat pinned at the
|
|
46
|
-
* bottom of the old rail and keeps that position here, last in the list.
|
|
47
|
-
*/
|
|
48
|
-
const UPGRADES_SECTION = {
|
|
49
|
-
key: 'upgrades',
|
|
50
|
-
label: 'Upgrades',
|
|
51
|
-
description: 'Changes an agent makes to this workspace. Every run opens a change request for you to review — nothing merges on its own.',
|
|
52
|
-
icon: ArrowUpCircle,
|
|
53
|
-
gate: 'upgrade',
|
|
54
|
-
};
|
|
55
44
|
const PROJECT_SETTINGS_SOURCE = {
|
|
56
45
|
staticSections: STATIC_SECTIONS,
|
|
57
46
|
featureFlagsSection: FEATURE_FLAGS_SECTION,
|
|
58
|
-
upgradesSection: UPGRADES_SECTION,
|
|
59
47
|
};
|
|
60
48
|
/**
|
|
61
|
-
* The sub-nav: the static sections, then Feature flags
|
|
49
|
+
* The sub-nav: the static sections, then Feature flags. No row is
|
|
62
50
|
* flag-gated any more. Marketplace and Voice were removed from the product;
|
|
63
51
|
* Review is a capability tab of its own and graduated out of the flag system.
|
|
64
52
|
*/
|
|
@@ -70,7 +58,7 @@ export function projectSettingsSections(tI18nComplete) {
|
|
|
70
58
|
// Review is NOT a section here any more: it is a capability tab of its own
|
|
71
59
|
// (`capability-tab-routes.ts`, 2026-09-02). Listing it twice — as a tab and
|
|
72
60
|
// as a Settings section — was the leftover of restoring this page.
|
|
73
|
-
sections.push(source.featureFlagsSection
|
|
61
|
+
sections.push(source.featureFlagsSection);
|
|
74
62
|
return sections;
|
|
75
63
|
}
|
|
76
64
|
/** Every section — for copy lookups and tests. */
|
|
@@ -87,11 +75,9 @@ export function parseProjectSettingsSection(raw) {
|
|
|
87
75
|
const hit = ALL_PROJECT_SETTINGS_SECTIONS.find((s) => s.key === raw);
|
|
88
76
|
return hit ? hit.key : null;
|
|
89
77
|
}
|
|
90
|
-
/** The canonical link to one section
|
|
78
|
+
/** The canonical link to one section: its Project admin page, `/admin/<key>`. Review is its own page. */
|
|
91
79
|
export function projectSettingsSectionHref(projectId, key) {
|
|
92
|
-
return key ===
|
|
93
|
-
? capabilityTabHref(projectId, 'config')
|
|
94
|
-
: `${capabilityTabHref(projectId, 'config')}?section=${key}`;
|
|
80
|
+
return key === 'review' ? capabilityTabHref(projectId, 'review') : adminPath(projectId, key);
|
|
95
81
|
}
|
|
96
82
|
/** The copy for one section, independent of any flag — used by pane headings. */
|
|
97
83
|
export function projectSettingsSection(key) {
|
|
@@ -37,7 +37,7 @@ import { errorToast, successToast } from '../../primitives/toast.js';
|
|
|
37
37
|
import { EmptyState } from '../../primitives/empty-state.js';
|
|
38
38
|
import { ErrorState } from '../../primitives/error-state.js';
|
|
39
39
|
import { FIRST_CLASS_PROVIDER_IDS, PROVIDER_PAGE_SIZE, ProviderLogoStatus, connectedVia, providerMethod, supportsPooledProviderKey, useManagedProvider, usePooledProviderIds, useProviderMeta, } from './provider-connect.js';
|
|
40
|
-
import { DeviceCode, ProviderKeyForm, RemoveKeyDialog, SUBSCRIPTION_BY_PROVIDER, useProviderKey, } from './provider-sheet.js';
|
|
40
|
+
import { ClaudeCodeStep, DeviceCode, ProviderKeyForm, RemoveKeyDialog, SUBSCRIPTION_BY_PROVIDER, useProviderKey, } from './provider-sheet.js';
|
|
41
41
|
import { ChatGptSubscriptionConnect, useSubscriptionSignIn, } from '../sections/llm-provider/chatgpt-subscription-connect.js';
|
|
42
42
|
import { useConnectedProviders } from '../sections/llm-provider/use-connected-providers.js';
|
|
43
43
|
import { useLiveLlmProviderCatalog, useLlmProviderCatalogRevision, } from '../sections/llm-provider/use-live-catalog.js';
|
|
@@ -142,24 +142,30 @@ function SignInSubRows({ projectId, entry, canWrite, }) {
|
|
|
142
142
|
const sign = useSubscriptionSignIn({ projectId, kind: sub.kind, onConnected: () => undefined });
|
|
143
143
|
const [confirmDisconnect, setConfirmDisconnect] = useState(false);
|
|
144
144
|
const waiting = sign.phase === 'waiting';
|
|
145
|
+
// A Claude login is the member's own: any member signs in. A shared login needs write access.
|
|
146
|
+
const canSignIn = canWrite || sign.pastesCode;
|
|
145
147
|
const copyCode = () => {
|
|
146
148
|
if (!sign.challenge?.code)
|
|
147
149
|
return;
|
|
148
150
|
void navigator.clipboard?.writeText(sign.challenge.code).then(() => successToast(t('codeCopied')));
|
|
149
151
|
};
|
|
150
|
-
return (_jsxs(_Fragment, { children: [_jsx(AccordionSubRow, { action: !
|
|
152
|
+
return (_jsxs(_Fragment, { children: [_jsx(AccordionSubRow, { action: !canSignIn ? null : waiting ? (_jsx(Button, { type: "button", size: "xs", variant: "ghost", onClick: sign.cancel, children: t('cancel') })) : sign.connected ? (_jsx(Button, { type: "button", size: "xs", variant: "ghost", className: "text-muted-foreground", disabled: sign.disconnect.isPending, onClick: () => setConfirmDisconnect(true), children: t('disconnect') })) : (_jsx(Button, { type: "button", size: "xs", variant: "secondary", onClick: () => void sign.start(), children: t('signInTitle', { name: sub.name }) })), children: sign.connected
|
|
151
153
|
? `${t('subscription', { plan: sub.plan })} · ${t('signedIn')}`
|
|
152
154
|
: waiting
|
|
153
155
|
? t('signingIn', { name: sub.name })
|
|
154
|
-
: `${t('subscription', { plan: sub.plan })} · ${t('notConnected')}` }), waiting ? (_jsx("div", { className: "border-border border-t py-3", children: _jsx(DeviceCode, { name: sub.name, code: sign.challenge?.code ?? null, url: sign.challenge?.url ?? null, onCopy: copyCode }) })) : null, sign.error ? (_jsx("p", { role: "alert", className: "text-destructive pb-1.5 text-xs text-pretty", children: sign.error })) : null, _jsx(AlertDialog, { open: confirmDisconnect, onOpenChange: setConfirmDisconnect, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t('disconnectTitle', { plan: sub.plan }) }), _jsx(AlertDialogDescription, { children: t('disconnectBody') })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: t('cancel') }), _jsx(AlertDialogAction, { variant: "destructive", disabled: sign.disconnect.isPending, onClick: () => sign.disconnect.mutate(), children: t('disconnect') })] })] }) })] }));
|
|
156
|
+
: `${t('subscription', { plan: sub.plan })} · ${t('notConnected')}` }), waiting && sign.pastesCode ? (_jsx("div", { className: "border-border border-t py-3", children: _jsx(ClaudeCodeStep, { url: sign.challenge?.url ?? null, checking: sign.checking, onSubmit: (code) => void sign.submitCode(code) }) })) : waiting ? (_jsx("div", { className: "border-border border-t py-3", children: _jsx(DeviceCode, { name: sub.name, code: sign.challenge?.code ?? null, url: sign.challenge?.url ?? null, onCopy: copyCode }) })) : null, sign.error ? (_jsx("p", { role: "alert", className: "text-destructive pb-1.5 text-xs text-pretty", children: sign.error })) : null, _jsx(AlertDialog, { open: confirmDisconnect, onOpenChange: setConfirmDisconnect, children: _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t('disconnectTitle', { plan: sub.plan }) }), _jsx(AlertDialogDescription, { children: t('disconnectBody') })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: t('cancel') }), _jsx(AlertDialogAction, { variant: "destructive", disabled: sign.disconnect.isPending, onClick: () => sign.disconnect.mutate(), children: t('disconnect') })] })] }) })] }));
|
|
155
157
|
}
|
|
156
|
-
/**
|
|
157
|
-
|
|
158
|
+
/**
|
|
159
|
+
* Kortix with no servable model, as one static row: the logo, one line and
|
|
160
|
+
* Upgrade in the place of the chevron. Nothing to expand, so it says its line
|
|
161
|
+
* once. The caller renders it only where billing sells a plan: a self-hosted
|
|
162
|
+
* deployment has no Kortix-managed models, so the row would be a dead end.
|
|
163
|
+
*/
|
|
164
|
+
function ManagedUpgradeRow({ projectId, row }) {
|
|
158
165
|
const t = useTranslations('sessionUi.modelGate');
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
return (_jsxs(Button, { type: "button", size: "xs", className: "shrink-0", onClick: openUpgrade, children: [_jsx(CreditCardIcon, { className: "size-3.5 shrink-0" }), t('upgrade')] }));
|
|
166
|
+
const tAccess = useTranslations('modelAccess');
|
|
167
|
+
const { openUpgrade } = useModelConnectionGate(undefined, { projectId });
|
|
168
|
+
return (_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(ProviderLogoStatus, { providerId: row.id, label: row.label, status: row.status, size: "medium" }), _jsxs("span", { className: "min-w-0 flex-1", children: [_jsx("span", { className: "text-foreground block truncate text-sm font-medium", children: row.label }), _jsx("span", { className: "text-muted-foreground block truncate text-xs", children: tAccess('managedRowHint') })] }), _jsxs(Button, { type: "button", size: "xs", className: "shrink-0", onClick: openUpgrade, children: [_jsx(CreditCardIcon, { className: "size-3.5 shrink-0" }), t('upgrade')] })] }));
|
|
163
169
|
}
|
|
164
170
|
/** What an open card holds, by how the provider connects. */
|
|
165
171
|
function ExpandedBody({ projectId, entry, status, keyConnected, canWrite, enabled, pooled, }) {
|
|
@@ -170,19 +176,17 @@ function ExpandedBody({ projectId, entry, status, keyConnected, canWrite, enable
|
|
|
170
176
|
const enable = status !== 'none' ? (_jsx(EnableSubRow, { projectId: projectId, entry: entry, canWrite: canWrite, enabled: enabled })) : null;
|
|
171
177
|
let content;
|
|
172
178
|
if (method === 'included' || (entry.envVars.length === 0 && !SUBSCRIPTION_BY_PROVIDER[entry.id])) {
|
|
173
|
-
content = (_jsx(AccordionSubRow
|
|
174
|
-
// Kortix with no servable model is the upgrade story: the row says so,
|
|
175
|
-
// so it carries the way out too.
|
|
176
|
-
, {
|
|
177
|
-
// Kortix with no servable model is the upgrade story: the row says so,
|
|
178
|
-
// so it carries the way out too.
|
|
179
|
-
action: entry.managed && entry.models.length === 0 ? _jsx(ManagedUpgradeButton, { projectId: projectId }) : null, children: entry.hint }));
|
|
179
|
+
content = (_jsx(AccordionSubRow, { children: entry.hint }));
|
|
180
180
|
}
|
|
181
181
|
else if (pooled.pooledSecretsEnabled && pooled.accountId && entry.id === 'openai') {
|
|
182
182
|
content = (_jsxs("div", { className: "border-border space-y-3 border-t py-3", children: [_jsx("p", { className: "text-foreground text-xs font-medium", children: tPooled('chatGptAccounts') }), _jsx(AccountSecretResourcesPanel, { accountId: pooled.accountId, projectId: projectId, providerId: "codex", providerName: "ChatGPT Plus/Pro", envVar: "CODEX_AUTH_JSON", canWrite: true, oauth: { projectId, onConnected: () => undefined } }), _jsx(ChatGptSubscriptionConnect, { projectId: projectId, onConnected: () => undefined, legacyOnly: true })] }));
|
|
183
183
|
}
|
|
184
|
+
else if (pooled.pooledSecretsEnabled && pooled.accountId && entry.id === 'anthropic') {
|
|
185
|
+
// Claude accounts, exactly as OpenAI lists ChatGPT accounts; Anthropic API keys below them.
|
|
186
|
+
content = (_jsxs(_Fragment, { children: [_jsxs("div", { className: "border-border space-y-3 border-t py-3", children: [_jsx("p", { className: "text-foreground text-xs font-medium", children: tPooled('claudeAccounts') }), _jsx(AccountSecretResourcesPanel, { accountId: pooled.accountId, projectId: projectId, providerId: "claude-agent", providerName: "Claude Pro/Max", envVar: "CLAUDE_CODE_OAUTH_TOKEN", canWrite: true, oauth: { projectId, onConnected: () => undefined, kind: 'claude' } })] }), _jsx("div", { className: "border-border border-t py-3", children: _jsx(AccountSecretResourcesPanel, { accountId: pooled.accountId, projectId: projectId, providerId: entry.id, providerName: entry.label, envVar: entry.envVars[0], canWrite: true }) })] }));
|
|
187
|
+
}
|
|
184
188
|
else if (pooled.pooledSecretsEnabled && pooled.accountId && supportsPooledProviderKey(entry)) {
|
|
185
|
-
content = (_jsx("div", { className: "border-border border-t py-3", children: _jsx(AccountSecretResourcesPanel, { accountId: pooled.accountId, projectId: projectId, providerId: entry.id, providerName: entry.label, envVar: entry.envVars[0], canWrite: true }) }));
|
|
189
|
+
content = (_jsxs(_Fragment, { children: [SUBSCRIPTION_BY_PROVIDER[entry.id] ? _jsx(SignInSubRows, { projectId: projectId, entry: entry, canWrite: canWrite }) : null, _jsx("div", { className: "border-border border-t py-3", children: _jsx(AccountSecretResourcesPanel, { accountId: pooled.accountId, projectId: projectId, providerId: entry.id, providerName: entry.label, envVar: entry.envVars[0], canWrite: true }) })] }));
|
|
186
190
|
}
|
|
187
191
|
else if (SUBSCRIPTION_BY_PROVIDER[entry.id]) {
|
|
188
192
|
content = (_jsxs(_Fragment, { children: [_jsx(SignInSubRows, { projectId: projectId, entry: entry, canWrite: canWrite }), _jsx(KeySubRow, { projectId: projectId, entry: entry, saved: keyConnected, canWrite: canWrite })] }));
|
|
@@ -208,6 +212,9 @@ export function ProviderAccordion({ projectId, canWrite = false, enabled = true,
|
|
|
208
212
|
const meta = useProviderMeta();
|
|
209
213
|
const access = useModelAccess(enabled ? projectId : null);
|
|
210
214
|
const managedProvider = useManagedProvider(enabled ? projectId : null);
|
|
215
|
+
// Where billing sells no plan (a self-hosted deployment) Kortix-managed
|
|
216
|
+
// models do not exist, so the managed row with no models is left out.
|
|
217
|
+
const { showUpgradeOption } = useModelConnectionGate(undefined, { projectId });
|
|
211
218
|
const pooled = usePooledProviderIds(projectId, enabled);
|
|
212
219
|
useLiveLlmProviderCatalog(projectId, enabled);
|
|
213
220
|
const catalogRevision = useLlmProviderCatalogRevision();
|
|
@@ -278,6 +285,11 @@ export function ProviderAccordion({ projectId, canWrite = false, enabled = true,
|
|
|
278
285
|
if (addingId === row.id && singleKey && canWrite) {
|
|
279
286
|
return (_jsx(InlineAddKeyRow, { projectId: projectId, entry: entry, row: row, onDone: () => setAddingId(null) }, row.id));
|
|
280
287
|
}
|
|
288
|
+
if (entry.managed && entry.models.length === 0) {
|
|
289
|
+
if (!showUpgradeOption)
|
|
290
|
+
return null;
|
|
291
|
+
return (_jsx(AccordionRowFrame, { expanded: false, children: _jsx("div", { className: "px-3.5 py-2.5", children: _jsx(ManagedUpgradeRow, { projectId: projectId, row: row }) }) }, row.id));
|
|
292
|
+
}
|
|
281
293
|
const expanded = expandedId === row.id;
|
|
282
294
|
// AK01: an available single-key row has nothing to show when opened
|
|
283
295
|
// except a field — so it goes straight to the field.
|
|
@@ -44,7 +44,7 @@ import { useQuery } from '@tanstack/react-query';
|
|
|
44
44
|
*/
|
|
45
45
|
export const FIRST_CLASS_PROVIDER_IDS = ['anthropic', 'openai', 'google'];
|
|
46
46
|
/** Providers whose sheet offers a subscription sign-in beside the API key. */
|
|
47
|
-
export const SUBSCRIPTION_PROVIDER_IDS = new Set(['openai', 'opencode-go']);
|
|
47
|
+
export const SUBSCRIPTION_PROVIDER_IDS = new Set(['openai', 'opencode-go', 'anthropic']);
|
|
48
48
|
/**
|
|
49
49
|
* How many Available providers render before `Show more`, and how many each
|
|
50
50
|
* press adds. A query is a request for its matches — all of them — so a search
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ClaudeCodeStep } from '../sections/llm-provider/claude-code-step.js';
|
|
2
|
+
export { ClaudeCodeStep };
|
|
1
3
|
import { type SubscriptionKind } from '../sections/llm-provider/chatgpt-subscription-connect.js';
|
|
2
4
|
import { type LlmProviderEntry, type LlmProviderModel } from '../../internal/lib/llm-providers.js';
|
|
3
5
|
/** The subscription each two-way provider signs in with, and how it is named. */
|
|
@@ -51,7 +53,8 @@ export declare function ConnectChoice({ name, plan, providerLabel, onSignIn, onU
|
|
|
51
53
|
plan: string;
|
|
52
54
|
providerLabel: string;
|
|
53
55
|
onSignIn: () => void;
|
|
54
|
-
|
|
56
|
+
/** Absent: the viewer can only sign in (a Claude login is the member's own; a key is a project secret). */
|
|
57
|
+
onUseKey?: () => void;
|
|
55
58
|
}): import("react").JSX.Element;
|
|
56
59
|
/** The device-grant step: the code, where to enter it, and that we are waiting. */
|
|
57
60
|
export declare function DeviceCode({ name, code, url, onCopy, }: {
|