create-principles-disciple 1.146.3 → 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 (311) hide show
  1. package/_release/product-identity.json +1 -1
  2. package/console/dist/web/assets/app.js +26 -26
  3. package/console/package.json +1 -1
  4. package/package.json +3 -3
  5. package/pd-cli/package.json +1 -1
  6. package/release-manager/package.json +3 -3
  7. package/console/dist/ui/App.d.ts +0 -1
  8. package/console/dist/ui/App.js +0 -172
  9. package/console/dist/ui/api.d.ts +0 -611
  10. package/console/dist/ui/api.js +0 -1094
  11. package/console/dist/ui/components/auth/login-form.d.ts +0 -4
  12. package/console/dist/ui/components/auth/login-form.js +0 -142
  13. package/console/dist/ui/components/auth/splash-screen.d.ts +0 -9
  14. package/console/dist/ui/components/auth/splash-screen.js +0 -22
  15. package/console/dist/ui/components/error-boundary.d.ts +0 -15
  16. package/console/dist/ui/components/error-boundary.js +0 -30
  17. package/console/dist/ui/components/focus/daily-thought-card.d.ts +0 -1
  18. package/console/dist/ui/components/focus/daily-thought-card.js +0 -41
  19. package/console/dist/ui/components/language-switcher.d.ts +0 -2
  20. package/console/dist/ui/components/language-switcher.js +0 -17
  21. package/console/dist/ui/components/layout/app-sidebar.d.ts +0 -27
  22. package/console/dist/ui/components/layout/app-sidebar.js +0 -128
  23. package/console/dist/ui/components/layout/page-loading.d.ts +0 -13
  24. package/console/dist/ui/components/layout/page-loading.js +0 -14
  25. package/console/dist/ui/components/layout/page-shell.d.ts +0 -12
  26. package/console/dist/ui/components/layout/page-shell.js +0 -11
  27. package/console/dist/ui/components/layout/section-title.d.ts +0 -10
  28. package/console/dist/ui/components/layout/section-title.js +0 -9
  29. package/console/dist/ui/components/notifications/NotificationProvider.d.ts +0 -14
  30. package/console/dist/ui/components/notifications/NotificationProvider.js +0 -136
  31. package/console/dist/ui/components/notifications/favicon-badge.d.ts +0 -3
  32. package/console/dist/ui/components/notifications/favicon-badge.js +0 -68
  33. package/console/dist/ui/components/notifications/notification-reducer.d.ts +0 -9
  34. package/console/dist/ui/components/notifications/notification-reducer.js +0 -9
  35. package/console/dist/ui/components/notifications/sound-storage.d.ts +0 -3
  36. package/console/dist/ui/components/notifications/sound-storage.js +0 -37
  37. package/console/dist/ui/components/notifications/useNotifications.d.ts +0 -1
  38. package/console/dist/ui/components/notifications/useNotifications.js +0 -9
  39. package/console/dist/ui/components/onboarding/CircuitDiagram.d.ts +0 -8
  40. package/console/dist/ui/components/onboarding/CircuitDiagram.js +0 -18
  41. package/console/dist/ui/components/onboarding/DemoResultView.d.ts +0 -22
  42. package/console/dist/ui/components/onboarding/DemoResultView.js +0 -33
  43. package/console/dist/ui/components/onboarding/SlashCommandsCard.d.ts +0 -16
  44. package/console/dist/ui/components/onboarding/SlashCommandsCard.js +0 -20
  45. package/console/dist/ui/components/onboarding/slashCommands.d.ts +0 -20
  46. package/console/dist/ui/components/onboarding/slashCommands.js +0 -22
  47. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +0 -6
  48. package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +0 -66
  49. package/console/dist/ui/components/theme-provider.d.ts +0 -14
  50. package/console/dist/ui/components/theme-provider.js +0 -40
  51. package/console/dist/ui/components/theme-toggle.d.ts +0 -2
  52. package/console/dist/ui/components/theme-toggle.js +0 -11
  53. package/console/dist/ui/components/ui/alert-dialog.d.ts +0 -20
  54. package/console/dist/ui/components/ui/alert-dialog.js +0 -26
  55. package/console/dist/ui/components/ui/badge.d.ts +0 -9
  56. package/console/dist/ui/components/ui/badge.js +0 -22
  57. package/console/dist/ui/components/ui/button.d.ts +0 -11
  58. package/console/dist/ui/components/ui/button.js +0 -34
  59. package/console/dist/ui/components/ui/card.d.ts +0 -8
  60. package/console/dist/ui/components/ui/card.js +0 -16
  61. package/console/dist/ui/components/ui/charts.d.ts +0 -51
  62. package/console/dist/ui/components/ui/charts.js +0 -72
  63. package/console/dist/ui/components/ui/dialog.d.ts +0 -19
  64. package/console/dist/ui/components/ui/dialog.js +0 -22
  65. package/console/dist/ui/components/ui/input.d.ts +0 -3
  66. package/console/dist/ui/components/ui/input.js +0 -8
  67. package/console/dist/ui/components/ui/markdown.d.ts +0 -24
  68. package/console/dist/ui/components/ui/markdown.js +0 -119
  69. package/console/dist/ui/components/ui/progress-bar.d.ts +0 -20
  70. package/console/dist/ui/components/ui/progress-bar.js +0 -38
  71. package/console/dist/ui/components/ui/select.d.ts +0 -13
  72. package/console/dist/ui/components/ui/select.js +0 -26
  73. package/console/dist/ui/components/ui/separator.d.ts +0 -3
  74. package/console/dist/ui/components/ui/separator.js +0 -6
  75. package/console/dist/ui/components/ui/sheet.d.ts +0 -25
  76. package/console/dist/ui/components/ui/sheet.js +0 -37
  77. package/console/dist/ui/components/ui/shiny-text.d.ts +0 -28
  78. package/console/dist/ui/components/ui/shiny-text.js +0 -46
  79. package/console/dist/ui/components/ui/skeleton.d.ts +0 -3
  80. package/console/dist/ui/components/ui/skeleton.js +0 -6
  81. package/console/dist/ui/components/ui/sonner.d.ts +0 -3
  82. package/console/dist/ui/components/ui/sonner.js +0 -13
  83. package/console/dist/ui/components/ui/tooltip.d.ts +0 -7
  84. package/console/dist/ui/components/ui/tooltip.js +0 -10
  85. package/console/dist/ui/data/daily-thoughts.d.ts +0 -15
  86. package/console/dist/ui/data/daily-thoughts.js +0 -164
  87. package/console/dist/ui/hooks/useNotificationSound.d.ts +0 -12
  88. package/console/dist/ui/hooks/useNotificationSound.js +0 -74
  89. package/console/dist/ui/i18n/en.json +0 -2399
  90. package/console/dist/ui/i18n/index.d.ts +0 -2
  91. package/console/dist/ui/i18n/index.js +0 -32
  92. package/console/dist/ui/i18n/zh-CN.json +0 -2399
  93. package/console/dist/ui/main.d.ts +0 -1
  94. package/console/dist/ui/main.js +0 -9
  95. package/console/dist/ui/pages/ReportProblemValidators.d.ts +0 -144
  96. package/console/dist/ui/pages/ReportProblemValidators.js +0 -418
  97. package/console/dist/ui/pages/activation/ActivationPage.d.ts +0 -1
  98. package/console/dist/ui/pages/activation/ActivationPage.js +0 -512
  99. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +0 -20
  100. package/console/dist/ui/pages/activation/ActivationValidators.js +0 -160
  101. package/console/dist/ui/pages/control-center/AgentCard.d.ts +0 -31
  102. package/console/dist/ui/pages/control-center/AgentCard.js +0 -212
  103. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +0 -26
  104. package/console/dist/ui/pages/control-center/AgentGroup.js +0 -38
  105. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +0 -1
  106. package/console/dist/ui/pages/control-center/ControlCenterPage.js +0 -509
  107. package/console/dist/ui/pages/control-center/DesignGatePanel.d.ts +0 -1
  108. package/console/dist/ui/pages/control-center/DesignGatePanel.js +0 -137
  109. package/console/dist/ui/pages/control-center/RuntimeProfileManager.d.ts +0 -31
  110. package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +0 -199
  111. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +0 -17
  112. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +0 -55
  113. package/console/dist/ui/pages/debt/DebtPage.d.ts +0 -2
  114. package/console/dist/ui/pages/debt/DebtPage.js +0 -222
  115. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +0 -2
  116. package/console/dist/ui/pages/design-system/DesignSystemPage.js +0 -30
  117. package/console/dist/ui/pages/examiner/ExaminerPage.d.ts +0 -15
  118. package/console/dist/ui/pages/examiner/ExaminerPage.js +0 -158
  119. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.d.ts +0 -1
  120. package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +0 -421
  121. package/console/dist/ui/pages/focus/ApprovalSubjectReading.d.ts +0 -24
  122. package/console/dist/ui/pages/focus/ApprovalSubjectReading.js +0 -133
  123. package/console/dist/ui/pages/focus/FocusPage.d.ts +0 -123
  124. package/console/dist/ui/pages/focus/FocusPage.js +0 -567
  125. package/console/dist/ui/pages/focus/OwnerDecisionCard.d.ts +0 -9
  126. package/console/dist/ui/pages/focus/OwnerDecisionCard.js +0 -111
  127. package/console/dist/ui/pages/focus/OwnerWorkbench.d.ts +0 -19
  128. package/console/dist/ui/pages/focus/OwnerWorkbench.js +0 -75
  129. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +0 -34
  130. package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +0 -298
  131. package/console/dist/ui/pages/focus/focus-validation.d.ts +0 -40
  132. package/console/dist/ui/pages/focus/focus-validation.js +0 -211
  133. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +0 -67
  134. package/console/dist/ui/pages/intent/IntentOnboarding.js +0 -289
  135. package/console/dist/ui/pages/intent/IntentPage.d.ts +0 -1
  136. package/console/dist/ui/pages/intent/IntentPage.js +0 -252
  137. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +0 -59
  138. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +0 -125
  139. package/console/dist/ui/pages/pain/PainPage.d.ts +0 -1
  140. package/console/dist/ui/pages/pain/PainPage.js +0 -420
  141. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +0 -175
  142. package/console/dist/ui/pages/pain/pain-card-helpers.js +0 -181
  143. package/console/dist/ui/pages/principles/CorePrinciplesPage.d.ts +0 -10
  144. package/console/dist/ui/pages/principles/CorePrinciplesPage.js +0 -59
  145. package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +0 -60
  146. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +0 -602
  147. package/console/dist/ui/pages/principles/PrinciplesPage.d.ts +0 -1
  148. package/console/dist/ui/pages/principles/PrinciplesPage.js +0 -327
  149. package/console/dist/ui/pages/principles/PrinciplesViewNav.d.ts +0 -8
  150. package/console/dist/ui/pages/principles/PrinciplesViewNav.js +0 -15
  151. package/console/dist/ui/pages/report-problem/ReportProblemPage.d.ts +0 -1
  152. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +0 -467
  153. package/console/dist/ui/pages/settings/SettingsPage.d.ts +0 -4
  154. package/console/dist/ui/pages/settings/SettingsPage.js +0 -457
  155. package/console/dist/ui/pages/settings/UpdatePage.d.ts +0 -1
  156. package/console/dist/ui/pages/settings/UpdatePage.js +0 -215
  157. package/console/dist/ui/pages/welcome/WelcomePage.d.ts +0 -5
  158. package/console/dist/ui/pages/welcome/WelcomePage.js +0 -187
  159. package/console/dist/ui/utils/agent-metadata.d.ts +0 -71
  160. package/console/dist/ui/utils/agent-metadata.js +0 -284
  161. package/console/dist/ui/utils/approval-review.d.ts +0 -30
  162. package/console/dist/ui/utils/approval-review.js +0 -50
  163. package/console/dist/ui/utils/approval-warning-localization.d.ts +0 -34
  164. package/console/dist/ui/utils/approval-warning-localization.js +0 -148
  165. package/console/dist/ui/utils/attention-presentation.d.ts +0 -35
  166. package/console/dist/ui/utils/attention-presentation.js +0 -46
  167. package/console/dist/ui/utils/blocker-localization.d.ts +0 -23
  168. package/console/dist/ui/utils/blocker-localization.js +0 -36
  169. package/console/dist/ui/utils/control-center-helpers.d.ts +0 -79
  170. package/console/dist/ui/utils/control-center-helpers.js +0 -189
  171. package/console/dist/ui/utils/enum-labels.d.ts +0 -50
  172. package/console/dist/ui/utils/enum-labels.js +0 -171
  173. package/console/dist/ui/utils/format-date.d.ts +0 -11
  174. package/console/dist/ui/utils/format-date.js +0 -17
  175. package/console/dist/ui/utils/onboarding-state.d.ts +0 -25
  176. package/console/dist/ui/utils/onboarding-state.js +0 -77
  177. package/console/dist/ui/utils/reading-layout.d.ts +0 -20
  178. package/console/dist/ui/utils/reading-layout.js +0 -46
  179. package/console/dist/ui/utils/rule-binding-validators.d.ts +0 -13
  180. package/console/dist/ui/utils/rule-binding-validators.js +0 -188
  181. package/console/dist/ui/utils/runtime-mode.d.ts +0 -11
  182. package/console/dist/ui/utils/runtime-mode.js +0 -11
  183. package/console/dist/ui/utils/token-storage.d.ts +0 -22
  184. package/console/dist/ui/utils/token-storage.js +0 -47
  185. package/console/dist/ui/utils/validators.d.ts +0 -1178
  186. package/console/dist/ui/utils/validators.js +0 -3297
  187. package/release-manager/dist/bootstrap-entry.d.ts +0 -2
  188. package/release-manager/dist/bootstrap-entry.d.ts.map +0 -1
  189. package/release-manager/dist/bootstrap-entry.js.map +0 -1
  190. package/release-manager/dist/i18n.d.ts +0 -6
  191. package/release-manager/dist/i18n.d.ts.map +0 -1
  192. package/release-manager/dist/i18n.js.map +0 -1
  193. package/release-manager/dist/index.d.ts +0 -7
  194. package/release-manager/dist/index.d.ts.map +0 -1
  195. package/release-manager/dist/index.js +0 -656
  196. package/release-manager/dist/index.js.map +0 -1
  197. package/release-manager/dist/installer.d.ts +0 -629
  198. package/release-manager/dist/installer.d.ts.map +0 -1
  199. package/release-manager/dist/installer.js.map +0 -1
  200. package/release-manager/dist/installers/codex-host-installer.d.ts +0 -39
  201. package/release-manager/dist/installers/codex-host-installer.d.ts.map +0 -1
  202. package/release-manager/dist/installers/codex-host-installer.js.map +0 -1
  203. package/release-manager/dist/installers/index.d.ts +0 -51
  204. package/release-manager/dist/installers/index.d.ts.map +0 -1
  205. package/release-manager/dist/installers/index.js.map +0 -1
  206. package/release-manager/dist/installers/openclaw-host-installer.d.ts +0 -14
  207. package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +0 -1
  208. package/release-manager/dist/installers/openclaw-host-installer.js.map +0 -1
  209. package/release-manager/dist/installers/workbuddy-host-installer.d.ts +0 -335
  210. package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +0 -1
  211. package/release-manager/dist/installers/workbuddy-host-installer.js.map +0 -1
  212. package/release-manager/dist/mvp-config.d.ts +0 -233
  213. package/release-manager/dist/mvp-config.d.ts.map +0 -1
  214. package/release-manager/dist/mvp-config.js.map +0 -1
  215. package/release-manager/dist/prompts.d.ts +0 -43
  216. package/release-manager/dist/prompts.d.ts.map +0 -1
  217. package/release-manager/dist/prompts.js +0 -268
  218. package/release-manager/dist/prompts.js.map +0 -1
  219. package/release-manager/dist/skill-language.d.ts +0 -32
  220. package/release-manager/dist/skill-language.d.ts.map +0 -1
  221. package/release-manager/dist/skill-language.js.map +0 -1
  222. package/release-manager/dist/uninstaller.d.ts +0 -68
  223. package/release-manager/dist/uninstaller.d.ts.map +0 -1
  224. package/release-manager/dist/uninstaller.js +0 -746
  225. package/release-manager/dist/uninstaller.js.map +0 -1
  226. package/release-manager/dist/update/apply-payload.d.ts +0 -143
  227. package/release-manager/dist/update/apply-payload.d.ts.map +0 -1
  228. package/release-manager/dist/update/apply-payload.js.map +0 -1
  229. package/release-manager/dist/update/atomic-file.d.ts +0 -35
  230. package/release-manager/dist/update/atomic-file.d.ts.map +0 -1
  231. package/release-manager/dist/update/atomic-file.js.map +0 -1
  232. package/release-manager/dist/update/bootstrap-executor.d.ts +0 -21
  233. package/release-manager/dist/update/bootstrap-executor.d.ts.map +0 -1
  234. package/release-manager/dist/update/bootstrap-executor.js.map +0 -1
  235. package/release-manager/dist/update/bootstrap-protocol.d.ts +0 -56
  236. package/release-manager/dist/update/bootstrap-protocol.d.ts.map +0 -1
  237. package/release-manager/dist/update/bootstrap-protocol.js.map +0 -1
  238. package/release-manager/dist/update/channel-metadata.d.ts +0 -28
  239. package/release-manager/dist/update/channel-metadata.d.ts.map +0 -1
  240. package/release-manager/dist/update/channel-metadata.js.map +0 -1
  241. package/release-manager/dist/update/channel-promotion.d.ts +0 -39
  242. package/release-manager/dist/update/channel-promotion.d.ts.map +0 -1
  243. package/release-manager/dist/update/channel-promotion.js +0 -55
  244. package/release-manager/dist/update/channel-promotion.js.map +0 -1
  245. package/release-manager/dist/update/console-surface.d.ts +0 -19
  246. package/release-manager/dist/update/console-surface.d.ts.map +0 -1
  247. package/release-manager/dist/update/console-surface.js.map +0 -1
  248. package/release-manager/dist/update/data-compatibility.d.ts +0 -35
  249. package/release-manager/dist/update/data-compatibility.d.ts.map +0 -1
  250. package/release-manager/dist/update/data-compatibility.js +0 -45
  251. package/release-manager/dist/update/data-compatibility.js.map +0 -1
  252. package/release-manager/dist/update/install-layout.d.ts +0 -105
  253. package/release-manager/dist/update/install-layout.d.ts.map +0 -1
  254. package/release-manager/dist/update/install-layout.js.map +0 -1
  255. package/release-manager/dist/update/product-identity.d.ts +0 -70
  256. package/release-manager/dist/update/product-identity.d.ts.map +0 -1
  257. package/release-manager/dist/update/product-identity.js.map +0 -1
  258. package/release-manager/dist/update/release-asset-manifest.d.ts +0 -31
  259. package/release-manager/dist/update/release-asset-manifest.d.ts.map +0 -1
  260. package/release-manager/dist/update/release-asset-manifest.js.map +0 -1
  261. package/release-manager/dist/update/release-identity.d.ts +0 -33
  262. package/release-manager/dist/update/release-identity.d.ts.map +0 -1
  263. package/release-manager/dist/update/release-identity.js.map +0 -1
  264. package/release-manager/dist/update/release-manager-authority.d.ts +0 -39
  265. package/release-manager/dist/update/release-manager-authority.d.ts.map +0 -1
  266. package/release-manager/dist/update/release-manager-authority.js.map +0 -1
  267. package/release-manager/dist/update/release-manager.d.ts +0 -156
  268. package/release-manager/dist/update/release-manager.d.ts.map +0 -1
  269. package/release-manager/dist/update/release-manager.js.map +0 -1
  270. package/release-manager/dist/update/release-metadata-publisher.d.ts +0 -199
  271. package/release-manager/dist/update/release-metadata-publisher.d.ts.map +0 -1
  272. package/release-manager/dist/update/release-metadata-publisher.js +0 -478
  273. package/release-manager/dist/update/release-metadata-publisher.js.map +0 -1
  274. package/release-manager/dist/update/release-metadata-source.d.ts +0 -85
  275. package/release-manager/dist/update/release-metadata-source.d.ts.map +0 -1
  276. package/release-manager/dist/update/release-metadata-source.js.map +0 -1
  277. package/release-manager/dist/update/release-metadata.d.ts +0 -60
  278. package/release-manager/dist/update/release-metadata.d.ts.map +0 -1
  279. package/release-manager/dist/update/release-metadata.js.map +0 -1
  280. package/release-manager/dist/update/release-policy.d.ts +0 -51
  281. package/release-manager/dist/update/release-policy.d.ts.map +0 -1
  282. package/release-manager/dist/update/release-policy.js.map +0 -1
  283. package/release-manager/dist/update/rollback-policy.d.ts +0 -56
  284. package/release-manager/dist/update/rollback-policy.d.ts.map +0 -1
  285. package/release-manager/dist/update/rollback-policy.js +0 -61
  286. package/release-manager/dist/update/rollback-policy.js.map +0 -1
  287. package/release-manager/dist/update/transaction-journal.d.ts +0 -212
  288. package/release-manager/dist/update/transaction-journal.d.ts.map +0 -1
  289. package/release-manager/dist/update/transaction-journal.js.map +0 -1
  290. package/release-manager/dist/update/trust-metadata.d.ts +0 -55
  291. package/release-manager/dist/update/trust-metadata.d.ts.map +0 -1
  292. package/release-manager/dist/update/trust-metadata.js.map +0 -1
  293. package/release-manager/dist/update/trust-root-provisioning.d.ts +0 -99
  294. package/release-manager/dist/update/trust-root-provisioning.d.ts.map +0 -1
  295. package/release-manager/dist/update/trust-root-provisioning.js.map +0 -1
  296. package/release-manager/dist/update/update-history.d.ts +0 -46
  297. package/release-manager/dist/update/update-history.d.ts.map +0 -1
  298. package/release-manager/dist/update/update-history.js +0 -123
  299. package/release-manager/dist/update/update-history.js.map +0 -1
  300. package/release-manager/dist/utils/config-file-io.d.ts +0 -34
  301. package/release-manager/dist/utils/config-file-io.d.ts.map +0 -1
  302. package/release-manager/dist/utils/config-file-io.js.map +0 -1
  303. package/release-manager/dist/utils/env.d.ts +0 -94
  304. package/release-manager/dist/utils/env.d.ts.map +0 -1
  305. package/release-manager/dist/utils/env.js.map +0 -1
  306. package/release-manager/dist/utils/logger.d.ts +0 -15
  307. package/release-manager/dist/utils/logger.d.ts.map +0 -1
  308. package/release-manager/dist/utils/logger.js.map +0 -1
  309. package/release-manager/dist/utils/workspace-divergence.d.ts +0 -36
  310. package/release-manager/dist/utils/workspace-divergence.d.ts.map +0 -1
  311. 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;