create-principles-disciple 1.146.4 → 1.146.6

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 (308) hide show
  1. package/_release/product-identity.json +1 -1
  2. package/package.json +3 -3
  3. package/release-manager/package.json +3 -3
  4. package/console/dist/ui/App.d.ts +0 -1
  5. package/console/dist/ui/App.js +0 -172
  6. package/console/dist/ui/api.d.ts +0 -611
  7. package/console/dist/ui/api.js +0 -1094
  8. package/console/dist/ui/components/auth/login-form.d.ts +0 -4
  9. package/console/dist/ui/components/auth/login-form.js +0 -142
  10. package/console/dist/ui/components/auth/splash-screen.d.ts +0 -9
  11. package/console/dist/ui/components/auth/splash-screen.js +0 -22
  12. package/console/dist/ui/components/error-boundary.d.ts +0 -15
  13. package/console/dist/ui/components/error-boundary.js +0 -30
  14. package/console/dist/ui/components/focus/daily-thought-card.d.ts +0 -1
  15. package/console/dist/ui/components/focus/daily-thought-card.js +0 -41
  16. package/console/dist/ui/components/language-switcher.d.ts +0 -2
  17. package/console/dist/ui/components/language-switcher.js +0 -17
  18. package/console/dist/ui/components/layout/app-sidebar.d.ts +0 -27
  19. package/console/dist/ui/components/layout/app-sidebar.js +0 -128
  20. package/console/dist/ui/components/layout/page-loading.d.ts +0 -13
  21. package/console/dist/ui/components/layout/page-loading.js +0 -14
  22. package/console/dist/ui/components/layout/page-shell.d.ts +0 -12
  23. package/console/dist/ui/components/layout/page-shell.js +0 -11
  24. package/console/dist/ui/components/layout/section-title.d.ts +0 -10
  25. package/console/dist/ui/components/layout/section-title.js +0 -9
  26. package/console/dist/ui/components/notifications/NotificationProvider.d.ts +0 -14
  27. package/console/dist/ui/components/notifications/NotificationProvider.js +0 -136
  28. package/console/dist/ui/components/notifications/favicon-badge.d.ts +0 -3
  29. package/console/dist/ui/components/notifications/favicon-badge.js +0 -68
  30. package/console/dist/ui/components/notifications/notification-reducer.d.ts +0 -9
  31. package/console/dist/ui/components/notifications/notification-reducer.js +0 -9
  32. package/console/dist/ui/components/notifications/sound-storage.d.ts +0 -3
  33. package/console/dist/ui/components/notifications/sound-storage.js +0 -37
  34. package/console/dist/ui/components/notifications/useNotifications.d.ts +0 -1
  35. package/console/dist/ui/components/notifications/useNotifications.js +0 -9
  36. package/console/dist/ui/components/onboarding/CircuitDiagram.d.ts +0 -8
  37. package/console/dist/ui/components/onboarding/CircuitDiagram.js +0 -18
  38. package/console/dist/ui/components/onboarding/DemoResultView.d.ts +0 -22
  39. package/console/dist/ui/components/onboarding/DemoResultView.js +0 -33
  40. package/console/dist/ui/components/onboarding/SlashCommandsCard.d.ts +0 -16
  41. package/console/dist/ui/components/onboarding/SlashCommandsCard.js +0 -20
  42. package/console/dist/ui/components/onboarding/slashCommands.d.ts +0 -20
  43. package/console/dist/ui/components/onboarding/slashCommands.js +0 -22
  44. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +0 -6
  45. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +0 -66
  46. package/console/dist/ui/components/theme-provider.d.ts +0 -14
  47. package/console/dist/ui/components/theme-provider.js +0 -40
  48. package/console/dist/ui/components/theme-toggle.d.ts +0 -2
  49. package/console/dist/ui/components/theme-toggle.js +0 -11
  50. package/console/dist/ui/components/ui/alert-dialog.d.ts +0 -20
  51. package/console/dist/ui/components/ui/alert-dialog.js +0 -26
  52. package/console/dist/ui/components/ui/badge.d.ts +0 -9
  53. package/console/dist/ui/components/ui/badge.js +0 -22
  54. package/console/dist/ui/components/ui/button.d.ts +0 -11
  55. package/console/dist/ui/components/ui/button.js +0 -34
  56. package/console/dist/ui/components/ui/card.d.ts +0 -8
  57. package/console/dist/ui/components/ui/card.js +0 -16
  58. package/console/dist/ui/components/ui/charts.d.ts +0 -51
  59. package/console/dist/ui/components/ui/charts.js +0 -72
  60. package/console/dist/ui/components/ui/dialog.d.ts +0 -19
  61. package/console/dist/ui/components/ui/dialog.js +0 -22
  62. package/console/dist/ui/components/ui/input.d.ts +0 -3
  63. package/console/dist/ui/components/ui/input.js +0 -8
  64. package/console/dist/ui/components/ui/markdown.d.ts +0 -24
  65. package/console/dist/ui/components/ui/markdown.js +0 -119
  66. package/console/dist/ui/components/ui/progress-bar.d.ts +0 -20
  67. package/console/dist/ui/components/ui/progress-bar.js +0 -38
  68. package/console/dist/ui/components/ui/select.d.ts +0 -13
  69. package/console/dist/ui/components/ui/select.js +0 -26
  70. package/console/dist/ui/components/ui/separator.d.ts +0 -3
  71. package/console/dist/ui/components/ui/separator.js +0 -6
  72. package/console/dist/ui/components/ui/sheet.d.ts +0 -25
  73. package/console/dist/ui/components/ui/sheet.js +0 -37
  74. package/console/dist/ui/components/ui/shiny-text.d.ts +0 -28
  75. package/console/dist/ui/components/ui/shiny-text.js +0 -46
  76. package/console/dist/ui/components/ui/skeleton.d.ts +0 -3
  77. package/console/dist/ui/components/ui/skeleton.js +0 -6
  78. package/console/dist/ui/components/ui/sonner.d.ts +0 -3
  79. package/console/dist/ui/components/ui/sonner.js +0 -13
  80. package/console/dist/ui/components/ui/tooltip.d.ts +0 -7
  81. package/console/dist/ui/components/ui/tooltip.js +0 -10
  82. package/console/dist/ui/data/daily-thoughts.d.ts +0 -15
  83. package/console/dist/ui/data/daily-thoughts.js +0 -164
  84. package/console/dist/ui/hooks/useNotificationSound.d.ts +0 -12
  85. package/console/dist/ui/hooks/useNotificationSound.js +0 -74
  86. package/console/dist/ui/i18n/en.json +0 -2399
  87. package/console/dist/ui/i18n/index.d.ts +0 -2
  88. package/console/dist/ui/i18n/index.js +0 -32
  89. package/console/dist/ui/i18n/zh-CN.json +0 -2399
  90. package/console/dist/ui/main.d.ts +0 -1
  91. package/console/dist/ui/main.js +0 -9
  92. package/console/dist/ui/pages/ReportProblemValidators.d.ts +0 -144
  93. package/console/dist/ui/pages/ReportProblemValidators.js +0 -418
  94. package/console/dist/ui/pages/activation/ActivationPage.d.ts +0 -1
  95. package/console/dist/ui/pages/activation/ActivationPage.js +0 -512
  96. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +0 -20
  97. package/console/dist/ui/pages/activation/ActivationValidators.js +0 -160
  98. package/console/dist/ui/pages/control-center/AgentCard.d.ts +0 -31
  99. package/console/dist/ui/pages/control-center/AgentCard.js +0 -212
  100. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +0 -26
  101. package/console/dist/ui/pages/control-center/AgentGroup.js +0 -38
  102. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +0 -1
  103. package/console/dist/ui/pages/control-center/ControlCenterPage.js +0 -509
  104. package/console/dist/ui/pages/control-center/DesignGatePanel.d.ts +0 -1
  105. package/console/dist/ui/pages/control-center/DesignGatePanel.js +0 -137
  106. package/console/dist/ui/pages/control-center/RuntimeProfileManager.d.ts +0 -31
  107. package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +0 -199
  108. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +0 -17
  109. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +0 -55
  110. package/console/dist/ui/pages/debt/DebtPage.d.ts +0 -2
  111. package/console/dist/ui/pages/debt/DebtPage.js +0 -222
  112. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +0 -2
  113. package/console/dist/ui/pages/design-system/DesignSystemPage.js +0 -30
  114. package/console/dist/ui/pages/examiner/ExaminerPage.d.ts +0 -15
  115. package/console/dist/ui/pages/examiner/ExaminerPage.js +0 -158
  116. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.d.ts +0 -1
  117. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +0 -421
  118. package/console/dist/ui/pages/focus/ApprovalSubjectReading.d.ts +0 -24
  119. package/console/dist/ui/pages/focus/ApprovalSubjectReading.js +0 -133
  120. package/console/dist/ui/pages/focus/FocusPage.d.ts +0 -123
  121. package/console/dist/ui/pages/focus/FocusPage.js +0 -567
  122. package/console/dist/ui/pages/focus/OwnerDecisionCard.d.ts +0 -9
  123. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +0 -111
  124. package/console/dist/ui/pages/focus/OwnerWorkbench.d.ts +0 -19
  125. package/console/dist/ui/pages/focus/OwnerWorkbench.js +0 -75
  126. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +0 -34
  127. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +0 -298
  128. package/console/dist/ui/pages/focus/focus-validation.d.ts +0 -40
  129. package/console/dist/ui/pages/focus/focus-validation.js +0 -211
  130. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +0 -67
  131. package/console/dist/ui/pages/intent/IntentOnboarding.js +0 -289
  132. package/console/dist/ui/pages/intent/IntentPage.d.ts +0 -1
  133. package/console/dist/ui/pages/intent/IntentPage.js +0 -252
  134. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +0 -59
  135. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +0 -125
  136. package/console/dist/ui/pages/pain/PainPage.d.ts +0 -1
  137. package/console/dist/ui/pages/pain/PainPage.js +0 -420
  138. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +0 -175
  139. package/console/dist/ui/pages/pain/pain-card-helpers.js +0 -181
  140. package/console/dist/ui/pages/principles/CorePrinciplesPage.d.ts +0 -10
  141. package/console/dist/ui/pages/principles/CorePrinciplesPage.js +0 -59
  142. package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +0 -60
  143. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +0 -602
  144. package/console/dist/ui/pages/principles/PrinciplesPage.d.ts +0 -1
  145. package/console/dist/ui/pages/principles/PrinciplesPage.js +0 -327
  146. package/console/dist/ui/pages/principles/PrinciplesViewNav.d.ts +0 -8
  147. package/console/dist/ui/pages/principles/PrinciplesViewNav.js +0 -15
  148. package/console/dist/ui/pages/report-problem/ReportProblemPage.d.ts +0 -1
  149. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +0 -467
  150. package/console/dist/ui/pages/settings/SettingsPage.d.ts +0 -4
  151. package/console/dist/ui/pages/settings/SettingsPage.js +0 -457
  152. package/console/dist/ui/pages/settings/UpdatePage.d.ts +0 -1
  153. package/console/dist/ui/pages/settings/UpdatePage.js +0 -215
  154. package/console/dist/ui/pages/welcome/WelcomePage.d.ts +0 -5
  155. package/console/dist/ui/pages/welcome/WelcomePage.js +0 -187
  156. package/console/dist/ui/utils/agent-metadata.d.ts +0 -71
  157. package/console/dist/ui/utils/agent-metadata.js +0 -284
  158. package/console/dist/ui/utils/approval-review.d.ts +0 -30
  159. package/console/dist/ui/utils/approval-review.js +0 -50
  160. package/console/dist/ui/utils/approval-warning-localization.d.ts +0 -34
  161. package/console/dist/ui/utils/approval-warning-localization.js +0 -148
  162. package/console/dist/ui/utils/attention-presentation.d.ts +0 -35
  163. package/console/dist/ui/utils/attention-presentation.js +0 -46
  164. package/console/dist/ui/utils/blocker-localization.d.ts +0 -23
  165. package/console/dist/ui/utils/blocker-localization.js +0 -36
  166. package/console/dist/ui/utils/control-center-helpers.d.ts +0 -79
  167. package/console/dist/ui/utils/control-center-helpers.js +0 -189
  168. package/console/dist/ui/utils/enum-labels.d.ts +0 -50
  169. package/console/dist/ui/utils/enum-labels.js +0 -171
  170. package/console/dist/ui/utils/format-date.d.ts +0 -11
  171. package/console/dist/ui/utils/format-date.js +0 -17
  172. package/console/dist/ui/utils/onboarding-state.d.ts +0 -25
  173. package/console/dist/ui/utils/onboarding-state.js +0 -77
  174. package/console/dist/ui/utils/reading-layout.d.ts +0 -20
  175. package/console/dist/ui/utils/reading-layout.js +0 -46
  176. package/console/dist/ui/utils/rule-binding-validators.d.ts +0 -13
  177. package/console/dist/ui/utils/rule-binding-validators.js +0 -188
  178. package/console/dist/ui/utils/runtime-mode.d.ts +0 -11
  179. package/console/dist/ui/utils/runtime-mode.js +0 -11
  180. package/console/dist/ui/utils/token-storage.d.ts +0 -22
  181. package/console/dist/ui/utils/token-storage.js +0 -47
  182. package/console/dist/ui/utils/validators.d.ts +0 -1178
  183. package/console/dist/ui/utils/validators.js +0 -3297
  184. package/release-manager/dist/bootstrap-entry.d.ts +0 -2
  185. package/release-manager/dist/bootstrap-entry.d.ts.map +0 -1
  186. package/release-manager/dist/bootstrap-entry.js.map +0 -1
  187. package/release-manager/dist/i18n.d.ts +0 -6
  188. package/release-manager/dist/i18n.d.ts.map +0 -1
  189. package/release-manager/dist/i18n.js.map +0 -1
  190. package/release-manager/dist/index.d.ts +0 -7
  191. package/release-manager/dist/index.d.ts.map +0 -1
  192. package/release-manager/dist/index.js +0 -656
  193. package/release-manager/dist/index.js.map +0 -1
  194. package/release-manager/dist/installer.d.ts +0 -629
  195. package/release-manager/dist/installer.d.ts.map +0 -1
  196. package/release-manager/dist/installer.js.map +0 -1
  197. package/release-manager/dist/installers/codex-host-installer.d.ts +0 -39
  198. package/release-manager/dist/installers/codex-host-installer.d.ts.map +0 -1
  199. package/release-manager/dist/installers/codex-host-installer.js.map +0 -1
  200. package/release-manager/dist/installers/index.d.ts +0 -51
  201. package/release-manager/dist/installers/index.d.ts.map +0 -1
  202. package/release-manager/dist/installers/index.js.map +0 -1
  203. package/release-manager/dist/installers/openclaw-host-installer.d.ts +0 -14
  204. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +0 -1
  205. package/release-manager/dist/installers/openclaw-host-installer.js.map +0 -1
  206. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +0 -335
  207. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +0 -1
  208. package/release-manager/dist/installers/workbuddy-host-installer.js.map +0 -1
  209. package/release-manager/dist/mvp-config.d.ts +0 -233
  210. package/release-manager/dist/mvp-config.d.ts.map +0 -1
  211. package/release-manager/dist/mvp-config.js.map +0 -1
  212. package/release-manager/dist/prompts.d.ts +0 -43
  213. package/release-manager/dist/prompts.d.ts.map +0 -1
  214. package/release-manager/dist/prompts.js +0 -268
  215. package/release-manager/dist/prompts.js.map +0 -1
  216. package/release-manager/dist/skill-language.d.ts +0 -32
  217. package/release-manager/dist/skill-language.d.ts.map +0 -1
  218. package/release-manager/dist/skill-language.js.map +0 -1
  219. package/release-manager/dist/uninstaller.d.ts +0 -68
  220. package/release-manager/dist/uninstaller.d.ts.map +0 -1
  221. package/release-manager/dist/uninstaller.js +0 -746
  222. package/release-manager/dist/uninstaller.js.map +0 -1
  223. package/release-manager/dist/update/apply-payload.d.ts +0 -143
  224. package/release-manager/dist/update/apply-payload.d.ts.map +0 -1
  225. package/release-manager/dist/update/apply-payload.js.map +0 -1
  226. package/release-manager/dist/update/atomic-file.d.ts +0 -35
  227. package/release-manager/dist/update/atomic-file.d.ts.map +0 -1
  228. package/release-manager/dist/update/atomic-file.js.map +0 -1
  229. package/release-manager/dist/update/bootstrap-executor.d.ts +0 -21
  230. package/release-manager/dist/update/bootstrap-executor.d.ts.map +0 -1
  231. package/release-manager/dist/update/bootstrap-executor.js.map +0 -1
  232. package/release-manager/dist/update/bootstrap-protocol.d.ts +0 -56
  233. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +0 -1
  234. package/release-manager/dist/update/bootstrap-protocol.js.map +0 -1
  235. package/release-manager/dist/update/channel-metadata.d.ts +0 -28
  236. package/release-manager/dist/update/channel-metadata.d.ts.map +0 -1
  237. package/release-manager/dist/update/channel-metadata.js.map +0 -1
  238. package/release-manager/dist/update/channel-promotion.d.ts +0 -39
  239. package/release-manager/dist/update/channel-promotion.d.ts.map +0 -1
  240. package/release-manager/dist/update/channel-promotion.js +0 -55
  241. package/release-manager/dist/update/channel-promotion.js.map +0 -1
  242. package/release-manager/dist/update/console-surface.d.ts +0 -19
  243. package/release-manager/dist/update/console-surface.d.ts.map +0 -1
  244. package/release-manager/dist/update/console-surface.js.map +0 -1
  245. package/release-manager/dist/update/data-compatibility.d.ts +0 -35
  246. package/release-manager/dist/update/data-compatibility.d.ts.map +0 -1
  247. package/release-manager/dist/update/data-compatibility.js +0 -45
  248. package/release-manager/dist/update/data-compatibility.js.map +0 -1
  249. package/release-manager/dist/update/install-layout.d.ts +0 -105
  250. package/release-manager/dist/update/install-layout.d.ts.map +0 -1
  251. package/release-manager/dist/update/install-layout.js.map +0 -1
  252. package/release-manager/dist/update/product-identity.d.ts +0 -70
  253. package/release-manager/dist/update/product-identity.d.ts.map +0 -1
  254. package/release-manager/dist/update/product-identity.js.map +0 -1
  255. package/release-manager/dist/update/release-asset-manifest.d.ts +0 -31
  256. package/release-manager/dist/update/release-asset-manifest.d.ts.map +0 -1
  257. package/release-manager/dist/update/release-asset-manifest.js.map +0 -1
  258. package/release-manager/dist/update/release-identity.d.ts +0 -33
  259. package/release-manager/dist/update/release-identity.d.ts.map +0 -1
  260. package/release-manager/dist/update/release-identity.js.map +0 -1
  261. package/release-manager/dist/update/release-manager-authority.d.ts +0 -39
  262. package/release-manager/dist/update/release-manager-authority.d.ts.map +0 -1
  263. package/release-manager/dist/update/release-manager-authority.js.map +0 -1
  264. package/release-manager/dist/update/release-manager.d.ts +0 -156
  265. package/release-manager/dist/update/release-manager.d.ts.map +0 -1
  266. package/release-manager/dist/update/release-manager.js.map +0 -1
  267. package/release-manager/dist/update/release-metadata-publisher.d.ts +0 -199
  268. package/release-manager/dist/update/release-metadata-publisher.d.ts.map +0 -1
  269. package/release-manager/dist/update/release-metadata-publisher.js +0 -478
  270. package/release-manager/dist/update/release-metadata-publisher.js.map +0 -1
  271. package/release-manager/dist/update/release-metadata-source.d.ts +0 -85
  272. package/release-manager/dist/update/release-metadata-source.d.ts.map +0 -1
  273. package/release-manager/dist/update/release-metadata-source.js.map +0 -1
  274. package/release-manager/dist/update/release-metadata.d.ts +0 -60
  275. package/release-manager/dist/update/release-metadata.d.ts.map +0 -1
  276. package/release-manager/dist/update/release-metadata.js.map +0 -1
  277. package/release-manager/dist/update/release-policy.d.ts +0 -51
  278. package/release-manager/dist/update/release-policy.d.ts.map +0 -1
  279. package/release-manager/dist/update/release-policy.js.map +0 -1
  280. package/release-manager/dist/update/rollback-policy.d.ts +0 -56
  281. package/release-manager/dist/update/rollback-policy.d.ts.map +0 -1
  282. package/release-manager/dist/update/rollback-policy.js +0 -61
  283. package/release-manager/dist/update/rollback-policy.js.map +0 -1
  284. package/release-manager/dist/update/transaction-journal.d.ts +0 -212
  285. package/release-manager/dist/update/transaction-journal.d.ts.map +0 -1
  286. package/release-manager/dist/update/transaction-journal.js.map +0 -1
  287. package/release-manager/dist/update/trust-metadata.d.ts +0 -55
  288. package/release-manager/dist/update/trust-metadata.d.ts.map +0 -1
  289. package/release-manager/dist/update/trust-metadata.js.map +0 -1
  290. package/release-manager/dist/update/trust-root-provisioning.d.ts +0 -99
  291. package/release-manager/dist/update/trust-root-provisioning.d.ts.map +0 -1
  292. package/release-manager/dist/update/trust-root-provisioning.js.map +0 -1
  293. package/release-manager/dist/update/update-history.d.ts +0 -46
  294. package/release-manager/dist/update/update-history.d.ts.map +0 -1
  295. package/release-manager/dist/update/update-history.js +0 -123
  296. package/release-manager/dist/update/update-history.js.map +0 -1
  297. package/release-manager/dist/utils/config-file-io.d.ts +0 -34
  298. package/release-manager/dist/utils/config-file-io.d.ts.map +0 -1
  299. package/release-manager/dist/utils/config-file-io.js.map +0 -1
  300. package/release-manager/dist/utils/env.d.ts +0 -94
  301. package/release-manager/dist/utils/env.d.ts.map +0 -1
  302. package/release-manager/dist/utils/env.js.map +0 -1
  303. package/release-manager/dist/utils/logger.d.ts +0 -15
  304. package/release-manager/dist/utils/logger.d.ts.map +0 -1
  305. package/release-manager/dist/utils/logger.js.map +0 -1
  306. package/release-manager/dist/utils/workspace-divergence.d.ts +0 -36
  307. package/release-manager/dist/utils/workspace-divergence.d.ts.map +0 -1
  308. package/release-manager/dist/utils/workspace-divergence.js.map +0 -1
@@ -1,160 +0,0 @@
1
- /**
2
- * Activation page validators — PRI-CR6
3
- *
4
- * Runtime validators for activation and lifecycle API responses.
5
- * All API responses are treated as `unknown` and validated with runtime type guards.
6
- * No `as` casts to bypass validation (ERR-001/005).
7
- * Required fields fail loud when missing or malformed (ERR-009/010).
8
- * Array elements validated individually (ERR-005/007).
9
- * `Object.hasOwn()` used for untrusted keys (ERR-013).
10
- * Degraded states include a reason (ERR-002).
11
- */
12
- // ── Type guard helpers ───────────────────────────────────────────────────────
13
- /** Type guard: is this a non-null object with own properties (not inherited)? */
14
- export function isRecord(value) {
15
- return typeof value === "object" && value !== null && !Array.isArray(value);
16
- }
17
- const VALID_ACTIVATION_STATUSES = new Set(["active", "inactive", "deactivated", "suspended_by_flag"]);
18
- // ── Activation validators ────────────────────────────────────────────────────
19
- export function validateActivationRecord(raw) {
20
- if (!isRecord(raw))
21
- return null;
22
- if (!Object.hasOwn(raw, "activationId") ||
23
- !Object.hasOwn(raw, "artifactId") ||
24
- !Object.hasOwn(raw, "principleId") ||
25
- !Object.hasOwn(raw, "channel") ||
26
- !Object.hasOwn(raw, "action") ||
27
- !Object.hasOwn(raw, "targetRef") ||
28
- !Object.hasOwn(raw, "activatedAt") ||
29
- !Object.hasOwn(raw, "status")) {
30
- return null;
31
- }
32
- const { activationId, artifactId, principleId, channel, action, targetRef, activatedAt, status } = raw;
33
- if (typeof activationId !== "string" ||
34
- activationId.length === 0 ||
35
- typeof artifactId !== "string" ||
36
- typeof principleId !== "string" ||
37
- typeof channel !== "string" ||
38
- typeof action !== "string" ||
39
- typeof targetRef !== "string" ||
40
- (activatedAt !== null && typeof activatedAt !== "string") ||
41
- typeof status !== "string" ||
42
- !VALID_ACTIVATION_STATUSES.has(status)) {
43
- return null;
44
- }
45
- // Narrow status from string to union type via const assertion
46
- const narrowStatus = status;
47
- return {
48
- activationId: activationId,
49
- artifactId: artifactId,
50
- principleId: principleId,
51
- channel: channel,
52
- action: action,
53
- targetRef: targetRef,
54
- activatedAt: activatedAt,
55
- status: narrowStatus,
56
- ...(Object.hasOwn(raw, "enforcement") && (raw.enforcement === "eligible" || raw.enforcement === "safety_isolated") ? { enforcement: raw.enforcement } : {}),
57
- ...(Object.hasOwn(raw, "legacyDecisionUnknown") && raw.legacyDecisionUnknown === true ? { legacyDecisionUnknown: true } : {}),
58
- ...(Object.hasOwn(raw, "ownerReviewDueAt") && typeof raw.ownerReviewDueAt === "string" ? { ownerReviewDueAt: raw.ownerReviewDueAt } : {}),
59
- };
60
- }
61
- export function validateActivationsData(raw) {
62
- if (!isRecord(raw))
63
- return null;
64
- if (!Object.hasOwn(raw, "activations") || !Object.hasOwn(raw, "status")) {
65
- return null;
66
- }
67
- const { activations, status } = raw;
68
- if (!Array.isArray(activations) || typeof status !== "string") {
69
- return null;
70
- }
71
- // Fail loud: any invalid record rejects the entire payload (ERR-009)
72
- const validatedRecords = [];
73
- for (const record of activations) {
74
- const validated = validateActivationRecord(record);
75
- if (validated === null)
76
- return null;
77
- validatedRecords.push(validated);
78
- }
79
- const result = { activations: validatedRecords, status };
80
- if (Object.hasOwn(raw, "reason") && typeof raw.reason === "string")
81
- result.reason = raw.reason;
82
- if (Object.hasOwn(raw, "nextAction") && typeof raw.nextAction === "string")
83
- result.nextAction = raw.nextAction;
84
- return result;
85
- }
86
- // ── Lifecycle validators ─────────────────────────────────────────────────────
87
- export function validateLifecycleRuleMetric(raw) {
88
- if (!isRecord(raw))
89
- return null;
90
- if (!Object.hasOwn(raw, "ruleId") ||
91
- !Object.hasOwn(raw, "triggered") ||
92
- !Object.hasOwn(raw, "lastTriggeredAt")) {
93
- return null;
94
- }
95
- const { ruleId, triggered, lastTriggeredAt } = raw;
96
- if (typeof ruleId !== "string" ||
97
- typeof triggered !== "number" ||
98
- (lastTriggeredAt !== null && typeof lastTriggeredAt !== "string")) {
99
- return null;
100
- }
101
- return {
102
- ruleId,
103
- triggered,
104
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TS cannot narrow from Record<string, unknown> without assertion
105
- lastTriggeredAt: lastTriggeredAt,
106
- };
107
- }
108
- export function validateLifecycleAdherence(raw) {
109
- if (!isRecord(raw))
110
- return null;
111
- if (!Object.hasOwn(raw, "insufficientData") ||
112
- !Object.hasOwn(raw, "rate") ||
113
- !Object.hasOwn(raw, "note")) {
114
- return null;
115
- }
116
- const { insufficientData, rate, note } = raw;
117
- if (typeof insufficientData !== "boolean" ||
118
- (rate !== null && typeof rate !== "number") ||
119
- typeof note !== "string") {
120
- return null;
121
- }
122
- return {
123
- insufficientData,
124
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- TS cannot narrow from Record<string, unknown> without assertion
125
- rate: rate,
126
- note,
127
- };
128
- }
129
- export function validateLifecycleMetricsData(raw) {
130
- if (!isRecord(raw))
131
- return null;
132
- if (!Object.hasOwn(raw, "principleId") ||
133
- !Object.hasOwn(raw, "adherence") ||
134
- !Object.hasOwn(raw, "ruleMetrics")) {
135
- return null;
136
- }
137
- const { principleId, adherence, ruleMetrics } = raw;
138
- if (typeof principleId !== "string" || !Array.isArray(ruleMetrics)) {
139
- return null;
140
- }
141
- const validatedAdherence = validateLifecycleAdherence(adherence);
142
- if (validatedAdherence === null)
143
- return null;
144
- const validatedRules = [];
145
- for (const r of ruleMetrics) {
146
- const validated = validateLifecycleRuleMetric(r);
147
- if (validated === null)
148
- return null;
149
- validatedRules.push(validated);
150
- }
151
- return {
152
- principleId,
153
- adherence: validatedAdherence,
154
- ruleMetrics: validatedRules,
155
- };
156
- }
157
- // ── Channel helpers ──────────────────────────────────────────────────────────
158
- export function isReversibleChannel(channel) {
159
- return channel === "prompt" || channel === "defer_archive";
160
- }
@@ -1,31 +0,0 @@
1
- import type { AgentMeta } from "../../utils/agent-metadata.js";
2
- import type { RedactedAgentSummary, RedactedRuntimeProfileSummary } from "../../api.js";
3
- /**
4
- * AgentCard — 三层渐进式披露代理卡片 + 核心代理内联确认
5
- *
6
- * L1(折叠态):状态点 + 显示名 + agent.name + 角色一句话 + 开关 + 展开箭头
7
- * L2(展开态):详细说明段落 + impact-box + 技术细节 toggle + profile-row
8
- * L3(嵌套折叠):技术细节 grid
9
- *
10
- * 核心代理(isCore=true)关闭时显示内联确认条(不弹模态)。
11
- *
12
- * rc 合规:
13
- * - rc-1: agent/profiles 由父组件已验证;meta 是静态数据
14
- * - rc-2: 无 as 绕过
15
- * - rc-8: 无 JSON 序列化
16
- *
17
- * 品牌约束(PRI-CR1 B.4.4):
18
- * - 禁止 translateY / scale hover(rotate 仅用于箭头朝向,允许)
19
- * - 无硬编码十六进制色值
20
- */
21
- export type AgentLocale = "zh-CN" | "en";
22
- interface AgentCardProps {
23
- agent: RedactedAgentSummary;
24
- meta: AgentMeta;
25
- profiles: RedactedRuntimeProfileSummary[];
26
- onBindingChange: (agentName: string, runtimeProfile: string, enabled: boolean) => void;
27
- saving: string | null;
28
- locale: AgentLocale;
29
- }
30
- export declare function AgentCard({ agent, meta, profiles, onBindingChange, saving, locale, }: AgentCardProps): import("react").JSX.Element;
31
- export {};
@@ -1,212 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { useNavigate } from "react-router-dom";
5
- import { ChevronRight } from "lucide-react";
6
- import { cn } from "../../../lib/utils.js";
7
- import { fetchAgentReadiness } from "../../api.js";
8
- /** 状态点样式:ready / notready / off
9
- *
10
- * 接受 readiness + enabled 而非整个 agent 对象,以便 L1 状态点可以使用
11
- * 动态获取的 readiness(fetchAgentReadiness)替换静态悲观值。
12
- */
13
- function statusDotClasses(readiness, enabled) {
14
- const base = "w-2 h-2 rounded-full border-2 shrink-0";
15
- if (!enabled) {
16
- return cn(base, "border-ink-4 bg-surface opacity-50");
17
- }
18
- switch (readiness) {
19
- case "ready":
20
- return cn(base, "border-green bg-green");
21
- case "not_ready":
22
- return cn(base, "border-amber bg-surface");
23
- case "needs_setup":
24
- return cn(base, "border-amber bg-surface");
25
- default:
26
- return cn(base, "border-ink-4 bg-surface");
27
- }
28
- }
29
- /** impact-box 左边框色 */
30
- function impactBorderClass(level) {
31
- switch (level) {
32
- case "danger":
33
- return "border-l-danger";
34
- case "green":
35
- return "border-l-green";
36
- default:
37
- return "border-l-amber";
38
- }
39
- }
40
- /** impact label 色 */
41
- function impactLabelClass(level) {
42
- switch (level) {
43
- case "danger":
44
- return "text-danger";
45
- case "green":
46
- return "text-green";
47
- default:
48
- return "text-ink-4";
49
- }
50
- }
51
- /**
52
- * 渲染含反引号 code 片段的文本。
53
- * 输入示例:'`DiagnosticianContextPayload`(pain 信号上下文)'
54
- * 输出:[<code>DiagnosticianContextPayload</code>, "(pain 信号上下文)"]
55
- */
56
- function renderTextWithCode(text) {
57
- const parts = text.split("`");
58
- const nodes = [];
59
- for (let i = 0; i < parts.length; i++) {
60
- const part = parts[i];
61
- if (part === undefined)
62
- continue;
63
- if (i % 2 === 0) {
64
- if (part.length > 0) {
65
- nodes.push(part);
66
- }
67
- }
68
- else {
69
- // Odd index = content between backticks = code
70
- nodes.push(_jsx("code", { className: "font-mono text-[11px] text-ink-2 bg-paper-2 px-[5px] py-[1px] rounded-[2px]", children: part }, `code-${i}`));
71
- }
72
- }
73
- return nodes;
74
- }
75
- export function AgentCard({ agent, meta, profiles, onBindingChange, saving, locale, }) {
76
- const { t } = useTranslation();
77
- const navigate = useNavigate();
78
- const isSaving = saving === agent.name;
79
- // L2 / L3 / confirm 状态
80
- const [isOpen, setIsOpen] = useState(false);
81
- const [showTechDetail, setShowTechDetail] = useState(false);
82
- const [confirming, setConfirming] = useState(false);
83
- // 动态 readiness:L2 展开时,若静态 readiness 为 'unknown'(悲观值),
84
- // 调用 /api/v1/config/readiness/:agentName 获取实时探测结果替换静态值。
85
- // 仅在 agent.enabled && agent.readiness === 'unknown' 时发起请求。
86
- const [dynamicReadiness, setDynamicReadiness] = useState(null);
87
- const [readinessLoading, setReadinessLoading] = useState(false);
88
- const [readinessFetched, setReadinessFetched] = useState(false);
89
- useEffect(() => {
90
- if (!isOpen)
91
- return;
92
- if (readinessFetched)
93
- return;
94
- if (!agent.enabled)
95
- return;
96
- if (agent.readiness !== "unknown")
97
- return;
98
- let cancelled = false;
99
- setReadinessFetched(true);
100
- setReadinessLoading(true);
101
- fetchAgentReadiness(agent.name).then((result) => {
102
- if (cancelled)
103
- return;
104
- setReadinessLoading(false);
105
- if (result.success && result.data) {
106
- setDynamicReadiness(result.data.readiness);
107
- }
108
- // rc-9: 调用失败时不静默吞错——result.error 已由 request() 提取;
109
- // 此处 fallback 到静态 agent.readiness('unknown'),状态点保持 amber。
110
- // loading 指示器消失即告知用户探测已结束但未获得确定结果。
111
- });
112
- return () => {
113
- cancelled = true;
114
- };
115
- }, [isOpen, readinessFetched, agent.enabled, agent.readiness, agent.name]);
116
- // 有效 readiness:静态值为 'unknown' 且已获取动态值时使用动态值;
117
- // 否则使用静态值(父组件 re-fetch 后若不再是 'unknown' 则自动优先)。
118
- const effectiveReadiness = agent.readiness === "unknown" && dynamicReadiness !== null
119
- ? dynamicReadiness
120
- : agent.readiness;
121
- // locale 决定取 Zh 还是 En 字段
122
- const isZh = locale === "zh-CN";
123
- const displayName = isZh ? meta.displayNameZh : meta.displayNameEn;
124
- const role = isZh ? meta.roleZh : meta.roleEn;
125
- const detail = isZh ? meta.detailZh : meta.detailEn;
126
- const impact = isZh ? meta.impactZh : meta.impactEn;
127
- const techDetail = isZh ? meta.techDetailZh : meta.techDetailEn;
128
- const mvpNote = isZh ? meta.mvpNoteZh : meta.mvpNoteEn;
129
- const actionLinkText = isZh ? meta.action?.linkTextZh : meta.action?.linkTextEn;
130
- // 段落用 \n\n 分隔
131
- const detailParagraphs = detail.split("\n\n").filter((p) => p.length > 0);
132
- // 头部点击:toggle isOpen(但点击 toggle 按钮 / confirm-bar / tech-toggle / action-row 不触发)
133
- const handleHeadClick = (e) => {
134
- const target = e.target;
135
- if (target.closest("[data-agent-toggle]") ||
136
- target.closest("[data-confirm-bar]") ||
137
- target.closest("[data-tech-toggle]") ||
138
- target.closest("[data-action-row]")) {
139
- return;
140
- }
141
- setIsOpen((prev) => !prev);
142
- };
143
- // toggle 按钮点击
144
- const handleToggleClick = (e) => {
145
- e.stopPropagation();
146
- if (agent.enabled) {
147
- // 当前 on → 要关
148
- if (meta.isCore) {
149
- // 核心代理:显示内联确认 + 自动展开
150
- setConfirming(true);
151
- setIsOpen(true);
152
- }
153
- else {
154
- // 非核心代理:直接关
155
- onBindingChange(agent.name, agent.runtimeProfileId, false);
156
- }
157
- }
158
- else {
159
- // 当前 off → 要开
160
- onBindingChange(agent.name, agent.runtimeProfileId, true);
161
- }
162
- };
163
- // 确认停用
164
- const handleConfirmOff = (e) => {
165
- e.stopPropagation();
166
- onBindingChange(agent.name, agent.runtimeProfileId, false);
167
- setConfirming(false);
168
- };
169
- // 取消确认
170
- const handleCancelConfirm = (e) => {
171
- e.stopPropagation();
172
- setConfirming(false);
173
- };
174
- // tech-toggle 点击
175
- const handleTechToggleClick = (e) => {
176
- e.stopPropagation();
177
- setShowTechDetail((prev) => !prev);
178
- };
179
- // profile select 变更
180
- const handleProfileChange = (e) => {
181
- onBindingChange(agent.name, e.target.value, agent.enabled);
182
- };
183
- return (_jsxs("div", { "data-agent-card": agent.name, className: cn("bg-surface border border-line-2 rounded-[4px] mb-[6px] overflow-hidden transition-colors hover:border-line", !meta.isCore && "border-dashed", !agent.enabled && "opacity-72"), children: [_jsxs("div", { className: "px-[16px] py-[12px] cursor-pointer flex items-center gap-[12px]", onClick: handleHeadClick, role: "button", tabIndex: 0, "aria-expanded": isOpen, onKeyDown: (e) => {
184
- if (e.key === "Enter" || e.key === " ") {
185
- e.preventDefault();
186
- setIsOpen((prev) => !prev);
187
- }
188
- }, children: [_jsx("div", { className: statusDotClasses(effectiveReadiness, agent.enabled), "aria-hidden": "true" }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: cn("text-[14px] font-semibold tracking-[-0.005em] flex items-center gap-[8px]", agent.enabled ? "text-ink" : "text-ink-3"), children: [_jsx("span", { children: displayName }), _jsx("span", { className: "font-mono text-[11.5px] text-ink-4 font-normal", children: agent.name })] }), _jsx("div", { className: "text-[12.5px] text-ink-3 mt-[2px] leading-[1.5]", children: role })] }), _jsx("button", { type: "button", "data-agent-toggle": true, onClick: handleToggleClick, disabled: isSaving, "aria-label": agent.enabled
189
- ? t("pages.controlCenter.agentDisabled")
190
- : t("pages.controlCenter.agentEnabled"), className: cn("rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium transition-colors disabled:opacity-50", agent.enabled
191
- ? "border border-gov bg-gov text-paper hover:bg-gov-2"
192
- : "border border-line bg-surface text-ink hover:border-line-2"), children: isSaving
193
- ? t("pages.controlCenter.saving")
194
- : agent.enabled
195
- ? t("pages.controlCenter.on")
196
- : t("pages.controlCenter.off") }), _jsx(ChevronRight, { className: cn("w-[14px] h-[14px] text-ink-4 transition-transform shrink-0", isOpen && "rotate-90"), "aria-hidden": "true" })] }), isOpen && (_jsxs("div", { className: "px-[16px] pb-[14px] border-t border-line-2 bg-panel", children: [_jsx("div", { className: "pt-[14px] text-[13px] text-ink-3 leading-[1.62]", children: detailParagraphs.map((para, i) => (_jsx("p", { className: i > 0 ? "mt-2" : undefined, children: renderTextWithCode(para) }, i))) }), mvpNote && (_jsx("div", { className: "mt-3 text-[12px] text-ink-4 font-mono italic", children: mvpNote })), _jsxs("div", { className: cn("mt-[12px] px-[12px] py-[10px] border border-line-2 border-l-[2.5px] rounded-[4px] bg-paper-2 text-[12.5px] text-ink-3 leading-[1.55]", impactBorderClass(meta.impactLevel)), children: [_jsx("span", { className: cn("block mb-[3px] text-[10px] font-mono uppercase tracking-[0.08em] font-medium", impactLabelClass(meta.impactLevel)), children: t("pages.controlCenter.impact.label") }), impact] }), meta.action && actionLinkText && (_jsx("div", { "data-action-row": true, className: "mt-[12px] pt-[12px] border-t border-line-2", children: _jsxs("button", { type: "button", onClick: (e) => {
197
- e.stopPropagation();
198
- navigate(meta.action.to);
199
- }, className: "flex items-center gap-[6px] text-[12px] text-gov hover:text-gov-2 transition-colors font-medium", children: [_jsx("span", { children: actionLinkText }), _jsx(ChevronRight, { className: "w-[12px] h-[12px]", "aria-hidden": "true" })] }) })), Object.keys(techDetail).length > 0 && (_jsxs(_Fragment, { children: [_jsxs("div", { "data-tech-toggle": true, className: "mt-[12px] pt-[12px] border-t border-line-2 flex items-center gap-[6px] cursor-pointer text-[11px] text-ink-4 font-mono uppercase tracking-[0.04em] hover:text-ink-2 transition-colors", onClick: handleTechToggleClick, role: "button", tabIndex: 0, "aria-expanded": showTechDetail, onKeyDown: (e) => {
200
- if (e.key === "Enter" || e.key === " ") {
201
- e.preventDefault();
202
- e.stopPropagation();
203
- setShowTechDetail((prev) => !prev);
204
- }
205
- }, children: [_jsx(ChevronRight, { className: cn("w-[12px] h-[12px] transition-transform", showTechDetail && "rotate-90"), "aria-hidden": "true" }), t("pages.controlCenter.techDetail")] }), showTechDetail && (_jsx("div", { className: "mt-2 grid grid-cols-[72px_1fr] gap-x-[14px] gap-y-[6px] text-[12px] leading-[1.55]", children: Object.entries(techDetail).map(([k, v]) => (_jsxs("div", { className: "contents", children: [_jsx("div", { className: "text-ink-4 font-mono text-[10.5px] uppercase tracking-[0.04em] pt-px", children: k }), _jsx("div", { className: "text-ink-3", children: renderTextWithCode(v) })] }, k))) }))] })), _jsxs("div", { className: "mt-[12px] pt-[12px] border-t border-line-2 flex items-center gap-[10px] text-[12px] flex-wrap", children: [_jsx("span", { className: "text-ink-4 font-mono text-[10.5px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.profileLabelShort") }), _jsx("select", { value: agent.runtimeProfileId, onChange: handleProfileChange, disabled: isSaving, className: "font-mono text-[11px] text-ink-2 bg-surface border border-line-2 rounded-[3px] px-2 py-1 cursor-pointer focus:outline-none focus:border-gov disabled:opacity-50", "aria-label": t("pages.controlCenter.profileLabel"), children: profiles.map((p) => (_jsx("option", { value: p.id, children: p.label }, p.id))) }), readinessLoading && (_jsx("span", { className: "text-[10.5px] text-ink-4 font-mono animate-pulse", children: t("pages.controlCenter.readinessChecking") })), _jsx("button", { type: "button", "data-manage-profiles": true, onClick: (e) => {
206
- e.stopPropagation();
207
- const el = document.getElementById("runtime-profile-manager");
208
- if (el) {
209
- el.scrollIntoView({ behavior: "smooth", block: "start" });
210
- }
211
- }, className: "ml-auto text-[11px] text-ink-4 hover:text-ink-2 transition-colors px-[8px] py-[3px] border border-line-2 rounded-[3px] focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "aria-label": t("pages.controlCenter.manageProfiles"), children: t("pages.controlCenter.manageProfiles") })] }), confirming && (_jsxs("div", { "data-confirm-bar": true, className: "mt-[10px] px-[12px] py-[10px] border border-danger rounded-[4px] bg-danger/10 text-[12px] text-ink-2 leading-[1.55]", children: [_jsx("div", { children: impact }), _jsxs("div", { className: "mt-2 flex gap-[8px]", children: [_jsx("button", { type: "button", onClick: handleConfirmOff, className: "text-[11.5px] px-[12px] py-[4px] rounded-[3px] border border-transparent bg-danger text-paper font-medium hover:opacity-90 transition-opacity focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.controlCenter.impact.confirmAck") }), _jsx("button", { type: "button", onClick: handleCancelConfirm, className: "text-[11.5px] px-[12px] py-[4px] rounded-[3px] border border-line bg-transparent text-ink-3 hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.controlCenter.impact.confirmCancel") })] })] }))] }))] }));
212
- }
@@ -1,26 +0,0 @@
1
- import { type AgentGroupMeta } from "../../utils/agent-metadata.js";
2
- import type { RedactedAgentSummary, RedactedRuntimeProfileSummary } from "../../api.js";
3
- import { type AgentLocale } from "./AgentCard.js";
4
- /**
5
- * AgentGroup — 依赖分组容器
6
- *
7
- * 渲染 group header(名称 + 标签 + 提示)+ 该组所有 AgentCard。
8
- * 标签样式按 GroupTag(must/recommend/optional/independent)区分。
9
- *
10
- * rc 合规:
11
- * - rc-2/rc-5: 父组件已用 groupAgentsByDependency 过滤未知代理,本组件用
12
- * isKnownAgentName 类型守卫二次校验 agent.name 后取 meta(防御性,不静默)
13
- * - rc-9: 若 agents 为空数组,渲染 group header 但显示空状态提示
14
- *
15
- * 品牌约束:无 translateY / scale hover,无硬编码色值
16
- */
17
- interface AgentGroupProps {
18
- groupMeta: AgentGroupMeta;
19
- agents: RedactedAgentSummary[];
20
- profiles: RedactedRuntimeProfileSummary[];
21
- onBindingChange: (agentName: string, runtimeProfile: string, enabled: boolean) => void;
22
- saving: string | null;
23
- locale: AgentLocale;
24
- }
25
- export declare function AgentGroup({ groupMeta, agents, profiles, onBindingChange, saving, locale, }: AgentGroupProps): import("react").JSX.Element;
26
- export {};
@@ -1,38 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useTranslation } from "react-i18next";
3
- import { cn } from "../../../lib/utils.js";
4
- import { AGENT_METADATA, } from "../../utils/agent-metadata.js";
5
- import { isKnownAgentName } from "../../utils/control-center-helpers.js";
6
- import { AgentCard } from "./AgentCard.js";
7
- /** gtag 样式按 GroupTag 区分 */
8
- function gtagClasses(tag) {
9
- const base = "text-[10px] font-mono px-[7px] py-[2px] rounded-[2px] tracking-[0.02em] font-medium border border-transparent";
10
- switch (tag) {
11
- case "must":
12
- return cn(base, "bg-danger/10 text-danger border-danger/22");
13
- case "recommend":
14
- return cn(base, "bg-amber/10 text-amber border-amber/22");
15
- case "optional":
16
- return cn(base, "bg-paper-2 text-ink-4 border-line-2");
17
- case "independent":
18
- return cn(base, "bg-green/10 text-green border-green/22");
19
- default:
20
- return base;
21
- }
22
- }
23
- export function AgentGroup({ groupMeta, agents, profiles, onBindingChange, saving, locale, }) {
24
- const { t } = useTranslation();
25
- const isZh = locale === "zh-CN";
26
- const groupName = isZh ? groupMeta.labelZh : groupMeta.labelEn;
27
- const groupTagLabel = isZh ? groupMeta.tagLabelZh : groupMeta.tagLabelEn;
28
- const groupHint = isZh ? groupMeta.hintZh : groupMeta.hintEn;
29
- // rc-2/rc-5: 先用类型守卫缩窄 agent.name,避免 as 绕过;
30
- // 空状态判断基于过滤后的 knownAgents,避免"全部未知时仍渲染 group header 但无卡片"
31
- // 用对象级类型谓词让 TS 在后续 map 中正确缩窄 agent.name(Array.filter 对
32
- // 子属性的 string 谓词不会传播到元素类型)
33
- const knownAgents = agents.filter((agent) => isKnownAgentName(agent.name));
34
- return (_jsxs("div", { className: "mb-[20px]", children: [_jsxs("div", { className: "px-[14px] py-[9px] bg-paper-2 border border-line-2 rounded-[4px] flex items-center gap-[10px] mb-[8px]", children: [_jsx("span", { className: "text-[12.5px] font-semibold text-ink-2", children: groupName }), _jsx("span", { className: gtagClasses(groupMeta.tag), children: groupTagLabel }), _jsx("span", { className: "ml-auto text-[11px] text-ink-4 font-mono leading-[1.4] max-w-[32ch] text-right", children: groupHint })] }), knownAgents.length === 0 ? (_jsx("div", { className: "py-2 px-4 text-[12.5px] text-ink-4 italic", children: "\u2014" })) : (knownAgents.map((agent) => {
35
- const meta = AGENT_METADATA[agent.name];
36
- return (_jsx(AgentCard, { agent: agent, meta: meta, profiles: profiles, onBindingChange: onBindingChange, saving: saving, locale: locale }, agent.name));
37
- }))] }));
38
- }
@@ -1 +0,0 @@
1
- export declare function ControlCenterPage(): import("react").JSX.Element;