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,509 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect, useCallback } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { toast } from "sonner";
5
- import { PageShell } from "../../components/layout/page-shell.js";
6
- import { PageLoading } from "../../components/layout/page-loading.js";
7
- import { SectionTitle } from "../../components/layout/section-title.js";
8
- import { fetchConfigSummary, fetchConfigCatalog, updateAgentBinding, updateDefaultRuntime, } from "../../api.js";
9
- import { computeOverallReadiness, groupAgentsByReadiness, groupAgentsByDependency, isKnownAgentName, redactDiagnosticsForCopy, } from "../../utils/control-center-helpers.js";
10
- import { enumLabel } from "../../utils/enum-labels.js";
11
- import { WorkflowDiagram } from "./WorkflowDiagram.js";
12
- import { AgentGroup } from "./AgentGroup.js";
13
- import { RuntimeProfileManager } from "./RuntimeProfileManager.js";
14
- import { DesignGatePanel } from "./DesignGatePanel.js";
15
- import { AGENT_GROUPS, AGENT_METADATA, } from "../../utils/agent-metadata.js";
16
- // ── Runtime validators (H section / ERR-001/005/009/013) ─────────────────────
17
- function validateSource(raw) {
18
- if (typeof raw !== "string")
19
- return null;
20
- switch (raw) {
21
- case "defaults": return "defaults";
22
- case "user_config": return "user_config";
23
- default: return null;
24
- }
25
- }
26
- /** Type guard: is this a non-null object with own properties (not inherited)? */
27
- function isRecord(value) {
28
- return typeof value === "object" && value !== null && !Array.isArray(value);
29
- }
30
- // Overall readiness → the plain-language sentence shown under the internal-agents heading.
31
- const CONFIG_READINESS_KEY = {
32
- ready: "pages.controlCenter.configReady",
33
- needs_setup: "pages.controlCenter.configNeedsSetup",
34
- not_ready: "pages.controlCenter.configNotReady",
35
- unknown: "pages.controlCenter.configUnknown",
36
- disabled: "pages.controlCenter.configDisabled",
37
- };
38
- function validateReadinessStatus(raw) {
39
- if (typeof raw !== "string")
40
- return null;
41
- switch (raw) {
42
- case "ready": return "ready";
43
- case "not_ready": return "not_ready";
44
- case "needs_setup": return "needs_setup";
45
- case "disabled": return "disabled";
46
- case "unknown": return "unknown";
47
- default: return null;
48
- }
49
- }
50
- function validateRedactedFeatureSummary(raw) {
51
- if (!isRecord(raw))
52
- return null;
53
- if (!Object.hasOwn(raw, "id") ||
54
- !Object.hasOwn(raw, "category") ||
55
- !Object.hasOwn(raw, "enabled")) {
56
- return null;
57
- }
58
- const id = raw.id;
59
- const category = raw.category;
60
- const enabled = raw.enabled;
61
- if (typeof id !== "string" ||
62
- id.length === 0 ||
63
- typeof category !== "string" ||
64
- typeof enabled !== "boolean") {
65
- return null;
66
- }
67
- return { id, category, enabled };
68
- }
69
- function validateRedactedRuntimeProfileSummary(raw) {
70
- if (!isRecord(raw))
71
- return null;
72
- if (!Object.hasOwn(raw, "id") ||
73
- !Object.hasOwn(raw, "type") ||
74
- !Object.hasOwn(raw, "label") ||
75
- !Object.hasOwn(raw, "readiness")) {
76
- return null;
77
- }
78
- const id = raw.id;
79
- const type = raw.type;
80
- const label = raw.label;
81
- const readiness = validateReadinessStatus(raw.readiness);
82
- if (typeof id !== "string" ||
83
- id.length === 0 ||
84
- typeof type !== "string" ||
85
- typeof label !== "string" ||
86
- readiness === null) {
87
- return null;
88
- }
89
- const apiKeyEnv = Object.hasOwn(raw, "apiKeyEnv") && typeof raw.apiKeyEnv === "string"
90
- ? raw.apiKeyEnv
91
- : undefined;
92
- // provider/model are optional (set by backend redactPdConfig for both
93
- // pi-ai and openclaw profiles). Aligns with
94
- // the canonical validator in validators.ts (EP-01: validate fields that
95
- // actually exist in the target type).
96
- const provider = Object.hasOwn(raw, "provider") && typeof raw.provider === "string"
97
- ? raw.provider
98
- : undefined;
99
- const model = Object.hasOwn(raw, "model") && typeof raw.model === "string"
100
- ? raw.model
101
- : undefined;
102
- return { id, type, label, apiKeyEnv, provider, model, readiness };
103
- }
104
- function validateRedactedAgentSummary(raw) {
105
- if (!isRecord(raw))
106
- return null;
107
- if (!Object.hasOwn(raw, "name") ||
108
- !Object.hasOwn(raw, "enabled") ||
109
- !Object.hasOwn(raw, "runtimeProfileId") ||
110
- !Object.hasOwn(raw, "runtimeProfileLabel") ||
111
- !Object.hasOwn(raw, "readiness")) {
112
- return null;
113
- }
114
- const name = raw.name;
115
- const enabled = raw.enabled;
116
- const runtimeProfileId = raw.runtimeProfileId;
117
- const runtimeProfileLabel = raw.runtimeProfileLabel;
118
- const readiness = validateReadinessStatus(raw.readiness);
119
- if (typeof name !== "string" ||
120
- name.length === 0 ||
121
- typeof enabled !== "boolean" ||
122
- typeof runtimeProfileId !== "string" ||
123
- typeof runtimeProfileLabel !== "string" ||
124
- readiness === null) {
125
- return null;
126
- }
127
- return { name, enabled, runtimeProfileId, runtimeProfileLabel, readiness };
128
- }
129
- function validateConfigError(raw) {
130
- if (!isRecord(raw))
131
- return null;
132
- if (!Object.hasOwn(raw, "path") ||
133
- !Object.hasOwn(raw, "reason") ||
134
- !Object.hasOwn(raw, "nextAction")) {
135
- return null;
136
- }
137
- const path = raw.path;
138
- const reason = raw.reason;
139
- const nextAction = raw.nextAction;
140
- if (typeof path !== "string" ||
141
- typeof reason !== "string" ||
142
- typeof nextAction !== "string") {
143
- return null;
144
- }
145
- return { path, reason, nextAction };
146
- }
147
- function validateConfigSummaryData(raw) {
148
- if (!isRecord(raw))
149
- return null;
150
- // Required fields check (ERR-009: fail loud on missing required fields)
151
- if (!Object.hasOwn(raw, "version") ||
152
- !Object.hasOwn(raw, "source") ||
153
- !Object.hasOwn(raw, "features") ||
154
- !Object.hasOwn(raw, "runtimeProfiles") ||
155
- !Object.hasOwn(raw, "defaultRuntime") ||
156
- !Object.hasOwn(raw, "agents") ||
157
- !Object.hasOwn(raw, "ui") ||
158
- !Object.hasOwn(raw, "warnings")) {
159
- return null;
160
- }
161
- const version = raw.version;
162
- const source = raw.source;
163
- const features = raw.features;
164
- const runtimeProfiles = raw.runtimeProfiles;
165
- const defaultRuntime = raw.defaultRuntime;
166
- const agents = raw.agents;
167
- const ui = raw.ui;
168
- const warnings = raw.warnings;
169
- if (typeof version !== "number" ||
170
- typeof source !== "string" ||
171
- validateSource(source) === null ||
172
- !Array.isArray(features) ||
173
- !Array.isArray(runtimeProfiles) ||
174
- typeof defaultRuntime !== "string" ||
175
- !Array.isArray(agents) ||
176
- !isRecord(ui) ||
177
- !Array.isArray(warnings)) {
178
- return null;
179
- }
180
- // Validate ui.diagnostics (ERR-009)
181
- if (!Object.hasOwn(ui, "diagnostics") ||
182
- !isRecord(ui.diagnostics)) {
183
- return null;
184
- }
185
- const uiDiag = ui.diagnostics;
186
- if (!Object.hasOwn(uiDiag, "mode") || typeof uiDiag.mode !== "string") {
187
- return null;
188
- }
189
- const uiDiagMode = uiDiag.mode;
190
- // Validate features array elements (ERR-005/ERR-007)
191
- const validatedFeatures = [];
192
- for (const f of features) {
193
- const validated = validateRedactedFeatureSummary(f);
194
- if (validated === null)
195
- return null;
196
- validatedFeatures.push(validated);
197
- }
198
- // Validate runtime profiles array elements
199
- const validatedProfiles = [];
200
- for (const p of runtimeProfiles) {
201
- const validated = validateRedactedRuntimeProfileSummary(p);
202
- if (validated === null)
203
- return null;
204
- validatedProfiles.push(validated);
205
- }
206
- // Validate agents array elements
207
- const validatedAgents = [];
208
- for (const a of agents) {
209
- const validated = validateRedactedAgentSummary(a);
210
- if (validated === null)
211
- return null;
212
- validatedAgents.push(validated);
213
- }
214
- // Validate warnings array elements (ERR-005)
215
- const validatedWarnings = [];
216
- for (const w of warnings) {
217
- if (typeof w !== "string")
218
- return null;
219
- validatedWarnings.push(w);
220
- }
221
- // Validate optional errors array
222
- let validatedErrors;
223
- if (Object.hasOwn(raw, "errors") && raw.errors !== undefined) {
224
- if (!Array.isArray(raw.errors))
225
- return null;
226
- validatedErrors = [];
227
- for (const e of raw.errors) {
228
- const validated = validateConfigError(e);
229
- if (validated === null)
230
- return null;
231
- validatedErrors.push(validated);
232
- }
233
- }
234
- const validatedSource = validateSource(source);
235
- if (validatedSource === null)
236
- return null;
237
- return {
238
- version,
239
- source: validatedSource,
240
- features: validatedFeatures,
241
- runtimeProfiles: validatedProfiles,
242
- defaultRuntime,
243
- agents: validatedAgents,
244
- ui: {
245
- diagnostics: {
246
- mode: uiDiagMode,
247
- },
248
- },
249
- warnings: validatedWarnings,
250
- errors: validatedErrors,
251
- };
252
- }
253
- function validateConfigCatalogData(raw) {
254
- if (!isRecord(raw))
255
- return null;
256
- if (!Object.hasOwn(raw, "profiles"))
257
- return null;
258
- const profiles = raw.profiles;
259
- if (!Array.isArray(profiles))
260
- return null;
261
- const validatedProfiles = [];
262
- for (const p of profiles) {
263
- const validated = validateRedactedRuntimeProfileSummary(p);
264
- if (validated === null)
265
- return null;
266
- validatedProfiles.push(validated);
267
- }
268
- // Validate optional errors array
269
- let validatedErrors;
270
- if (Object.hasOwn(raw, "errors") && raw.errors !== undefined) {
271
- if (!Array.isArray(raw.errors))
272
- return null;
273
- validatedErrors = [];
274
- for (const e of raw.errors) {
275
- const validated = validateConfigError(e);
276
- if (validated === null)
277
- return null;
278
- validatedErrors.push(validated);
279
- }
280
- }
281
- return { profiles: validatedProfiles, errors: validatedErrors };
282
- }
283
- // ── Readiness tag styling ────────────────────────────────────────────────────
284
- function readinessTagClasses(readiness) {
285
- const base = "inline-flex items-center border border-line rounded-[2px] px-[7px] py-1 font-mono text-[11px] text-ink-3 bg-surface/80 uppercase";
286
- switch (readiness) {
287
- case "ready":
288
- return base;
289
- case "needs_setup":
290
- return base.replace("border-line", "border-amber/35").replace("text-ink-3", "text-amber");
291
- case "not_ready":
292
- // SPEC-PD-UIUX-001 R5: bare `red` utilities have no matching theme token
293
- // (silently unstyled) — use the registered danger token.
294
- return base.replace("border-line", "border-danger/35").replace("text-ink-3", "text-danger");
295
- default:
296
- return base;
297
- }
298
- }
299
- // ── Sub-components ───────────────────────────────────────────────────────────
300
- /**
301
- * CompactStatusBar — 紧凑状态条(替代 OverallStatusCard)
302
- *
303
- * 取自原型 control-center.html 第 153-168 行。一行展示:
304
- * 已启用 N/M · 未就绪 N 项 · 核心管道 状态 · [需配置] pill
305
- *
306
- * 核心管道状态 = core_trio + code_chain 中已启用代理的就绪情况:
307
- * - paralyzed: core_trio 任一 disabled 或有 not_ready
308
- * - degraded: 有 needs_setup
309
- * - ok: 全 ready
310
- *
311
- * rc-2: 用 Object.hasOwn 守卫 agent.name 查 AGENT_METADATA(无 as 绕过)
312
- */
313
- function CompactStatusBar({ readiness, agents, }) {
314
- const { t } = useTranslation();
315
- const enabledCount = agents.filter((a) => a.enabled).length;
316
- const totalCount = agents.length;
317
- const notReadyCount = agents.filter((a) => a.enabled && a.readiness !== "ready").length;
318
- // 核心管道状态:core_trio + code_chain 中已启用代理
319
- // rc-2: 用 isKnownAgentName 类型守卫缩窄,不用 as 绕过
320
- const coreAgents = agents.filter((a) => {
321
- if (!isKnownAgentName(a.name))
322
- return false;
323
- const meta = AGENT_METADATA[a.name];
324
- return meta.group === "core_trio" || meta.group === "code_chain";
325
- });
326
- const enabledCoreAgents = coreAgents.filter((a) => a.enabled);
327
- const coreTrioAgents = coreAgents.filter((a) => {
328
- if (!isKnownAgentName(a.name))
329
- return false;
330
- const meta = AGENT_METADATA[a.name];
331
- return meta.group === "core_trio";
332
- });
333
- const codeChainAgents = coreAgents.filter((a) => {
334
- if (!isKnownAgentName(a.name))
335
- return false;
336
- const meta = AGENT_METADATA[a.name];
337
- return meta.group === "code_chain";
338
- });
339
- const coreTrioAnyDisabled = coreTrioAgents.some((a) => !a.enabled);
340
- const codeChainAnyDisabled = codeChainAgents.some((a) => !a.enabled);
341
- const coreAnyNotReady = enabledCoreAgents.some((a) => a.readiness === "not_ready");
342
- const coreAnyNeedsSetup = enabledCoreAgents.some((a) => a.readiness === "needs_setup");
343
- // 状态优先级(per AGENT_METADATA.impactZh):
344
- // - paralyzed: core_trio 任一 disabled 或 enabled 但 not_ready
345
- // (core_trio 是入口,关掉任何一个整个管道瘫痪)
346
- // - degraded: code_chain 任一 disabled(降级运行,非瘫痪)
347
- // 或 enabled 但 needs_setup
348
- // - ok: 全 ready
349
- //
350
- // needsConfig 标记仅用于 readiness 异常(not_ready / needs_setup),
351
- // 不用于主动 disabled — 主动 disable 是 owner 的有意决策,不是配置缺失。
352
- let corePipelineKey;
353
- const needsConfig = coreAnyNotReady || coreAnyNeedsSetup;
354
- if (coreTrioAnyDisabled || coreAnyNotReady) {
355
- corePipelineKey = "pages.controlCenter.status.corePipelineParalyzed";
356
- }
357
- else if (codeChainAnyDisabled || coreAnyNeedsSetup) {
358
- corePipelineKey = "pages.controlCenter.status.corePipelineDegraded";
359
- }
360
- else {
361
- corePipelineKey = "pages.controlCenter.status.corePipelineOk";
362
- }
363
- return (_jsxs("div", { className: "mt-5 px-[16px] py-[11px] bg-surface border border-line-2 rounded-[4px] flex items-center gap-[16px] text-[12.5px] text-ink-3 flex-wrap", children: [_jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.enabled") }), _jsxs("span", { className: "text-ink font-semibold", children: [_jsx("span", { className: "font-mono", children: enabledCount }), " /", " ", _jsx("span", { className: "font-mono", children: totalCount })] })] }), _jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.notReady") }), _jsx("span", { className: "text-ink font-semibold", children: _jsx("span", { className: "font-mono", children: notReadyCount }) })] }), _jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.corePipeline") }), _jsx("span", { className: "text-ink font-semibold", children: t(corePipelineKey) })] }), needsConfig && (_jsx("span", { className: "ml-auto px-[9px] py-[3px] rounded-[2px] text-[10.5px] font-mono tracking-[0.02em] font-medium border border-amber text-amber bg-amber/10", children: t("pages.controlCenter.status.needsConfig") }))] }));
364
- }
365
- function DefaultRuntimeSelector({ currentDefault, profiles, onDefaultChange, saving, }) {
366
- const { t } = useTranslation();
367
- return (_jsxs("div", { className: "bg-panel border border-line rounded-[6px] px-[18px] py-[14px]", children: [_jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-3", children: t("pages.controlCenter.defaultRuntimeDescription") }), _jsx("select", { value: currentDefault, onChange: (e) => {
368
- onDefaultChange(e.target.value);
369
- }, disabled: saving, className: "bg-surface border border-line rounded-[3px] px-3 py-[6px] text-[12.5px] text-ink focus:outline-none focus:border-gov disabled:opacity-50 min-w-[200px]", "aria-label": t("pages.controlCenter.defaultRuntime"), children: profiles.map((p) => (_jsxs("option", { value: p.id, children: [p.label, " \u2014 ", enumLabel('readiness', p.readiness, t)] }, p.id))) }), saving && (_jsx("span", { className: "ml-3 text-ink-3 text-[12px]", children: t("pages.controlCenter.saving") }))] }));
370
- }
371
- function AdvancedDiagnostics({ config, }) {
372
- const { t } = useTranslation();
373
- const [copied, setCopied] = useState(false);
374
- const diagnostics = {
375
- version: config.version,
376
- source: config.source,
377
- features: config.features,
378
- runtimeProfiles: config.runtimeProfiles,
379
- defaultRuntime: config.defaultRuntime,
380
- agents: config.agents,
381
- ui: config.ui,
382
- warnings: config.warnings,
383
- errors: config.errors,
384
- };
385
- const handleCopy = useCallback(() => {
386
- const text = redactDiagnosticsForCopy(diagnostics);
387
- navigator.clipboard.writeText(text).then(() => {
388
- setCopied(true);
389
- toast.success(t("pages.controlCenter.copyDiagnostics"));
390
- setTimeout(() => setCopied(false), 2000);
391
- }, () => {
392
- toast.error(t("pages.controlCenter.saveFailed"));
393
- });
394
- }, [diagnostics, t]);
395
- const grouped = groupAgentsByReadiness(diagnostics);
396
- return (_jsxs("details", { className: "group", children: [_jsx("summary", { className: "text-ink-3 text-[13px] cursor-pointer hover:text-ink-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.controlCenter.advancedDiagnostics") }), _jsxs("div", { className: "mt-4 space-y-5", children: [_jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.features") }), _jsx("div", { className: "bg-surface/60 border border-line rounded-[6px] px-3 py-2", children: config.features.length === 0 ? (_jsx("span", { className: "text-ink-4 text-[13px]", children: "\u2014" })) : (_jsx("div", { className: "space-y-1", children: config.features.map((f) => (_jsxs("div", { className: "flex items-center gap-2 text-[13px]", children: [_jsx("span", { className: "text-ink-2", children: enumLabel('featureId', f.id, t) }), _jsx("span", { className: "text-ink-4", children: "\u00B7" }), _jsx("span", { className: "text-ink-3", children: enumLabel('featureCategory', f.category, t) }), _jsx("span", { className: "text-ink-4", children: "\u00B7" }), _jsx("span", { className: f.enabled ? "text-ink-2" : "text-ink-4 line-through", children: f.enabled
397
- ? t("pages.controlCenter.on")
398
- : t("pages.controlCenter.off") })] }, f.id))) })) })] }), _jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.runtimeProfiles") }), _jsx("div", { className: "bg-surface/60 border border-line rounded-[6px] px-3 py-2", children: config.runtimeProfiles.length === 0 ? (_jsx("span", { className: "text-ink-4 text-[13px]", children: "\u2014" })) : (_jsx("div", { className: "space-y-1", children: config.runtimeProfiles.map((p) => (_jsxs("div", { className: "flex items-center gap-2 text-[13px]", children: [_jsx("span", { className: "text-ink-2", children: p.label }), _jsx("span", { className: "text-ink-4", children: "\u00B7" }), _jsx("span", { className: "text-ink-3", children: p.type }), _jsx("span", { className: readinessTagClasses(p.readiness), children: enumLabel('readiness', p.readiness, t) })] }, p.id))) })) })] }), config.warnings.length > 0 && (_jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.warnings") }), _jsx("div", { className: "bg-surface/60 border border-amber/20 border-l-2 border-l-amber rounded-[6px] px-3 py-2", children: _jsx("ul", { className: "space-y-1", children: config.warnings.map((w, i) => (_jsx("li", { className: "text-ink-2 text-[13px]", children: w }, i))) }) })] })), config.errors && config.errors.length > 0 && (_jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.configErrors") }), _jsx("div", { className: "bg-surface/60 border border-danger/20 border-l-2 border-l-danger rounded-[6px] px-3 py-2", children: _jsx("ul", { className: "space-y-2", children: config.errors.map((e, i) => (_jsxs("li", { className: "text-[13px]", children: [_jsx("span", { className: "text-ink font-medium", children: e.path }), _jsx("span", { className: "text-ink-4", children: " \u2014 " }), _jsx("span", { className: "text-ink-2", children: e.reason }), _jsxs("div", { className: "text-ink-3 text-[12px] mt-0.5", children: ["\u2192 ", e.nextAction] })] }, i))) }) })] })), _jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.readinessLabel") }), _jsx("div", { className: "bg-surface/60 border border-line rounded-[6px] px-3 py-2 space-y-2", children: Object.keys(grouped).map((status) => {
399
- const validatedStatus = validateReadinessStatus(status);
400
- if (validatedStatus === null)
401
- return null;
402
- const agentsInGroup = grouped[validatedStatus];
403
- if (agentsInGroup.length === 0)
404
- return null;
405
- return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: readinessTagClasses(validatedStatus), children: enumLabel('readiness', validatedStatus, t) }), _jsx("span", { className: "text-ink-3 text-[13px]", children: agentsInGroup.map((a) => a.name).join(", ") })] }, validatedStatus));
406
- }) })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: handleCopy, className: "border border-line bg-surface text-ink rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: copied ? "✓" : t("pages.controlCenter.copyDiagnostics") }), _jsx("span", { className: "text-ink-4 text-[12px]", children: t("pages.controlCenter.redactedNote") })] })] })] }));
407
- }
408
- export function ControlCenterPage() {
409
- const { t, i18n } = useTranslation();
410
- const [configData, setConfigData] = useState(null);
411
- const [catalogData, setCatalogData] = useState(null);
412
- const [loadingState, setLoadingState] = useState("loading");
413
- const [errorMessage, setErrorMessage] = useState(null);
414
- const [savingAgent, setSavingAgent] = useState(null);
415
- const [savingDefault, setSavingDefault] = useState(false);
416
- const loadData = useCallback(async () => {
417
- setLoadingState("loading");
418
- setErrorMessage(null);
419
- const [summaryResult, catalogResult] = await Promise.all([
420
- fetchConfigSummary(),
421
- fetchConfigCatalog(),
422
- ]);
423
- // Validate summary data (H section / ERR-001/005/009)
424
- if (!summaryResult.success) {
425
- setLoadingState("error");
426
- setErrorMessage(summaryResult.error);
427
- return;
428
- }
429
- const validatedSummary = validateConfigSummaryData(summaryResult.data);
430
- if (validatedSummary === null) {
431
- setLoadingState("error");
432
- setErrorMessage("Config summary data has unexpected shape");
433
- return;
434
- }
435
- setConfigData(validatedSummary);
436
- // Validate catalog data (ERR-002: degradation with reason)
437
- if (!catalogResult.success) {
438
- // Non-fatal: catalog is only needed for profile dropdowns
439
- setCatalogData(null);
440
- }
441
- else {
442
- const validatedCatalog = validateConfigCatalogData(catalogResult.data);
443
- setCatalogData(validatedCatalog);
444
- }
445
- setLoadingState("loaded");
446
- }, []);
447
- useEffect(() => {
448
- loadData();
449
- }, [loadData]);
450
- const handleBindingChange = useCallback(async (agentName, runtimeProfile, enabled) => {
451
- setSavingAgent(agentName);
452
- const result = await updateAgentBinding(agentName, runtimeProfile, enabled);
453
- setSavingAgent(null);
454
- if (!result.success) {
455
- toast.error(t("pages.controlCenter.saveFailed"));
456
- return;
457
- }
458
- // Refresh config data after successful update
459
- await loadData();
460
- }, [loadData, t]);
461
- const handleDefaultRuntimeChange = useCallback(async (profileId) => {
462
- setSavingDefault(true);
463
- const result = await updateDefaultRuntime(profileId);
464
- setSavingDefault(false);
465
- if (!result.success) {
466
- toast.error(t("pages.controlCenter.saveFailed"));
467
- return;
468
- }
469
- // Refresh config data after successful update
470
- await loadData();
471
- }, [loadData, t]);
472
- // ── Loading state ────────────────────────────────────────────────────────
473
- if (loadingState === "loading") {
474
- return (_jsx(PageShell, { children: _jsx(PageLoading, { cardCount: 3, label: t("common.loading") }) }));
475
- }
476
- // ── Error state (ERR-002: degradation with reason) ───────────────────────
477
- if (loadingState === "error") {
478
- return (_jsxs(PageShell, { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsxs("div", { className: "mt-6 p-4 bg-panel border border-line rounded-[6px] text-ink-2 text-sm", children: [_jsx("p", { children: t("pages.controlCenter.loadError") }), errorMessage && (_jsx("p", { className: "mt-2 text-ink-4 text-[13px] font-mono", children: errorMessage }))] })] }));
479
- }
480
- // ── Loaded state ─────────────────────────────────────────────────────────
481
- if (configData === null) {
482
- return (_jsxs(PageShell, { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsx("div", { className: "mt-6 p-4 bg-panel border border-line rounded-[6px] text-ink-2 text-sm", children: _jsx("p", { children: t("pages.controlCenter.loadError") }) })] }));
483
- }
484
- const diagnostics = {
485
- version: configData.version,
486
- source: configData.source,
487
- features: configData.features,
488
- runtimeProfiles: configData.runtimeProfiles,
489
- defaultRuntime: configData.defaultRuntime,
490
- agents: configData.agents,
491
- ui: configData.ui,
492
- warnings: configData.warnings,
493
- errors: configData.errors,
494
- };
495
- const overallReadiness = computeOverallReadiness(diagnostics);
496
- const availableProfiles = catalogData?.profiles ?? configData.runtimeProfiles;
497
- return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.controlCenter.subtitle") }), _jsx(WorkflowDiagram, {}), _jsx(CompactStatusBar, { readiness: overallReadiness, agents: configData.agents }), _jsx(DesignGatePanel, {}), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-agents", children: [_jsx(SectionTitle, { id: "section-agents", children: t("pages.controlCenter.internalAgents") }), _jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-3", children: t("pages.controlCenter.internalAgentsDescription") }), _jsx("p", { className: overallReadiness === "ready"
498
- ? "text-ink-4 text-[13px] leading-relaxed mb-3"
499
- : "text-amber text-[13px] leading-relaxed mb-3", children: t(CONFIG_READINESS_KEY[overallReadiness]) }), (() => {
500
- const { groups, unknown } = groupAgentsByDependency(configData.agents);
501
- const locale = i18n.language.startsWith("en")
502
- ? "en"
503
- : "zh-CN";
504
- return (_jsxs(_Fragment, { children: [AGENT_GROUPS.map((groupMeta) => (_jsx(AgentGroup, { groupMeta: groupMeta, agents: (groups[groupMeta.id] ?? []).filter((a) => a.name !== AGENT_METADATA.signalCollector.name), profiles: availableProfiles, onBindingChange: handleBindingChange, saving: savingAgent, locale: locale }, groupMeta.id))), unknown.length > 0 && (_jsx("div", { className: "mt-3 px-3 py-2 border border-amber/30 border-l-2 border-l-amber rounded-[4px] bg-amber/10 text-[12.5px] text-ink-3", children: t("pages.controlCenter.unknownAgentsWarning", {
505
- count: unknown.length,
506
- names: unknown.map((a) => a.name).join(", "),
507
- }) }))] }));
508
- })()] }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-default-runtime", children: [_jsx(SectionTitle, { id: "section-default-runtime", children: t("pages.controlCenter.defaultRuntime") }), _jsx(DefaultRuntimeSelector, { currentDefault: configData.defaultRuntime, profiles: availableProfiles, onDefaultChange: handleDefaultRuntimeChange, saving: savingDefault })] }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-runtime-profiles", children: [_jsx(SectionTitle, { id: "section-runtime-profiles", children: t("pages.controlCenter.profiles.sectionTitle") }), _jsx(RuntimeProfileManager, { profiles: availableProfiles, defaultRuntimeId: configData.defaultRuntime, onMutated: loadData })] }), _jsx("section", { className: "mt-8", "aria-labelledby": "section-diagnostics", children: _jsx(AdvancedDiagnostics, { config: configData }) }), _jsx("p", { className: "mt-10 pt-[18px] border-t border-line-2 text-ink-4 text-[12px] leading-[1.6] max-w-[60ch] font-mono", children: t("pages.controlCenter.footerNote") })] }) }));
509
- }
@@ -1 +0,0 @@
1
- export declare function DesignGatePanel(): import("react").JSX.Element;