@cat-factory/app 0.302.1 → 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.
Files changed (328) hide show
  1. package/README.md +16 -0
  2. package/app/app.config.ts +19 -10
  3. package/app/assets/css/main.css +13 -13
  4. package/app/assets/css/prose.css +22 -22
  5. package/app/assets/css/tokens.css +298 -0
  6. package/app/components/assistant/AssistantModal.vue +22 -22
  7. package/app/components/auth/AuthGate.vue +1 -1
  8. package/app/components/auth/BackendMisconfiguredScreen.vue +10 -10
  9. package/app/components/auth/LoginScreen.vue +34 -36
  10. package/app/components/auth/ResetPasswordScreen.vue +12 -12
  11. package/app/components/auth/UserMenu.vue +4 -4
  12. package/app/components/binaryCandidates/BinaryCandidatesWindow.vue +27 -25
  13. package/app/components/binaryOutput/BinaryOutputReport.vue +15 -15
  14. package/app/components/binaryOutput/StoredAssetView.vue +5 -5
  15. package/app/components/board/AddTaskModal.vue +17 -20
  16. package/app/components/board/AgentFailureCard.vue +11 -11
  17. package/app/components/board/AgentFailureHistory.vue +2 -2
  18. package/app/components/board/BoardCanvas.vue +6 -5
  19. package/app/components/board/CreateInitiativeModal.vue +8 -10
  20. package/app/components/board/DependencyConnectOverlay.vue +1 -1
  21. package/app/components/board/FailureHistoryList.vue +7 -7
  22. package/app/components/board/RecurringPipelineModal.vue +17 -17
  23. package/app/components/board/ReviewFrictionDialog.vue +6 -6
  24. package/app/components/board/StepExecutionHistory.vue +13 -13
  25. package/app/components/board/TaskDependencyEdges.vue +8 -8
  26. package/app/components/board/nodes/AgentChip.vue +10 -10
  27. package/app/components/board/nodes/BlockNode.vue +29 -29
  28. package/app/components/board/nodes/DecisionBadge.vue +2 -2
  29. package/app/components/board/nodes/EpicNode.vue +14 -10
  30. package/app/components/board/nodes/FrameSwimlanes.vue +7 -9
  31. package/app/components/board/nodes/InitiativeCard.vue +8 -8
  32. package/app/components/board/nodes/LaneGroup.vue +1 -1
  33. package/app/components/board/nodes/LaneTask.vue +2 -2
  34. package/app/components/board/nodes/ResizeGrips.vue +4 -4
  35. package/app/components/board/nodes/TaskCard.vue +18 -18
  36. package/app/components/board/nodes/TaskLane.vue +5 -5
  37. package/app/components/board/nodes/TaskPipelineMini.vue +18 -18
  38. package/app/components/bootstrap/AdoptionReviewModal.vue +29 -26
  39. package/app/components/bootstrap/BootstrapModal.vue +21 -23
  40. package/app/components/bootstrap/BootstrapRunSteps.vue +1 -1
  41. package/app/components/brainstorm/BrainstormWindow.vue +30 -33
  42. package/app/components/bugFishing/BugFishingWindow.vue +49 -49
  43. package/app/components/clarity/ClarityReviewWindow.vue +30 -30
  44. package/app/components/common/AsyncViewError.vue +5 -5
  45. package/app/components/common/ClarificationItem.vue +8 -13
  46. package/app/components/common/ConfirmDialog.vue +4 -2
  47. package/app/components/common/DescriptorFields.vue +1 -1
  48. package/app/components/common/EmptyState.vue +3 -3
  49. package/app/components/common/InterviewGateNotice.vue +7 -7
  50. package/app/components/common/KeyboardShortcutsHelp.vue +1 -1
  51. package/app/components/common/MarkdownProse.vue +14 -13
  52. package/app/components/consensus/ConsensusSessionWindow.vue +26 -26
  53. package/app/components/context/ContextAttachmentFields.vue +17 -17
  54. package/app/components/docs/DocInterviewWindow.vue +14 -14
  55. package/app/components/documents/ContextDocumentPicker.vue +17 -17
  56. package/app/components/documents/DocumentImportModal.vue +7 -7
  57. package/app/components/documents/DocumentSourceConnectModal.vue +3 -3
  58. package/app/components/documents/DocumentSyncState.vue +5 -5
  59. package/app/components/documents/DocumentTemplatesModal.vue +15 -15
  60. package/app/components/documents/RepoContextDocPicker.vue +5 -5
  61. package/app/components/documents/SpawnPreviewModal.vue +12 -12
  62. package/app/components/documents/StartFromDesignModal.vue +11 -11
  63. package/app/components/documents/TaskContextDocs.vue +5 -5
  64. package/app/components/environments/EnvSetupStepper.vue +6 -6
  65. package/app/components/environments/EnvironmentStatusPanel.vue +17 -17
  66. package/app/components/environments/steps/EnvPickStep.vue +3 -3
  67. package/app/components/environments/steps/EnvPreflightStep.vue +9 -9
  68. package/app/components/environments/steps/EnvReviewStep.vue +25 -22
  69. package/app/components/environments/steps/EnvSaveStep.vue +7 -5
  70. package/app/components/environments/steps/JourneyStepNav.vue +1 -1
  71. package/app/components/focus/BlockFocusView.vue +17 -19
  72. package/app/components/followUp/FollowUpWindow.vue +23 -23
  73. package/app/components/forkDecision/ForkDecisionWindow.vue +37 -39
  74. package/app/components/foundational/FoundationalContractSummary.vue +7 -7
  75. package/app/components/foundational/FoundationalServiceCatalogList.vue +11 -11
  76. package/app/components/foundational/FoundationalServiceManager.vue +1 -1
  77. package/app/components/foundational/FoundationalServiceRegistry.vue +13 -13
  78. package/app/components/foundational/FoundationalServiceSources.vue +13 -13
  79. package/app/components/foundational/FoundationalSuppressions.vue +7 -7
  80. package/app/components/foundational/ServiceCatalogConnection.vue +10 -10
  81. package/app/components/fragments/FragmentLibraryManager.vue +41 -44
  82. package/app/components/fragments/FragmentSelector.vue +13 -13
  83. package/app/components/fragments/GitHubDocUrlImport.vue +1 -1
  84. package/app/components/gates/GateFailingCheckList.vue +5 -5
  85. package/app/components/gates/GateResultView.vue +50 -47
  86. package/app/components/github/AddServiceFromRepoModal.vue +14 -14
  87. package/app/components/github/BranchProtectionPreflight.vue +13 -13
  88. package/app/components/github/GitHubConnect.vue +7 -7
  89. package/app/components/github/GitHubOnboarding.vue +7 -7
  90. package/app/components/github/GitHubPanel.vue +37 -40
  91. package/app/components/github/RepoTreeBrowser.vue +18 -18
  92. package/app/components/humanTest/HumanTestWindow.vue +30 -33
  93. package/app/components/initiative/InitiativePlanNotice.vue +5 -5
  94. package/app/components/initiative/InitiativePlanReview.vue +27 -29
  95. package/app/components/initiative/InitiativePlanningWindow.vue +10 -10
  96. package/app/components/initiative/InitiativeTrackerWindow.vue +71 -65
  97. package/app/components/inputGate/InputGateNotice.vue +2 -4
  98. package/app/components/judge/JudgeResultView.vue +30 -32
  99. package/app/components/kaizen/KaizenPanel.vue +40 -36
  100. package/app/components/kaizen/KaizenStepStatus.vue +21 -21
  101. package/app/components/layout/AccountAuditLog.vue +10 -10
  102. package/app/components/layout/AccountDeploymentSettings.vue +20 -20
  103. package/app/components/layout/AccountFailureKindRules.vue +13 -13
  104. package/app/components/layout/AccountFoundationalSettings.vue +1 -1
  105. package/app/components/layout/AccountFragmentSettings.vue +1 -1
  106. package/app/components/layout/AccountModelPolicySettings.vue +9 -9
  107. package/app/components/layout/AccountPlatformAlertSettings.vue +11 -11
  108. package/app/components/layout/AccountRiskPolicySettings.vue +2 -2
  109. package/app/components/layout/AccountRunCredentialSettings.vue +5 -5
  110. package/app/components/layout/AccountSkillSettings.vue +1 -1
  111. package/app/components/layout/AccountTeamSettings.vue +23 -15
  112. package/app/components/layout/AiProvidersBanner.vue +11 -8
  113. package/app/components/layout/AppearanceSwitcher.vue +108 -0
  114. package/app/components/layout/BoardSwitcher.vue +8 -11
  115. package/app/components/layout/BoardToolbar.vue +3 -3
  116. package/app/components/layout/CommandBar.vue +7 -9
  117. package/app/components/layout/ConnectionStatusBanner.vue +2 -2
  118. package/app/components/layout/DefaultTestEnvBanner.vue +5 -5
  119. package/app/components/layout/GitHubPatBanner.vue +5 -5
  120. package/app/components/layout/GitHubPatPermissionsBanner.vue +16 -10
  121. package/app/components/layout/InfraSetupBanner.vue +6 -6
  122. package/app/components/layout/IntegrationsHub.vue +15 -15
  123. package/app/components/layout/LanguageSwitcher.vue +5 -5
  124. package/app/components/layout/ModelProvidersHub.vue +13 -16
  125. package/app/components/layout/NotificationsInbox.vue +10 -10
  126. package/app/components/layout/PersonalSetupModal.vue +8 -8
  127. package/app/components/layout/ProviderConfigBanner.vue +4 -4
  128. package/app/components/layout/RolePrompt.vue +7 -7
  129. package/app/components/layout/SideBar.vue +6 -4
  130. package/app/components/layout/SpendWarningBanner.vue +17 -14
  131. package/app/components/layout/TranslationWarningBanner.vue +4 -4
  132. package/app/components/layout/UiModeSwitcher.vue +13 -13
  133. package/app/components/layout/UiRoleSwitcher.vue +8 -8
  134. package/app/components/layout/WorkspaceMembersSettings.vue +15 -11
  135. package/app/components/media/ArtifactLightbox.vue +13 -13
  136. package/app/components/media/ImageCompare.vue +31 -24
  137. package/app/components/merge/MergeEffortChips.vue +2 -2
  138. package/app/components/notifications/NotificationSettingsPanel.vue +14 -12
  139. package/app/components/observability/OutcomeFilterChips.vue +6 -6
  140. package/app/components/observability/RunFailureSummary.vue +28 -25
  141. package/app/components/observability/StepMetricsBar.vue +26 -28
  142. package/app/components/observability/StepModelActivity.vue +2 -2
  143. package/app/components/observability/ToolCallList.vue +24 -24
  144. package/app/components/outcome/OutcomeSummaryWindow.vue +47 -47
  145. package/app/components/palettes/AgentPalette.vue +8 -8
  146. package/app/components/palettes/AgentTierSelect.vue +1 -1
  147. package/app/components/palettes/PipelinePurposeSelect.vue +1 -1
  148. package/app/components/panels/AgentStepDetail.vue +52 -51
  149. package/app/components/panels/AttemptEntryHeader.vue +4 -6
  150. package/app/components/panels/DecisionModal.vue +7 -7
  151. package/app/components/panels/GenericStructuredResultView.vue +7 -7
  152. package/app/components/panels/InspectorPanel.vue +17 -17
  153. package/app/components/panels/MergerResultView.vue +19 -19
  154. package/app/components/panels/ObservabilityPanel.vue +115 -123
  155. package/app/components/panels/OperatorDashboardPanel.vue +89 -97
  156. package/app/components/panels/ReportsPanel.vue +69 -66
  157. package/app/components/panels/ReportsSpendBreakdown.vue +9 -9
  158. package/app/components/panels/ResultWindowShell.vue +38 -38
  159. package/app/components/panels/RunDetailLoadState.vue +2 -2
  160. package/app/components/panels/StepContainerStatus.vue +9 -9
  161. package/app/components/panels/StepDelegatedStatus.logic.spec.ts +135 -0
  162. package/app/components/panels/StepDelegatedStatus.logic.ts +160 -0
  163. package/app/components/panels/StepDelegatedStatus.vue +181 -0
  164. package/app/components/panels/StepEffortReport.vue +16 -15
  165. package/app/components/panels/StepFragmentAdherence.vue +14 -10
  166. package/app/components/panels/StepMetadataCard.vue +74 -45
  167. package/app/components/panels/StepReproductionReport.vue +25 -21
  168. package/app/components/panels/StepRunMeta.vue +20 -20
  169. package/app/components/panels/StepTestReport.logic.spec.ts +8 -3
  170. package/app/components/panels/StepTestReport.logic.ts +4 -4
  171. package/app/components/panels/StepTestReport.vue +28 -28
  172. package/app/components/panels/StepToolServers.vue +14 -11
  173. package/app/components/panels/StepValidationReport.vue +7 -7
  174. package/app/components/panels/inspector/ContainerSummary.vue +9 -9
  175. package/app/components/panels/inspector/DocReferenceRepos.vue +3 -3
  176. package/app/components/panels/inspector/EnvProbeReport.vue +24 -27
  177. package/app/components/panels/inspector/EpicChildren.vue +8 -12
  178. package/app/components/panels/inspector/FrontendBindingsResolved.vue +11 -11
  179. package/app/components/panels/inspector/FrontendConfig.vue +37 -41
  180. package/app/components/panels/inspector/InitiativeInspector.vue +3 -3
  181. package/app/components/panels/inspector/InspectorSection.vue +6 -6
  182. package/app/components/panels/inspector/RecurringScheduleSettings.vue +16 -19
  183. package/app/components/panels/inspector/ServiceConnections.vue +2 -2
  184. package/app/components/panels/inspector/ServiceReleaseHealthConfig.vue +2 -2
  185. package/app/components/panels/inspector/ServiceSelfTests.vue +21 -17
  186. package/app/components/panels/inspector/ServiceTestConfig.vue +51 -59
  187. package/app/components/panels/inspector/ServiceTestSecrets.vue +5 -5
  188. package/app/components/panels/inspector/ServiceTestingContext.vue +3 -3
  189. package/app/components/panels/inspector/ServiceValidationConfig.vue +2 -2
  190. package/app/components/panels/inspector/TaskAgentConfig.vue +3 -3
  191. package/app/components/panels/inspector/TaskAprioriBranches.vue +8 -5
  192. package/app/components/panels/inspector/TaskDependencies.vue +1 -1
  193. package/app/components/panels/inspector/TaskEstimateBadge.vue +11 -11
  194. package/app/components/panels/inspector/TaskExecution.vue +17 -17
  195. package/app/components/panels/inspector/TaskReviewTarget.vue +2 -2
  196. package/app/components/panels/inspector/TaskRunSettings.vue +35 -37
  197. package/app/components/panels/inspector/TaskStructure.vue +3 -3
  198. package/app/components/pipeline/AgentKindIcon.vue +1 -1
  199. package/app/components/pipeline/AgentPromptEditor.vue +17 -17
  200. package/app/components/pipeline/BinaryOutputStepPicker.vue +42 -56
  201. package/app/components/pipeline/EstimateThresholdFields.vue +4 -4
  202. package/app/components/pipeline/GateConfigFields.vue +13 -10
  203. package/app/components/pipeline/IterationCapPrompt.vue +4 -2
  204. package/app/components/pipeline/PipelineBuilder.vue +47 -55
  205. package/app/components/pipeline/PipelineHealthModal.vue +27 -29
  206. package/app/components/pipeline/PipelinePicker.vue +10 -10
  207. package/app/components/pipeline/PipelinePreview.vue +10 -10
  208. package/app/components/pipeline/PipelineProgress.vue +64 -67
  209. package/app/components/prReview/PrReviewPhaseBadge.vue +7 -7
  210. package/app/components/prReview/PrReviewWindow.vue +75 -77
  211. package/app/components/providers/AiPresetMismatchDialog.vue +5 -5
  212. package/app/components/providers/AiProviderOnboardingModal.vue +9 -9
  213. package/app/components/providers/ApiKeysSection.vue +13 -13
  214. package/app/components/providers/PersonalCredentialModal.vue +2 -2
  215. package/app/components/providers/PersonalSubscriptionSection.vue +10 -10
  216. package/app/components/providers/SignInRequiredNotice.vue +1 -1
  217. package/app/components/providers/VendorCredentialsModal.vue +10 -10
  218. package/app/components/provisioning/ProvisioningLogsDrawer.vue +13 -13
  219. package/app/components/ralph/RalphLoopResultView.vue +28 -30
  220. package/app/components/recurring/RecurrenceEditor.vue +2 -2
  221. package/app/components/requirements/RequirementsReviewWindow.vue +51 -58
  222. package/app/components/riskPolicy/RiskPolicyPicker.vue +12 -15
  223. package/app/components/riskPolicy/RiskPolicyPreview.vue +14 -14
  224. package/app/components/sandbox/SandboxPanel.vue +58 -59
  225. package/app/components/settings/AccountSettingsPanel.vue +1 -1
  226. package/app/components/settings/ApiTokensPanel.vue +10 -10
  227. package/app/components/settings/BudgetSettings.vue +18 -22
  228. package/app/components/settings/CapabilityCredentialsPanel.vue +15 -15
  229. package/app/components/settings/CloudflareHandlerSection.vue +20 -20
  230. package/app/components/settings/ComposeEnvironmentSetupSection.vue +13 -13
  231. package/app/components/settings/ConnectionTestVerdict.vue +3 -3
  232. package/app/components/settings/ConnectionWarnings.vue +1 -1
  233. package/app/components/settings/ConsensusGroupsSection.vue +27 -35
  234. package/app/components/settings/CustomManifestTypeEditor.vue +10 -10
  235. package/app/components/settings/DefaultProvisionTypeSection.vue +6 -6
  236. package/app/components/settings/InfraHandlersConfigurator.vue +24 -22
  237. package/app/components/settings/InfrastructureBackendPicker.vue +6 -6
  238. package/app/components/settings/InfrastructureWindow.vue +5 -5
  239. package/app/components/settings/IssueTrackerPanel.vue +29 -23
  240. package/app/components/settings/KubernetesEngineForm.vue +11 -11
  241. package/app/components/settings/KubernetesEnvironmentForm.vue +4 -4
  242. package/app/components/settings/LocalContainerPoolSettings.vue +6 -11
  243. package/app/components/settings/LocalModelEndpointsPanel.vue +20 -18
  244. package/app/components/settings/McpAuthorizeScreen.vue +13 -15
  245. package/app/components/settings/McpOAuthCallbackScreen.vue +16 -10
  246. package/app/components/settings/MergeClassRulesEditor.vue +6 -9
  247. package/app/components/settings/MergeRolePolicyEditor.vue +16 -16
  248. package/app/components/settings/ModelConfigurationPanel.vue +23 -30
  249. package/app/components/settings/ModelPresetHealthModal.vue +15 -13
  250. package/app/components/settings/ObservabilityConnectionPanel.vue +4 -4
  251. package/app/components/settings/OpenRouterCatalogPanel.vue +23 -19
  252. package/app/components/settings/PackageRegistriesPanel.vue +8 -8
  253. package/app/components/settings/ProviderConnectionTab.vue +8 -11
  254. package/app/components/settings/ProviderManifestEditor.vue +9 -9
  255. package/app/components/settings/ProviderPreferenceEditor.vue +8 -8
  256. package/app/components/settings/RiskPolicyCreateForm.vue +10 -10
  257. package/app/components/settings/RiskPolicyEditorRow.vue +14 -14
  258. package/app/components/settings/RiskPolicyHealthModal.vue +15 -13
  259. package/app/components/settings/RiskPolicyInheritedRow.vue +1 -1
  260. package/app/components/settings/RiskPolicyPanel.vue +10 -15
  261. package/app/components/settings/ServiceFragmentDefaultsPanel.vue +7 -7
  262. package/app/components/settings/SharedStacksPanel.vue +9 -12
  263. package/app/components/settings/TaskSourceCard.vue +4 -4
  264. package/app/components/settings/TaskTypeSuppressionsPanel.vue +6 -6
  265. package/app/components/settings/ToolServerChecklist.vue +36 -29
  266. package/app/components/settings/UsageSettings.vue +15 -15
  267. package/app/components/settings/UserSecretsSection.vue +9 -12
  268. package/app/components/settings/WorkspaceMetadataSettings.vue +5 -5
  269. package/app/components/settings/WorkspaceSettingsPanel.vue +47 -47
  270. package/app/components/skills/ReviewSkillQueue.vue +10 -10
  271. package/app/components/skills/SkillLibraryManager.vue +23 -20
  272. package/app/components/slack/SlackPanel.vue +13 -17
  273. package/app/components/spec/ServiceSpecWindow.vue +45 -42
  274. package/app/components/tasks/BugHuntModal.vue +24 -27
  275. package/app/components/tasks/ContextIssuePicker.vue +11 -11
  276. package/app/components/tasks/TaskContextIssues.vue +3 -3
  277. package/app/components/tasks/TaskImportModal.vue +7 -7
  278. package/app/components/tasks/TaskSourceConnectModal.vue +10 -8
  279. package/app/components/testing/TestReportWindow.vue +99 -82
  280. package/app/components/theme/ThemeImportModal.vue +115 -0
  281. package/app/components/tutorial/TutorialCatalogue.vue +9 -9
  282. package/app/components/tutorial/TutorialNudge.vue +5 -5
  283. package/app/components/tutorial/TutorialOverlay.vue +12 -12
  284. package/app/components/tutorial/TutorialPrompt.vue +6 -9
  285. package/app/components/vcs/GitLabConnect.vue +4 -4
  286. package/app/components/vcs/VcsConnectSurfaces.vue +2 -2
  287. package/app/components/visualConfirm/VisualConfirmationWindow.vue +36 -36
  288. package/app/composables/api/client.ts +6 -1
  289. package/app/composables/usePipelineErrorToast.ts +17 -0
  290. package/app/modular/agent-kinds.ts +24 -0
  291. package/app/pages/index.vue +5 -5
  292. package/app/plugins/theme.client.ts +125 -0
  293. package/app/spa-loading-template.html +52 -14
  294. package/app/stores/agents.ts +1 -1
  295. package/app/stores/theme.spec.ts +56 -0
  296. package/app/stores/theme.ts +87 -0
  297. package/app/types/domain.ts +19 -0
  298. package/app/types/execution.ts +4 -0
  299. package/app/utils/agentOutput.ts +1 -1
  300. package/app/utils/binaryOutput.ts +6 -6
  301. package/app/utils/bootstrapSteps.ts +14 -14
  302. package/app/utils/catalog.ts +87 -83
  303. package/app/utils/colorTint.ts +10 -0
  304. package/app/utils/failureKinds.ts +1 -0
  305. package/app/utils/observability.ts +3 -3
  306. package/app/utils/pipelineRender.ts +13 -17
  307. package/app/utils/swimlanes.ts +4 -4
  308. package/app/utils/theme/bootPalette.spec.ts +54 -0
  309. package/app/utils/theme/bootPalette.ts +108 -0
  310. package/app/utils/theme/builtins.spec.ts +38 -0
  311. package/app/utils/theme/builtins.ts +55 -0
  312. package/app/utils/theme/css.ts +162 -0
  313. package/app/utils/theme/doc.ts +353 -0
  314. package/app/utils/theme/link.ts +93 -0
  315. package/app/utils/theme/presets.ts +509 -0
  316. package/app/utils/theme/theme.spec.ts +224 -0
  317. package/i18n/locales/de.json +61 -4
  318. package/i18n/locales/en.json +70 -4
  319. package/i18n/locales/es.json +61 -4
  320. package/i18n/locales/fr.json +61 -4
  321. package/i18n/locales/he.json +61 -4
  322. package/i18n/locales/it.json +61 -4
  323. package/i18n/locales/ja.json +61 -4
  324. package/i18n/locales/pl.json +61 -4
  325. package/i18n/locales/tr.json +61 -4
  326. package/i18n/locales/uk.json +61 -4
  327. package/nuxt.config.ts +37 -11
  328. package/package.json +10 -9
@@ -39,7 +39,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
39
39
  tier: 'basic',
40
40
  label: 'Requirements Reviewer',
41
41
  icon: 'i-lucide-clipboard-check',
42
- color: '#f59e0b',
42
+ color: 'var(--app-hue-amber)',
43
43
  category: 'review',
44
44
  // Settles the PRODUCT layer before anyone builds, which is every use-case except reviewing
45
45
  // someone else's open pull request: there the requirements are already someone's shipped
@@ -56,7 +56,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
56
56
  tier: 'basic',
57
57
  label: 'Clarity Reviewer',
58
58
  icon: 'i-lucide-bug',
59
- color: '#f59e0b',
59
+ color: 'var(--app-hue-amber)',
60
60
  category: 'review',
61
61
  // Triages a BUG REPORT for fixability, so it only makes sense where something gets fixed.
62
62
  purposes: ['build'],
@@ -75,7 +75,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
75
75
  tier: 'intermediate',
76
76
  label: 'Bug Investigator',
77
77
  icon: 'i-lucide-search-code',
78
- color: '#38bdf8',
78
+ color: 'var(--app-hue-sky)',
79
79
  category: 'review',
80
80
  // Traces a bug to its root cause in the code: a fixing pipeline's opening move, and nothing
81
81
  // a document, review, spike or plan has any use for.
@@ -94,7 +94,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
94
94
  tier: 'intermediate',
95
95
  label: 'Bug Fisher',
96
96
  icon: 'i-lucide-fish',
97
- color: '#0ea5e9',
97
+ color: 'var(--app-hue-sky)',
98
98
  category: 'review',
99
99
  // Hunts for defects nobody reported: it belongs with the bug work rather than the build
100
100
  // ladder, and with review because its product is findings.
@@ -113,7 +113,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
113
113
  tier: 'basic',
114
114
  label: 'PR Reviewer',
115
115
  icon: 'i-lucide-clipboard-check',
116
- color: '#6366f1',
116
+ color: 'var(--app-hue-indigo)',
117
117
  category: 'review',
118
118
  // Reviews an EXISTING open pull request, which is the whole of the review use-case, and is
119
119
  // available to a build pipeline that wants a deep pass over the pull request it just opened.
@@ -133,7 +133,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
133
133
  tier: 'intermediate',
134
134
  label: 'Spike',
135
135
  icon: 'i-lucide-flask-conical',
136
- color: '#22d3ee',
136
+ color: 'var(--app-hue-cyan)',
137
137
  category: 'design',
138
138
  description:
139
139
  'Timeboxed read-only investigation that answers a research question against the context and codebase, and delivers a findings document (as a pull request by default; no code).',
@@ -144,7 +144,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
144
144
  tier: 'intermediate',
145
145
  label: 'Task Estimator',
146
146
  icon: 'i-lucide-gauge',
147
- color: '#eab308',
147
+ color: 'var(--app-hue-yellow)',
148
148
  category: 'review',
149
149
  description:
150
150
  'Triages the task after requirements are clarified — rates Complexity, Risk and Impact (0..1). Used to gate consensus and conditional companion steps, and shown as ratings on the task.',
@@ -158,7 +158,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
158
158
  tier: 'advanced',
159
159
  label: 'Task Reassessor',
160
160
  icon: 'i-lucide-gauge-circle',
161
- color: '#f59e0b',
161
+ color: 'var(--app-hue-amber)',
162
162
  category: 'review',
163
163
  // Reads the pull request the run opened, so it only belongs where a pipeline ships code. A
164
164
  // document, research, planning or review pipeline opens none, and the step would be offered
@@ -172,7 +172,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
172
172
  tier: 'intermediate',
173
173
  label: 'Requirements Brainstorm',
174
174
  icon: 'i-lucide-lightbulb',
175
- color: '#f59e0b',
175
+ color: 'var(--app-hue-amber)',
176
176
  category: 'design',
177
177
  description:
178
178
  'A structured dialogue that turns a rough idea into crisp requirements — proposing options with explicit trade-offs and letting you choose, before the requirements review.',
@@ -185,7 +185,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
185
185
  tier: 'advanced',
186
186
  label: 'Architecture Brainstorm',
187
187
  icon: 'i-lucide-compass',
188
- color: '#a78bfa',
188
+ color: 'var(--app-hue-violet)',
189
189
  category: 'design',
190
190
  description:
191
191
  'A structured dialogue that explores and finalizes a technical approach from the refined requirements — proposing options with explicit trade-offs and letting you converge, before the architect.',
@@ -201,7 +201,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
201
201
  tier: 'intermediate',
202
202
  label: 'Spec Writer',
203
203
  icon: 'i-lucide-clipboard-list',
204
- color: '#c084fc',
204
+ color: 'var(--app-hue-purple)',
205
205
  category: 'design',
206
206
  // Writes the in-repo spec the implementation is then built against.
207
207
  purposes: ['build', 'planning'],
@@ -213,7 +213,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
213
213
  tier: 'basic',
214
214
  label: 'Architect',
215
215
  icon: 'i-lucide-drafting-compass',
216
- color: '#a78bfa',
216
+ color: 'var(--app-hue-violet)',
217
217
  category: 'design',
218
218
  // Designs the shape of a CODE change, so it belongs wherever code is planned or written and
219
219
  // nowhere a document is being authored.
@@ -228,7 +228,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
228
228
  tier: 'intermediate',
229
229
  label: 'Blueprinter',
230
230
  icon: 'i-lucide-map',
231
- color: '#22d3ee',
231
+ color: 'var(--app-hue-cyan)',
232
232
  category: 'design',
233
233
  // Decomposes a repository into services and modules on the board.
234
234
  purposes: ['build', 'planning'],
@@ -239,7 +239,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
239
239
  tier: 'intermediate',
240
240
  label: 'Researcher',
241
241
  icon: 'i-lucide-telescope',
242
- color: '#38bdf8',
242
+ color: 'var(--app-hue-sky)',
243
243
  category: 'design',
244
244
  description: 'Investigates prior art, libraries and constraints.',
245
245
  },
@@ -248,7 +248,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
248
248
  tier: 'basic',
249
249
  label: 'Coder',
250
250
  icon: 'i-lucide-code-xml',
251
- color: '#34d399',
251
+ color: 'var(--app-hue-emerald)',
252
252
  category: 'build',
253
253
  description: 'Implements the block according to the design.',
254
254
  },
@@ -257,7 +257,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
257
257
  tier: 'advanced',
258
258
  label: 'Integrator',
259
259
  icon: 'i-lucide-plug-zap',
260
- color: '#fb923c',
260
+ color: 'var(--app-hue-orange)',
261
261
  category: 'build',
262
262
  description: 'Wires the block into the surrounding system.',
263
263
  },
@@ -266,7 +266,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
266
266
  tier: 'advanced',
267
267
  label: 'Mock Builder',
268
268
  icon: 'i-lucide-server-cog',
269
- color: '#fb7185',
269
+ color: 'var(--app-hue-rose)',
270
270
  category: 'build',
271
271
  description: 'Builds WireMock mocks for external services and wires them into local/CI runs.',
272
272
  },
@@ -282,7 +282,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
282
282
  tier: 'basic',
283
283
  label: 'Deployer',
284
284
  icon: 'i-lucide-cloud-upload',
285
- color: '#34d399',
285
+ color: 'var(--app-hue-emerald)',
286
286
  category: 'test',
287
287
  description:
288
288
  'Provisions the ephemeral environment the tester and human-test gate run against (kubernetes / custom services); a no-op for docker-compose / infraless. Place it before the first step that needs the environment.',
@@ -292,7 +292,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
292
292
  tier: 'basic',
293
293
  label: 'API Tester',
294
294
  icon: 'i-lucide-flask-conical',
295
- color: '#fbbf24',
295
+ color: 'var(--app-hue-amber)',
296
296
  category: 'test',
297
297
  description: 'Exercises the change against the mocks + spec scenarios and reports outcomes.',
298
298
  // Opens the dedicated structured test-report window (scenarios → outcomes →
@@ -304,7 +304,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
304
304
  tier: 'intermediate',
305
305
  label: 'UI Tester',
306
306
  icon: 'i-lucide-camera',
307
- color: '#fbbf24',
307
+ color: 'var(--app-hue-amber)',
308
308
  category: 'test',
309
309
  description:
310
310
  'Drives a real browser through the new UI, captures a screenshot of each view, and reports outcomes.',
@@ -316,7 +316,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
316
316
  tier: 'intermediate',
317
317
  label: 'Acceptance Test Author',
318
318
  icon: 'i-lucide-theater',
319
- color: '#e879f9',
319
+ color: 'var(--app-hue-fuchsia)',
320
320
  category: 'test',
321
321
  description:
322
322
  "Turns scenarios into runnable tests — Playwright for frontend, the project's own framework for backend; adds only new ones.",
@@ -326,7 +326,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
326
326
  tier: 'intermediate',
327
327
  label: 'Human Testing',
328
328
  icon: 'i-lucide-user-check',
329
- color: '#f59e0b',
329
+ color: 'var(--app-hue-amber)',
330
330
  category: 'test',
331
331
  description:
332
332
  'Spins up an ephemeral environment and pauses for a person to validate the change in a live URL — request a fix from findings, pull main + redeploy, or recreate/destroy the env — before the pipeline continues.',
@@ -347,7 +347,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
347
347
  tier: 'basic',
348
348
  label: 'Disposer',
349
349
  icon: 'i-lucide-cloud-off',
350
- color: '#34d399',
350
+ color: 'var(--app-hue-emerald)',
351
351
  category: 'test',
352
352
  description:
353
353
  'Reclaims the ephemeral environments this run provisioned, and confirms they are actually gone. Place it after the last step that needs the environment.',
@@ -357,7 +357,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
357
357
  tier: 'advanced',
358
358
  label: 'Visual Confirmation',
359
359
  icon: 'i-lucide-image-play',
360
- color: '#f59e0b',
360
+ color: 'var(--app-hue-amber)',
361
361
  category: 'test',
362
362
  description:
363
363
  'Pauses for a person to review the UI tester’s screenshots against the uploaded reference designs — approve, or request a fix from findings — before the pipeline continues.',
@@ -370,7 +370,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
370
370
  tier: 'basic',
371
371
  label: 'Documenter',
372
372
  icon: 'i-lucide-book-open-text',
373
- color: '#818cf8',
373
+ color: 'var(--app-hue-indigo)',
374
374
  category: 'docs',
375
375
  // WRITES documentation into the repository, which a pipeline that reviews someone else's
376
376
  // pull request never does.
@@ -382,7 +382,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
382
382
  tier: 'intermediate',
383
383
  label: 'Domain Rules Documenter',
384
384
  icon: 'i-lucide-scroll-text',
385
- color: '#84cc16',
385
+ color: 'var(--app-hue-lime)',
386
386
  category: 'docs',
387
387
  // Writes domain-rule docs into the repository (see `documenter`).
388
388
  purposes: ['build', 'document'],
@@ -394,7 +394,7 @@ export const AGENT_ARCHETYPES: AgentArchetype[] = [
394
394
  tier: 'advanced',
395
395
  label: 'Domain Rules Reviewer',
396
396
  icon: 'i-lucide-shield-alert',
397
- color: '#ef4444',
397
+ color: 'var(--app-hue-red)',
398
398
  category: 'docs',
399
399
  // The review activity that groups under Documentation: it reads a change against the
400
400
  // documented rules and reports violations, writing nothing.
@@ -420,7 +420,7 @@ export const COMPANION_ARCHETYPES: AgentArchetype[] = [
420
420
  tier: 'basic',
421
421
  label: 'Reviewer (companion)',
422
422
  icon: 'i-lucide-scan-eye',
423
- color: '#f472b6',
423
+ color: 'var(--app-hue-pink)',
424
424
  description:
425
425
  "Coder's companion: rates the change for quality/correctness and loops it back for automatic rework below the threshold.",
426
426
  },
@@ -429,7 +429,7 @@ export const COMPANION_ARCHETYPES: AgentArchetype[] = [
429
429
  tier: 'intermediate',
430
430
  label: 'Architect Companion',
431
431
  icon: 'i-lucide-bug-play',
432
- color: '#c084fc',
432
+ color: 'var(--app-hue-purple)',
433
433
  description:
434
434
  "Challenges the architect's design for quality and completeness, looping it back for rework below the threshold before a human reviews it.",
435
435
  },
@@ -438,7 +438,7 @@ export const COMPANION_ARCHETYPES: AgentArchetype[] = [
438
438
  tier: 'intermediate',
439
439
  label: 'Spec Reviewer',
440
440
  icon: 'i-lucide-list-checks',
441
- color: '#2dd4bf',
441
+ color: 'var(--app-hue-teal)',
442
442
  description:
443
443
  'Reviews the spec — especially acceptance-scenario coverage — rating it and looping the Spec Writer back for automatic rework below the threshold, instead of requiring a human review.',
444
444
  },
@@ -447,7 +447,7 @@ export const COMPANION_ARCHETYPES: AgentArchetype[] = [
447
447
  tier: 'intermediate',
448
448
  label: 'Doc Reviewer',
449
449
  icon: 'i-lucide-file-search',
450
- color: '#818cf8',
450
+ color: 'var(--app-hue-indigo)',
451
451
  description:
452
452
  'Reviews the drafted document for completeness, clarity, accuracy and structure, looping the Doc Writer back for automatic rework below the threshold.',
453
453
  },
@@ -635,7 +635,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
635
635
  tier: 'advanced',
636
636
  label: 'Challenge Investigator',
637
637
  icon: 'i-lucide-gavel',
638
- color: '#6366f1',
638
+ color: 'var(--app-hue-indigo)',
639
639
  description:
640
640
  'Re-examines a single challenged PR-review finding against the full source, then upholds ' +
641
641
  '(strengthening it) or retracts it with a justification. Configurable separately from the reviewer.',
@@ -654,7 +654,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
654
654
  tier: 'advanced',
655
655
  label: 'Repo Bootstrapper',
656
656
  icon: 'i-lucide-package-plus',
657
- color: '#f59e0b',
657
+ color: 'var(--app-hue-amber)',
658
658
  description:
659
659
  'Scaffolds a new repository from a reference architecture, or writes a new service into a monorepo and opens the pull request.',
660
660
  },
@@ -663,7 +663,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
663
663
  tier: 'advanced',
664
664
  label: 'Adoption Advisor',
665
665
  icon: 'i-lucide-scale',
666
- color: '#f59e0b',
666
+ color: 'var(--app-hue-amber)',
667
667
  description:
668
668
  'Reads a monorepo and the reference template and proposes what a new service should adopt from each. Its suggestion is the one a human settles before anything is written.',
669
669
  },
@@ -676,7 +676,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
676
676
  tier: 'advanced',
677
677
  label: 'Initiative Interviewer',
678
678
  icon: 'i-lucide-messages-square',
679
- color: '#818cf8',
679
+ color: 'var(--app-hue-indigo)',
680
680
  description:
681
681
  'Interviews you on the goals, scope and constraints the codebase cannot answer, then synthesizes the agreed brief the planner builds on.',
682
682
  // Opens the dedicated planning Q&A window (answer / continue / proceed) while parked.
@@ -687,7 +687,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
687
687
  tier: 'advanced',
688
688
  label: 'Initiative Analyst',
689
689
  icon: 'i-lucide-microscope',
690
- color: '#818cf8',
690
+ color: 'var(--app-hue-indigo)',
691
691
  description:
692
692
  'Explores the codebase first and writes an analysis (architecture, touch points, risks) that grounds both the interview and the plan. Makes no changes.',
693
693
  resultView: 'initiative-tracker',
@@ -697,7 +697,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
697
697
  tier: 'advanced',
698
698
  label: 'Initiative Planner',
699
699
  icon: 'i-lucide-milestone',
700
- color: '#818cf8',
700
+ color: 'var(--app-hue-indigo)',
701
701
  description:
702
702
  "Explores the codebase and drafts the initiative's multi-phase plan (items, estimates, concurrency + pipeline policy) for approval.",
703
703
  // Opens the dedicated tracker window (phases / items / policy) instead of the
@@ -709,7 +709,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
709
709
  tier: 'advanced',
710
710
  label: 'Initiative Committer',
711
711
  icon: 'i-lucide-git-commit-horizontal',
712
- color: '#818cf8',
712
+ color: 'var(--app-hue-indigo)',
713
713
  description:
714
714
  'Persists the approved plan and commits the in-repo tracker (docs/initiatives/<slug>/), arming the execution loop. Runs no model.',
715
715
  resultView: 'initiative-tracker',
@@ -722,7 +722,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
722
722
  tier: 'intermediate',
723
723
  label: 'Analyst',
724
724
  icon: 'i-lucide-search-code',
725
- color: '#818cf8',
725
+ color: 'var(--app-hue-indigo)',
726
726
  description:
727
727
  'Audits the repository read-only and emits a prioritized findings report (drives the tech-debt pipeline).',
728
728
  },
@@ -734,7 +734,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
734
734
  tier: 'advanced',
735
735
  label: 'Issue Tracker',
736
736
  icon: 'i-lucide-ticket',
737
- color: '#fb923c',
737
+ color: 'var(--app-hue-orange)',
738
738
  description:
739
739
  'Files a tracker ticket (GitHub issue / Jira) from the analysis before work starts.',
740
740
  },
@@ -748,7 +748,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
748
748
  tier: 'advanced',
749
749
  label: 'Bug Intake',
750
750
  icon: 'i-lucide-inbox',
751
- color: '#fb923c',
751
+ color: 'var(--app-hue-orange)',
752
752
  description:
753
753
  'Pulls one matching open issue from the configured tracker board, marks it in-progress, and seeds the run from it.',
754
754
  },
@@ -757,7 +757,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
757
757
  tier: 'intermediate',
758
758
  label: 'Conflicts Gate',
759
759
  icon: 'i-lucide-git-merge',
760
- color: '#f97316',
760
+ color: 'var(--app-hue-orange)',
761
761
  description: 'Ensures the PR is mergeable with its base, looping the resolver on conflicts.',
762
762
  // Opens the dedicated gate window (verdict, attempts, conflict detail) instead of
763
763
  // the generic prose step-detail panel. Shared with the CI gate.
@@ -768,7 +768,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
768
768
  tier: 'intermediate',
769
769
  label: 'Conflict Resolver',
770
770
  icon: 'i-lucide-git-merge',
771
- color: '#f97316',
771
+ color: 'var(--app-hue-orange)',
772
772
  description: 'Merges the base in and resolves conflicts on the PR branch.',
773
773
  },
774
774
  ci: {
@@ -776,7 +776,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
776
776
  tier: 'basic',
777
777
  label: 'CI Gate',
778
778
  icon: 'i-lucide-shield-check',
779
- color: '#38bdf8',
779
+ color: 'var(--app-hue-sky)',
780
780
  description: 'Gates the PR on green CI, looping the CI fixer on failure.',
781
781
  // Opens the dedicated gate window (verdict, attempts, the failing checks) instead
782
782
  // of the generic prose step-detail panel. Shared with the conflicts gate.
@@ -791,7 +791,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
791
791
  tier: 'intermediate',
792
792
  label: 'Doc Quality Gate',
793
793
  icon: 'i-lucide-file-check-2',
794
- color: '#818cf8',
794
+ color: 'var(--app-hue-indigo)',
795
795
  description:
796
796
  'Checks the drafted document for required sections, placeholders, links and heading structure, looping the doc fixer on problems.',
797
797
  // Opens the dedicated gate window (verdict, attempts, the document findings).
@@ -802,7 +802,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
802
802
  tier: 'basic',
803
803
  label: 'CI Fixer',
804
804
  icon: 'i-lucide-wrench',
805
- color: '#38bdf8',
805
+ color: 'var(--app-hue-sky)',
806
806
  description: 'Fixes failing CI and pushes back to the PR branch.',
807
807
  },
808
808
  // The deployer's escalation, and the ci-fixer's shape one step earlier in the pipeline: never a
@@ -813,7 +813,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
813
813
  tier: 'basic',
814
814
  label: 'Deploy Fixer',
815
815
  icon: 'i-lucide-server-cog',
816
- color: '#0ea5e9',
816
+ color: 'var(--app-hue-sky)',
817
817
  description:
818
818
  'Repairs the deployment files a failed provision was rejected for and pushes back to the PR branch, then the environment is stood up again.',
819
819
  },
@@ -822,7 +822,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
822
822
  tier: 'basic',
823
823
  label: 'Fixer',
824
824
  icon: 'i-lucide-wrench',
825
- color: '#fbbf24',
825
+ color: 'var(--app-hue-amber)',
826
826
  description:
827
827
  "Tester's companion: fixes the bugs the tester found and pushes back, then the tester re-runs.",
828
828
  },
@@ -831,7 +831,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
831
831
  tier: 'basic',
832
832
  label: 'Merger',
833
833
  icon: 'i-lucide-git-pull-request',
834
- color: '#a3e635',
834
+ color: 'var(--app-hue-lime)',
835
835
  description: 'Scores the PR and auto-merges within the task thresholds, or asks for review.',
836
836
  // The merger's verdict is structured (scores + the engine's auto-merge / review
837
837
  // decision), so it opens a dedicated result view instead of the raw-JSON prose panel.
@@ -842,7 +842,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
842
842
  tier: 'basic',
843
843
  label: 'Human Review Gate',
844
844
  icon: 'i-lucide-users',
845
- color: '#c084fc',
845
+ color: 'var(--app-hue-purple)',
846
846
  category: 'gates',
847
847
  description:
848
848
  'Waits for a human code review on the PR, looping the fixer to address comments; advances once approved with no unresolved threads.',
@@ -858,7 +858,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
858
858
  tier: 'advanced',
859
859
  label: 'Kaizen',
860
860
  icon: 'i-lucide-sparkles',
861
- color: '#2dd4bf',
861
+ color: 'var(--app-hue-teal)',
862
862
  description:
863
863
  'Grades each completed agent step (smooth vs chaotic) after a run and recommends prompt/model improvements.',
864
864
  },
@@ -876,7 +876,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
876
876
  tier: 'intermediate',
877
877
  label: 'Assistant',
878
878
  icon: 'i-lucide-sparkles',
879
- color: '#38bdf8',
879
+ color: 'var(--app-hue-sky)',
880
880
  description:
881
881
  'Routes a typed request to one action the platform performs on the board (declare a dependency, add a service from a repository, file a task from a tracker issue).',
882
882
  },
@@ -894,7 +894,7 @@ export const SYSTEM_AGENT_META: Record<string, AgentArchetype> = {
894
894
  tier: 'intermediate',
895
895
  label: 'Post-Release Health',
896
896
  icon: 'i-lucide-activity',
897
- color: '#f43f5e',
897
+ color: 'var(--app-hue-rose)',
898
898
  category: 'gates',
899
899
  description:
900
900
  'Watches the released PR’s Datadog monitors/SLOs after merge and escalates to the on-call agent on a regression.',
@@ -944,7 +944,7 @@ export const MODEL_CONFIGURABLE_SYSTEM_KINDS: AgentArchetype[] = [
944
944
  const FALLBACK_AGENT_META: Omit<AgentArchetype, 'kind'> = {
945
945
  label: 'Agent',
946
946
  icon: 'i-lucide-bot',
947
- color: '#94a3b8',
947
+ color: 'var(--app-hue-slate)',
948
948
  description: 'Agent step.',
949
949
  }
950
950
 
@@ -1015,55 +1015,55 @@ export const TASK_TYPE_META: Record<string, TaskTypeMeta> = {
1015
1015
  feature: {
1016
1016
  taskType: 'feature',
1017
1017
  icon: 'i-lucide-sparkles',
1018
- color: '#38bdf8',
1018
+ color: 'var(--app-hue-sky)',
1019
1019
  labelKey: 'board.addTask.types.feature',
1020
1020
  },
1021
1021
  bug: {
1022
1022
  taskType: 'bug',
1023
1023
  icon: 'i-lucide-bug',
1024
- color: '#f87171',
1024
+ color: 'var(--app-hue-red)',
1025
1025
  labelKey: 'board.addTask.types.bug',
1026
1026
  },
1027
1027
  'bug-fishing': {
1028
1028
  taskType: 'bug-fishing',
1029
1029
  icon: 'i-lucide-fish',
1030
- color: '#0ea5e9',
1030
+ color: 'var(--app-hue-sky)',
1031
1031
  labelKey: 'board.addTask.types.bugFishing',
1032
1032
  },
1033
1033
  document: {
1034
1034
  taskType: 'document',
1035
1035
  icon: 'i-lucide-file-text',
1036
- color: '#c084fc',
1036
+ color: 'var(--app-hue-purple)',
1037
1037
  labelKey: 'board.addTask.types.document',
1038
1038
  },
1039
1039
  spike: {
1040
1040
  taskType: 'spike',
1041
1041
  icon: 'i-lucide-flask-conical',
1042
- color: '#fbbf24',
1042
+ color: 'var(--app-hue-amber)',
1043
1043
  labelKey: 'board.addTask.types.spike',
1044
1044
  },
1045
1045
  review: {
1046
1046
  taskType: 'review',
1047
1047
  icon: 'i-lucide-clipboard-check',
1048
- color: '#34d399',
1048
+ color: 'var(--app-hue-emerald)',
1049
1049
  labelKey: 'board.addTask.types.review',
1050
1050
  },
1051
1051
  ralph: {
1052
1052
  taskType: 'ralph',
1053
1053
  icon: 'i-lucide-infinity',
1054
- color: '#a78bfa',
1054
+ color: 'var(--app-hue-violet)',
1055
1055
  labelKey: 'board.addTask.types.ralph',
1056
1056
  },
1057
1057
  media: {
1058
1058
  taskType: 'media',
1059
1059
  icon: 'i-lucide-image-plus',
1060
- color: '#f472b6',
1060
+ color: 'var(--app-hue-pink)',
1061
1061
  labelKey: 'board.addTask.types.media',
1062
1062
  },
1063
1063
  recurring: {
1064
1064
  taskType: 'recurring',
1065
1065
  icon: 'i-lucide-repeat',
1066
- color: '#94a3b8',
1066
+ color: 'var(--app-hue-slate)',
1067
1067
  labelKey: 'board.addTask.types.recurring',
1068
1068
  },
1069
1069
  }
@@ -1119,28 +1119,32 @@ type BlockTypeMeta = { label: string; icon: string; accent: string }
1119
1119
 
1120
1120
  /** Visual metadata for each architecture block type. */
1121
1121
  export const BLOCK_TYPE_META: Record<BlockType, BlockTypeMeta> = {
1122
- frontend: { label: 'Frontend', icon: 'i-lucide-monitor', accent: '#60a5fa' },
1123
- service: { label: 'Service', icon: 'i-lucide-server', accent: '#a78bfa' },
1124
- library: { label: 'Library', icon: 'i-lucide-package', accent: '#f472b6' },
1125
- document: { label: 'Document repository', icon: 'i-lucide-book-text', accent: '#c084fc' },
1126
- api: { label: 'API', icon: 'i-lucide-route', accent: '#22d3ee' },
1127
- database: { label: 'Database', icon: 'i-lucide-database', accent: '#34d399' },
1128
- queue: { label: 'Queue', icon: 'i-lucide-list-ordered', accent: '#fbbf24' },
1122
+ frontend: { label: 'Frontend', icon: 'i-lucide-monitor', accent: 'var(--app-hue-blue)' },
1123
+ service: { label: 'Service', icon: 'i-lucide-server', accent: 'var(--app-hue-violet)' },
1124
+ library: { label: 'Library', icon: 'i-lucide-package', accent: 'var(--app-hue-pink)' },
1125
+ document: {
1126
+ label: 'Document repository',
1127
+ icon: 'i-lucide-book-text',
1128
+ accent: 'var(--app-hue-purple)',
1129
+ },
1130
+ api: { label: 'API', icon: 'i-lucide-route', accent: 'var(--app-hue-cyan)' },
1131
+ database: { label: 'Database', icon: 'i-lucide-database', accent: 'var(--app-hue-emerald)' },
1132
+ queue: { label: 'Queue', icon: 'i-lucide-list-ordered', accent: 'var(--app-hue-amber)' },
1129
1133
  integration: {
1130
1134
  label: 'Integration',
1131
1135
  icon: 'i-lucide-workflow',
1132
- accent: '#fb923c',
1136
+ accent: 'var(--app-hue-orange)',
1133
1137
  },
1134
1138
  // Not user-creatable, but still emitted by the backend (the seeded third-party
1135
1139
  // service and the environments integration), so they need display metadata.
1136
- external: { label: 'External', icon: 'i-lucide-globe', accent: '#94a3b8' },
1137
- environment: { label: 'Environment', icon: 'i-lucide-box', accent: '#2dd4bf' },
1140
+ external: { label: 'External', icon: 'i-lucide-globe', accent: 'var(--app-hue-slate)' },
1141
+ environment: { label: 'Environment', icon: 'i-lucide-box', accent: 'var(--app-hue-teal)' },
1138
1142
  }
1139
1143
 
1140
1144
  const FALLBACK_BLOCK_TYPE_META: BlockTypeMeta = {
1141
1145
  label: 'Block',
1142
1146
  icon: 'i-lucide-box',
1143
- accent: '#94a3b8',
1147
+ accent: 'var(--app-hue-slate)',
1144
1148
  }
1145
1149
 
1146
1150
  /**
@@ -1158,19 +1162,19 @@ export const STATUS_META: Record<
1158
1162
  > = {
1159
1163
  planned: {
1160
1164
  label: 'Planned',
1161
- color: '#64748b',
1165
+ color: 'var(--ui-text-muted)',
1162
1166
  chip: 'neutral',
1163
1167
  icon: 'i-lucide-circle-dashed',
1164
1168
  },
1165
1169
  ready: {
1166
1170
  label: 'Ready',
1167
- color: '#3b82f6',
1171
+ color: 'var(--ui-info)',
1168
1172
  chip: 'info',
1169
1173
  icon: 'i-lucide-circle-play',
1170
1174
  },
1171
1175
  in_progress: {
1172
1176
  label: 'In progress',
1173
- color: '#6366f1',
1177
+ color: 'var(--ui-primary)',
1174
1178
  chip: 'primary',
1175
1179
  icon: 'i-lucide-loader',
1176
1180
  },
@@ -1180,26 +1184,26 @@ export const STATUS_META: Record<
1180
1184
  // specific reason (TaskCard, the inspector) show the precise label/action;
1181
1185
  // this fallback must NOT imply a decision is the only thing it can be.
1182
1186
  label: 'Needs attention',
1183
- color: '#f59e0b',
1187
+ color: 'var(--ui-warning)',
1184
1188
  chip: 'warning',
1185
1189
  icon: 'i-lucide-alert-triangle',
1186
1190
  },
1187
1191
  pr_ready: {
1188
1192
  label: 'PR ready',
1189
- color: '#22c55e',
1193
+ color: 'var(--ui-success)',
1190
1194
  chip: 'success',
1191
1195
  icon: 'i-lucide-git-pull-request',
1192
1196
  },
1193
1197
  done: {
1194
1198
  label: 'Done',
1195
- color: '#16a34a',
1199
+ color: 'var(--ui-text-muted)',
1196
1200
  chip: 'success',
1197
1201
  icon: 'i-lucide-circle-check',
1198
1202
  },
1199
1203
  }
1200
1204
 
1201
1205
  /** Visual metadata for module sub-frames. */
1202
- export const MODULE_META = { icon: 'i-lucide-package', color: '#a78bfa' }
1206
+ export const MODULE_META = { icon: 'i-lucide-package', color: 'var(--app-hue-violet)' }
1203
1207
 
1204
1208
  /**
1205
1209
  * Display metadata for the future-looking Follow-up companion — a per-`coder`-step toggle
@@ -1211,7 +1215,7 @@ export const MODULE_META = { icon: 'i-lucide-package', color: '#a78bfa' }
1211
1215
  export const FOLLOW_UP_COMPANION_META = {
1212
1216
  label: 'Follow-up companion',
1213
1217
  icon: 'i-lucide-compass',
1214
- color: '#f472b6',
1218
+ color: 'var(--app-hue-pink)',
1215
1219
  }
1216
1220
 
1217
1221
  /**
@@ -1222,5 +1226,5 @@ export const FOLLOW_UP_COMPANION_META = {
1222
1226
  export const FORK_DECISION_META = {
1223
1227
  label: 'Implementation-fork decision',
1224
1228
  icon: 'i-lucide-git-fork',
1225
- color: '#a78bfa',
1229
+ color: 'var(--app-hue-violet)',
1226
1230
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * A translucent fill of a colour, for the icon tiles and badges that sit a category colour behind
3
+ * its own glyph. The colour is a CSS value, never parsed: identity colours are `var(--app-hue-*)`
4
+ * tokens (`utils/catalog.ts`) and a deployment-registered kind may still send a hex, and
5
+ * `color-mix` reads both. `percent` is the fill's opacity (the old `+ '22'` hex-alpha suffix was
6
+ * 34/255, about 13%).
7
+ */
8
+ export function tint(color: string, percent = 13): string {
9
+ return `color-mix(in srgb, ${color} ${percent}%, transparent)`
10
+ }
@@ -30,6 +30,7 @@ export const FAILURE_KIND_KEYS: Record<AgentFailureKind, string> = {
30
30
  timeout: 'platformObservability.failureKind.timeout',
31
31
  agent: 'platformObservability.failureKind.agent',
32
32
  job_failed: 'platformObservability.failureKind.job_failed',
33
+ delegated_failed: 'platformObservability.failureKind.delegated_failed',
33
34
  rejected: 'platformObservability.failureKind.rejected',
34
35
  companion_rejected: 'platformObservability.failureKind.companion_rejected',
35
36
  stalled: 'platformObservability.failureKind.stalled',