@cat-factory/app 0.302.2 → 0.303.0
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 +16 -0
- package/app/app.config.ts +19 -10
- package/app/assets/css/main.css +13 -13
- package/app/assets/css/prose.css +22 -22
- package/app/assets/css/tokens.css +298 -0
- package/app/components/assistant/AssistantModal.vue +22 -22
- package/app/components/auth/AuthGate.vue +1 -1
- package/app/components/auth/BackendMisconfiguredScreen.vue +10 -10
- package/app/components/auth/LoginScreen.vue +34 -36
- package/app/components/auth/ResetPasswordScreen.vue +12 -12
- package/app/components/auth/UserMenu.vue +4 -4
- package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +27 -25
- package/app/components/binaryOutput/BinaryOutputReport.vue +15 -15
- package/app/components/binaryOutput/StoredAssetView.vue +5 -5
- package/app/components/board/AddTaskModal.vue +17 -20
- package/app/components/board/AgentFailureCard.vue +11 -11
- package/app/components/board/AgentFailureHistory.vue +2 -2
- package/app/components/board/BoardCanvas.vue +6 -5
- package/app/components/board/CreateInitiativeModal.vue +8 -10
- package/app/components/board/DependencyConnectOverlay.vue +1 -1
- package/app/components/board/FailureHistoryList.vue +7 -7
- package/app/components/board/RecurringPipelineModal.vue +17 -17
- package/app/components/board/ReviewFrictionDialog.vue +6 -6
- package/app/components/board/StepExecutionHistory.vue +13 -13
- package/app/components/board/TaskDependencyEdges.vue +8 -8
- package/app/components/board/nodes/AgentChip.vue +10 -10
- package/app/components/board/nodes/BlockNode.vue +29 -29
- package/app/components/board/nodes/DecisionBadge.vue +2 -2
- package/app/components/board/nodes/EpicNode.vue +14 -10
- package/app/components/board/nodes/FrameSwimlanes.vue +7 -9
- package/app/components/board/nodes/InitiativeCard.vue +8 -8
- package/app/components/board/nodes/LaneGroup.vue +1 -1
- package/app/components/board/nodes/LaneTask.vue +2 -2
- package/app/components/board/nodes/ResizeGrips.vue +4 -4
- package/app/components/board/nodes/TaskCard.vue +18 -18
- package/app/components/board/nodes/TaskLane.vue +5 -5
- package/app/components/board/nodes/TaskPipelineMini.vue +18 -18
- package/app/components/bootstrap/AdoptionReviewModal.vue +29 -26
- package/app/components/bootstrap/BootstrapModal.vue +21 -23
- package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
- package/app/components/brainstorm/BrainstormWindow.vue +30 -33
- package/app/components/bugFishing/BugFishingWindow.vue +49 -49
- package/app/components/clarity/ClarityReviewWindow.vue +30 -30
- package/app/components/common/AsyncViewError.vue +5 -5
- package/app/components/common/ClarificationItem.vue +8 -13
- package/app/components/common/ConfirmDialog.vue +4 -2
- package/app/components/common/DescriptorFields.vue +1 -1
- package/app/components/common/EmptyState.vue +3 -3
- package/app/components/common/InterviewGateNotice.vue +7 -7
- package/app/components/common/KeyboardShortcutsHelp.vue +1 -1
- package/app/components/common/MarkdownProse.vue +14 -13
- package/app/components/consensus/ConsensusSessionWindow.vue +26 -26
- package/app/components/context/ContextAttachmentFields.vue +17 -17
- package/app/components/docs/DocInterviewWindow.vue +14 -14
- package/app/components/documents/ContextDocumentPicker.vue +17 -17
- package/app/components/documents/DocumentImportModal.vue +7 -7
- package/app/components/documents/DocumentSourceConnectModal.vue +3 -3
- package/app/components/documents/DocumentSyncState.vue +5 -5
- package/app/components/documents/DocumentTemplatesModal.vue +15 -15
- package/app/components/documents/RepoContextDocPicker.vue +5 -5
- package/app/components/documents/SpawnPreviewModal.vue +12 -12
- package/app/components/documents/StartFromDesignModal.vue +11 -11
- package/app/components/documents/TaskContextDocs.vue +5 -5
- package/app/components/environments/EnvSetupStepper.vue +6 -6
- package/app/components/environments/EnvironmentStatusPanel.vue +17 -17
- package/app/components/environments/steps/EnvPickStep.vue +3 -3
- package/app/components/environments/steps/EnvPreflightStep.vue +9 -9
- package/app/components/environments/steps/EnvReviewStep.vue +25 -22
- package/app/components/environments/steps/EnvSaveStep.vue +7 -5
- package/app/components/environments/steps/JourneyStepNav.vue +1 -1
- package/app/components/focus/BlockFocusView.vue +17 -19
- package/app/components/followUp/FollowUpWindow.vue +23 -23
- package/app/components/forkDecision/ForkDecisionWindow.vue +37 -39
- package/app/components/foundational/FoundationalContractSummary.vue +7 -7
- package/app/components/foundational/FoundationalServiceCatalogList.vue +11 -11
- package/app/components/foundational/FoundationalServiceManager.vue +1 -1
- package/app/components/foundational/FoundationalServiceRegistry.vue +13 -13
- package/app/components/foundational/FoundationalServiceSources.vue +13 -13
- package/app/components/foundational/FoundationalSuppressions.vue +7 -7
- package/app/components/foundational/ServiceCatalogConnection.vue +10 -10
- package/app/components/fragments/FragmentLibraryManager.vue +41 -44
- package/app/components/fragments/FragmentSelector.vue +13 -13
- package/app/components/fragments/GitHubDocUrlImport.vue +1 -1
- package/app/components/gates/GateFailingCheckList.vue +5 -5
- package/app/components/gates/GateResultView.vue +50 -47
- package/app/components/github/AddServiceFromRepoModal.vue +14 -14
- package/app/components/github/BranchProtectionPreflight.vue +13 -13
- package/app/components/github/GitHubConnect.vue +7 -7
- package/app/components/github/GitHubOnboarding.vue +7 -7
- package/app/components/github/GitHubPanel.vue +37 -40
- package/app/components/github/RepoTreeBrowser.vue +18 -18
- package/app/components/humanTest/HumanTestWindow.vue +30 -33
- package/app/components/initiative/InitiativePlanNotice.vue +5 -5
- package/app/components/initiative/InitiativePlanReview.vue +27 -29
- package/app/components/initiative/InitiativePlanningWindow.vue +10 -10
- package/app/components/initiative/InitiativeTrackerWindow.vue +71 -65
- package/app/components/inputGate/InputGateNotice.vue +2 -4
- package/app/components/judge/JudgeResultView.vue +30 -32
- package/app/components/kaizen/KaizenPanel.vue +40 -36
- package/app/components/kaizen/KaizenStepStatus.vue +21 -21
- package/app/components/layout/AccountAuditLog.vue +10 -10
- package/app/components/layout/AccountDeploymentSettings.vue +20 -20
- package/app/components/layout/AccountFailureKindRules.vue +13 -13
- package/app/components/layout/AccountFoundationalSettings.vue +1 -1
- package/app/components/layout/AccountFragmentSettings.vue +1 -1
- package/app/components/layout/AccountModelPolicySettings.vue +9 -9
- package/app/components/layout/AccountPlatformAlertSettings.vue +11 -11
- package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
- package/app/components/layout/AccountRunCredentialSettings.vue +5 -5
- package/app/components/layout/AccountSkillSettings.vue +1 -1
- package/app/components/layout/AccountTeamSettings.vue +23 -15
- package/app/components/layout/AiProvidersBanner.vue +11 -8
- package/app/components/layout/AppearanceSwitcher.vue +108 -0
- package/app/components/layout/BoardSwitcher.vue +8 -11
- package/app/components/layout/BoardToolbar.vue +3 -3
- package/app/components/layout/CommandBar.vue +7 -9
- package/app/components/layout/ConnectionStatusBanner.vue +2 -2
- package/app/components/layout/DefaultTestEnvBanner.vue +5 -5
- package/app/components/layout/GitHubPatBanner.vue +5 -5
- package/app/components/layout/GitHubPatPermissionsBanner.vue +16 -10
- package/app/components/layout/InfraSetupBanner.vue +6 -6
- package/app/components/layout/IntegrationsHub.vue +15 -15
- package/app/components/layout/LanguageSwitcher.vue +5 -5
- package/app/components/layout/ModelProvidersHub.vue +13 -16
- package/app/components/layout/NotificationsInbox.vue +10 -10
- package/app/components/layout/PersonalSetupModal.vue +8 -8
- package/app/components/layout/ProviderConfigBanner.vue +4 -4
- package/app/components/layout/RolePrompt.vue +7 -7
- package/app/components/layout/SideBar.vue +6 -4
- package/app/components/layout/SpendWarningBanner.vue +17 -14
- package/app/components/layout/TranslationWarningBanner.vue +4 -4
- package/app/components/layout/UiModeSwitcher.vue +13 -13
- package/app/components/layout/UiRoleSwitcher.vue +8 -8
- package/app/components/layout/WorkspaceMembersSettings.vue +15 -11
- package/app/components/media/ArtifactLightbox.vue +13 -13
- package/app/components/media/ImageCompare.vue +31 -24
- package/app/components/merge/MergeEffortChips.vue +2 -2
- package/app/components/notifications/NotificationSettingsPanel.vue +14 -12
- package/app/components/observability/OutcomeFilterChips.vue +6 -6
- package/app/components/observability/RunFailureSummary.vue +28 -25
- package/app/components/observability/StepMetricsBar.vue +26 -28
- package/app/components/observability/StepModelActivity.vue +2 -2
- package/app/components/observability/ToolCallList.vue +24 -24
- package/app/components/outcome/OutcomeSummaryWindow.vue +47 -47
- package/app/components/palettes/AgentPalette.vue +8 -8
- package/app/components/palettes/AgentTierSelect.vue +1 -1
- package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
- package/app/components/panels/AgentStepDetail.vue +52 -51
- package/app/components/panels/AttemptEntryHeader.vue +4 -6
- package/app/components/panels/DecisionModal.vue +7 -7
- package/app/components/panels/GenericStructuredResultView.vue +7 -7
- package/app/components/panels/InspectorPanel.vue +17 -17
- package/app/components/panels/MergerResultView.vue +19 -19
- package/app/components/panels/ObservabilityPanel.vue +115 -123
- package/app/components/panels/OperatorDashboardPanel.vue +89 -97
- package/app/components/panels/ReportsPanel.vue +69 -66
- package/app/components/panels/ReportsSpendBreakdown.vue +9 -9
- package/app/components/panels/ResultWindowShell.vue +38 -38
- package/app/components/panels/RunDetailLoadState.vue +2 -2
- package/app/components/panels/StepContainerStatus.vue +9 -9
- package/app/components/panels/StepDelegatedStatus.logic.spec.ts +135 -0
- package/app/components/panels/StepDelegatedStatus.logic.ts +160 -0
- package/app/components/panels/StepDelegatedStatus.vue +181 -0
- package/app/components/panels/StepEffortReport.vue +16 -15
- package/app/components/panels/StepFragmentAdherence.vue +14 -10
- package/app/components/panels/StepMetadataCard.vue +74 -45
- package/app/components/panels/StepReproductionReport.vue +25 -21
- package/app/components/panels/StepRunMeta.vue +20 -20
- package/app/components/panels/StepTestReport.logic.spec.ts +8 -3
- package/app/components/panels/StepTestReport.logic.ts +4 -4
- package/app/components/panels/StepTestReport.vue +28 -28
- package/app/components/panels/StepToolServers.vue +14 -11
- package/app/components/panels/StepValidationReport.vue +7 -7
- package/app/components/panels/inspector/ContainerSummary.vue +9 -9
- package/app/components/panels/inspector/DocReferenceRepos.vue +3 -3
- package/app/components/panels/inspector/EnvProbeReport.vue +24 -27
- package/app/components/panels/inspector/EpicChildren.vue +8 -12
- package/app/components/panels/inspector/FrontendBindingsResolved.vue +11 -11
- package/app/components/panels/inspector/FrontendConfig.vue +37 -41
- package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
- package/app/components/panels/inspector/InspectorSection.vue +6 -6
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +16 -19
- package/app/components/panels/inspector/ServiceConnections.vue +2 -2
- package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
- package/app/components/panels/inspector/ServiceSelfTests.vue +21 -17
- package/app/components/panels/inspector/ServiceTestConfig.vue +51 -59
- package/app/components/panels/inspector/ServiceTestSecrets.vue +5 -5
- package/app/components/panels/inspector/ServiceTestingContext.vue +3 -3
- package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAgentConfig.vue +3 -3
- package/app/components/panels/inspector/TaskAprioriBranches.vue +8 -5
- package/app/components/panels/inspector/TaskDependencies.vue +1 -1
- package/app/components/panels/inspector/TaskEstimateBadge.vue +11 -11
- package/app/components/panels/inspector/TaskExecution.vue +17 -17
- package/app/components/panels/inspector/TaskReviewTarget.vue +2 -2
- package/app/components/panels/inspector/TaskRunSettings.vue +35 -37
- package/app/components/panels/inspector/TaskStructure.vue +3 -3
- package/app/components/pipeline/AgentKindIcon.vue +1 -1
- package/app/components/pipeline/AgentPromptEditor.vue +17 -17
- package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -56
- package/app/components/pipeline/EstimateThresholdFields.vue +4 -4
- package/app/components/pipeline/GateConfigFields.vue +13 -10
- package/app/components/pipeline/IterationCapPrompt.vue +4 -2
- package/app/components/pipeline/PipelineBuilder.vue +47 -55
- package/app/components/pipeline/PipelineHealthModal.vue +27 -29
- package/app/components/pipeline/PipelinePicker.vue +10 -10
- package/app/components/pipeline/PipelinePreview.vue +10 -10
- package/app/components/pipeline/PipelineProgress.vue +64 -67
- package/app/components/prReview/PrReviewPhaseBadge.vue +7 -7
- package/app/components/prReview/PrReviewWindow.vue +75 -77
- package/app/components/providers/AiPresetMismatchDialog.vue +5 -5
- package/app/components/providers/AiProviderOnboardingModal.vue +9 -9
- package/app/components/providers/ApiKeysSection.vue +13 -13
- package/app/components/providers/PersonalCredentialModal.vue +2 -2
- package/app/components/providers/PersonalSubscriptionSection.vue +10 -10
- package/app/components/providers/SignInRequiredNotice.vue +1 -1
- package/app/components/providers/VendorCredentialsModal.vue +10 -10
- package/app/components/provisioning/ProvisioningLogsDrawer.vue +13 -13
- package/app/components/ralph/RalphLoopResultView.vue +28 -30
- package/app/components/recurring/RecurrenceEditor.vue +2 -2
- package/app/components/requirements/RequirementsReviewWindow.vue +51 -58
- package/app/components/riskPolicy/RiskPolicyPicker.vue +12 -15
- package/app/components/riskPolicy/RiskPolicyPreview.vue +14 -14
- package/app/components/sandbox/SandboxPanel.vue +58 -59
- package/app/components/settings/AccountSettingsPanel.vue +1 -1
- package/app/components/settings/ApiTokensPanel.vue +10 -10
- package/app/components/settings/BudgetSettings.vue +18 -22
- package/app/components/settings/CapabilityCredentialsPanel.vue +15 -15
- package/app/components/settings/CloudflareHandlerSection.vue +20 -20
- package/app/components/settings/ComposeEnvironmentSetupSection.vue +13 -13
- package/app/components/settings/ConnectionTestVerdict.vue +3 -3
- package/app/components/settings/ConnectionWarnings.vue +1 -1
- package/app/components/settings/ConsensusGroupsSection.vue +27 -35
- package/app/components/settings/CustomManifestTypeEditor.vue +10 -10
- package/app/components/settings/DefaultProvisionTypeSection.vue +6 -6
- package/app/components/settings/InfraHandlersConfigurator.vue +24 -22
- package/app/components/settings/InfrastructureBackendPicker.vue +6 -6
- package/app/components/settings/InfrastructureWindow.vue +5 -5
- package/app/components/settings/IssueTrackerPanel.vue +29 -23
- package/app/components/settings/KubernetesEngineForm.vue +11 -11
- package/app/components/settings/KubernetesEnvironmentForm.vue +4 -4
- package/app/components/settings/LocalContainerPoolSettings.vue +6 -11
- package/app/components/settings/LocalModelEndpointsPanel.vue +20 -18
- package/app/components/settings/McpAuthorizeScreen.vue +13 -15
- package/app/components/settings/McpOAuthCallbackScreen.vue +16 -10
- package/app/components/settings/MergeClassRulesEditor.vue +6 -9
- package/app/components/settings/MergeRolePolicyEditor.vue +16 -16
- package/app/components/settings/ModelConfigurationPanel.vue +23 -30
- package/app/components/settings/ModelPresetHealthModal.vue +15 -13
- package/app/components/settings/ObservabilityConnectionPanel.vue +4 -4
- package/app/components/settings/OpenRouterCatalogPanel.vue +23 -19
- package/app/components/settings/PackageRegistriesPanel.vue +8 -8
- package/app/components/settings/ProviderConnectionTab.vue +8 -11
- package/app/components/settings/ProviderManifestEditor.vue +9 -9
- package/app/components/settings/ProviderPreferenceEditor.vue +8 -8
- package/app/components/settings/RiskPolicyCreateForm.vue +10 -10
- package/app/components/settings/RiskPolicyEditorRow.vue +14 -14
- package/app/components/settings/RiskPolicyHealthModal.vue +15 -13
- package/app/components/settings/RiskPolicyInheritedRow.vue +1 -1
- package/app/components/settings/RiskPolicyPanel.vue +10 -15
- package/app/components/settings/ServiceFragmentDefaultsPanel.vue +7 -7
- package/app/components/settings/SharedStacksPanel.vue +9 -12
- package/app/components/settings/TaskSourceCard.vue +4 -4
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +6 -6
- package/app/components/settings/ToolServerChecklist.vue +36 -29
- package/app/components/settings/UsageSettings.vue +15 -15
- package/app/components/settings/UserSecretsSection.vue +9 -12
- package/app/components/settings/WorkspaceMetadataSettings.vue +5 -5
- package/app/components/settings/WorkspaceSettingsPanel.vue +47 -47
- package/app/components/skills/ReviewSkillQueue.vue +10 -10
- package/app/components/skills/SkillLibraryManager.vue +23 -20
- package/app/components/slack/SlackPanel.vue +13 -17
- package/app/components/spec/ServiceSpecWindow.vue +45 -42
- package/app/components/tasks/BugHuntModal.vue +24 -27
- package/app/components/tasks/ContextIssuePicker.vue +11 -11
- package/app/components/tasks/TaskContextIssues.vue +3 -3
- package/app/components/tasks/TaskImportModal.vue +7 -7
- package/app/components/tasks/TaskSourceConnectModal.vue +10 -8
- package/app/components/testing/TestReportWindow.vue +99 -82
- package/app/components/theme/ThemeImportModal.vue +115 -0
- package/app/components/tutorial/TutorialCatalogue.vue +9 -9
- package/app/components/tutorial/TutorialNudge.vue +5 -5
- package/app/components/tutorial/TutorialOverlay.vue +12 -12
- package/app/components/tutorial/TutorialPrompt.vue +6 -9
- package/app/components/vcs/GitLabConnect.vue +4 -4
- package/app/components/vcs/VcsConnectSurfaces.vue +2 -2
- package/app/components/visualConfirm/VisualConfirmationWindow.vue +36 -36
- package/app/composables/api/client.ts +6 -1
- package/app/composables/usePipelineErrorToast.ts +17 -0
- package/app/modular/agent-kinds.ts +24 -0
- package/app/pages/index.vue +5 -5
- package/app/plugins/theme.client.ts +125 -0
- package/app/spa-loading-template.html +52 -14
- package/app/stores/agents.ts +1 -1
- package/app/stores/theme.spec.ts +56 -0
- package/app/stores/theme.ts +87 -0
- package/app/types/domain.ts +19 -0
- package/app/types/execution.ts +4 -0
- package/app/utils/agentOutput.ts +1 -1
- package/app/utils/binaryOutput.ts +6 -6
- package/app/utils/bootstrapSteps.ts +14 -14
- package/app/utils/catalog.ts +87 -83
- package/app/utils/colorTint.ts +10 -0
- package/app/utils/failureKinds.ts +1 -0
- package/app/utils/observability.ts +3 -3
- package/app/utils/pipelineRender.ts +13 -17
- package/app/utils/swimlanes.ts +4 -4
- package/app/utils/theme/bootPalette.spec.ts +54 -0
- package/app/utils/theme/bootPalette.ts +108 -0
- package/app/utils/theme/builtins.spec.ts +38 -0
- package/app/utils/theme/builtins.ts +55 -0
- package/app/utils/theme/css.ts +162 -0
- package/app/utils/theme/doc.ts +353 -0
- package/app/utils/theme/link.ts +93 -0
- package/app/utils/theme/presets.ts +509 -0
- package/app/utils/theme/theme.spec.ts +224 -0
- package/i18n/locales/de.json +61 -4
- package/i18n/locales/en.json +70 -4
- package/i18n/locales/es.json +61 -4
- package/i18n/locales/fr.json +61 -4
- package/i18n/locales/he.json +61 -4
- package/i18n/locales/it.json +61 -4
- package/i18n/locales/ja.json +61 -4
- package/i18n/locales/pl.json +61 -4
- package/i18n/locales/tr.json +61 -4
- package/i18n/locales/uk.json +61 -4
- package/nuxt.config.ts +37 -11
- package/package.json +9 -8
|
@@ -357,20 +357,20 @@ async function save() {
|
|
|
357
357
|
<div class="space-y-6">
|
|
358
358
|
<!-- Run-timing escalation -->
|
|
359
359
|
<section class="space-y-2">
|
|
360
|
-
<h3 class="text-sm font-semibold text-
|
|
360
|
+
<h3 class="text-sm font-semibold text-default">
|
|
361
361
|
{{ t('settings.workspaceSettings.waiting.heading') }}
|
|
362
362
|
</h3>
|
|
363
|
-
<p class="text-[11px] text-
|
|
363
|
+
<p class="text-[11px] text-muted">
|
|
364
364
|
<i18n-t keypath="settings.workspaceSettings.waiting.body" tag="span" scope="global">
|
|
365
365
|
<template #overdue>
|
|
366
|
-
<span class="text-error-400">{{
|
|
366
|
+
<span class="text-app-error-400">{{
|
|
367
367
|
t('settings.workspaceSettings.waiting.overdue')
|
|
368
368
|
}}</span>
|
|
369
369
|
</template>
|
|
370
370
|
</i18n-t>
|
|
371
371
|
</p>
|
|
372
372
|
<label class="block w-48">
|
|
373
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
373
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
374
374
|
{{ t('settings.workspaceSettings.waiting.escalateAfter') }}
|
|
375
375
|
</span>
|
|
376
376
|
<UInput
|
|
@@ -384,14 +384,14 @@ async function save() {
|
|
|
384
384
|
|
|
385
385
|
<!-- Per-service running-task limit -->
|
|
386
386
|
<section class="space-y-2">
|
|
387
|
-
<h3 class="text-sm font-semibold text-
|
|
387
|
+
<h3 class="text-sm font-semibold text-default">
|
|
388
388
|
{{ t('settings.workspaceSettings.taskLimit.heading') }}
|
|
389
389
|
</h3>
|
|
390
|
-
<p class="text-[11px] text-
|
|
390
|
+
<p class="text-[11px] text-muted">
|
|
391
391
|
{{ t('settings.workspaceSettings.taskLimit.body') }}
|
|
392
392
|
</p>
|
|
393
393
|
<label class="block w-64">
|
|
394
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
394
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">{{
|
|
395
395
|
t('settings.workspaceSettings.taskLimit.mode')
|
|
396
396
|
}}</span>
|
|
397
397
|
<USelect
|
|
@@ -404,7 +404,7 @@ async function save() {
|
|
|
404
404
|
</label>
|
|
405
405
|
|
|
406
406
|
<label v-if="draft.taskLimitMode === 'shared'" class="block w-48">
|
|
407
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
407
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
408
408
|
{{ t('settings.workspaceSettings.taskLimit.maxRunning') }}
|
|
409
409
|
</span>
|
|
410
410
|
<UInput v-model.number="draft.taskLimitShared" type="number" :min="1" size="sm" />
|
|
@@ -412,7 +412,7 @@ async function save() {
|
|
|
412
412
|
|
|
413
413
|
<div v-else-if="draft.taskLimitMode === 'per_type'" class="grid grid-cols-2 gap-3">
|
|
414
414
|
<label v-for="taskType in TASK_TYPES" :key="taskType" class="block">
|
|
415
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
415
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
416
416
|
{{ maxTaskTypeLabel(taskType) }}
|
|
417
417
|
</span>
|
|
418
418
|
<UInput
|
|
@@ -428,14 +428,14 @@ async function save() {
|
|
|
428
428
|
<!-- The pre-dispatch input gate: the structural check of a task's own wording, run
|
|
429
429
|
before a run's first agent step is dispatched. -->
|
|
430
430
|
<section class="space-y-2">
|
|
431
|
-
<h3 class="text-sm font-semibold text-
|
|
431
|
+
<h3 class="text-sm font-semibold text-default">
|
|
432
432
|
{{ t('settings.workspaceSettings.inputGate.heading') }}
|
|
433
433
|
</h3>
|
|
434
|
-
<p class="text-[11px] text-
|
|
434
|
+
<p class="text-[11px] text-muted">
|
|
435
435
|
{{ t('settings.workspaceSettings.inputGate.body') }}
|
|
436
436
|
</p>
|
|
437
437
|
<label class="block w-64">
|
|
438
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
438
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">{{
|
|
439
439
|
t('settings.workspaceSettings.inputGate.mode')
|
|
440
440
|
}}</span>
|
|
441
441
|
<USelect
|
|
@@ -451,14 +451,14 @@ async function save() {
|
|
|
451
451
|
|
|
452
452
|
<!-- Review-debt friction on task creation -->
|
|
453
453
|
<section class="space-y-2">
|
|
454
|
-
<h3 class="text-sm font-semibold text-
|
|
454
|
+
<h3 class="text-sm font-semibold text-default">
|
|
455
455
|
{{ t('settings.workspaceSettings.reviewFriction.heading') }}
|
|
456
456
|
</h3>
|
|
457
|
-
<p class="text-[11px] text-
|
|
457
|
+
<p class="text-[11px] text-muted">
|
|
458
458
|
{{ t('settings.workspaceSettings.reviewFriction.body') }}
|
|
459
459
|
</p>
|
|
460
460
|
<label class="block w-64">
|
|
461
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
461
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">{{
|
|
462
462
|
t('settings.workspaceSettings.reviewFriction.mode')
|
|
463
463
|
}}</span>
|
|
464
464
|
<USelect
|
|
@@ -471,7 +471,7 @@ async function save() {
|
|
|
471
471
|
</label>
|
|
472
472
|
|
|
473
473
|
<label v-if="draft.reviewFrictionMode !== 'off'" class="block w-48">
|
|
474
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
474
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
475
475
|
{{ t('settings.workspaceSettings.reviewFriction.warnCount') }}
|
|
476
476
|
</span>
|
|
477
477
|
<UInput
|
|
@@ -483,17 +483,17 @@ async function save() {
|
|
|
483
483
|
</label>
|
|
484
484
|
|
|
485
485
|
<div v-if="draft.reviewFrictionMode === 'enforce'" class="space-y-2">
|
|
486
|
-
<p class="text-[11px] text-
|
|
486
|
+
<p class="text-[11px] text-muted">
|
|
487
487
|
{{ t('settings.workspaceSettings.reviewFriction.enforceHint') }}
|
|
488
488
|
</p>
|
|
489
489
|
<label class="flex items-center gap-2">
|
|
490
490
|
<USwitch v-model="draft.reviewFrictionBlockCountEnabled" size="sm" />
|
|
491
|
-
<span class="text-[13px] text-
|
|
491
|
+
<span class="text-[13px] text-toned">{{
|
|
492
492
|
t('settings.workspaceSettings.reviewFriction.blockCountToggle')
|
|
493
493
|
}}</span>
|
|
494
494
|
</label>
|
|
495
495
|
<label v-if="draft.reviewFrictionBlockCountEnabled" class="block w-48">
|
|
496
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
496
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
497
497
|
{{ t('settings.workspaceSettings.reviewFriction.blockCount') }}
|
|
498
498
|
</span>
|
|
499
499
|
<UInput
|
|
@@ -505,12 +505,12 @@ async function save() {
|
|
|
505
505
|
</label>
|
|
506
506
|
<label class="flex items-center gap-2">
|
|
507
507
|
<USwitch v-model="draft.reviewFrictionBlockStuckEnabled" size="sm" />
|
|
508
|
-
<span class="text-[13px] text-
|
|
508
|
+
<span class="text-[13px] text-toned">{{
|
|
509
509
|
t('settings.workspaceSettings.reviewFriction.blockStuckToggle')
|
|
510
510
|
}}</span>
|
|
511
511
|
</label>
|
|
512
512
|
<label v-if="draft.reviewFrictionBlockStuckEnabled" class="block w-48">
|
|
513
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
513
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
514
514
|
{{ t('settings.workspaceSettings.reviewFriction.blockStuckMinutes') }}
|
|
515
515
|
</span>
|
|
516
516
|
<UInput
|
|
@@ -525,15 +525,15 @@ async function save() {
|
|
|
525
525
|
|
|
526
526
|
<!-- Agent observability -->
|
|
527
527
|
<section class="space-y-2">
|
|
528
|
-
<h3 class="text-sm font-semibold text-
|
|
528
|
+
<h3 class="text-sm font-semibold text-default">
|
|
529
529
|
{{ t('settings.workspaceSettings.observability.heading') }}
|
|
530
530
|
</h3>
|
|
531
|
-
<p class="text-[11px] text-
|
|
531
|
+
<p class="text-[11px] text-muted">
|
|
532
532
|
{{ t('settings.workspaceSettings.observability.body') }}
|
|
533
533
|
</p>
|
|
534
534
|
<label class="flex items-center gap-2">
|
|
535
535
|
<USwitch v-model="draft.storeAgentContext" size="sm" />
|
|
536
|
-
<span class="text-sm text-
|
|
536
|
+
<span class="text-sm text-default">{{
|
|
537
537
|
t('settings.workspaceSettings.observability.toggle')
|
|
538
538
|
}}</span>
|
|
539
539
|
</label>
|
|
@@ -541,15 +541,15 @@ async function save() {
|
|
|
541
541
|
|
|
542
542
|
<!-- Engine-maintained PR verification report -->
|
|
543
543
|
<section class="space-y-2">
|
|
544
|
-
<h3 class="text-sm font-semibold text-
|
|
544
|
+
<h3 class="text-sm font-semibold text-default">
|
|
545
545
|
{{ t('settings.workspaceSettings.prReport.heading') }}
|
|
546
546
|
</h3>
|
|
547
|
-
<p class="text-[11px] text-
|
|
547
|
+
<p class="text-[11px] text-muted">
|
|
548
548
|
{{ t('settings.workspaceSettings.prReport.body') }}
|
|
549
549
|
</p>
|
|
550
550
|
<label class="flex items-center gap-2">
|
|
551
551
|
<USwitch v-model="draft.publishPrVerificationReport" size="sm" />
|
|
552
|
-
<span class="text-sm text-
|
|
552
|
+
<span class="text-sm text-default">{{
|
|
553
553
|
t('settings.workspaceSettings.prReport.toggle')
|
|
554
554
|
}}</span>
|
|
555
555
|
</label>
|
|
@@ -557,14 +557,14 @@ async function save() {
|
|
|
557
557
|
|
|
558
558
|
<!-- Visual-confirmation artifact retention -->
|
|
559
559
|
<section class="space-y-2">
|
|
560
|
-
<h3 class="text-sm font-semibold text-
|
|
560
|
+
<h3 class="text-sm font-semibold text-default">
|
|
561
561
|
{{ t('settings.workspaceSettings.retention.heading') }}
|
|
562
562
|
</h3>
|
|
563
|
-
<p class="text-[11px] text-
|
|
563
|
+
<p class="text-[11px] text-muted">
|
|
564
564
|
{{ t('settings.workspaceSettings.retention.body') }}
|
|
565
565
|
</p>
|
|
566
566
|
<label class="block w-48">
|
|
567
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
567
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
568
568
|
{{ t('settings.workspaceSettings.retention.days') }}
|
|
569
569
|
</span>
|
|
570
570
|
<UInput
|
|
@@ -579,14 +579,14 @@ async function save() {
|
|
|
579
579
|
|
|
580
580
|
<!-- What the board's Done swimlane keeps in view -->
|
|
581
581
|
<section class="space-y-2">
|
|
582
|
-
<h3 class="text-sm font-semibold text-
|
|
582
|
+
<h3 class="text-sm font-semibold text-default">
|
|
583
583
|
{{ t('settings.workspaceSettings.doneLane.heading') }}
|
|
584
584
|
</h3>
|
|
585
|
-
<p class="text-[11px] text-
|
|
585
|
+
<p class="text-[11px] text-muted">
|
|
586
586
|
{{ t('settings.workspaceSettings.doneLane.body') }}
|
|
587
587
|
</p>
|
|
588
588
|
<label class="block w-48">
|
|
589
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
589
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
590
590
|
{{ t('settings.workspaceSettings.doneLane.maxItems') }}
|
|
591
591
|
</span>
|
|
592
592
|
<UInput
|
|
@@ -598,17 +598,17 @@ async function save() {
|
|
|
598
598
|
data-testid="done-lane-max-items"
|
|
599
599
|
/>
|
|
600
600
|
</label>
|
|
601
|
-
<p v-if="draft.doneLaneMaxItems === 0" class="text-[11px] text-
|
|
601
|
+
<p v-if="draft.doneLaneMaxItems === 0" class="text-[11px] text-dimmed">
|
|
602
602
|
{{ t('settings.workspaceSettings.doneLane.zeroHint') }}
|
|
603
603
|
</p>
|
|
604
604
|
<label class="flex items-center gap-2">
|
|
605
605
|
<UCheckbox v-model="draft.doneLaneRetentionEnabled" size="sm" />
|
|
606
|
-
<span class="text-[11px] text-
|
|
606
|
+
<span class="text-[11px] text-toned">{{
|
|
607
607
|
t('settings.workspaceSettings.doneLane.ageToggle')
|
|
608
608
|
}}</span>
|
|
609
609
|
</label>
|
|
610
610
|
<label v-if="draft.doneLaneRetentionEnabled" class="block w-48">
|
|
611
|
-
<span class="mb-1 block text-[10px] uppercase tracking-wide text-
|
|
611
|
+
<span class="mb-1 block text-[10px] uppercase tracking-wide text-dimmed">
|
|
612
612
|
{{ t('settings.workspaceSettings.doneLane.days') }}
|
|
613
613
|
</span>
|
|
614
614
|
<UInput
|
|
@@ -620,17 +620,17 @@ async function save() {
|
|
|
620
620
|
data-testid="done-lane-retention-days"
|
|
621
621
|
/>
|
|
622
622
|
</label>
|
|
623
|
-
<p class="text-[11px] text-
|
|
623
|
+
<p class="text-[11px] text-dimmed">
|
|
624
624
|
{{ t('settings.workspaceSettings.doneLane.hidesOnlyHint') }}
|
|
625
625
|
</p>
|
|
626
626
|
</section>
|
|
627
627
|
|
|
628
628
|
<!-- Run credential: the App installation vs. the initiator's own token -->
|
|
629
629
|
<section class="space-y-2">
|
|
630
|
-
<h3 class="text-sm font-semibold text-
|
|
630
|
+
<h3 class="text-sm font-semibold text-default">
|
|
631
631
|
{{ t('settings.workspaceSettings.runCredential.heading') }}
|
|
632
632
|
</h3>
|
|
633
|
-
<p class="text-[11px] text-
|
|
633
|
+
<p class="text-[11px] text-muted">
|
|
634
634
|
{{ t('settings.workspaceSettings.runCredential.body') }}
|
|
635
635
|
</p>
|
|
636
636
|
<label class="flex items-center gap-2">
|
|
@@ -639,18 +639,18 @@ async function save() {
|
|
|
639
639
|
size="sm"
|
|
640
640
|
data-testid="allow-initiator-pat"
|
|
641
641
|
/>
|
|
642
|
-
<span class="text-sm text-
|
|
642
|
+
<span class="text-sm text-default">{{
|
|
643
643
|
t('settings.workspaceSettings.runCredential.toggle')
|
|
644
644
|
}}</span>
|
|
645
645
|
</label>
|
|
646
|
-
<p v-if="!draft.allowInitiatorPat" class="text-[11px] text-
|
|
646
|
+
<p v-if="!draft.allowInitiatorPat" class="text-[11px] text-app-warning-300">
|
|
647
647
|
{{ t('settings.workspaceSettings.runCredential.offHint') }}
|
|
648
648
|
</p>
|
|
649
649
|
<!-- Stated rather than read: the account floor lives behind an ACCOUNT-admin
|
|
650
650
|
endpoint, which a workspace admin may not hold, so probing it here would 403
|
|
651
651
|
for exactly the people this note is for. A static line sets the expectation
|
|
652
652
|
without pretending to report a value we cannot see. -->
|
|
653
|
-
<p v-if="draft.allowInitiatorPat" class="text-[11px] text-
|
|
653
|
+
<p v-if="draft.allowInitiatorPat" class="text-[11px] text-dimmed">
|
|
654
654
|
{{ t('settings.workspaceSettings.runCredential.accountFloorNote') }}
|
|
655
655
|
</p>
|
|
656
656
|
</section>
|
|
@@ -659,10 +659,10 @@ async function save() {
|
|
|
659
659
|
It is a property of how this team fixes bugs rather than of any one hunt, which
|
|
660
660
|
is why it is a board setting and not a field on the expedition. -->
|
|
661
661
|
<section class="space-y-2">
|
|
662
|
-
<h3 class="text-sm font-semibold text-
|
|
662
|
+
<h3 class="text-sm font-semibold text-default">
|
|
663
663
|
{{ t('settings.workspaceSettings.bugFishing.heading') }}
|
|
664
664
|
</h3>
|
|
665
|
-
<p class="text-[11px] text-
|
|
665
|
+
<p class="text-[11px] text-muted">
|
|
666
666
|
{{ t('settings.workspaceSettings.bugFishing.body') }}
|
|
667
667
|
</p>
|
|
668
668
|
<USelectMenu
|
|
@@ -677,15 +677,15 @@ async function save() {
|
|
|
677
677
|
|
|
678
678
|
<!-- Kaizen agent -->
|
|
679
679
|
<section class="space-y-2">
|
|
680
|
-
<h3 class="text-sm font-semibold text-
|
|
680
|
+
<h3 class="text-sm font-semibold text-default">
|
|
681
681
|
{{ t('settings.workspaceSettings.kaizen.heading') }}
|
|
682
682
|
</h3>
|
|
683
|
-
<p class="text-[11px] text-
|
|
683
|
+
<p class="text-[11px] text-muted">
|
|
684
684
|
{{ t('settings.workspaceSettings.kaizen.body') }}
|
|
685
685
|
</p>
|
|
686
686
|
<label class="flex items-center gap-2">
|
|
687
687
|
<USwitch v-model="draft.kaizenEnabled" size="sm" />
|
|
688
|
-
<span class="text-sm text-
|
|
688
|
+
<span class="text-sm text-default">{{
|
|
689
689
|
t('settings.workspaceSettings.kaizen.toggle')
|
|
690
690
|
}}</span>
|
|
691
691
|
</label>
|
|
@@ -63,7 +63,7 @@ function toggle(id: string) {
|
|
|
63
63
|
<template>
|
|
64
64
|
<div>
|
|
65
65
|
<div class="mb-1 flex items-center justify-between gap-2">
|
|
66
|
-
<span class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
66
|
+
<span class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
67
67
|
{{ t('skills.reviewQueue.label') }}
|
|
68
68
|
</span>
|
|
69
69
|
<UPopover v-model:open="open" :content="{ align: 'end' }">
|
|
@@ -87,8 +87,8 @@ function toggle(id: string) {
|
|
|
87
87
|
v-for="s in offered"
|
|
88
88
|
:key="s.id"
|
|
89
89
|
type="button"
|
|
90
|
-
class="flex w-full items-start gap-2 rounded px-2 py-1.5 text-start text-sm hover:bg-
|
|
91
|
-
:class="selectedSet.has(s.id) ? 'text-
|
|
90
|
+
class="flex w-full items-start gap-2 rounded px-2 py-1.5 text-start text-sm hover:bg-elevated/60 disabled:cursor-not-allowed disabled:opacity-40"
|
|
91
|
+
:class="selectedSet.has(s.id) ? 'text-app-100' : 'text-toned'"
|
|
92
92
|
:disabled="atCap && !selectedSet.has(s.id)"
|
|
93
93
|
:aria-pressed="selectedSet.has(s.id)"
|
|
94
94
|
:data-testid="`review-skill-option-${s.id}`"
|
|
@@ -97,28 +97,28 @@ function toggle(id: string) {
|
|
|
97
97
|
<UIcon
|
|
98
98
|
:name="selectedSet.has(s.id) ? 'i-lucide-check' : 'i-lucide-plus'"
|
|
99
99
|
class="mt-0.5 h-4 w-4 shrink-0"
|
|
100
|
-
:class="selectedSet.has(s.id) ? 'text-primary
|
|
100
|
+
:class="selectedSet.has(s.id) ? 'text-primary' : 'text-dimmed'"
|
|
101
101
|
/>
|
|
102
102
|
<span class="min-w-0 flex-1">
|
|
103
103
|
<span class="block truncate">{{ s.name }}</span>
|
|
104
|
-
<span class="block truncate text-[11px] text-
|
|
104
|
+
<span class="block truncate text-[11px] text-dimmed">
|
|
105
105
|
{{ s.description }}
|
|
106
106
|
</span>
|
|
107
107
|
</span>
|
|
108
108
|
</button>
|
|
109
109
|
</template>
|
|
110
|
-
<p v-else class="px-2 py-3 text-[12px] text-
|
|
110
|
+
<p v-else class="px-2 py-3 text-[12px] text-dimmed">
|
|
111
111
|
{{ t('skills.reviewQueue.pickerEmpty') }}
|
|
112
112
|
</p>
|
|
113
113
|
</div>
|
|
114
114
|
|
|
115
115
|
<p
|
|
116
116
|
v-if="atCap"
|
|
117
|
-
class="border-t border-
|
|
117
|
+
class="border-t border-default px-2 py-1.5 text-[11px] text-app-warning-400"
|
|
118
118
|
>
|
|
119
119
|
{{ t('skills.reviewQueue.capped', { max: MAX_REVIEW_SKILLS }) }}
|
|
120
120
|
</p>
|
|
121
|
-
<div class="flex justify-end border-t border-
|
|
121
|
+
<div class="flex justify-end border-t border-default p-1.5">
|
|
122
122
|
<UButton
|
|
123
123
|
size="xs"
|
|
124
124
|
color="neutral"
|
|
@@ -145,11 +145,11 @@ function toggle(id: string) {
|
|
|
145
145
|
data-testid="review-skill-badge"
|
|
146
146
|
@click="toggle(s.id)"
|
|
147
147
|
>
|
|
148
|
-
<span class="me-1 tabular-nums text-
|
|
148
|
+
<span class="me-1 tabular-nums text-muted">{{ i + 1 }}</span>
|
|
149
149
|
{{ s.name }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
|
|
150
150
|
</UBadge>
|
|
151
151
|
</div>
|
|
152
|
-
<p v-else class="text-[11px] text-
|
|
152
|
+
<p v-else class="text-[11px] text-dimmed">
|
|
153
153
|
{{ t('skills.reviewQueue.hint') }}
|
|
154
154
|
</p>
|
|
155
155
|
</div>
|
|
@@ -152,7 +152,7 @@ async function unlinkSource(id: string) {
|
|
|
152
152
|
with a raw 503 — say so instead. -->
|
|
153
153
|
<div
|
|
154
154
|
v-if="library.available === false"
|
|
155
|
-
class="rounded-md border border-
|
|
155
|
+
class="rounded-md border border-default bg-default/40 p-3 text-sm text-muted"
|
|
156
156
|
>
|
|
157
157
|
{{ t('skills.unavailable') }}
|
|
158
158
|
</div>
|
|
@@ -164,24 +164,27 @@ async function unlinkSource(id: string) {
|
|
|
164
164
|
<div
|
|
165
165
|
v-for="s in library.catalog"
|
|
166
166
|
:key="s.id"
|
|
167
|
-
class="flex items-start gap-2 rounded-md border border-
|
|
167
|
+
class="flex items-start gap-2 rounded-md border border-default bg-default/60 p-3"
|
|
168
168
|
>
|
|
169
|
-
<UIcon
|
|
169
|
+
<UIcon
|
|
170
|
+
name="i-lucide-book-open-check"
|
|
171
|
+
class="mt-0.5 h-4 w-4 shrink-0 text-app-info-400"
|
|
172
|
+
/>
|
|
170
173
|
<div class="min-w-0 flex-1">
|
|
171
174
|
<div class="flex items-center gap-2">
|
|
172
|
-
<p class="truncate text-sm font-medium text-
|
|
175
|
+
<p class="truncate text-sm font-medium text-app-100">{{ s.name }}</p>
|
|
173
176
|
<UBadge color="neutral" variant="subtle" size="sm" class="shrink-0">
|
|
174
177
|
{{ t(SKILL_GROUP_LABEL_KEYS[s.group]) }}
|
|
175
178
|
</UBadge>
|
|
176
179
|
</div>
|
|
177
|
-
<p class="text-xs text-
|
|
180
|
+
<p class="text-xs text-muted">{{ s.description }}</p>
|
|
178
181
|
<!-- The manifest declared a group this build does not know (a typo, or a member
|
|
179
182
|
retired since the sync). It is filed under Other, and saying which value was
|
|
180
183
|
declared is what lets the author fix their frontmatter. -->
|
|
181
|
-
<p v-if="s.declaredGroup" class="mt-1 text-[11px] text-
|
|
184
|
+
<p v-if="s.declaredGroup" class="mt-1 text-[11px] text-app-warning-400">
|
|
182
185
|
{{ t('skills.catalog.groupUnknown', { group: s.declaredGroup }) }}
|
|
183
186
|
</p>
|
|
184
|
-
<p class="mt-1 flex flex-wrap gap-x-3 text-[11px] text-
|
|
187
|
+
<p class="mt-1 flex flex-wrap gap-x-3 text-[11px] text-dimmed">
|
|
185
188
|
<span v-if="s.resources.length">
|
|
186
189
|
{{ t('skills.catalog.resources', { count: s.resources.length }) }}
|
|
187
190
|
</span>
|
|
@@ -191,7 +194,7 @@ async function unlinkSource(id: string) {
|
|
|
191
194
|
</p>
|
|
192
195
|
</div>
|
|
193
196
|
</div>
|
|
194
|
-
<p v-if="!library.catalog.length" class="text-sm text-
|
|
197
|
+
<p v-if="!library.catalog.length" class="text-sm text-dimmed">
|
|
195
198
|
{{ t('skills.catalog.empty') }}
|
|
196
199
|
</p>
|
|
197
200
|
</div>
|
|
@@ -202,15 +205,15 @@ async function unlinkSource(id: string) {
|
|
|
202
205
|
<div
|
|
203
206
|
v-for="s in library.sources"
|
|
204
207
|
:key="s.id"
|
|
205
|
-
class="flex items-center gap-2 rounded-md border border-
|
|
208
|
+
class="flex items-center gap-2 rounded-md border border-default bg-default/60 p-3"
|
|
206
209
|
>
|
|
207
|
-
<UIcon name="i-lucide-git-branch" class="h-4 w-4 text-
|
|
210
|
+
<UIcon name="i-lucide-git-branch" class="h-4 w-4 text-muted" />
|
|
208
211
|
<div class="min-w-0">
|
|
209
|
-
<span class="font-mono text-sm text-
|
|
212
|
+
<span class="font-mono text-sm text-app-100">
|
|
210
213
|
{{ s.repoOwner }}/{{ s.repoName
|
|
211
|
-
}}<span class="text-
|
|
214
|
+
}}<span class="text-dimmed">/{{ s.dirPath || '' }}</span>
|
|
212
215
|
</span>
|
|
213
|
-
<p class="text-xs text-
|
|
216
|
+
<p class="text-xs text-dimmed">
|
|
214
217
|
{{
|
|
215
218
|
s.lastSyncedAt
|
|
216
219
|
? t('skills.sources.metaSynced', {
|
|
@@ -258,18 +261,18 @@ async function unlinkSource(id: string) {
|
|
|
258
261
|
/>
|
|
259
262
|
</div>
|
|
260
263
|
</div>
|
|
261
|
-
<p v-if="!library.sources.length" class="text-sm text-
|
|
264
|
+
<p v-if="!library.sources.length" class="text-sm text-dimmed">
|
|
262
265
|
{{ t('skills.sources.empty') }}
|
|
263
266
|
</p>
|
|
264
267
|
|
|
265
268
|
<!-- Link a new source. Needs the GitHub integration; hide the form when it's off. -->
|
|
266
269
|
<div
|
|
267
270
|
v-if="!library.sourcesAvailable"
|
|
268
|
-
class="rounded-md border border-
|
|
271
|
+
class="rounded-md border border-default bg-default/40 p-3 text-sm text-dimmed"
|
|
269
272
|
>
|
|
270
273
|
{{ t('skills.sources.githubRequired') }}
|
|
271
274
|
</div>
|
|
272
|
-
<div v-else class="rounded-md border border-
|
|
275
|
+
<div v-else class="rounded-md border border-default p-3">
|
|
273
276
|
<p class="mb-2 text-sm font-medium">{{ t('skills.sources.linkTitle') }}</p>
|
|
274
277
|
<div class="flex flex-col gap-2">
|
|
275
278
|
<!-- Connected: search a repo + browse to the skills directory -->
|
|
@@ -277,16 +280,16 @@ async function unlinkSource(id: string) {
|
|
|
277
280
|
<GitHubRepoSearchSelect v-model="sourceRepoId" @update:repo="sourceRepo = $event" />
|
|
278
281
|
<div
|
|
279
282
|
v-if="sourceRepoId !== undefined"
|
|
280
|
-
class="rounded-md border border-
|
|
283
|
+
class="rounded-md border border-default bg-default/40 p-2"
|
|
281
284
|
>
|
|
282
|
-
<p class="mb-2 text-xs text-
|
|
285
|
+
<p class="mb-2 text-xs text-muted">
|
|
283
286
|
{{ t('skills.sources.browseHint') }}
|
|
284
287
|
</p>
|
|
285
288
|
<RepoTreeBrowser v-model="sourceDir" :repo-github-id="sourceRepoId" mode="dir" />
|
|
286
|
-
<p class="mt-2 truncate text-xs text-
|
|
289
|
+
<p class="mt-2 truncate text-xs text-muted">
|
|
287
290
|
<template v-if="sourceDir">
|
|
288
291
|
{{ t('skills.sources.selectedDir') }}
|
|
289
|
-
<code class="text-
|
|
292
|
+
<code class="text-default">{{ sourceDir }}</code>
|
|
290
293
|
</template>
|
|
291
294
|
<template v-else>{{ t('skills.sources.wholeRepo') }}</template>
|
|
292
295
|
</p>
|
|
@@ -208,12 +208,12 @@ async function saveMapping() {
|
|
|
208
208
|
</template>
|
|
209
209
|
<template #body>
|
|
210
210
|
<div class="space-y-5">
|
|
211
|
-
<p class="text-xs text-
|
|
211
|
+
<p class="text-xs text-muted">
|
|
212
212
|
{{ t('slack.panel.intro') }}
|
|
213
213
|
</p>
|
|
214
214
|
|
|
215
215
|
<!-- not connected: connect UI -->
|
|
216
|
-
<div v-if="!slack.connected" class="space-y-3 rounded-lg border border-
|
|
216
|
+
<div v-if="!slack.connected" class="space-y-3 rounded-lg border border-muted p-3">
|
|
217
217
|
<UButton
|
|
218
218
|
v-if="slack.oauthEnabled"
|
|
219
219
|
color="primary"
|
|
@@ -224,7 +224,7 @@ async function saveMapping() {
|
|
|
224
224
|
{{ t('slack.connect.addToSlack') }}
|
|
225
225
|
</UButton>
|
|
226
226
|
<div class="space-y-1">
|
|
227
|
-
<span class="block text-[10px] uppercase tracking-wide text-
|
|
227
|
+
<span class="block text-[10px] uppercase tracking-wide text-dimmed">
|
|
228
228
|
{{ t('slack.connect.orPasteToken') }}
|
|
229
229
|
</span>
|
|
230
230
|
<div class="flex gap-2">
|
|
@@ -245,11 +245,9 @@ async function saveMapping() {
|
|
|
245
245
|
|
|
246
246
|
<!-- connected -->
|
|
247
247
|
<template v-else>
|
|
248
|
-
<div
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
<UIcon name="i-lucide-slack" class="text-emerald-400" />
|
|
252
|
-
<span class="flex-1 text-sm text-slate-200">
|
|
248
|
+
<div class="flex items-center gap-2 rounded-lg border border-muted bg-elevated/40 p-3">
|
|
249
|
+
<UIcon name="i-lucide-slack" class="text-app-success-400" />
|
|
250
|
+
<span class="flex-1 text-sm text-default">
|
|
253
251
|
<i18n-t keypath="slack.connected.label" tag="span">
|
|
254
252
|
<template #team>
|
|
255
253
|
<span class="font-semibold">{{ slack.connection?.teamName }}</span>
|
|
@@ -269,16 +267,16 @@ async function saveMapping() {
|
|
|
269
267
|
|
|
270
268
|
<!-- routing -->
|
|
271
269
|
<div class="space-y-3">
|
|
272
|
-
<p class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
270
|
+
<p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
273
271
|
{{ t('slack.routing.heading') }}
|
|
274
272
|
</p>
|
|
275
273
|
<div
|
|
276
274
|
v-for="row in ROUTABLE"
|
|
277
275
|
:key="row.type"
|
|
278
|
-
class="flex items-center gap-3 rounded-lg border border-
|
|
276
|
+
class="flex items-center gap-3 rounded-lg border border-muted bg-elevated/40 p-2"
|
|
279
277
|
>
|
|
280
278
|
<USwitch v-model="routes[row.type]!.enabled" size="sm" />
|
|
281
|
-
<span class="w-32 text-sm text-
|
|
279
|
+
<span class="w-32 text-sm text-toned">{{ row.label }}</span>
|
|
282
280
|
<UInput
|
|
283
281
|
v-model="routes[row.type]!.channel"
|
|
284
282
|
size="sm"
|
|
@@ -294,7 +292,7 @@ async function saveMapping() {
|
|
|
294
292
|
|
|
295
293
|
<label class="flex items-center gap-2">
|
|
296
294
|
<USwitch v-model="mentionsEnabled" size="sm" />
|
|
297
|
-
<span class="text-sm text-
|
|
295
|
+
<span class="text-sm text-toned">{{ t('slack.routing.mentionMembers') }}</span>
|
|
298
296
|
</label>
|
|
299
297
|
|
|
300
298
|
<div class="flex justify-end">
|
|
@@ -313,15 +311,13 @@ async function saveMapping() {
|
|
|
313
311
|
|
|
314
312
|
<!-- member mapping -->
|
|
315
313
|
<div v-if="mentionsEnabled" class="space-y-2">
|
|
316
|
-
<p class="text-[11px] font-semibold uppercase tracking-wide text-
|
|
314
|
+
<p class="text-[11px] font-semibold uppercase tracking-wide text-muted">
|
|
317
315
|
{{ t('slack.members.heading') }}
|
|
318
316
|
</p>
|
|
319
|
-
<p class="text-[11px] leading-snug text-
|
|
317
|
+
<p class="text-[11px] leading-snug text-dimmed">
|
|
320
318
|
<i18n-t keypath="slack.members.hint" tag="span">
|
|
321
319
|
<template #product>
|
|
322
|
-
<span class="font-medium text-
|
|
323
|
-
t('slack.members.productLabel')
|
|
324
|
-
}}</span>
|
|
320
|
+
<span class="font-medium text-muted">{{ t('slack.members.productLabel') }}</span>
|
|
325
321
|
</template>
|
|
326
322
|
</i18n-t>
|
|
327
323
|
</p>
|