@cat-factory/app 0.308.0 → 0.310.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 +32 -2
- package/app/assets/css/main.css +22 -0
- package/app/assets/css/prose.css +4 -4
- package/app/assets/css/type.css +24 -0
- package/app/components/assistant/AssistantModal.vue +8 -6
- package/app/components/auth/BackendMisconfiguredScreen.vue +4 -3
- package/app/components/auth/LoginScreen.vue +40 -26
- package/app/components/auth/ResetPasswordScreen.vue +9 -4
- package/app/components/auth/UserMenu.vue +5 -4
- package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +48 -37
- package/app/components/binaryOutput/BinaryOutputReport.vue +10 -14
- package/app/components/binaryOutput/StoredAssetView.vue +13 -11
- package/app/components/board/AddTaskModal.vue +30 -27
- package/app/components/board/AgentFailureCard.vue +21 -18
- package/app/components/board/AgentFailureHistory.vue +18 -9
- package/app/components/board/CreateInitiativeModal.vue +7 -6
- package/app/components/board/FailureDetail.vue +22 -12
- package/app/components/board/FailureHistoryList.vue +5 -5
- package/app/components/board/RecurringPipelineModal.vue +12 -11
- package/app/components/board/ReviewFrictionDialog.vue +8 -6
- package/app/components/board/StepExecutionHistory.vue +8 -8
- package/app/components/board/nodes/AgentChip.vue +1 -1
- package/app/components/board/nodes/BlockNode.vue +25 -24
- package/app/components/board/nodes/DecisionBadge.vue +4 -3
- package/app/components/board/nodes/EpicNode.vue +4 -4
- package/app/components/board/nodes/FrameSwimlanes.vue +8 -10
- package/app/components/board/nodes/InitiativeCard.vue +4 -4
- package/app/components/board/nodes/LaneGroup.vue +3 -5
- package/app/components/board/nodes/TaskCard.vue +20 -15
- package/app/components/board/nodes/TaskLane.vue +3 -3
- package/app/components/board/nodes/TaskPipelineMini.vue +21 -18
- package/app/components/bootstrap/AdoptionReviewModal.vue +36 -26
- package/app/components/bootstrap/BootstrapModal.vue +14 -13
- package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
- package/app/components/brainstorm/BrainstormWindow.vue +13 -10
- package/app/components/bugFishing/BugFishingWindow.vue +81 -58
- package/app/components/clarity/ClarityReviewWindow.vue +13 -10
- package/app/components/common/AsyncViewError.vue +1 -1
- package/app/components/common/ClarificationItem.vue +6 -6
- package/app/components/common/CopyButton.vue +12 -11
- package/app/components/common/DescriptorFields.vue +1 -1
- package/app/components/common/EmptyState.vue +1 -1
- package/app/components/common/IconButton.vue +34 -9
- package/app/components/common/InterviewGateNotice.vue +4 -4
- package/app/components/common/MarkdownProse.vue +8 -2
- package/app/components/common/SectionLabel.vue +38 -0
- package/app/components/consensus/ConsensusSessionWindow.vue +10 -9
- package/app/components/context/ContextAttachmentFields.vue +32 -20
- package/app/components/docs/DocInterviewWindow.vue +10 -9
- package/app/components/documents/ContextDocumentPicker.vue +22 -21
- package/app/components/documents/DocumentImportModal.vue +7 -5
- package/app/components/documents/DocumentOriginLink.vue +12 -9
- package/app/components/documents/DocumentSourceConnectModal.vue +2 -2
- package/app/components/documents/DocumentSyncState.vue +4 -4
- package/app/components/documents/DocumentTemplatesModal.vue +5 -4
- package/app/components/documents/RepoContextDocPicker.vue +7 -9
- package/app/components/documents/StartFromDesignModal.vue +4 -4
- package/app/components/documents/TaskContextDocs.vue +1 -1
- package/app/components/environments/EnvSetupStepper.vue +3 -3
- package/app/components/environments/EnvironmentStatusPanel.vue +15 -13
- package/app/components/environments/steps/EnvPreflightStep.vue +8 -8
- package/app/components/environments/steps/EnvReviewStep.vue +23 -22
- package/app/components/environments/steps/EnvSaveStep.vue +5 -5
- package/app/components/focus/BlockFocusView.vue +11 -10
- package/app/components/followUp/FollowUpWindow.vue +18 -15
- package/app/components/forkDecision/ForkDecisionWindow.vue +85 -97
- package/app/components/foundational/FoundationalContractSummary.vue +2 -2
- package/app/components/foundational/FoundationalServiceCatalogList.vue +6 -5
- package/app/components/foundational/FoundationalServiceRegistry.vue +10 -9
- package/app/components/foundational/FoundationalServiceSources.vue +7 -6
- package/app/components/foundational/FoundationalSuppressions.vue +2 -2
- package/app/components/fragments/FragmentLibraryManager.vue +8 -7
- package/app/components/fragments/FragmentSelector.vue +22 -20
- package/app/components/gates/GateFailingCheckList.vue +7 -6
- package/app/components/gates/GateResultView.vue +55 -49
- package/app/components/github/AddServiceFromRepoModal.vue +16 -11
- package/app/components/github/BranchProtectionPreflight.vue +5 -5
- package/app/components/github/GitHubConnect.vue +5 -3
- package/app/components/github/GitHubOnboarding.vue +7 -2
- package/app/components/github/GitHubPanel.vue +23 -19
- package/app/components/github/RepoTreeBrowser.vue +16 -13
- package/app/components/humanTest/HumanTestWindow.vue +29 -24
- package/app/components/initiative/InitiativePlanNotice.vue +3 -3
- package/app/components/initiative/InitiativePlanReview.vue +46 -38
- package/app/components/initiative/InitiativePlanningWindow.vue +5 -5
- package/app/components/initiative/InitiativeTrackerWindow.vue +213 -165
- package/app/components/judge/JudgeResultView.vue +28 -27
- package/app/components/kaizen/KaizenPanel.vue +70 -56
- package/app/components/kaizen/KaizenStepStatus.vue +7 -6
- package/app/components/layout/AccountAuditLog.vue +1 -1
- package/app/components/layout/AccountDeploymentSettings.vue +10 -10
- 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 +7 -7
- package/app/components/layout/AccountPlatformAlertSettings.vue +8 -8
- package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
- package/app/components/layout/AccountRunCredentialSettings.vue +3 -3
- package/app/components/layout/AccountSkillSettings.vue +1 -1
- package/app/components/layout/AccountTeamSettings.vue +13 -9
- package/app/components/layout/AiProvidersBanner.vue +1 -1
- package/app/components/layout/AppearanceSwitcher.vue +5 -4
- package/app/components/layout/BoardSwitcher.vue +13 -10
- package/app/components/layout/BoardToolbar.vue +10 -5
- package/app/components/layout/CommandBar.vue +8 -5
- package/app/components/layout/DefaultTestEnvBanner.vue +6 -5
- package/app/components/layout/IntegrationsHub.vue +12 -9
- package/app/components/layout/LanguageSwitcher.vue +5 -4
- package/app/components/layout/ModelProvidersHub.vue +10 -7
- package/app/components/layout/NotificationsInbox.vue +47 -36
- package/app/components/layout/PersonalSetupModal.vue +9 -6
- package/app/components/layout/RolePrompt.vue +5 -4
- package/app/components/layout/SideBar.vue +7 -8
- package/app/components/layout/SpendWarningBanner.vue +3 -3
- package/app/components/layout/TranslationWarningBanner.vue +5 -4
- package/app/components/layout/UiModeSwitcher.vue +15 -12
- package/app/components/layout/UiRoleSwitcher.vue +10 -8
- package/app/components/layout/WorkspaceMembersSettings.vue +2 -2
- package/app/components/media/ArtifactLightbox.vue +74 -44
- package/app/components/media/ImageCompare.vue +80 -85
- package/app/components/merge/MergeEffortChips.vue +4 -6
- package/app/components/notifications/NotificationSettingsPanel.vue +6 -5
- package/app/components/observability/OutcomeFilterChips.vue +6 -5
- package/app/components/observability/RunFailureSummary.vue +22 -23
- package/app/components/observability/StepMetricsBar.vue +9 -8
- package/app/components/observability/StepModelActivity.vue +8 -5
- package/app/components/observability/ToolCallList.vue +19 -20
- package/app/components/outcome/OutcomeSummaryWindow.vue +48 -46
- package/app/components/palettes/AgentPalette.vue +21 -15
- package/app/components/palettes/AgentTierSelect.vue +1 -1
- package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
- package/app/components/panels/AgentStepDetail.vue +57 -49
- package/app/components/panels/AttemptEntryHeader.vue +2 -2
- package/app/components/panels/DecisionModal.vue +1 -1
- package/app/components/panels/GenericStructuredResultView.vue +6 -5
- package/app/components/panels/InspectorPanel.vue +15 -13
- package/app/components/panels/MergerResultView.vue +10 -9
- package/app/components/panels/ObservabilityPanel.vue +211 -186
- package/app/components/panels/OperatorDashboardPanel.vue +124 -115
- package/app/components/panels/ReportsPanel.vue +87 -83
- package/app/components/panels/ReportsSpendBreakdown.vue +2 -2
- package/app/components/panels/ResultWindowShell.vue +152 -137
- package/app/components/panels/RunDetailLoadState.vue +1 -1
- package/app/components/panels/StepContainerStatus.vue +17 -16
- package/app/components/panels/StepDelegatedStatus.vue +24 -21
- package/app/components/panels/StepEffortReport.vue +12 -17
- package/app/components/panels/StepFragmentAdherence.vue +9 -10
- package/app/components/panels/StepMetadataCard.vue +41 -43
- package/app/components/panels/StepReproductionReport.vue +18 -20
- package/app/components/panels/StepRestartControl.vue +3 -2
- package/app/components/panels/StepRunMeta.vue +27 -26
- package/app/components/panels/StepTestReport.vue +16 -15
- package/app/components/panels/StepToolServers.vue +7 -8
- package/app/components/panels/StepValidationReport.vue +5 -5
- package/app/components/panels/inspector/ContainerSummary.vue +4 -4
- package/app/components/panels/inspector/DocReferenceRepos.vue +5 -4
- package/app/components/panels/inspector/EnvProbeReport.vue +16 -13
- package/app/components/panels/inspector/EpicChildren.vue +12 -10
- package/app/components/panels/inspector/FrontendBindingsResolved.vue +5 -4
- package/app/components/panels/inspector/FrontendConfig.vue +29 -36
- package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
- package/app/components/panels/inspector/InspectorSection.vue +25 -17
- package/app/components/panels/inspector/RecurringScheduleSettings.vue +9 -8
- package/app/components/panels/inspector/ServiceConnections.vue +5 -4
- package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
- package/app/components/panels/inspector/ServiceSelfTests.vue +9 -13
- package/app/components/panels/inspector/ServiceTestConfig.vue +46 -49
- package/app/components/panels/inspector/ServiceTestSecrets.vue +3 -3
- package/app/components/panels/inspector/ServiceTestingContext.vue +2 -2
- package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAgentConfig.vue +2 -2
- package/app/components/panels/inspector/TaskAprioriBranches.vue +6 -5
- package/app/components/panels/inspector/TaskDependencies.vue +1 -1
- package/app/components/panels/inspector/TaskEstimateBadge.vue +3 -7
- package/app/components/panels/inspector/TaskExecution.vue +18 -16
- package/app/components/panels/inspector/TaskRunSettings.vue +45 -44
- package/app/components/panels/inspector/TaskStructure.vue +5 -4
- package/app/components/pipeline/AgentPromptEditor.vue +15 -14
- package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -52
- package/app/components/pipeline/EstimateThresholdFields.vue +14 -11
- package/app/components/pipeline/GateConfigFields.vue +19 -23
- package/app/components/pipeline/IterationCapPrompt.vue +1 -1
- package/app/components/pipeline/PipelineBuilder.vue +113 -99
- package/app/components/pipeline/PipelineHealthModal.vue +7 -7
- package/app/components/pipeline/PipelinePicker.vue +11 -9
- package/app/components/pipeline/PipelinePreview.vue +6 -7
- package/app/components/pipeline/PipelineProgress.vue +49 -45
- package/app/components/prReview/PrReviewWindow.vue +87 -65
- package/app/components/providers/AiPresetMismatchDialog.vue +4 -3
- package/app/components/providers/AiProviderOnboardingModal.vue +2 -2
- package/app/components/providers/ApiKeysSection.vue +11 -9
- package/app/components/providers/PersonalSubscriptionSection.vue +4 -3
- package/app/components/providers/VendorCredentialsModal.vue +5 -4
- package/app/components/provisioning/ProvisioningLogsDrawer.vue +10 -9
- package/app/components/ralph/RalphLoopResultView.vue +29 -29
- package/app/components/requirements/RequirementsReviewWindow.vue +22 -17
- package/app/components/riskPolicy/RiskPolicyPicker.vue +13 -11
- package/app/components/riskPolicy/RiskPolicyPreview.vue +16 -15
- package/app/components/sandbox/SandboxPanel.vue +93 -73
- package/app/components/settings/ApiTokensPanel.vue +1 -1
- package/app/components/settings/BudgetSettings.vue +18 -17
- package/app/components/settings/CapabilityCredentialsPanel.vue +5 -5
- package/app/components/settings/CloudflareHandlerSection.vue +44 -41
- package/app/components/settings/ComposeEnvironmentSetupSection.vue +14 -12
- package/app/components/settings/ConnectionTestVerdict.vue +1 -1
- package/app/components/settings/ConsensusGroupsSection.vue +58 -47
- package/app/components/settings/CustomManifestTypeEditor.vue +8 -7
- package/app/components/settings/DefaultProvisionTypeSection.vue +5 -5
- package/app/components/settings/InfraHandlersConfigurator.vue +26 -24
- package/app/components/settings/InfrastructureBackendPicker.vue +18 -18
- package/app/components/settings/IssueTrackerPanel.vue +30 -21
- package/app/components/settings/KubernetesEngineForm.vue +9 -8
- package/app/components/settings/KubernetesEnvironmentForm.vue +4 -3
- package/app/components/settings/LocalContainerPoolSettings.vue +2 -2
- package/app/components/settings/LocalModelEndpointsPanel.vue +13 -11
- package/app/components/settings/MergeClassRulesEditor.vue +6 -5
- package/app/components/settings/MergeRolePolicyEditor.vue +13 -12
- package/app/components/settings/ModelConfigurationPanel.vue +17 -19
- package/app/components/settings/ModelPresetHealthModal.vue +3 -3
- package/app/components/settings/ObservabilityConnectionPanel.vue +1 -1
- package/app/components/settings/OpenRouterCatalogPanel.vue +10 -8
- package/app/components/settings/PackageRegistriesPanel.vue +4 -4
- package/app/components/settings/ProviderConnectionTab.vue +5 -4
- package/app/components/settings/ProviderManifestEditor.vue +9 -8
- package/app/components/settings/ProviderPreferenceEditor.vue +13 -13
- package/app/components/settings/RiskPolicyCreateForm.vue +40 -26
- package/app/components/settings/RiskPolicyEditorRow.vue +21 -19
- package/app/components/settings/RiskPolicyHealthModal.vue +3 -3
- package/app/components/settings/RiskPolicyPanel.vue +11 -13
- package/app/components/settings/ServiceFragmentDefaultsPanel.vue +15 -12
- package/app/components/settings/SharedStacksPanel.vue +5 -5
- package/app/components/settings/TaskSourceCard.vue +2 -2
- package/app/components/settings/TaskTypeSuppressionsPanel.vue +4 -4
- package/app/components/settings/ToolServerChecklist.vue +22 -22
- package/app/components/settings/UsageSettings.vue +13 -13
- package/app/components/settings/UserSecretsSection.vue +4 -3
- package/app/components/settings/WorkspaceMetadataSettings.vue +6 -5
- package/app/components/settings/WorkspaceSettingsPanel.vue +72 -58
- package/app/components/skills/ReviewSkillQueue.vue +12 -10
- package/app/components/skills/SkillLibraryManager.vue +9 -8
- package/app/components/slack/SlackPanel.vue +17 -12
- package/app/components/spec/ServiceSpecWindow.vue +19 -19
- package/app/components/tasks/BugHuntModal.vue +1 -1
- package/app/components/tasks/ContextIssuePicker.vue +16 -15
- package/app/components/tasks/TaskContextIssues.vue +5 -4
- package/app/components/tasks/TaskImportModal.vue +3 -2
- package/app/components/tasks/TaskSourceConnectModal.vue +5 -5
- package/app/components/testing/TestReportWindow.vue +67 -60
- package/app/components/theme/ThemeImportModal.vue +2 -2
- package/app/components/tutorial/TutorialNudge.vue +3 -2
- package/app/components/tutorial/TutorialOverlay.vue +3 -2
- package/app/components/vcs/GitLabConnect.vue +1 -1
- package/app/components/visualConfirm/VisualConfirmationWindow.vue +79 -54
- package/app/utils/theme/builtins.ts +7 -1
- package/i18n/locales/de.json +7 -3
- package/i18n/locales/en.json +7 -3
- package/i18n/locales/es.json +7 -3
- package/i18n/locales/fr.json +7 -3
- package/i18n/locales/he.json +7 -3
- package/i18n/locales/it.json +7 -3
- package/i18n/locales/ja.json +7 -3
- package/i18n/locales/pl.json +7 -3
- package/i18n/locales/tr.json +7 -3
- package/i18n/locales/uk.json +7 -3
- package/package.json +1 -1
|
@@ -234,7 +234,7 @@ async function clear() {
|
|
|
234
234
|
/>
|
|
235
235
|
</UFormField>
|
|
236
236
|
|
|
237
|
-
<p class="text-
|
|
237
|
+
<p class="text-2xs text-dimmed">
|
|
238
238
|
{{ t('inspector.validationChecks.hint') }}
|
|
239
239
|
</p>
|
|
240
240
|
|
|
@@ -273,7 +273,7 @@ async function clear() {
|
|
|
273
273
|
/>
|
|
274
274
|
</div>
|
|
275
275
|
|
|
276
|
-
<p v-if="rows.length === 0" class="text-
|
|
276
|
+
<p v-if="rows.length === 0" class="text-2xs text-dimmed" data-testid="validation-empty">
|
|
277
277
|
{{ t('inspector.validationChecks.empty') }}
|
|
278
278
|
</p>
|
|
279
279
|
|
|
@@ -58,7 +58,7 @@ function setValue(id: string, value: string) {
|
|
|
58
58
|
>
|
|
59
59
|
<div v-for="d in descriptors" :key="d.id" class="space-y-1">
|
|
60
60
|
<div class="flex items-center justify-between">
|
|
61
|
-
<span class="text-
|
|
61
|
+
<span class="text-2xs text-muted">{{ d.label }}</span>
|
|
62
62
|
<div class="flex items-center gap-1.5">
|
|
63
63
|
<UIcon
|
|
64
64
|
v-if="isFrozen(d.agentKind)"
|
|
@@ -81,7 +81,7 @@ function setValue(id: string, value: string) {
|
|
|
81
81
|
{{ opt.label }}
|
|
82
82
|
</UButton>
|
|
83
83
|
</div>
|
|
84
|
-
<p class="text-
|
|
84
|
+
<p class="text-2xs leading-snug text-dimmed">{{ d.description }}</p>
|
|
85
85
|
</div>
|
|
86
86
|
</InspectorSection>
|
|
87
87
|
</template>
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
// mint the user's branch name across every involved repo).
|
|
16
16
|
import { aprioriWorkingBranch } from '@cat-factory/contracts'
|
|
17
17
|
import type { AprioriBranch, Block } from '~/types/domain'
|
|
18
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
18
19
|
|
|
19
20
|
const props = defineProps<{ block: Block }>()
|
|
20
21
|
|
|
@@ -150,9 +151,9 @@ function removeDisabled(entry: AprioriBranch): boolean {
|
|
|
150
151
|
<template>
|
|
151
152
|
<div v-if="repo" data-testid="apriori-branches">
|
|
152
153
|
<div class="mb-1 flex items-center justify-between">
|
|
153
|
-
<
|
|
154
|
+
<SectionLabel as="span">
|
|
154
155
|
{{ t('inspector.aprioriBranches.title') }}
|
|
155
|
-
</
|
|
156
|
+
</SectionLabel>
|
|
156
157
|
</div>
|
|
157
158
|
|
|
158
159
|
<!-- Attached branches: one row each — name, mode badge + toggle, remove. -->
|
|
@@ -220,14 +221,14 @@ function removeDisabled(entry: AprioriBranch): boolean {
|
|
|
220
221
|
class="w-full"
|
|
221
222
|
data-testid="apriori-branch-search"
|
|
222
223
|
/>
|
|
223
|
-
<div v-else class="text-
|
|
224
|
+
<div v-else class="text-2xs text-dimmed">
|
|
224
225
|
{{ t('inspector.aprioriBranches.connectFirst') }}
|
|
225
226
|
</div>
|
|
226
227
|
|
|
227
228
|
<!-- A protected branch pushed to by the run is likely to be rejected — warn, don't block. -->
|
|
228
229
|
<div
|
|
229
230
|
v-if="workingName && isProtected(workingName)"
|
|
230
|
-
class="mt-1.5 flex items-start gap-1.5 rounded-md border border-app-warning-500/40 bg-app-warning-950/40 p-2 text-
|
|
231
|
+
class="mt-1.5 flex items-start gap-1.5 rounded-md border border-app-warning-500/40 bg-app-warning-950/40 p-2 text-2xs text-app-warning-200/90"
|
|
231
232
|
data-testid="apriori-branch-protected-warning"
|
|
232
233
|
>
|
|
233
234
|
<UIcon
|
|
@@ -237,7 +238,7 @@ function removeDisabled(entry: AprioriBranch): boolean {
|
|
|
237
238
|
<span>{{ t('inspector.aprioriBranches.protectedWarning', { branch: workingName }) }}</span>
|
|
238
239
|
</div>
|
|
239
240
|
|
|
240
|
-
<div class="mt-1 text-
|
|
241
|
+
<div class="mt-1 text-2xs text-dimmed">
|
|
241
242
|
{{ t('inspector.aprioriBranches.hint') }}
|
|
242
243
|
<template v-if="isMultiRepo">
|
|
243
244
|
{{ t('inspector.aprioriBranches.multiRepoHint') }}
|
|
@@ -86,7 +86,7 @@ async function removeDep(dep: Block) {
|
|
|
86
86
|
icon="i-lucide-git-branch"
|
|
87
87
|
:title="t('inspector.dependencies.empty')"
|
|
88
88
|
/>
|
|
89
|
-
<div v-if="!runnable" class="text-
|
|
89
|
+
<div v-if="!runnable" class="text-3xs text-app-warning-400">
|
|
90
90
|
{{ t('inspector.dependencies.blocked') }}
|
|
91
91
|
</div>
|
|
92
92
|
</InspectorSection>
|
|
@@ -79,12 +79,8 @@ function barClass(n: number): string {
|
|
|
79
79
|
default-open
|
|
80
80
|
>
|
|
81
81
|
<div class="space-y-1.5 rounded-lg border border-default bg-default/40 p-2.5">
|
|
82
|
-
<p class="text-
|
|
83
|
-
<p
|
|
84
|
-
v-if="supersededLabel"
|
|
85
|
-
class="text-[11px] text-dimmed"
|
|
86
|
-
data-testid="task-estimate-superseded"
|
|
87
|
-
>
|
|
82
|
+
<p class="text-2xs text-dimmed" data-testid="task-estimate-basis">{{ basisLabel }}</p>
|
|
83
|
+
<p v-if="supersededLabel" class="text-2xs text-dimmed" data-testid="task-estimate-superseded">
|
|
88
84
|
{{ supersededLabel }}
|
|
89
85
|
</p>
|
|
90
86
|
<div v-for="axis in AXES" :key="axis.key" class="flex items-center gap-2">
|
|
@@ -98,7 +94,7 @@ function barClass(n: number): string {
|
|
|
98
94
|
</div>
|
|
99
95
|
<span
|
|
100
96
|
v-if="axis.was"
|
|
101
|
-
class="shrink-0 text-
|
|
97
|
+
class="shrink-0 text-2xs tabular-nums text-dimmed"
|
|
102
98
|
:data-testid="`task-estimate-was-${axis.key}`"
|
|
103
99
|
>{{ t('inspector.estimate.was', { value: axis.was }) }}</span
|
|
104
100
|
>
|
|
@@ -22,6 +22,7 @@ import MergeEffortChips from '~/components/merge/MergeEffortChips.vue'
|
|
|
22
22
|
import InputGateNotice from '~/components/inputGate/InputGateNotice.vue'
|
|
23
23
|
import { inputGateNoticeFor } from '~/utils/inputGate'
|
|
24
24
|
import { composeRunOutcome, hasOutcomeToShow } from '~/utils/runOutcome'
|
|
25
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
25
26
|
|
|
26
27
|
const props = defineProps<{ block: Block }>()
|
|
27
28
|
|
|
@@ -306,9 +307,9 @@ async function mergePr() {
|
|
|
306
307
|
<div v-if="instance">
|
|
307
308
|
<div class="mb-1 flex items-center justify-between">
|
|
308
309
|
<span class="flex min-w-0 items-center gap-1.5">
|
|
309
|
-
<span class="truncate
|
|
310
|
+
<SectionLabel as="span" class="truncate">
|
|
310
311
|
{{ instance.pipelineName }}
|
|
311
|
-
</
|
|
312
|
+
</SectionLabel>
|
|
312
313
|
<!-- A sandboxed run looks exactly like one that simply has not reached the merge yet,
|
|
313
314
|
right up until it stops there, so it says what it is from the start. -->
|
|
314
315
|
<UBadge
|
|
@@ -385,9 +386,10 @@ async function mergePr() {
|
|
|
385
386
|
<div class="flex items-center gap-2">
|
|
386
387
|
<!-- Every agent is clickable: it opens the step-detail overlay (timing,
|
|
387
388
|
model, subtasks + the prose output when there is one). -->
|
|
388
|
-
<
|
|
389
|
-
|
|
390
|
-
|
|
389
|
+
<UButton
|
|
390
|
+
color="neutral"
|
|
391
|
+
variant="ghost"
|
|
392
|
+
class="flex min-w-0 cursor-pointer items-center gap-2 p-0 text-start transition hover:bg-transparent hover:text-highlighted"
|
|
391
393
|
data-testid="run-step-open"
|
|
392
394
|
:title="
|
|
393
395
|
stepHasOutput(s)
|
|
@@ -406,7 +408,7 @@ async function mergePr() {
|
|
|
406
408
|
</span>
|
|
407
409
|
<span
|
|
408
410
|
v-if="isCompanionKind(s.agentKind)"
|
|
409
|
-
class="shrink-0 rounded bg-accented/60 px-1 text-
|
|
411
|
+
class="shrink-0 rounded-sm bg-accented/60 px-1 text-3xs font-medium uppercase tracking-wide text-toned"
|
|
410
412
|
:title="t('inspector.execution.companionTooltip')"
|
|
411
413
|
>
|
|
412
414
|
{{ t('inspector.execution.companion') }}
|
|
@@ -415,10 +417,10 @@ async function mergePr() {
|
|
|
415
417
|
:name="stepHasOutput(s) ? 'i-lucide-book-open-text' : 'i-lucide-info'"
|
|
416
418
|
class="h-3.5 w-3.5 shrink-0 text-dimmed"
|
|
417
419
|
/>
|
|
418
|
-
</
|
|
420
|
+
</UButton>
|
|
419
421
|
<span
|
|
420
422
|
v-if="s.subtasks && s.subtasks.total > 0"
|
|
421
|
-
class="ms-auto font-mono text-
|
|
423
|
+
class="ms-auto font-mono text-3xs tabular-nums text-toned"
|
|
422
424
|
data-testid="run-subtasks"
|
|
423
425
|
:title="
|
|
424
426
|
s.subtasks.inProgress > 0
|
|
@@ -436,7 +438,7 @@ async function mergePr() {
|
|
|
436
438
|
{{ s.subtasks.completed }}/{{ s.subtasks.total }}
|
|
437
439
|
</span>
|
|
438
440
|
<span
|
|
439
|
-
class="inline-flex items-center gap-1 text-
|
|
441
|
+
class="inline-flex items-center gap-1 text-3xs"
|
|
440
442
|
:class="[
|
|
441
443
|
stepFailed(s) ? 'text-app-error-400' : 'text-muted',
|
|
442
444
|
{ 'ms-auto': !s.subtasks },
|
|
@@ -467,7 +469,7 @@ async function mergePr() {
|
|
|
467
469
|
indicator, NOT a "Review" gate (the human is summoned only if needed) -->
|
|
468
470
|
<span
|
|
469
471
|
v-else-if="reviews.isBackground(s.agentKind, block.id) && reviewStage"
|
|
470
|
-
class="inline-flex shrink-0 items-center gap-1 text-
|
|
472
|
+
class="inline-flex shrink-0 items-center gap-1 text-3xs text-primary"
|
|
471
473
|
>
|
|
472
474
|
<UIcon name="i-lucide-loader-circle" class="h-3 w-3 animate-spin" />
|
|
473
475
|
{{ reviewStageLabel }}
|
|
@@ -560,7 +562,7 @@ async function mergePr() {
|
|
|
560
562
|
</div>
|
|
561
563
|
<div
|
|
562
564
|
v-if="s.model"
|
|
563
|
-
class="mt-0.5 flex items-center gap-1 ps-6 text-
|
|
565
|
+
class="mt-0.5 flex items-center gap-1 ps-6 text-3xs text-dimmed"
|
|
564
566
|
:title="s.model"
|
|
565
567
|
>
|
|
566
568
|
<UIcon name="i-lucide-cpu" class="h-3 w-3" />
|
|
@@ -569,7 +571,7 @@ async function mergePr() {
|
|
|
569
571
|
<!-- Prompt-fragment standards the library selected for this step. -->
|
|
570
572
|
<div
|
|
571
573
|
v-if="s.selectedFragmentIds && s.selectedFragmentIds.length"
|
|
572
|
-
class="mt-0.5 flex flex-wrap items-center gap-1 ps-6 text-
|
|
574
|
+
class="mt-0.5 flex flex-wrap items-center gap-1 ps-6 text-3xs text-dimmed"
|
|
573
575
|
:title="
|
|
574
576
|
t('inspector.execution.fragmentsTooltip', {
|
|
575
577
|
fragments: s.selectedFragmentIds.join(', '),
|
|
@@ -589,7 +591,7 @@ async function mergePr() {
|
|
|
589
591
|
completed/skipped, so it's clear whether a fix pass ran. -->
|
|
590
592
|
<div
|
|
591
593
|
v-if="gateCompanionFor(s, runFailed)"
|
|
592
|
-
class="mt-0.5 flex items-center gap-1.5 ps-6 text-
|
|
594
|
+
class="mt-0.5 flex items-center gap-1.5 ps-6 text-3xs"
|
|
593
595
|
>
|
|
594
596
|
<UIcon
|
|
595
597
|
:name="agentKindMeta(gateCompanionFor(s, runFailed)!.kind).icon"
|
|
@@ -641,9 +643,9 @@ async function mergePr() {
|
|
|
641
643
|
|
|
642
644
|
<!-- Open PR: link straight to it on GitHub -->
|
|
643
645
|
<div v-if="pr" class="space-y-2">
|
|
644
|
-
<
|
|
646
|
+
<SectionLabel as="span">
|
|
645
647
|
{{ t('inspector.execution.pullRequest') }}
|
|
646
|
-
</
|
|
648
|
+
</SectionLabel>
|
|
647
649
|
<UButton
|
|
648
650
|
:to="pr.url"
|
|
649
651
|
target="_blank"
|
|
@@ -663,7 +665,7 @@ async function mergePr() {
|
|
|
663
665
|
</UBadge>
|
|
664
666
|
</span>
|
|
665
667
|
</UButton>
|
|
666
|
-
<p v-if="pr.branch" class="flex items-center gap-1 truncate text-
|
|
668
|
+
<p v-if="pr.branch" class="flex items-center gap-1 truncate text-3xs text-dimmed">
|
|
667
669
|
<UIcon name="i-lucide-git-branch" class="h-3 w-3 shrink-0" />
|
|
668
670
|
<span class="truncate" :title="pr.branch">{{ pr.branch }}</span>
|
|
669
671
|
</p>
|
|
@@ -9,6 +9,7 @@ import InspectorSection from '~/components/panels/inspector/InspectorSection.vue
|
|
|
9
9
|
import RiskPolicyPicker from '~/components/riskPolicy/RiskPolicyPicker.vue'
|
|
10
10
|
import TaskAprioriBranches from '~/components/panels/inspector/TaskAprioriBranches.vue'
|
|
11
11
|
import DocReferenceRepos from '~/components/panels/inspector/DocReferenceRepos.vue'
|
|
12
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
12
13
|
|
|
13
14
|
const props = defineProps<{ block: Block }>()
|
|
14
15
|
|
|
@@ -283,9 +284,9 @@ const technicalLabel = computed(() => {
|
|
|
283
284
|
<!-- pipeline -->
|
|
284
285
|
<div>
|
|
285
286
|
<div class="mb-1 flex items-center justify-between">
|
|
286
|
-
<
|
|
287
|
+
<SectionLabel as="span">
|
|
287
288
|
{{ t('inspector.runSettings.pipeline') }}
|
|
288
|
-
</
|
|
289
|
+
</SectionLabel>
|
|
289
290
|
<PipelinePicker
|
|
290
291
|
:model-value="block.pipelineId ?? ''"
|
|
291
292
|
:options="selectablePipelines"
|
|
@@ -314,10 +315,10 @@ const technicalLabel = computed(() => {
|
|
|
314
315
|
{{ selectedPipeline.name }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
|
|
315
316
|
</UBadge>
|
|
316
317
|
</div>
|
|
317
|
-
<div v-else class="text-
|
|
318
|
+
<div v-else class="text-2xs text-dimmed">
|
|
318
319
|
{{ t('inspector.runSettings.pipelineEmpty') }}
|
|
319
320
|
</div>
|
|
320
|
-
<p class="mt-1 text-
|
|
321
|
+
<p class="mt-1 text-2xs leading-snug text-dimmed">
|
|
321
322
|
{{ t('inspector.runSettings.pipelineHint') }}
|
|
322
323
|
</p>
|
|
323
324
|
</div>
|
|
@@ -325,9 +326,9 @@ const technicalLabel = computed(() => {
|
|
|
325
326
|
<!-- merge policy preset (advanced, or basic with an override already set) -->
|
|
326
327
|
<div v-if="showOverrideField(uiMode.isAdvanced, block.riskPolicyId)">
|
|
327
328
|
<div class="mb-1 flex items-center justify-between">
|
|
328
|
-
<
|
|
329
|
+
<SectionLabel as="span">
|
|
329
330
|
{{ t('inspector.runSettings.mergePolicy') }}
|
|
330
|
-
</
|
|
331
|
+
</SectionLabel>
|
|
331
332
|
<RiskPolicyPicker
|
|
332
333
|
:model-value="block.riskPolicyId ?? ''"
|
|
333
334
|
:options="riskPolicies.presets"
|
|
@@ -347,7 +348,7 @@ const technicalLabel = computed(() => {
|
|
|
347
348
|
</template>
|
|
348
349
|
</RiskPolicyPicker>
|
|
349
350
|
</div>
|
|
350
|
-
<div v-if="selectedPreset" class="text-
|
|
351
|
+
<div v-if="selectedPreset" class="text-2xs text-muted">
|
|
351
352
|
<i18n-t
|
|
352
353
|
v-if="selectedPreset.autoMergeEnabled"
|
|
353
354
|
keypath="inspector.runSettings.riskPolicyDetail"
|
|
@@ -373,10 +374,10 @@ const technicalLabel = computed(() => {
|
|
|
373
374
|
t('inspector.runSettings.workspaceDefaultParen')
|
|
374
375
|
}}</span>
|
|
375
376
|
</div>
|
|
376
|
-
<div v-else class="text-
|
|
377
|
+
<div v-else class="text-2xs text-dimmed">
|
|
377
378
|
{{ t('inspector.runSettings.riskPolicyEmpty') }}
|
|
378
379
|
</div>
|
|
379
|
-
<p class="mt-1 text-
|
|
380
|
+
<p class="mt-1 text-2xs leading-snug text-dimmed">
|
|
380
381
|
{{ t('inspector.runSettings.mergePolicyHint') }}
|
|
381
382
|
</p>
|
|
382
383
|
</div>
|
|
@@ -384,9 +385,9 @@ const technicalLabel = computed(() => {
|
|
|
384
385
|
<!-- model preset (advanced, or basic with an override already set) -->
|
|
385
386
|
<div v-if="showOverrideField(uiMode.isAdvanced, block.modelPresetId)">
|
|
386
387
|
<div class="mb-1 flex items-center justify-between">
|
|
387
|
-
<
|
|
388
|
+
<SectionLabel as="span">
|
|
388
389
|
{{ t('inspector.runSettings.modelPreset') }}
|
|
389
|
-
</
|
|
390
|
+
</SectionLabel>
|
|
390
391
|
<UDropdownMenu :items="modelPresetMenu">
|
|
391
392
|
<UButton
|
|
392
393
|
size="xs"
|
|
@@ -397,7 +398,7 @@ const technicalLabel = computed(() => {
|
|
|
397
398
|
/>
|
|
398
399
|
</UDropdownMenu>
|
|
399
400
|
</div>
|
|
400
|
-
<div v-if="selectedModelPreset" class="text-
|
|
401
|
+
<div v-if="selectedModelPreset" class="text-2xs text-muted">
|
|
401
402
|
<span class="text-toned">{{ selectedModelPreset.name }}</span>
|
|
402
403
|
{{ t('inspector.runSettings.modelPresetBase', { model: selectedModelPreset.baseModelId })
|
|
403
404
|
}}<span v-if="Object.keys(selectedModelPreset.overrides).length">{{
|
|
@@ -412,12 +413,12 @@ const technicalLabel = computed(() => {
|
|
|
412
413
|
t('inspector.runSettings.workspaceDefaultParen')
|
|
413
414
|
}}</span>
|
|
414
415
|
</div>
|
|
415
|
-
<div v-else class="text-
|
|
416
|
+
<div v-else class="text-2xs text-dimmed">
|
|
416
417
|
{{ t('inspector.runSettings.modelPresetEmpty') }}
|
|
417
418
|
</div>
|
|
418
419
|
<div
|
|
419
420
|
v-if="unavailablePresetModels.length"
|
|
420
|
-
class="mt-2 rounded-md border border-app-warning-500/40 bg-app-warning-950/40 p-2 text-
|
|
421
|
+
class="mt-2 rounded-md border border-app-warning-500/40 bg-app-warning-950/40 p-2 text-2xs text-app-warning-200/90"
|
|
421
422
|
>
|
|
422
423
|
<div class="flex items-start gap-1.5">
|
|
423
424
|
<UIcon
|
|
@@ -433,23 +434,27 @@ const technicalLabel = computed(() => {
|
|
|
433
434
|
</i18n-t>
|
|
434
435
|
</p>
|
|
435
436
|
<div class="mt-1.5 flex flex-wrap gap-2">
|
|
436
|
-
<
|
|
437
|
-
|
|
437
|
+
<UButton
|
|
438
|
+
color="neutral"
|
|
439
|
+
variant="link"
|
|
440
|
+
class="p-0 text-xs font-medium text-app-warning-100 underline-offset-2 hover:underline"
|
|
438
441
|
@click="ui.openModelConfig()"
|
|
439
442
|
>
|
|
440
443
|
{{ t('inspector.runSettings.editPresets') }}
|
|
441
|
-
</
|
|
442
|
-
<
|
|
443
|
-
|
|
444
|
+
</UButton>
|
|
445
|
+
<UButton
|
|
446
|
+
color="neutral"
|
|
447
|
+
variant="link"
|
|
448
|
+
class="p-0 text-xs font-medium text-app-warning-100 underline-offset-2 hover:underline"
|
|
444
449
|
@click="ui.openVendorCredentials()"
|
|
445
450
|
>
|
|
446
451
|
{{ t('inspector.runSettings.configureVendors') }}
|
|
447
|
-
</
|
|
452
|
+
</UButton>
|
|
448
453
|
</div>
|
|
449
454
|
</div>
|
|
450
455
|
</div>
|
|
451
456
|
</div>
|
|
452
|
-
<p class="mt-1 text-
|
|
457
|
+
<p class="mt-1 text-2xs text-dimmed">
|
|
453
458
|
{{ t('inspector.runSettings.modelPresetHint') }}
|
|
454
459
|
{{ t('inspector.runSettings.modelPresetChangeHint') }}
|
|
455
460
|
</p>
|
|
@@ -458,9 +463,9 @@ const technicalLabel = computed(() => {
|
|
|
458
463
|
<!-- technical label (tri-state) — unset lets the engine infer it -->
|
|
459
464
|
<div v-if="showOverrideField(uiMode.isAdvanced, block.technical)">
|
|
460
465
|
<div class="mb-1 flex items-center justify-between">
|
|
461
|
-
<
|
|
466
|
+
<SectionLabel as="span">
|
|
462
467
|
{{ t('inspector.runSettings.taskKind') }}
|
|
463
|
-
</
|
|
468
|
+
</SectionLabel>
|
|
464
469
|
<UDropdownMenu :items="technicalMenu">
|
|
465
470
|
<UButton
|
|
466
471
|
size="xs"
|
|
@@ -473,7 +478,7 @@ const technicalLabel = computed(() => {
|
|
|
473
478
|
</UButton>
|
|
474
479
|
</UDropdownMenu>
|
|
475
480
|
</div>
|
|
476
|
-
<div class="text-
|
|
481
|
+
<div class="text-2xs text-dimmed">
|
|
477
482
|
<template v-if="block.technical === true">
|
|
478
483
|
{{ t('inspector.runSettings.technicalHint.technical') }}
|
|
479
484
|
</template>
|
|
@@ -489,9 +494,9 @@ const technicalLabel = computed(() => {
|
|
|
489
494
|
<!-- involved services: connected services this task spans (envs + possible code changes) -->
|
|
490
495
|
<div data-testid="involved-services">
|
|
491
496
|
<div class="mb-1 flex items-center justify-between">
|
|
492
|
-
<
|
|
497
|
+
<SectionLabel as="span">
|
|
493
498
|
{{ t('inspector.runSettings.involvedServices') }}
|
|
494
|
-
</
|
|
499
|
+
</SectionLabel>
|
|
495
500
|
</div>
|
|
496
501
|
<div v-if="connectedServices.length" class="space-y-1">
|
|
497
502
|
<UCheckbox
|
|
@@ -504,7 +509,7 @@ const technicalLabel = computed(() => {
|
|
|
504
509
|
@update:model-value="(v: boolean | 'indeterminate') => toggleInvolved(s.id, v === true)"
|
|
505
510
|
/>
|
|
506
511
|
</div>
|
|
507
|
-
<div v-else class="text-
|
|
512
|
+
<div v-else class="text-2xs text-dimmed">
|
|
508
513
|
{{ t('inspector.runSettings.involvedServicesEmpty') }}
|
|
509
514
|
</div>
|
|
510
515
|
<div v-if="staleInvolvedServices.length" class="mt-1 flex flex-wrap gap-1">
|
|
@@ -519,7 +524,7 @@ const technicalLabel = computed(() => {
|
|
|
519
524
|
{{ board.getBlock(id)?.title ?? id }}
|
|
520
525
|
</UBadge>
|
|
521
526
|
</div>
|
|
522
|
-
<div class="mt-1 text-
|
|
527
|
+
<div class="mt-1 text-2xs text-dimmed">
|
|
523
528
|
{{ t('inspector.runSettings.involvedServicesHint') }}
|
|
524
529
|
</div>
|
|
525
530
|
</div>
|
|
@@ -543,15 +548,13 @@ const technicalLabel = computed(() => {
|
|
|
543
548
|
"
|
|
544
549
|
>
|
|
545
550
|
<div class="mb-1 flex items-center justify-between">
|
|
546
|
-
<
|
|
551
|
+
<SectionLabel as="span">
|
|
547
552
|
{{ t('inspector.runSettings.issueWriteback') }}
|
|
548
|
-
</
|
|
553
|
+
</SectionLabel>
|
|
549
554
|
</div>
|
|
550
555
|
<div class="space-y-1.5">
|
|
551
556
|
<div class="flex items-center justify-between">
|
|
552
|
-
<span class="text-
|
|
553
|
-
t('inspector.runSettings.commentOnPrOpen')
|
|
554
|
-
}}</span>
|
|
557
|
+
<span class="text-2xs text-muted">{{ t('inspector.runSettings.commentOnPrOpen') }}</span>
|
|
555
558
|
<UDropdownMenu :items="writebackMenu(setCommentOnPrOpen)">
|
|
556
559
|
<UButton
|
|
557
560
|
size="xs"
|
|
@@ -564,7 +567,7 @@ const technicalLabel = computed(() => {
|
|
|
564
567
|
</UDropdownMenu>
|
|
565
568
|
</div>
|
|
566
569
|
<div class="flex items-center justify-between">
|
|
567
|
-
<span class="text-
|
|
570
|
+
<span class="text-2xs text-muted">{{ t('inspector.runSettings.closeOnMerge') }}</span>
|
|
568
571
|
<UDropdownMenu :items="writebackMenu(setResolveOnMerge)">
|
|
569
572
|
<UButton
|
|
570
573
|
size="xs"
|
|
@@ -577,9 +580,7 @@ const technicalLabel = computed(() => {
|
|
|
577
580
|
</UDropdownMenu>
|
|
578
581
|
</div>
|
|
579
582
|
<div class="flex items-center justify-between">
|
|
580
|
-
<span class="text-
|
|
581
|
-
t('inspector.runSettings.questionsOnPark')
|
|
582
|
-
}}</span>
|
|
583
|
+
<span class="text-2xs text-muted">{{ t('inspector.runSettings.questionsOnPark') }}</span>
|
|
583
584
|
<UDropdownMenu :items="writebackMenu(setQuestionsOnPark)">
|
|
584
585
|
<UButton
|
|
585
586
|
size="xs"
|
|
@@ -592,7 +593,7 @@ const technicalLabel = computed(() => {
|
|
|
592
593
|
</UDropdownMenu>
|
|
593
594
|
</div>
|
|
594
595
|
</div>
|
|
595
|
-
<div class="mt-1 text-
|
|
596
|
+
<div class="mt-1 text-2xs text-dimmed">
|
|
596
597
|
{{ t('inspector.runSettings.writebackHint') }}
|
|
597
598
|
</div>
|
|
598
599
|
</div>
|
|
@@ -600,9 +601,9 @@ const technicalLabel = computed(() => {
|
|
|
600
601
|
<!-- responsible product person -->
|
|
601
602
|
<div>
|
|
602
603
|
<div class="mb-1 flex items-center justify-between">
|
|
603
|
-
<
|
|
604
|
+
<SectionLabel as="span">
|
|
604
605
|
{{ t('inspector.runSettings.responsibleProduct') }}
|
|
605
|
-
</
|
|
606
|
+
</SectionLabel>
|
|
606
607
|
<UDropdownMenu :items="responsibleMenu">
|
|
607
608
|
<UButton
|
|
608
609
|
size="xs"
|
|
@@ -624,7 +625,7 @@ const technicalLabel = computed(() => {
|
|
|
624
625
|
{{ responsibleLabel }}<UIcon name="i-lucide-x" class="ms-0.5 h-3 w-3" />
|
|
625
626
|
</UBadge>
|
|
626
627
|
</div>
|
|
627
|
-
<div v-else class="text-
|
|
628
|
+
<div v-else class="text-2xs text-dimmed">
|
|
628
629
|
{{ t('inspector.runSettings.responsibleEmpty') }}
|
|
629
630
|
</div>
|
|
630
631
|
</div>
|
|
@@ -632,16 +633,16 @@ const technicalLabel = computed(() => {
|
|
|
632
633
|
<!-- auto-start dependents: when this task merges, start the tasks that depend on it -->
|
|
633
634
|
<div>
|
|
634
635
|
<div class="flex items-center justify-between gap-2">
|
|
635
|
-
<
|
|
636
|
+
<SectionLabel as="span">
|
|
636
637
|
{{ t('inspector.runSettings.autoStartDependents') }}
|
|
637
|
-
</
|
|
638
|
+
</SectionLabel>
|
|
638
639
|
<USwitch
|
|
639
640
|
size="sm"
|
|
640
641
|
:model-value="block.autoStartDependents ?? false"
|
|
641
642
|
@update:model-value="setAutoStartDependents"
|
|
642
643
|
/>
|
|
643
644
|
</div>
|
|
644
|
-
<div class="mt-1 text-
|
|
645
|
+
<div class="mt-1 text-2xs text-dimmed">
|
|
645
646
|
{{ t('inspector.runSettings.autoStartHint') }}
|
|
646
647
|
</div>
|
|
647
648
|
</div>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import type { Block } from '~/types/domain'
|
|
3
3
|
import InspectorSection from '~/components/panels/inspector/InspectorSection.vue'
|
|
4
4
|
import FragmentSelector from '~/components/fragments/FragmentSelector.vue'
|
|
5
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
5
6
|
|
|
6
7
|
const props = defineProps<{ block: Block }>()
|
|
7
8
|
|
|
@@ -83,9 +84,9 @@ function setFragments(ids: string[]) {
|
|
|
83
84
|
<InspectorSection :title="t('inspector.structure.title')" :hint="t('inspector.structure.hint')">
|
|
84
85
|
<!-- module assignment -->
|
|
85
86
|
<div>
|
|
86
|
-
<
|
|
87
|
+
<SectionLabel class="mb-1">
|
|
87
88
|
{{ t('inspector.structure.module') }}
|
|
88
|
-
</
|
|
89
|
+
</SectionLabel>
|
|
89
90
|
<USelectMenu
|
|
90
91
|
:model-value="selectedModule"
|
|
91
92
|
:items="moduleOptions"
|
|
@@ -99,7 +100,7 @@ function setFragments(ids: string[]) {
|
|
|
99
100
|
@update:model-value="setModule"
|
|
100
101
|
@create="setModule"
|
|
101
102
|
/>
|
|
102
|
-
<p class="mt-1 text-
|
|
103
|
+
<p class="mt-1 text-2xs leading-snug text-dimmed">
|
|
103
104
|
{{ t('inspector.structure.moduleHint') }}
|
|
104
105
|
</p>
|
|
105
106
|
</div>
|
|
@@ -113,7 +114,7 @@ function setFragments(ids: string[]) {
|
|
|
113
114
|
:empty-text="t('inspector.structure.bestPracticesEmpty')"
|
|
114
115
|
@update:model-value="setFragments"
|
|
115
116
|
/>
|
|
116
|
-
<p class="mt-1 text-
|
|
117
|
+
<p class="mt-1 text-2xs leading-snug text-dimmed">
|
|
117
118
|
{{ t('inspector.structure.bestPracticesHint') }}
|
|
118
119
|
</p>
|
|
119
120
|
</div>
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
isRevisionConflict,
|
|
11
11
|
saveIntent,
|
|
12
12
|
} from '~/components/pipeline/AgentPromptEditor.logic'
|
|
13
|
+
import SectionLabel from '~/components/common/SectionLabel.vue'
|
|
13
14
|
|
|
14
15
|
// The per-workspace system-prompt editor for ONE agent kind, opened from the pipeline builder
|
|
15
16
|
// (where the kinds are actually chosen). It edits the SHIPPED track prompt only: the platform
|
|
@@ -192,14 +193,14 @@ function revisionLabel(revision: AgentPromptRevision): string {
|
|
|
192
193
|
<!-- The workspace-wide output ceiling for this kind. Same per-agent-kind scope as the
|
|
193
194
|
prompt below it; saves on change, since there is no revision log to commit to. -->
|
|
194
195
|
<div class="flex flex-wrap items-center gap-2">
|
|
195
|
-
<span class="text-
|
|
196
|
+
<span class="text-2xs text-muted">{{ t('pipeline.outputBudget.kindLabel') }}</span>
|
|
196
197
|
<OutputBudgetInput
|
|
197
198
|
class="w-32"
|
|
198
199
|
:model-value="budget"
|
|
199
200
|
:disabled="agentSettings.saving"
|
|
200
201
|
@update:model-value="saveBudget"
|
|
201
202
|
/>
|
|
202
|
-
<span class="text-
|
|
203
|
+
<span class="text-3xs text-dimmed">
|
|
203
204
|
{{ t('pipeline.outputBudget.kindHint') }}
|
|
204
205
|
</span>
|
|
205
206
|
</div>
|
|
@@ -207,7 +208,7 @@ function revisionLabel(revision: AgentPromptRevision): string {
|
|
|
207
208
|
<!-- What the platform appends is SHOWN, not described. A prose summary of it is copy
|
|
208
209
|
that silently goes stale the moment a directive is added, and a user who does not
|
|
209
210
|
know what is already there writes a prompt that fights it. -->
|
|
210
|
-
<p v-if="directives" class="text-
|
|
211
|
+
<p v-if="directives" class="text-2xs leading-relaxed text-dimmed">
|
|
211
212
|
{{ t('agentPrompt.managedNotice') }}
|
|
212
213
|
<UButton
|
|
213
214
|
variant="link"
|
|
@@ -222,11 +223,11 @@ function revisionLabel(revision: AgentPromptRevision): string {
|
|
|
222
223
|
v-if="directives && showDirectives"
|
|
223
224
|
class="rounded-md border border-default bg-app-950/60 p-2"
|
|
224
225
|
>
|
|
225
|
-
<h4 class="mb-1
|
|
226
|
+
<SectionLabel as="h4" class="mb-1">
|
|
226
227
|
{{ t('agentPrompt.appendedHeading') }}
|
|
227
|
-
</
|
|
228
|
+
</SectionLabel>
|
|
228
229
|
<pre
|
|
229
|
-
class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-
|
|
230
|
+
class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-2xs text-toned"
|
|
230
231
|
>{{ directives.trim() }}</pre>
|
|
231
232
|
</div>
|
|
232
233
|
|
|
@@ -278,25 +279,25 @@ function revisionLabel(revision: AgentPromptRevision): string {
|
|
|
278
279
|
>
|
|
279
280
|
{{ showBuiltin ? t('agentPrompt.hideBuiltin') : t('agentPrompt.showBuiltin') }}
|
|
280
281
|
</UButton>
|
|
281
|
-
<span v-if="restoredFrom !== undefined" class="text-
|
|
282
|
+
<span v-if="restoredFrom !== undefined" class="text-2xs text-muted">
|
|
282
283
|
{{ t('agentPrompt.restoringFrom', { n: restoredFrom }) }}
|
|
283
284
|
</span>
|
|
284
285
|
</div>
|
|
285
286
|
|
|
286
287
|
<div v-if="showBuiltin" class="rounded-md border border-default bg-app-950/60 p-2">
|
|
287
|
-
<h4 class="mb-1
|
|
288
|
+
<SectionLabel as="h4" class="mb-1">
|
|
288
289
|
{{ t('agentPrompt.builtinHeading') }}
|
|
289
|
-
</
|
|
290
|
+
</SectionLabel>
|
|
290
291
|
<pre
|
|
291
|
-
class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-
|
|
292
|
+
class="max-h-64 overflow-auto whitespace-pre-wrap break-words font-mono text-2xs text-toned"
|
|
292
293
|
>{{ detail.builtinText }}</pre>
|
|
293
294
|
</div>
|
|
294
295
|
|
|
295
296
|
<div>
|
|
296
|
-
<h4 class="mb-1
|
|
297
|
+
<SectionLabel as="h4" class="mb-1">
|
|
297
298
|
{{ t('agentPrompt.historyHeading') }}
|
|
298
|
-
</
|
|
299
|
-
<p v-if="!detail.revisions.length" class="text-
|
|
299
|
+
</SectionLabel>
|
|
300
|
+
<p v-if="!detail.revisions.length" class="text-2xs text-dimmed">
|
|
300
301
|
{{ t('agentPrompt.historyEmpty') }}
|
|
301
302
|
</p>
|
|
302
303
|
<ul v-else class="max-h-52 divide-y divide-default overflow-y-auto text-xs">
|
|
@@ -316,7 +317,7 @@ function revisionLabel(revision: AgentPromptRevision): string {
|
|
|
316
317
|
<span class="min-w-0 flex-1 truncate text-toned">
|
|
317
318
|
{{ revisionLabel(revision) }}
|
|
318
319
|
</span>
|
|
319
|
-
<span class="shrink-0 text-
|
|
320
|
+
<span class="shrink-0 text-2xs text-dimmed">
|
|
320
321
|
{{ d(new Date(revision.createdAt), 'short') }}
|
|
321
322
|
</span>
|
|
322
323
|
<UButton
|