@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
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
// Generated from the final user-visible i18n audit. Keys are SHA-256(message)[0:12].
|
|
2
2
|
export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
3
|
+
"trigger": 'text683259feabbf',
|
|
4
|
+
"New trigger": 'texta38f4ea67a30',
|
|
5
|
+
"Search triggers": 'textcf789cba73dc',
|
|
6
|
+
"No triggers yet": 'text362ec1f12075',
|
|
7
|
+
"Start agents or wake sessions on a schedule or an event.": 'text8fbb8c347fc0',
|
|
8
|
+
"Create a trigger and your agent runs on its own, no prompt needed.": 'texte9acea9f91da',
|
|
9
|
+
"Have an agent run when a change request merges.": 'text0e8f0fa67e67',
|
|
10
|
+
"change request trigger": 'text20c14db54300',
|
|
11
|
+
"New change request trigger": 'textb0d2b95916ce',
|
|
12
|
+
"Search change request triggers": 'textd025f8dc1334',
|
|
13
|
+
"No change request triggers yet": 'text1bc4d0bc8d03',
|
|
14
|
+
"Create one to have an agent run when a change request merges.": 'text3c11a07619e0',
|
|
15
|
+
"Change request merged": 'text5ffd973e20ed',
|
|
16
|
+
"Branch": 'text52656e8104ee',
|
|
3
17
|
"Connector events": 'text0ba357fa63f8',
|
|
4
18
|
"Connector event": 'textca395c4d19b2',
|
|
5
19
|
"connector event": 'text6064256ee716',
|
|
@@ -11,7 +25,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
11
25
|
"New App event": 'text064694999e1f',
|
|
12
26
|
"Search App events": 'text1934aa0740bb',
|
|
13
27
|
"No App events yet": 'text25db7e5609e5',
|
|
14
|
-
"
|
|
28
|
+
"Create one to have an agent run when one of your Apps sends an event.": 'textd85b56df2c94',
|
|
15
29
|
Drive: 'text6312b4b9baf1',
|
|
16
30
|
Drives: 'text729fe0e7b138',
|
|
17
31
|
'{label} has finished.': 'text27d628c8b427',
|
|
@@ -213,9 +227,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
213
227
|
'Every tool runs without asking. Only the rules below can stop one.': 'texta63fb2eebd02',
|
|
214
228
|
'Everything an owner can do except deleting the account or transferring ownership. Also Manager on every project.': 'textc8ef36aed650',
|
|
215
229
|
Expired: 'text424a2551d356',
|
|
216
|
-
'Moves kortix.toml or a version 2 kortix.yaml to version 3: the project registers skills, tools, commands and extensions, and each agent enables them by name. Refreshes platform-managed skills and opens a change request for review.': 'text7823a1f3af93',
|
|
217
230
|
Extensions: 'textfe3436af86b4',
|
|
218
|
-
'Upgrade manifest to v3 (kortix.yaml)': 'text08edd5b6dcdc',
|
|
219
231
|
Failed: 'text031a8f0f659d',
|
|
220
232
|
Favicon: 'text4295528943df',
|
|
221
233
|
'Fetching deals updated ≤ 7d': 'text5bae674104b6',
|
|
@@ -283,6 +295,7 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
283
295
|
'Loading your workspace': 'text22cd35468c29',
|
|
284
296
|
Logo: 'textd707dc2f1936',
|
|
285
297
|
Logs: 'textea2100dc89ae',
|
|
298
|
+
Loops: 'textc08f99e3947d',
|
|
286
299
|
Machine: 'text8f1cc42d7c1c',
|
|
287
300
|
macOS: 'textaed6b7aa2a05',
|
|
288
301
|
Manager: 'text8b2085f74dfa',
|
|
@@ -387,7 +400,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
387
400
|
'Requests are checked against the saved secret .': 'textc6fbb4b00507',
|
|
388
401
|
'research/': 'text2f80158a9d89',
|
|
389
402
|
'Reserving your computer': 'texta7d795204fda',
|
|
390
|
-
Reminders: 'text7971dd752669',
|
|
391
403
|
Review: 'textaff0766a5290',
|
|
392
404
|
Revoked: 'textf6f738d04392',
|
|
393
405
|
Routing: 'textbcba696f3eb1',
|
|
@@ -515,7 +527,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
515
527
|
'your-company/': 'text7a9f6daee641',
|
|
516
528
|
'. The session keeps its id; the sandbox is rebuilt.': 'text09a3bb2aced6',
|
|
517
529
|
'· grant no longer matches an agent': 'textc795f93da2e5',
|
|
518
|
-
"(kortix_version 2) to edit this agent's instructions, model, tool permissions and access here.": 'text479d92cbfaa1',
|
|
519
530
|
') stops running and is removed.': 'text3109205d1fc7',
|
|
520
531
|
'@ already has access to this repo': 'texta9ab51e18b56',
|
|
521
532
|
'⌘S': 'text8cd003e6301b',
|
|
@@ -559,7 +570,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
559
570
|
'Can edit': 'text5abe9e1fbc5b',
|
|
560
571
|
'Can view': 'text151dc282a69e',
|
|
561
572
|
'Change what can do in .': 'text8c4e24be27f2',
|
|
562
|
-
'Changes an agent makes to this workspace. Every run opens a change request for you to review — nothing merges on its own.': 'textc6414eb01d9a',
|
|
563
573
|
'Clear notifications': 'texte6f312c6b6ef',
|
|
564
574
|
'Clone address': 'textac830bd3c755',
|
|
565
575
|
'Clone command': 'text6264f3bfdd91',
|
|
@@ -757,7 +767,6 @@ export const REMAINING_UI_TRANSLATION_KEYS = {
|
|
|
757
767
|
'Try a different term.': 'textce18e358bf01',
|
|
758
768
|
'Try adjusting the filters or clearing the search.': 'text0713dbee5126',
|
|
759
769
|
'Unsaved changes.': 'textefa5855ff509',
|
|
760
|
-
Upgrades: 'texte02a5941602a',
|
|
761
770
|
'Use the agent's usual model': 'text6960ac83d152',
|
|
762
771
|
'Use your own Git client': 'textd29222de0472',
|
|
763
772
|
'Uses the selected agent, project, or platform default.': 'text4eb861e5d86e',
|
|
@@ -23,7 +23,7 @@ export declare function Rise({ delay, className, children, }: {
|
|
|
23
23
|
* traffic lights and the frame's Back control.
|
|
24
24
|
*/
|
|
25
25
|
export declare function AuthMobileLogo(): import("react").JSX.Element;
|
|
26
|
-
export declare function StepHeader({ title,
|
|
26
|
+
export declare function StepHeader({ title, description, mark, markOnMobile, }: {
|
|
27
27
|
/** A string, or a string led by a status mark (a decided approval). */
|
|
28
28
|
title: React.ReactNode;
|
|
29
29
|
/**
|
|
@@ -35,8 +35,6 @@ export declare function StepHeader({ title, tagline, description, mark, markOnMo
|
|
|
35
35
|
/** Show the mark below `md` too. For a header outside `AuthFrame` (a modal),
|
|
36
36
|
* where no corner logo stands in for it on mobile. */
|
|
37
37
|
markOnMobile?: boolean;
|
|
38
|
-
/** Second line in the same size as the title, dimmed (entry step only). */
|
|
39
|
-
tagline?: string;
|
|
40
38
|
description?: React.ReactNode;
|
|
41
39
|
}): import("react").JSX.Element;
|
|
42
40
|
export declare function FieldLabel({ htmlFor, children }: {
|
|
@@ -41,8 +41,8 @@ export function AuthMobileLogo() {
|
|
|
41
41
|
const tHardcodedUi = useTranslations('hardcodedUi');
|
|
42
42
|
return (_jsx("div", { className: "kx-auth-mobile-logo absolute top-6 left-6 z-10 md:hidden", children: _jsx(Link, { href: "/", "aria-label": tHardcodedUi.raw('i18nComplete.text7ecec93ed268'), className: "hit-area-3 inline-flex", children: _jsx(KortixLogo, { variant: "icon", size: 22, className: "text-foreground" }) }) }));
|
|
43
43
|
}
|
|
44
|
-
export function StepHeader({ title,
|
|
45
|
-
return (_jsxs("div", { className: "mb-10", children: [mark ? (_jsx("div", { className: markOnMobile ? undefined : 'hidden md:block', children: mark })) : (_jsx(KortixLogo, { variant: "icon", size: 22, className: "text-foreground hidden md:block" })), _jsx("h1", { className: cn('text-foreground text-2xl font-medium tracking-tight md:mt-6', mark && markOnMobile && 'mt-6'), children: title }),
|
|
44
|
+
export function StepHeader({ title, description, mark, markOnMobile = false, }) {
|
|
45
|
+
return (_jsxs("div", { className: "mb-10", children: [mark ? (_jsx("div", { className: markOnMobile ? undefined : 'hidden md:block', children: mark })) : (_jsx(KortixLogo, { variant: "icon", size: 22, className: "text-foreground hidden md:block" })), _jsx("h1", { className: cn('text-foreground text-2xl font-medium tracking-tight md:mt-6', mark && markOnMobile && 'mt-6'), children: title }), description ? (_jsx("p", { className: "text-muted-foreground mt-2 text-sm text-pretty", children: description })) : null] }));
|
|
46
46
|
}
|
|
47
47
|
export function FieldLabel({ htmlFor, children }) {
|
|
48
48
|
return (_jsx("label", { htmlFor: htmlFor, className: "text-muted-foreground text-sm font-medium", children: children }));
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
2
|
export declare function formatSessionCostCredits(value: number, locale?: string): string;
|
|
3
3
|
export declare function formatSessionCostExactCredits(value: number, locale?: string): string;
|
|
4
|
+
export declare function formatSessionCostUsd(value: number, locale?: string): string;
|
|
4
5
|
export declare function formatSessionCostDuration(value: number): string;
|
|
@@ -15,6 +15,17 @@ export function formatSessionCostExactCredits(value, locale = 'en-US') {
|
|
|
15
15
|
maximumFractionDigits: Math.abs(credits) < 10 ? 8 : 2,
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
+
// The session usage view reads model spend in US dollars, the unit the ledger
|
|
19
|
+
// stores. Two decimals from $1 up, up to four below, and `<$0.0001` for a
|
|
20
|
+
// non-zero amount under that, so a cheap model's session never reads $0.00.
|
|
21
|
+
const SMALLEST_USD = 0.0001;
|
|
22
|
+
export function formatSessionCostUsd(value, locale = 'en-US') {
|
|
23
|
+
const usd = Number.isFinite(value) ? value : 0;
|
|
24
|
+
const format = (amount, maximumFractionDigits) => new Intl.NumberFormat(locale, { style: 'currency', currency: 'USD', minimumFractionDigits: 2, maximumFractionDigits }).format(amount);
|
|
25
|
+
if (usd !== 0 && Math.abs(usd) < SMALLEST_USD)
|
|
26
|
+
return `<${format(SMALLEST_USD, 4)}`;
|
|
27
|
+
return format(usd, Math.abs(usd) < 1 ? 4 : 2);
|
|
28
|
+
}
|
|
18
29
|
export function formatSessionCostDuration(value) {
|
|
19
30
|
let remaining = Math.max(0, Math.floor(Number.isFinite(value) ? value : 0));
|
|
20
31
|
const units = [
|
|
@@ -17,7 +17,11 @@ export type AgentMarkSize = keyof typeof TILE;
|
|
|
17
17
|
* Set on the element that paints the tile; `AgentMarkGlyph` reads `--mark-ink`.
|
|
18
18
|
*/
|
|
19
19
|
export declare function agentMarkVars(slug: string): CSSProperties;
|
|
20
|
-
/** The
|
|
20
|
+
/** The tile's boundary: a hairline on the Kortix tile, none on a tinted one. */
|
|
21
|
+
export declare function agentMarkTileClass(slug: string): string | undefined;
|
|
22
|
+
/** The bare pixel figure, painted with `--mark-ink` from an ancestor. A 7 × 7
|
|
23
|
+
* mark fills `size`; a wider reserved grid (My Kortix's 12 × 10 symbol) keeps
|
|
24
|
+
* whole-pixel cells, `floor(size / 12)` px each. */
|
|
21
25
|
export declare function AgentMarkGlyph({ slug, size }: {
|
|
22
26
|
slug: string;
|
|
23
27
|
size: AgentMarkSize;
|
|
@@ -35,4 +39,11 @@ export declare function AgentMark({ slug, size, tile, label, className, }: {
|
|
|
35
39
|
label?: string;
|
|
36
40
|
className?: string;
|
|
37
41
|
}): import("react").JSX.Element;
|
|
42
|
+
/**
|
|
43
|
+
* An agent's name as a person reads it: My Kortix for the built-in agent,
|
|
44
|
+
* otherwise the manifest key in sentence case with its separators as spaces
|
|
45
|
+
* (`session-reviewer` → "Session reviewer"). One helper, so the sidebar, the
|
|
46
|
+
* agent page, the index and the hover hint name an agent the same way.
|
|
47
|
+
*/
|
|
48
|
+
export declare function agentDisplayName(slug: string): string;
|
|
38
49
|
export {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { cn } from '../lib/utils.js';
|
|
4
4
|
import { Hint } from '../../primitives/hint.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { isMyKortixAgentName, MY_KORTIX_DISPLAY_NAME } from '../../_vendor/kortix-shared.js';
|
|
6
|
+
import { pixelMark } from '../lib/pixel-mark.js';
|
|
7
7
|
/** Mark size → tile size. The mark is a multiple of 7, so each pixel lands on
|
|
8
8
|
* whole device pixels; any other size blurs the edges. Literal px because
|
|
9
9
|
* this repo's spacing scale is 0.23rem (`size-14` is 51.5px, not 56px). */
|
|
@@ -15,17 +15,31 @@ const TILE = { 14: 20, 21: 28, 28: 40, 42: 56, 56: 80 };
|
|
|
15
15
|
*/
|
|
16
16
|
export function agentMarkVars(slug) {
|
|
17
17
|
const { tone } = pixelMark(slug);
|
|
18
|
+
// The Kortix tile (My Kortix, the starter `kortix` agent) follows the Kortix
|
|
19
|
+
// tile rule: the page surface with a hairline, never an inverted black tile
|
|
20
|
+
// (decisions.md #8421). `agentMarkTileClass` adds the hairline.
|
|
21
|
+
if (tone.name === 'brand') {
|
|
22
|
+
return { '--mark-tile': 'var(--background)', '--mark-ink': 'var(--foreground)' };
|
|
23
|
+
}
|
|
18
24
|
return {
|
|
19
25
|
'--mark-tile': `light-dark(${tone.tile}, ${tone.tileDark})`,
|
|
20
26
|
'--mark-ink': `light-dark(${tone.ink}, ${tone.inkDark})`,
|
|
21
27
|
};
|
|
22
28
|
}
|
|
23
|
-
/** The
|
|
29
|
+
/** The tile's boundary: a hairline on the Kortix tile, none on a tinted one. */
|
|
30
|
+
export function agentMarkTileClass(slug) {
|
|
31
|
+
return pixelMark(slug).tone.name === 'brand' ? 'ring-1 ring-inset ring-border' : undefined;
|
|
32
|
+
}
|
|
33
|
+
/** The bare pixel figure, painted with `--mark-ink` from an ancestor. A 7 × 7
|
|
34
|
+
* mark fills `size`; a wider reserved grid (My Kortix's 12 × 10 symbol) keeps
|
|
35
|
+
* whole-pixel cells, `floor(size / 12)` px each. */
|
|
24
36
|
export function AgentMarkGlyph({ slug, size }) {
|
|
25
|
-
|
|
37
|
+
const mark = pixelMark(slug);
|
|
38
|
+
const cell = mark.width === 7 ? size / 7 : Math.max(1, Math.floor(size / 12));
|
|
39
|
+
return (_jsxs("svg", { "aria-hidden": true, width: mark.width * cell, height: mark.height * cell, viewBox: `0 0 ${mark.width} ${mark.height}`,
|
|
26
40
|
// Inline, so a host's `[&_svg]:size-4` default (menu rows) cannot rescale
|
|
27
|
-
// the
|
|
28
|
-
style: { width:
|
|
41
|
+
// the pixel grid off whole device pixels.
|
|
42
|
+
style: { width: mark.width * cell, height: mark.height * cell }, shapeRendering: "crispEdges", className: "shrink-0", children: [_jsx("path", { d: mark.path, className: "fill-(--mark-ink)" }), mark.ditherPath ? (_jsx("path", { d: mark.ditherPath, className: "fill-(--mark-ink)", opacity: 0.5 })) : null] }));
|
|
29
43
|
}
|
|
30
44
|
/**
|
|
31
45
|
* An agent's pixel mark on its tile — the agent's face wherever it appears:
|
|
@@ -33,9 +47,18 @@ export function AgentMarkGlyph({ slug, size }) {
|
|
|
33
47
|
*/
|
|
34
48
|
export function AgentMark({ slug, size = 14, tile = TILE[size], label, className, }) {
|
|
35
49
|
// A mark is a face, not a name: the hover hint says whose face it is.
|
|
36
|
-
const mark = (_jsx("span", { "aria-hidden": true, "data-slot": "agent-mark", style: { ...agentMarkVars(slug), width: tile, height: tile }, className: cn('inline-flex shrink-0 items-center justify-center bg-(--mark-tile)', size >= 28 ? 'rounded-md' : 'rounded-sm', className), children: _jsx(AgentMarkGlyph, { slug: slug, size: size }) }));
|
|
37
|
-
return (_jsx(Hint, { side: "top", sideOffset: 6, alignOffset: 0, label: label ??
|
|
50
|
+
const mark = (_jsx("span", { "aria-hidden": true, "data-slot": "agent-mark", style: { ...agentMarkVars(slug), width: tile, height: tile }, className: cn('inline-flex shrink-0 items-center justify-center bg-(--mark-tile)', size >= 28 ? 'rounded-md' : 'rounded-sm', agentMarkTileClass(slug), className), children: _jsx(AgentMarkGlyph, { slug: slug, size: size }) }));
|
|
51
|
+
return (_jsx(Hint, { side: "top", sideOffset: 6, alignOffset: 0, label: label ?? agentDisplayName(slug), children: mark }));
|
|
38
52
|
}
|
|
39
|
-
|
|
40
|
-
|
|
53
|
+
/**
|
|
54
|
+
* An agent's name as a person reads it: My Kortix for the built-in agent,
|
|
55
|
+
* otherwise the manifest key in sentence case with its separators as spaces
|
|
56
|
+
* (`session-reviewer` → "Session reviewer"). One helper, so the sidebar, the
|
|
57
|
+
* agent page, the index and the hover hint name an agent the same way.
|
|
58
|
+
*/
|
|
59
|
+
export function agentDisplayName(slug) {
|
|
60
|
+
if (isMyKortixAgentName(slug))
|
|
61
|
+
return MY_KORTIX_DISPLAY_NAME;
|
|
62
|
+
const words = slug.replace(/[-_]+/g, ' ').trim();
|
|
63
|
+
return words.charAt(0).toUpperCase() + words.slice(1);
|
|
41
64
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
/**
|
|
3
|
+
* The one left-rail recipe: Project admin and the agent page. A rail is
|
|
4
|
+
* vertical `Tabs` whose rows are real links (the section is URL state),
|
|
5
|
+
* grouped under muted labels in the account hub's dialect
|
|
6
|
+
* (`account-settings-sidebar.tsx`).
|
|
7
|
+
*/
|
|
8
|
+
import type { ReactNode } from 'react';
|
|
9
|
+
/**
|
|
10
|
+
* Each group is its own labelled tablist: arrow keys move inside a group, Tab
|
|
11
|
+
* moves to the next one. `after` sits below the list, outside it: a link that
|
|
12
|
+
* is not a tab. A group without `label` draws no heading.
|
|
13
|
+
*/
|
|
14
|
+
export declare function RailGroup({ label, children, after }: {
|
|
15
|
+
label?: string;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
after?: ReactNode;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
/** A rail row: pass to `TabsTrigger` with `size="md"`. */
|
|
20
|
+
export declare const RAIL_ROW_CLASS: string;
|
|
21
|
+
/** The same row on the narrow-screen horizontal strip. */
|
|
22
|
+
export declare const RAIL_HORIZONTAL_ROW_CLASS = "w-auto shrink-0 gap-2.5 px-3 py-0.75 whitespace-nowrap";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
import { TabsList } from '../../primitives/tabs.js';
|
|
5
|
+
/**
|
|
6
|
+
* Each group is its own labelled tablist: arrow keys move inside a group, Tab
|
|
7
|
+
* moves to the next one. `after` sits below the list, outside it: a link that
|
|
8
|
+
* is not a tab. A group without `label` draws no heading.
|
|
9
|
+
*/
|
|
10
|
+
export function RailGroup({ label, children, after }) {
|
|
11
|
+
return (_jsxs("div", { children: [label ? _jsx("p", { className: "text-muted-foreground flex h-8 items-center px-2.5 text-xs font-medium", children: label }) : null, _jsx(TabsList, { orientation: "vertical", "aria-label": label, className: "w-full", children: children }), after] }));
|
|
12
|
+
}
|
|
13
|
+
/** A rail row: pass to `TabsTrigger` with `size="md"`. */
|
|
14
|
+
export const RAIL_ROW_CLASS = cn('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');
|
|
15
|
+
/** The same row on the narrow-screen horizontal strip. */
|
|
16
|
+
export const RAIL_HORIZONTAL_ROW_CLASS = 'w-auto shrink-0 gap-2.5 px-3 py-0.75 whitespace-nowrap';
|
|
@@ -19,7 +19,7 @@ import { PlugsIcon } from '@phosphor-icons/react';
|
|
|
19
19
|
import { useQuery } from '@tanstack/react-query';
|
|
20
20
|
import { useState } from 'react';
|
|
21
21
|
import { useTranslations } from '../../i18n/index.js';
|
|
22
|
-
import {
|
|
22
|
+
import { adminPath } from '../../lib/routes.js';
|
|
23
23
|
import { Button } from '../../primitives/button.js';
|
|
24
24
|
import { InfoBanner } from '../../primitives/info-banner.js';
|
|
25
25
|
import Loading from '../../primitives/loading.js';
|
|
@@ -62,7 +62,7 @@ export function ReconnectGitHubButton({ projectId, className }) {
|
|
|
62
62
|
if (state.install_url)
|
|
63
63
|
window.open(state.install_url, '_blank', 'noopener,noreferrer');
|
|
64
64
|
else
|
|
65
|
-
window.location.assign(
|
|
65
|
+
window.location.assign(adminPath(projectId, 'git'));
|
|
66
66
|
}
|
|
67
67
|
catch {
|
|
68
68
|
errorToast(t('reconnectError'));
|
|
@@ -21,8 +21,22 @@ export declare function goalProgress(goal: ProjectGoalDocument | null): {
|
|
|
21
21
|
};
|
|
22
22
|
/** Open asks for a person (not the agent): what the goal waits on someone for. */
|
|
23
23
|
export declare function goalOpenAsks(goal: ProjectGoalDocument | null): ProjectGoalItem[];
|
|
24
|
-
/** The goal
|
|
24
|
+
/** The goal waits on a person: its state is `waiting_on_user`, or it has an open ask. */
|
|
25
25
|
export declare function goalNeedsYou(goal: ProjectGoal): boolean;
|
|
26
|
+
/** The goal runs into a problem no person was asked about: a health issue (no heartbeat, a failed wake, …). */
|
|
27
|
+
export declare function goalNeedsAttention(goal: ProjectGoal): boolean;
|
|
28
|
+
/** When the goal last woke: the heartbeat's last run, else the wake GOAL.md records. */
|
|
29
|
+
export declare function goalLastWake(goal: Pick<ProjectGoal, 'goal' | 'heartbeat'>): string | null;
|
|
30
|
+
/** Who a goal is for, by name: "You", the member's email, else "A teammate". */
|
|
31
|
+
export declare function useGoalPerson(projectId: string): (userId: string | null | undefined) => string | null;
|
|
32
|
+
/**
|
|
33
|
+
* Start a goal from its outcome: a new session whose first message is the
|
|
34
|
+
* outcome plus `MAKE_GOAL_PROMPT`, so the agent writes GOAL.md and its done
|
|
35
|
+
* criteria.
|
|
36
|
+
*/
|
|
37
|
+
export declare function useStartGoal(projectId: string): (outcome: string) => void;
|
|
38
|
+
/** The goal is for this person (GOAL.md `assigned_user`). */
|
|
39
|
+
export declare function goalAssignedTo(goal: Pick<ProjectGoal, 'goal'>, userId: string | null | undefined): boolean;
|
|
26
40
|
/** "in 33 min", "2 hr ago", "Tue 09:00": the reminders time format. */
|
|
27
41
|
export declare function formatGoalTime(iso: string | null | undefined, locale: string, now: number): string;
|
|
28
42
|
export declare function goalHref(projectId: string, goal: Pick<ProjectGoal, 'scope' | 'slug'>): string | null;
|
|
@@ -4,6 +4,12 @@ import { formatFireTime } from '../reminders/reminder-format.js';
|
|
|
4
4
|
import { useTranslations } from '../../i18n/index.js';
|
|
5
5
|
import { StatusBadge, StatusDot } from '../../primitives/status.js';
|
|
6
6
|
import { uiRoutes } from '../../lib/routes.js';
|
|
7
|
+
import { useUiViewerId } from '../../providers/ui-provider.js';
|
|
8
|
+
import { useAccountMembers } from '../account-hub/use-account-members.js';
|
|
9
|
+
import { useNewProjectSession } from '../hooks/projects/use-new-project-session.js';
|
|
10
|
+
import { MAKE_GOAL_PROMPT } from '@kortix/sdk';
|
|
11
|
+
import { useProjectAccountId } from '@kortix/sdk/react';
|
|
12
|
+
import { useCallback, useMemo } from 'react';
|
|
7
13
|
const STATUS_TONE = {
|
|
8
14
|
draft: 'neutral',
|
|
9
15
|
active: 'info',
|
|
@@ -11,6 +17,7 @@ const STATUS_TONE = {
|
|
|
11
17
|
waiting_external: 'neutral',
|
|
12
18
|
verifying: 'info',
|
|
13
19
|
done: 'success',
|
|
20
|
+
stopped: 'neutral',
|
|
14
21
|
abandoned: 'neutral',
|
|
15
22
|
};
|
|
16
23
|
export function GoalStatusBadge({ status }) {
|
|
@@ -39,9 +46,42 @@ export function goalProgress(goal) {
|
|
|
39
46
|
export function goalOpenAsks(goal) {
|
|
40
47
|
return (goal?.items ?? []).filter((i) => i.kind === 'ask' && i.status === 'open' && i.owner !== 'agent');
|
|
41
48
|
}
|
|
42
|
-
/** The goal
|
|
49
|
+
/** The goal waits on a person: its state is `waiting_on_user`, or it has an open ask. */
|
|
43
50
|
export function goalNeedsYou(goal) {
|
|
44
|
-
|
|
51
|
+
if (goal.health.state === 'closed')
|
|
52
|
+
return false;
|
|
53
|
+
return goal.goal?.status === 'waiting_on_user' || goalOpenAsks(goal.goal).length > 0;
|
|
54
|
+
}
|
|
55
|
+
/** The goal runs into a problem no person was asked about: a health issue (no heartbeat, a failed wake, …). */
|
|
56
|
+
export function goalNeedsAttention(goal) {
|
|
57
|
+
return goal.health.state === 'attention' && !goalNeedsYou(goal);
|
|
58
|
+
}
|
|
59
|
+
/** When the goal last woke: the heartbeat's last run, else the wake GOAL.md records. */
|
|
60
|
+
export function goalLastWake(goal) {
|
|
61
|
+
return goal.heartbeat?.last_fired_at ?? goal.goal?.last_wake_at ?? null;
|
|
62
|
+
}
|
|
63
|
+
/** Who a goal is for, by name: "You", the member's email, else "A teammate". */
|
|
64
|
+
export function useGoalPerson(projectId) {
|
|
65
|
+
const t = useTranslations('goals');
|
|
66
|
+
const viewerId = useUiViewerId();
|
|
67
|
+
const members = useAccountMembers(useProjectAccountId(projectId) ?? undefined);
|
|
68
|
+
const emails = useMemo(() => new Map((members.data ?? []).map((m) => [m.user_id, m.email])), [members.data]);
|
|
69
|
+
return useCallback((userId) => !userId ? null : userId === viewerId ? t('you') : (emails.get(userId) ?? t('anotherMember')), [emails, viewerId, t]);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Start a goal from its outcome: a new session whose first message is the
|
|
73
|
+
* outcome plus `MAKE_GOAL_PROMPT`, so the agent writes GOAL.md and its done
|
|
74
|
+
* criteria.
|
|
75
|
+
*/
|
|
76
|
+
export function useStartGoal(projectId) {
|
|
77
|
+
const newSession = useNewProjectSession(projectId);
|
|
78
|
+
return useCallback((outcome) => newSession({
|
|
79
|
+
create: { pending_prompt: { text: `${outcome.trim()}\n\n${MAKE_GOAL_PROMPT}`, agent: null, model: null, variant: null } },
|
|
80
|
+
}), [newSession]);
|
|
81
|
+
}
|
|
82
|
+
/** The goal is for this person (GOAL.md `assigned_user`). */
|
|
83
|
+
export function goalAssignedTo(goal, userId) {
|
|
84
|
+
return !!userId && goal.goal?.assigned_user === userId;
|
|
45
85
|
}
|
|
46
86
|
/** "in 33 min", "2 hr ago", "Tue 09:00": the reminders time format. */
|
|
47
87
|
export function formatGoalTime(iso, locale, now) {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* reflects the fresh manifest.
|
|
9
9
|
*/
|
|
10
10
|
import { type QueryClient } from '@tanstack/react-query';
|
|
11
|
-
import { type AgentConfigBlock,
|
|
11
|
+
import { type AgentConfigBlock, updateAgentConfig } from '@kortix/sdk';
|
|
12
12
|
export declare function agentConfigQueryKey(projectId: string, agentName: string): readonly ["agent-config", string, string];
|
|
13
13
|
/**
|
|
14
14
|
* Keyed on the route's agent name, not on project-detail having listed it, so
|
|
@@ -25,6 +25,7 @@ export declare function useAgentConfig(projectId: string | undefined, agentName:
|
|
|
25
25
|
default_agent: string | null;
|
|
26
26
|
harness?: string;
|
|
27
27
|
ignored_settings?: string[];
|
|
28
|
+
builtin?: "my_kortix";
|
|
28
29
|
}, Error>;
|
|
29
30
|
/**
|
|
30
31
|
* Start the agent page's config read before the navigation, on card intent.
|
|
@@ -32,12 +33,6 @@ export declare function useAgentConfig(projectId: string | undefined, agentName:
|
|
|
32
33
|
* it; a fresh entry is not read again.
|
|
33
34
|
*/
|
|
34
35
|
export declare function prefetchAgentConfig(queryClient: QueryClient, projectId: string, agentName: string): void;
|
|
35
|
-
/**
|
|
36
|
-
* The agent page offers the manifest upgrade only on a v1 project, where the
|
|
37
|
-
* full editor does not exist. A v2 or v3 manifest is editable (the server
|
|
38
|
-
* answers `editable`); a read-only v3 answer never reads as "upgrade to v2".
|
|
39
|
-
*/
|
|
40
|
-
export declare function agentConfigNeedsUpgrade(response: AgentConfigResponse | undefined): boolean;
|
|
41
36
|
type AgentConfigSaveResponse = Awaited<ReturnType<typeof updateAgentConfig>>;
|
|
42
37
|
export declare function applyAgentConfigSaveResponse(queryClient: QueryClient, projectId: string, agentName: string, response: AgentConfigSaveResponse): void;
|
|
43
38
|
export declare function useUpdateAgentConfig(projectId: string, agentName: string): import("@tanstack/react-query").UseMutationResult<{
|
|
@@ -46,4 +41,13 @@ export declare function useUpdateAgentConfig(projectId: string, agentName: strin
|
|
|
46
41
|
agent: string;
|
|
47
42
|
schema_version: number;
|
|
48
43
|
}, Error, AgentConfigBlock, unknown>;
|
|
44
|
+
export declare function agentCapabilitiesQueryKey(projectId: string, agentName: string): readonly ["agent-capabilities", string, string];
|
|
45
|
+
/**
|
|
46
|
+
* The project's catalog: every tool, skill and extension any agent can be
|
|
47
|
+
* given (`getProjectCapabilities`). Under the project's key, so adding or
|
|
48
|
+
* removing a skill refreshes it. An agent's grants stay in its draft.
|
|
49
|
+
*/
|
|
50
|
+
export declare function useProjectCapabilities(projectId: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<import("@kortix/sdk").ProjectCapabilities, Error>;
|
|
51
|
+
/** Every tool, skill and extension the agent can have (`getAgentCapabilities`). The grants stay in the draft. */
|
|
52
|
+
export declare function useAgentCapabilities(projectId: string, agentName: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<import("@kortix/sdk").AgentCapabilities, Error>;
|
|
49
53
|
export {};
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* reflects the fresh manifest.
|
|
9
9
|
*/
|
|
10
10
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
11
|
-
import { getAgentConfig, updateAgentConfig, } from '@kortix/sdk';
|
|
12
|
-
import { contract, invalidateProject } from '@kortix/sdk/react';
|
|
11
|
+
import { getAgentCapabilities, getAgentConfig, getProjectCapabilities, updateAgentConfig, } from '@kortix/sdk';
|
|
12
|
+
import { contract, invalidateProject, qk } from '@kortix/sdk/react';
|
|
13
13
|
export function agentConfigQueryKey(projectId, agentName) {
|
|
14
14
|
return ['agent-config', projectId, agentName];
|
|
15
15
|
}
|
|
@@ -40,19 +40,11 @@ export function prefetchAgentConfig(queryClient, projectId, agentName) {
|
|
|
40
40
|
...contract('config'),
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
/**
|
|
44
|
-
* The agent page offers the manifest upgrade only on a v1 project, where the
|
|
45
|
-
* full editor does not exist. A v2 or v3 manifest is editable (the server
|
|
46
|
-
* answers `editable`); a read-only v3 answer never reads as "upgrade to v2".
|
|
47
|
-
*/
|
|
48
|
-
export function agentConfigNeedsUpgrade(response) {
|
|
49
|
-
return response !== undefined && response.editable !== true && response.schema_version === 1;
|
|
50
|
-
}
|
|
51
43
|
export function applyAgentConfigSaveResponse(queryClient, projectId, agentName, response) {
|
|
52
44
|
queryClient.setQueryData(agentConfigQueryKey(projectId, agentName), (current) => ({
|
|
53
45
|
agent: response.agent,
|
|
54
46
|
schema_version: response.schema_version,
|
|
55
|
-
// A save succeeds only on an editable manifest
|
|
47
|
+
// A save succeeds only on an editable manifest; the server decides.
|
|
56
48
|
editable: current?.editable ?? true,
|
|
57
49
|
default_agent: current?.default_agent ?? null,
|
|
58
50
|
block: response.block,
|
|
@@ -71,3 +63,28 @@ export function useUpdateAgentConfig(projectId, agentName) {
|
|
|
71
63
|
},
|
|
72
64
|
});
|
|
73
65
|
}
|
|
66
|
+
export function agentCapabilitiesQueryKey(projectId, agentName) {
|
|
67
|
+
return ['agent-capabilities', projectId, agentName];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The project's catalog: every tool, skill and extension any agent can be
|
|
71
|
+
* given (`getProjectCapabilities`). Under the project's key, so adding or
|
|
72
|
+
* removing a skill refreshes it. An agent's grants stay in its draft.
|
|
73
|
+
*/
|
|
74
|
+
export function useProjectCapabilities(projectId, enabled = true) {
|
|
75
|
+
return useQuery({
|
|
76
|
+
queryKey: [...qk.project.scope(projectId), 'capabilities'],
|
|
77
|
+
queryFn: () => getProjectCapabilities(projectId),
|
|
78
|
+
enabled: enabled && !!projectId,
|
|
79
|
+
...contract('config'),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** Every tool, skill and extension the agent can have (`getAgentCapabilities`). The grants stay in the draft. */
|
|
83
|
+
export function useAgentCapabilities(projectId, agentName, enabled = true) {
|
|
84
|
+
return useQuery({
|
|
85
|
+
queryKey: agentCapabilitiesQueryKey(projectId, agentName),
|
|
86
|
+
queryFn: () => getAgentCapabilities(projectId, agentName),
|
|
87
|
+
enabled: enabled && !!projectId && !!agentName,
|
|
88
|
+
...contract('config'),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
@@ -11,5 +11,11 @@ export declare function isSlashFocusKey(event: Pick<KeyboardEvent, 'key' | 'meta
|
|
|
11
11
|
* A page whose search field is its main control: the field is focused on
|
|
12
12
|
* arrival, and "/" jumps back to it from anywhere on the page except another
|
|
13
13
|
* text field. `enabled` turns both off while the field is not on screen.
|
|
14
|
+
* `focusOnArrival: false` keeps only the "/" key, for a page whose search is
|
|
15
|
+
* not its main control (the Agents index). A field inside an embedded resource
|
|
16
|
+
* screen (`[data-capability-embed]`, the agent page) is never focused on
|
|
17
|
+
* arrival either: there the screen is one view among the agent's tabs.
|
|
14
18
|
*/
|
|
15
|
-
export declare function useSlashFocus(ref: RefObject<HTMLInputElement | null>, enabled?: boolean
|
|
19
|
+
export declare function useSlashFocus(ref: RefObject<HTMLInputElement | null>, enabled?: boolean, { focusOnArrival }?: {
|
|
20
|
+
focusOnArrival?: boolean;
|
|
21
|
+
}): void;
|
|
@@ -18,13 +18,19 @@ export function isSlashFocusKey(event, openLayer) {
|
|
|
18
18
|
* A page whose search field is its main control: the field is focused on
|
|
19
19
|
* arrival, and "/" jumps back to it from anywhere on the page except another
|
|
20
20
|
* text field. `enabled` turns both off while the field is not on screen.
|
|
21
|
+
* `focusOnArrival: false` keeps only the "/" key, for a page whose search is
|
|
22
|
+
* not its main control (the Agents index). A field inside an embedded resource
|
|
23
|
+
* screen (`[data-capability-embed]`, the agent page) is never focused on
|
|
24
|
+
* arrival either: there the screen is one view among the agent's tabs.
|
|
21
25
|
*/
|
|
22
|
-
export function useSlashFocus(ref, enabled = true) {
|
|
26
|
+
export function useSlashFocus(ref, enabled = true, { focusOnArrival = true } = {}) {
|
|
23
27
|
useEffect(() => {
|
|
24
28
|
if (!enabled || typeof window === 'undefined')
|
|
25
29
|
return;
|
|
26
30
|
// No autofocus on touch: it would open the on-screen keyboard on arrival.
|
|
27
|
-
if (
|
|
31
|
+
if (focusOnArrival &&
|
|
32
|
+
!ref.current?.closest('[data-capability-embed]') &&
|
|
33
|
+
window.matchMedia?.('(pointer: fine)').matches) {
|
|
28
34
|
ref.current?.focus({ preventScroll: true });
|
|
29
35
|
}
|
|
30
36
|
const onKeyDown = (event) => {
|
|
@@ -40,5 +46,5 @@ export function useSlashFocus(ref, enabled = true) {
|
|
|
40
46
|
};
|
|
41
47
|
window.addEventListener('keydown', onKeyDown);
|
|
42
48
|
return () => window.removeEventListener('keydown', onKeyDown);
|
|
43
|
-
}, [ref, enabled]);
|
|
49
|
+
}, [ref, enabled, focusOnArrival]);
|
|
44
50
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @internal Kortix apps only. No semver: it may change in any release. */
|
|
2
|
+
import { useProjectConfig } from '@kortix/sdk/react';
|
|
3
|
+
type Agent = NonNullable<ReturnType<typeof useProjectConfig>>['agents'][number];
|
|
4
|
+
export declare const NewAgentContext: import("react").Context<(() => void) | null>;
|
|
5
|
+
/** Opens the New agent modal mounted beside the sidebar; null outside `NewAgentModalProvider`. */
|
|
6
|
+
export declare function useOpenNewAgent(): (() => void) | null;
|
|
7
|
+
/** Every agent by display name, hidden agents last. */
|
|
8
|
+
export declare function sortCustomizeAgents<T extends Pick<Agent, 'name'> & {
|
|
9
|
+
hidden?: boolean | null;
|
|
10
|
+
}>(agents: readonly T[]): T[];
|
|
11
|
+
/** Whether the pathname is a Project admin (Settings) page. The locale prefix
|
|
12
|
+
* the host may not strip is tolerated. */
|
|
13
|
+
export declare function isProjectAdminPath(pathname: string | null | undefined): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* What Customize opens to, kept short on purpose: most configuration happens
|
|
16
|
+
* by asking an agent in a session, so the sidebar lists only the agents you
|
|
17
|
+
* pinned (none pinned: the first five) and All agents when more exist, then Review (with its "needs you" count), Models, and Settings
|
|
18
|
+
* (Project admin, whose top bar holds every library and Members).
|
|
19
|
+
* The header's + and All agents buttons sit on the Customize row itself.
|
|
20
|
+
*/
|
|
21
|
+
export declare function ProjectCapabilityNav({ projectId }: {
|
|
22
|
+
projectId: string;
|
|
23
|
+
}): import("react").JSX.Element | null;
|
|
24
|
+
export {};
|