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,137 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { SectionTitle } from "../../components/layout/section-title.js";
5
- import { createDesignGateDeclaration, fetchDesignGateDeclaration, fetchDesignGateSessions, revokeDesignGateDeclaration, updateDesignGateDecision, } from "../../api.js";
6
- const decisionTranslationKey = {
7
- approved: "approved",
8
- not_approved: "notApproved",
9
- not_required: "notRequired",
10
- };
11
- const actionTranslationKey = {
12
- read: "read",
13
- write: "write",
14
- execute: "execute",
15
- };
16
- function sessionKey(session) {
17
- return `${session.projectWorkspacePath}\u001f${session.hostSessionId}`;
18
- }
19
- function parsePaths(value) {
20
- return value.split(/\r?\n/).map((path) => path.trim()).filter(Boolean);
21
- }
22
- function errorFromResponse(response) {
23
- return { error: response.error, nextAction: response.nextAction, status: response.status };
24
- }
25
- function fieldClass() {
26
- return "mt-1 w-full rounded-[4px] border border-line bg-surface px-3 py-2 text-[13px] text-ink focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2";
27
- }
28
- function actionButtonClass() {
29
- return "rounded-[4px] border border-line px-3 py-2 text-[12.5px] font-medium text-ink transition-colors hover:border-line-2 focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:cursor-not-allowed disabled:opacity-50";
30
- }
31
- export function DesignGatePanel() {
32
- const { t } = useTranslation();
33
- const [sessions, setSessions] = useState([]);
34
- const [selectedKey, setSelectedKey] = useState("");
35
- const [declaration, setDeclaration] = useState(null);
36
- const [sessionsLoading, setSessionsLoading] = useState(true);
37
- const [declarationLoading, setDeclarationLoading] = useState(false);
38
- const [pending, setPending] = useState(false);
39
- const [error, setError] = useState(null);
40
- const [specPath, setSpecPath] = useState("");
41
- const [scopePaths, setScopePaths] = useState("");
42
- const [scopeActions, setScopeActions] = useState(["write", "execute"]);
43
- const [newDecision, setNewDecision] = useState("not_approved");
44
- const declarationRequest = useRef(0);
45
- const selectedSession = useMemo(() => sessions.find((session) => sessionKey(session) === selectedKey) ?? null, [sessions, selectedKey]);
46
- const loadSessions = useCallback(async () => {
47
- setSessionsLoading(true);
48
- setError(null);
49
- const result = await fetchDesignGateSessions();
50
- setSessionsLoading(false);
51
- if (!result.success) {
52
- setError(errorFromResponse(result));
53
- return;
54
- }
55
- setSessions(result.data.sessions);
56
- setSelectedKey((current) => result.data.sessions.some((session) => sessionKey(session) === current)
57
- ? current
58
- : result.data.sessions[0] ? sessionKey(result.data.sessions[0]) : "");
59
- }, []);
60
- const loadDeclaration = useCallback(async (session) => {
61
- const requestNumber = ++declarationRequest.current;
62
- setDeclarationLoading(true);
63
- setError(null);
64
- const result = await fetchDesignGateDeclaration(session.projectWorkspacePath, session.hostSessionId);
65
- if (requestNumber !== declarationRequest.current)
66
- return;
67
- setDeclarationLoading(false);
68
- if (!result.success) {
69
- setError(errorFromResponse(result));
70
- setDeclaration(null);
71
- return;
72
- }
73
- setDeclaration(result.data.declaration);
74
- }, []);
75
- useEffect(() => { void loadSessions(); }, [loadSessions]);
76
- useEffect(() => {
77
- if (selectedSession)
78
- void loadDeclaration(selectedSession);
79
- else {
80
- declarationRequest.current += 1;
81
- setDeclarationLoading(false);
82
- setDeclaration(null);
83
- }
84
- }, [selectedSession, loadDeclaration]);
85
- const runMutation = useCallback(async (mutation) => {
86
- setPending(true);
87
- setError(null);
88
- const result = await mutation();
89
- setPending(false);
90
- if (!result.success) {
91
- const failure = errorFromResponse(result);
92
- setError(failure);
93
- if (result.status === 409 && selectedSession) {
94
- await loadDeclaration(selectedSession);
95
- setError(failure);
96
- }
97
- return;
98
- }
99
- if (!result.data.declaration) {
100
- setError({ error: t("pages.controlCenter.designGate.invalidMutationResponse") });
101
- return;
102
- }
103
- setDeclaration(result.data.declaration);
104
- }, [loadDeclaration, selectedSession, t]);
105
- const createDeclaration = useCallback(async () => {
106
- if (!selectedSession)
107
- return;
108
- const paths = parsePaths(scopePaths);
109
- if (!specPath.trim() || paths.length === 0 || scopeActions.length === 0) {
110
- setError({ error: t("pages.controlCenter.designGate.requiredFields") });
111
- return;
112
- }
113
- await runMutation(() => createDesignGateDeclaration({
114
- projectWorkspacePath: selectedSession.projectWorkspacePath,
115
- hostSessionId: selectedSession.hostSessionId,
116
- specPath: specPath.trim(),
117
- scope: { paths, actions: scopeActions },
118
- decision: newDecision,
119
- }));
120
- }, [newDecision, runMutation, scopeActions, scopePaths, selectedSession, specPath, t]);
121
- const mutateDecision = useCallback((decision) => {
122
- if (!declaration)
123
- return;
124
- void runMutation(() => updateDesignGateDecision(declaration.sourceRef, declaration.revision, decision));
125
- }, [declaration, runMutation]);
126
- const revoke = useCallback(() => {
127
- if (!declaration)
128
- return;
129
- void runMutation(() => revokeDesignGateDeclaration(declaration.sourceRef, declaration.revision));
130
- }, [declaration, runMutation]);
131
- const disabled = pending || declarationLoading || sessionsLoading;
132
- return (_jsxs("section", { className: "mt-8", "aria-labelledby": "section-design-gate", children: [_jsx(SectionTitle, { id: "section-design-gate", children: t("pages.controlCenter.designGate.title") }), _jsx("p", { className: "mb-4 max-w-[68ch] text-[13px] leading-relaxed text-ink-3", children: t("pages.controlCenter.designGate.description") }), error && (_jsxs("div", { role: "alert", className: "mb-4 rounded-[4px] border border-amber/30 border-l-2 border-l-amber bg-amber/10 p-3 text-[12.5px] text-ink-2", children: [_jsx("p", { children: error.error }), error.nextAction && _jsx("p", { className: "mt-1 text-ink-3", children: error.nextAction }), error.status === 409 && selectedSession && (_jsx("button", { type: "button", className: "mt-2 underline", disabled: disabled, onClick: () => void loadDeclaration(selectedSession), children: t("pages.controlCenter.designGate.refresh") }))] })), sessionsLoading ? (_jsx("p", { className: "text-[13px] text-ink-3", children: t("pages.controlCenter.designGate.loadingSessions") })) : sessions.length === 0 ? (_jsxs("div", { className: "rounded-[4px] border border-line bg-panel p-4 text-[13px] text-ink-3", children: [_jsx("p", { children: t("pages.controlCenter.designGate.noSessions") }), _jsx("button", { type: "button", className: `${actionButtonClass()} mt-3`, disabled: disabled, onClick: () => void loadSessions(), children: t("pages.controlCenter.designGate.refresh") })] })) : (_jsxs("div", { className: "space-y-4 rounded-[4px] border border-line bg-panel p-4", children: [_jsxs("label", { className: "block text-[12.5px] font-medium text-ink", children: [t("pages.controlCenter.designGate.nativeSession"), _jsx("select", { className: fieldClass(), value: selectedKey, disabled: disabled, onChange: (event) => setSelectedKey(event.currentTarget.value), children: sessions.map((session) => (_jsxs("option", { value: sessionKey(session), children: [session.projectWorkspacePath, " \u00B7 ", session.hostSessionId] }, sessionKey(session)))) })] }), declarationLoading ? (_jsx("p", { className: "text-[13px] text-ink-3", children: t("pages.controlCenter.designGate.loadingDeclaration") })) : declaration && !declaration.revoked ? (_jsxs("div", { className: "space-y-3", "aria-live": "polite", children: [_jsxs("div", { className: "grid gap-2 rounded-[4px] border border-line-2 bg-surface p-3 text-[12.5px]", children: [_jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.decision") }), " ", t(`pages.controlCenter.designGate.decisions.${decisionTranslationKey[declaration.decision]}`), declaration.revoked ? ` · ${t("pages.controlCenter.designGate.revoked")}` : ""] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.revision") }), " ", declaration.revision] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.spec") }), " ", _jsx("span", { className: "break-all font-mono", children: declaration.specPath })] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.specDigest") }), " ", _jsx("span", { className: "break-all font-mono", children: declaration.specDigest })] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.scopePaths") }), " ", _jsx("span", { className: "font-mono", children: declaration.scope.paths.join(", ") })] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.scopeActions") }), " ", declaration.scope.actions.map((action) => t(`pages.controlCenter.designGate.actions.${actionTranslationKey[action]}`)).join(", ")] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.owner") }), " ", _jsx("span", { className: "font-mono", children: declaration.actor.ownerId })] }), _jsxs("p", { children: [_jsx("strong", { children: t("pages.controlCenter.designGate.decidedAt") }), " ", declaration.decidedAt] })] }), _jsx("p", { className: "border-l-2 border-amber pl-3 text-[12.5px] leading-relaxed text-ink-3", children: t("pages.controlCenter.designGate.semanticLimit") }), !declaration.revoked && (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx("button", { type: "button", className: actionButtonClass(), disabled: disabled || declaration.decision === "approved", onClick: () => mutateDecision("approved"), children: pending ? t("pages.controlCenter.designGate.saving") : t("pages.controlCenter.designGate.approve") }), _jsx("button", { type: "button", className: actionButtonClass(), disabled: disabled || declaration.decision === "not_approved", onClick: () => mutateDecision("not_approved"), children: t("pages.controlCenter.designGate.markPending") }), _jsx("button", { type: "button", className: actionButtonClass(), disabled: disabled, onClick: revoke, children: t("pages.controlCenter.designGate.revoke") })] }))] })) : (_jsxs("div", { className: "space-y-3 border-t border-line pt-4", children: [declaration?.revoked && (_jsxs("div", { className: "rounded-[4px] border border-line-2 bg-surface p-3 text-[12.5px] text-ink-3", children: [_jsx("p", { children: t("pages.controlCenter.designGate.revokedLatest", { revision: declaration.revision }) }), _jsxs("p", { className: "mt-1 break-all font-mono", children: [declaration.specPath, " \u00B7 ", declaration.scope.paths.join(", ")] })] })), _jsx("p", { className: "text-[12.5px] text-ink-3", children: t("pages.controlCenter.designGate.noDeclaration") }), _jsxs("label", { className: "block text-[12.5px] font-medium text-ink", children: [t("pages.controlCenter.designGate.specPath"), _jsx("input", { className: fieldClass(), value: specPath, onChange: (event) => setSpecPath(event.currentTarget.value), placeholder: t("pages.controlCenter.designGate.specPathHint"), disabled: disabled })] }), _jsxs("label", { className: "block text-[12.5px] font-medium text-ink", children: [t("pages.controlCenter.designGate.scopePathsInput"), _jsx("textarea", { className: fieldClass(), rows: 3, value: scopePaths, onChange: (event) => setScopePaths(event.currentTarget.value), placeholder: t("pages.controlCenter.designGate.scopePathsHint"), disabled: disabled })] }), _jsx("p", { className: "-mt-2 text-[12px] leading-relaxed text-ink-4", children: t("pages.controlCenter.designGate.scopePathsHelp") }), _jsxs("fieldset", { disabled: disabled, children: [_jsx("legend", { className: "text-[12.5px] font-medium text-ink", children: t("pages.controlCenter.designGate.scopeActionsInput") }), _jsx("div", { className: "mt-2 flex flex-wrap gap-4", children: ["read", "write", "execute"].map((action) => (_jsxs("label", { className: "flex items-center gap-2 text-[12.5px] text-ink-2", children: [_jsx("input", { type: "checkbox", checked: scopeActions.includes(action), onChange: (event) => setScopeActions((current) => event.currentTarget.checked ? [...current, action] : current.filter((entry) => entry !== action)) }), t(`pages.controlCenter.designGate.actions.${actionTranslationKey[action]}`)] }, action))) })] }), _jsxs("label", { className: "block text-[12.5px] font-medium text-ink", children: [t("pages.controlCenter.designGate.initialDecision"), _jsx("select", { className: fieldClass(), value: newDecision, onChange: (event) => {
133
- const value = event.currentTarget.value;
134
- if (value === "approved" || value === "not_approved" || value === "not_required")
135
- setNewDecision(value);
136
- }, disabled: disabled, children: ["not_approved", "approved", "not_required"].map((decision) => (_jsx("option", { value: decision, children: t(`pages.controlCenter.designGate.decisions.${decisionTranslationKey[decision]}`) }, decision))) })] }), _jsx("p", { className: "text-[12px] leading-relaxed text-ink-4", children: t("pages.controlCenter.designGate.semanticLimit") }), _jsx("button", { type: "button", className: actionButtonClass(), disabled: disabled, onClick: () => void createDeclaration(), children: pending ? t("pages.controlCenter.designGate.saving") : t("pages.controlCenter.designGate.create") })] }))] }))] }));
137
- }
@@ -1,31 +0,0 @@
1
- import type { RedactedRuntimeProfileSummary } from "../../api.js";
2
- /**
3
- * RuntimeProfileManager — runtime profile CRUD UI.
4
- *
5
- * Renders a table of all runtime profiles with Create / Edit / Delete actions.
6
- * The form is an inline panel (not a modal) to match the subtle, restrained
7
- * aesthetic of AgentCard. Delete uses an inline confirmation bar.
8
- *
9
- * rc 合规:
10
- * - rc-1: profiles 已由父组件 (ControlCenterPage) 用 validateRuntimeProfileSummary
11
- * 验证;本组件不再重新解析。
12
- * - rc-2: 无 as 绕过 — 表单 state 用强类型 ProfileFormState,API 响应用
13
- * validateRuntimeProfileMutation 校验。
14
- * - rc-3: 必填字段 (id / pi-ai 的 provider/model/apiKeyEnv) 缺失时 fail loud,
15
- * 显示内联校验错误,不发请求。
16
- * - rc-9: API 失败时通过 toast + 内联错误消息展示原因,不静默。
17
- *
18
- * 品牌约束 (PRI-CR1 B.4.4):
19
- * - 无 translateY / scale hover,无硬编码色值
20
- * - 状态点色板与 AgentCard 一致 (ready=green, needs_setup/not_ready/unknown=amber,
21
- * disabled=ink-4)
22
- */
23
- interface RuntimeProfileManagerProps {
24
- profiles: RedactedRuntimeProfileSummary[];
25
- /** ID of the profile currently set as defaultRuntime (cannot be deleted). */
26
- defaultRuntimeId: string;
27
- /** Called after a successful create/update/delete so the parent re-fetches. */
28
- onMutated: () => void;
29
- }
30
- export declare function RuntimeProfileManager({ profiles, defaultRuntimeId, onMutated, }: RuntimeProfileManagerProps): import("react").JSX.Element;
31
- export {};
@@ -1,199 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { toast } from "sonner";
5
- import { cn } from "../../../lib/utils.js";
6
- import { enumLabel } from "../../utils/enum-labels.js";
7
- import { createRuntimeProfile, updateRuntimeProfile, deleteRuntimeProfile, } from "../../api.js";
8
- const EMPTY_FORM = {
9
- id: "",
10
- provider: "",
11
- model: "",
12
- apiKeyEnv: "",
13
- baseUrl: "",
14
- };
15
- /** 状态点样式:与 AgentCard 一致 (ready=green, needs_setup/not_ready/unknown=amber, disabled=ink-4) */
16
- function readinessDotClasses(readiness) {
17
- const base = "w-2 h-2 rounded-full border-2 shrink-0";
18
- switch (readiness) {
19
- case "ready":
20
- return cn(base, "border-green bg-green");
21
- case "needs_setup":
22
- case "not_ready":
23
- case "unknown":
24
- return cn(base, "border-amber bg-surface");
25
- case "disabled":
26
- return cn(base, "border-ink-4 bg-surface opacity-50");
27
- default:
28
- return cn(base, "border-ink-4 bg-surface");
29
- }
30
- }
31
- /**
32
- * Build the profile object for a create request.
33
- * Always pi-ai (ADR-0029); empty optional fields are omitted.
34
- */
35
- function buildCreateProfile(form) {
36
- const profile = {
37
- type: "pi-ai",
38
- provider: form.provider.trim(),
39
- model: form.model.trim(),
40
- apiKeyEnv: form.apiKeyEnv.trim(),
41
- };
42
- if (form.baseUrl.trim() !== "") {
43
- profile.baseUrl = form.baseUrl.trim();
44
- }
45
- return profile;
46
- }
47
- /**
48
- * Build the patch object for an update request.
49
- * Sends only pi-ai fields. Empty optionals are omitted so existing values are
50
- * preserved (merge-patch semantics on the server).
51
- */
52
- function buildUpdatePatch(form) {
53
- const patch = {};
54
- if (form.provider.trim() !== "")
55
- patch.provider = form.provider.trim();
56
- if (form.model.trim() !== "")
57
- patch.model = form.model.trim();
58
- if (form.apiKeyEnv.trim() !== "")
59
- patch.apiKeyEnv = form.apiKeyEnv.trim();
60
- if (form.baseUrl.trim() !== "")
61
- patch.baseUrl = form.baseUrl.trim();
62
- return patch;
63
- }
64
- /** Pre-fill form from an existing pi-ai profile summary (edit mode). */
65
- function formFromProfile(p) {
66
- return {
67
- id: p.id,
68
- provider: p.provider ?? "",
69
- model: p.model ?? "",
70
- apiKeyEnv: p.apiKeyEnv ?? "",
71
- baseUrl: "",
72
- };
73
- }
74
- export function RuntimeProfileManager({ profiles, defaultRuntimeId, onMutated, }) {
75
- const { t } = useTranslation();
76
- const [mode, setMode] = useState("closed");
77
- const [form, setForm] = useState(EMPTY_FORM);
78
- const [formError, setFormError] = useState(null);
79
- const [submitting, setSubmitting] = useState(false);
80
- const [deleteTarget, setDeleteTarget] = useState(null);
81
- const [deleting, setDeleting] = useState(false);
82
- const [deleteError, setDeleteError] = useState(null);
83
- const openCreate = () => {
84
- setForm(EMPTY_FORM);
85
- setFormError(null);
86
- setMode("create");
87
- };
88
- const openEdit = (p) => {
89
- setForm(formFromProfile(p));
90
- setFormError(null);
91
- setMode("edit");
92
- };
93
- const closeForm = () => {
94
- setMode("closed");
95
- setForm(EMPTY_FORM);
96
- setFormError(null);
97
- };
98
- const handleFieldChange = (key, value) => {
99
- setForm((prev) => ({ ...prev, [key]: value }));
100
- };
101
- /** Validate the form; returns an error message key suffix or null if valid. */
102
- function validate() {
103
- if (mode === "create" && form.id.trim() === "") {
104
- return t("pages.controlCenter.profiles.validationIdRequired");
105
- }
106
- if (form.provider.trim() === "") {
107
- return t("pages.controlCenter.profiles.validationProviderRequired");
108
- }
109
- if (form.model.trim() === "") {
110
- return t("pages.controlCenter.profiles.validationModelRequired");
111
- }
112
- if (form.apiKeyEnv.trim() === "") {
113
- return t("pages.controlCenter.profiles.validationApiKeyEnvRequired");
114
- }
115
- return null;
116
- }
117
- const handleSubmit = async (e) => {
118
- e.preventDefault();
119
- const validationError = validate();
120
- if (validationError !== null) {
121
- setFormError(validationError);
122
- return;
123
- }
124
- setFormError(null);
125
- setSubmitting(true);
126
- if (mode === "create") {
127
- const result = await createRuntimeProfile(form.id.trim(), buildCreateProfile(form));
128
- setSubmitting(false);
129
- if (!result.success) {
130
- // rc-9: surface server error (e.g. "already exists", "validation failed")
131
- setFormError(result.error);
132
- toast.error(t("pages.controlCenter.profiles.operationFailed"));
133
- return;
134
- }
135
- toast.success(t("pages.controlCenter.profiles.createSuccess"));
136
- closeForm();
137
- onMutated();
138
- return;
139
- }
140
- // edit mode
141
- const result = await updateRuntimeProfile(form.id, buildUpdatePatch(form));
142
- setSubmitting(false);
143
- if (!result.success) {
144
- setFormError(result.error);
145
- toast.error(t("pages.controlCenter.profiles.operationFailed"));
146
- return;
147
- }
148
- toast.success(t("pages.controlCenter.profiles.updateSuccess"));
149
- closeForm();
150
- onMutated();
151
- };
152
- const handleDeleteConfirm = async () => {
153
- if (deleteTarget === null)
154
- return;
155
- setDeleting(true);
156
- setDeleteError(null);
157
- const result = await deleteRuntimeProfile(deleteTarget);
158
- setDeleting(false);
159
- if (!result.success) {
160
- // rc-9: surface reason (e.g. "referenced by agents: diagnostician")
161
- setDeleteError(result.error);
162
- toast.error(t("pages.controlCenter.profiles.operationFailed"));
163
- return;
164
- }
165
- toast.success(t("pages.controlCenter.profiles.deleteSuccess"));
166
- setDeleteTarget(null);
167
- setDeleteError(null);
168
- onMutated();
169
- };
170
- const handleDeleteCancel = () => {
171
- setDeleteTarget(null);
172
- setDeleteError(null);
173
- };
174
- const inputClass = "bg-surface border border-line-2 rounded-[3px] px-[10px] py-[6px] text-[12.5px] text-ink focus:outline-none focus:border-gov disabled:opacity-50 disabled:cursor-not-allowed w-full";
175
- const labelClass = "block font-mono text-[10.5px] uppercase tracking-[0.04em] text-ink-4 mb-[4px]";
176
- const hintClass = "mt-[3px] text-[11px] text-ink-4 leading-[1.4]";
177
- return (_jsxs("div", { id: "runtime-profile-manager", className: "scroll-mt-4", children: [_jsxs("div", { className: "flex items-center justify-between gap-[12px] mb-3", children: [_jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed", children: t("pages.controlCenter.profiles.sectionDescription") }), mode === "closed" && (_jsx("button", { type: "button", onClick: openCreate, className: "shrink-0 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: t("pages.controlCenter.profiles.createButton") }))] }), mode !== "closed" && (_jsxs("form", { onSubmit: handleSubmit, className: "mb-[10px] bg-panel border border-line rounded-[6px] px-[16px] py-[14px]", children: [_jsxs("div", { className: "flex items-center justify-between mb-3", children: [_jsx("h4", { className: "text-[13px] font-semibold text-ink", children: mode === "create"
178
- ? t("pages.controlCenter.profiles.formTitleCreate")
179
- : t("pages.controlCenter.profiles.formTitleEdit", {
180
- id: form.id,
181
- }) }), _jsx("button", { type: "button", onClick: closeForm, className: "text-[12px] text-ink-4 hover:text-ink-2 transition-colors", children: t("pages.controlCenter.profiles.cancelButton") })] }), _jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-x-[14px] gap-y-[12px]", children: [_jsxs("div", { children: [_jsx("label", { className: labelClass, htmlFor: "rpf-id", children: t("pages.controlCenter.profiles.fieldId") }), _jsx("input", { id: "rpf-id", type: "text", value: form.id, onChange: (e) => handleFieldChange("id", e.target.value), disabled: mode === "edit" || submitting, placeholder: t("pages.controlCenter.profiles.fieldIdPlaceholder"), className: inputClass, autoComplete: "off", spellCheck: false }), _jsx("p", { className: hintClass, children: t("pages.controlCenter.profiles.fieldIdHint") })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, htmlFor: "rpf-provider", children: t("pages.controlCenter.profiles.fieldProvider") }), _jsx("input", { id: "rpf-provider", type: "text", value: form.provider, onChange: (e) => handleFieldChange("provider", e.target.value), disabled: submitting, placeholder: t("pages.controlCenter.profiles.fieldProviderPlaceholder"), className: inputClass, autoComplete: "off", spellCheck: false })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, htmlFor: "rpf-model", children: t("pages.controlCenter.profiles.fieldModel") }), _jsx("input", { id: "rpf-model", type: "text", value: form.model, onChange: (e) => handleFieldChange("model", e.target.value), disabled: submitting, placeholder: t("pages.controlCenter.profiles.fieldModelPlaceholder"), className: inputClass, autoComplete: "off", spellCheck: false })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, htmlFor: "rpf-apikeyenv", children: t("pages.controlCenter.profiles.fieldApiKeyEnv") }), _jsx("input", { id: "rpf-apikeyenv", type: "text", value: form.apiKeyEnv, onChange: (e) => handleFieldChange("apiKeyEnv", e.target.value), disabled: submitting, placeholder: t("pages.controlCenter.profiles.fieldApiKeyEnvPlaceholder"), className: cn(inputClass, "font-mono"), autoComplete: "off", spellCheck: false }), _jsx("p", { className: hintClass, children: t("pages.controlCenter.profiles.fieldApiKeyEnvHint") })] }), _jsxs("div", { children: [_jsx("label", { className: labelClass, htmlFor: "rpf-baseurl", children: t("pages.controlCenter.profiles.fieldBaseUrl") }), _jsx("input", { id: "rpf-baseurl", type: "text", value: form.baseUrl, onChange: (e) => handleFieldChange("baseUrl", e.target.value), disabled: submitting, placeholder: t("pages.controlCenter.profiles.fieldBaseUrlPlaceholder"), className: inputClass, autoComplete: "off", spellCheck: false })] })] }), formError !== null && (_jsx("div", { className: "mt-3 px-[12px] py-[8px] border border-danger/35 rounded-[4px] bg-danger/10 text-[12px] text-danger font-mono", children: formError })), _jsxs("div", { className: "mt-3 flex items-center gap-[8px]", children: [_jsx("button", { type: "submit", disabled: submitting, className: "border border-gov bg-gov text-paper rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:bg-gov-2 transition-colors disabled:opacity-50 focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: submitting
182
- ? mode === "create"
183
- ? t("pages.controlCenter.profiles.creating")
184
- : t("pages.controlCenter.profiles.saving")
185
- : t("pages.controlCenter.profiles.saveButton") }), _jsx("button", { type: "button", onClick: closeForm, disabled: submitting, className: "border border-line bg-surface text-ink-3 rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:border-line-2 hover:text-ink transition-colors disabled:opacity-50", children: t("pages.controlCenter.profiles.cancelButton") })] })] })), profiles.length === 0 ? (_jsx("div", { className: "bg-surface border border-line-2 rounded-[4px] px-[16px] py-[14px] text-[12.5px] text-ink-4 italic", children: t("pages.controlCenter.profiles.empty") })) : (_jsxs("div", { className: "bg-surface border border-line-2 rounded-[4px] overflow-hidden", children: [_jsxs("div", { className: "grid grid-cols-[12px_1fr_84px_1fr_1fr_1fr_auto] gap-[10px] items-center px-[16px] py-[9px] bg-paper-2 border-b border-line-2 font-mono text-[10.5px] uppercase tracking-[0.04em] text-ink-4", children: [_jsx("span", {}), _jsx("span", { children: t("pages.controlCenter.profiles.columnId") }), _jsx("span", { children: t("pages.controlCenter.profiles.columnType") }), _jsx("span", { children: t("pages.controlCenter.profiles.columnProvider") }), _jsx("span", { children: t("pages.controlCenter.profiles.columnModel") }), _jsx("span", { children: t("pages.controlCenter.profiles.columnApiKeyEnv") }), _jsx("span", { className: "text-right", children: t("pages.controlCenter.profiles.columnActions") })] }), profiles.map((p) => {
186
- const isDefault = p.id === defaultRuntimeId;
187
- const isDeleteTarget = deleteTarget === p.id;
188
- return (_jsxs("div", { className: "border-b border-line-2 last:border-b-0", children: [_jsxs("div", { className: "grid grid-cols-[12px_1fr_84px_1fr_1fr_1fr_auto] gap-[10px] items-center px-[16px] py-[10px] text-[12.5px]", children: [_jsx("div", { className: readinessDotClasses(p.readiness), "aria-label": enumLabel("readiness", p.readiness, t), title: enumLabel("readiness", p.readiness, t) }), _jsxs("div", { className: "min-w-0 flex items-center gap-[6px]", children: [_jsx("span", { className: "font-mono text-[12px] text-ink truncate", children: p.id }), isDefault && (_jsx("span", { className: "shrink-0 text-[9.5px] font-mono px-[5px] py-[1px] rounded-[2px] bg-gov/10 text-gov border border-gov/22 tracking-[0.02em]", children: "default" }))] }), _jsxs("span", { className: "font-mono text-[11.5px] text-ink-3 flex items-center gap-[5px]", children: [p.type, p.type === "openclaw" && (_jsx("span", { className: "text-[9.5px] font-mono px-[5px] py-[1px] rounded-[2px] bg-amber/10 text-amber border border-amber/22 tracking-[0.02em]", children: t("pages.controlCenter.profiles.retiredBadge") }))] }), _jsx("span", { className: "text-ink-3 truncate", children: p.provider ?? "—" }), _jsx("span", { className: "text-ink-3 truncate", children: p.model ?? "—" }), _jsx("span", { className: "font-mono text-[11.5px] text-ink-3 truncate", children: p.apiKeyEnv ?? "—" }), _jsxs("div", { className: "flex items-center justify-end gap-[6px]", children: [p.type !== "openclaw" && (_jsx("button", { type: "button", onClick: () => openEdit(p), disabled: mode !== "closed" || deleting, className: "text-[11.5px] px-[10px] py-[4px] rounded-[3px] border border-line bg-surface text-ink-3 hover:border-line-2 hover:text-ink transition-colors disabled:opacity-40 disabled:cursor-not-allowed", children: t("pages.controlCenter.profiles.editButton") })), _jsx("button", { type: "button", onClick: () => {
189
- setDeleteTarget(p.id);
190
- setDeleteError(null);
191
- }, disabled: mode !== "closed" ||
192
- deleting ||
193
- deleteTarget !== null, className: "text-[11.5px] px-[10px] py-[4px] rounded-[3px] border border-line bg-surface text-ink-3 hover:border-danger/40 hover:text-danger transition-colors disabled:opacity-40 disabled:cursor-not-allowed", children: t("pages.controlCenter.profiles.deleteButton") })] })] }), isDeleteTarget && (_jsx("div", { className: "px-[16px] pb-[12px]", children: _jsxs("div", { className: "px-[12px] py-[10px] border border-danger rounded-[4px] bg-danger/10 text-[12px] text-ink-2 leading-[1.55]", children: [_jsx("div", { className: "font-medium", children: t("pages.controlCenter.profiles.deleteConfirmMessage", {
194
- id: p.id,
195
- }) }), isDefault && (_jsx("div", { className: "mt-1 text-ink-3", children: t("pages.controlCenter.profiles.sectionDescription") })), deleteError !== null && (_jsx("div", { className: "mt-2 font-mono text-[11.5px] text-danger", children: deleteError })), _jsxs("div", { className: "mt-2 flex gap-[8px]", children: [_jsx("button", { type: "button", onClick: handleDeleteConfirm, disabled: deleting, className: "text-[11.5px] px-[12px] py-[4px] rounded-[3px] border border-transparent bg-danger text-paper font-medium hover:opacity-90 transition-opacity disabled:opacity-50 focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: deleting
196
- ? t("pages.controlCenter.profiles.deleting")
197
- : t("pages.controlCenter.profiles.deleteConfirmAck") }), _jsx("button", { type: "button", onClick: handleDeleteCancel, disabled: deleting, className: "text-[11.5px] px-[12px] py-[4px] rounded-[3px] border border-line bg-transparent text-ink-3 hover:border-line-2 transition-colors disabled:opacity-50", children: t("pages.controlCenter.profiles.deleteConfirmCancel") })] })] }) }))] }, p.id));
198
- })] }))] }));
199
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * WorkflowDiagram — PD 行为回路 4 阶段图
3
- *
4
- * 纯展示组件,所有文本来自 i18n。Phase 03(Owner 审批)用虚线边框 +
5
- * gov 色调高亮,强调"人在治理中心"(品牌 Principle 3)。
6
- *
7
- * 视觉规格取自 design-prototype/control-center.html 第 115-151 行。
8
- *
9
- * rc 合规:
10
- * - rc-1: 纯展示组件,消费 i18n 字符串(已受控),无 untrusted 数据
11
- * - rc-8: 无 JSON 序列化路径
12
- *
13
- * 品牌约束(PRI-CR1 B.4.4):
14
- * - 禁止 translateY / scale hover 效果(仅 rotate 允许用于箭头朝向)
15
- * - 无硬编码十六进制色值,全用 token
16
- */
17
- export declare function WorkflowDiagram(): import("react").JSX.Element;
@@ -1,55 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useTranslation } from "react-i18next";
3
- import { ChevronRight, RefreshCw } from "lucide-react";
4
- /**
5
- * WorkflowDiagram — PD 行为回路 4 阶段图
6
- *
7
- * 纯展示组件,所有文本来自 i18n。Phase 03(Owner 审批)用虚线边框 +
8
- * gov 色调高亮,强调"人在治理中心"(品牌 Principle 3)。
9
- *
10
- * 视觉规格取自 design-prototype/control-center.html 第 115-151 行。
11
- *
12
- * rc 合规:
13
- * - rc-1: 纯展示组件,消费 i18n 字符串(已受控),无 untrusted 数据
14
- * - rc-8: 无 JSON 序列化路径
15
- *
16
- * 品牌约束(PRI-CR1 B.4.4):
17
- * - 禁止 translateY / scale hover 效果(仅 rotate 允许用于箭头朝向)
18
- * - 无硬编码十六进制色值,全用 token
19
- */
20
- export function WorkflowDiagram() {
21
- const { t } = useTranslation();
22
- const phases = [
23
- {
24
- num: "01",
25
- nameKey: "pages.controlCenter.workflow.phase01",
26
- descKey: "pages.controlCenter.workflow.phase01Desc",
27
- isHuman: false,
28
- },
29
- {
30
- num: "02",
31
- nameKey: "pages.controlCenter.workflow.phase02",
32
- descKey: "pages.controlCenter.workflow.phase02Desc",
33
- isHuman: false,
34
- },
35
- {
36
- num: "03",
37
- nameKey: "pages.controlCenter.workflow.phase03",
38
- descKey: "pages.controlCenter.workflow.phase03Desc",
39
- isHuman: true,
40
- },
41
- {
42
- num: "04",
43
- nameKey: "pages.controlCenter.workflow.phase04",
44
- descKey: "pages.controlCenter.workflow.phase04Desc",
45
- isHuman: false,
46
- },
47
- ];
48
- return (_jsxs("div", { className: "mt-8 bg-surface border border-line-2 rounded-[8px] px-[22px] py-[18px]", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx("span", { className: "text-[11px] font-mono uppercase tracking-[0.1em] text-ink-4 font-medium", children: t("pages.controlCenter.workflow.title") }), _jsx("span", { className: "text-[11px] font-mono uppercase tracking-[0.1em] text-ink-4", children: t("pages.controlCenter.workflow.subtitle") }), _jsx("span", { className: "flex-1 h-px bg-line-2", "aria-hidden": "true" })] }), _jsx("div", { className: "grid grid-cols-[1fr_24px_1fr_24px_1fr_24px_1fr] items-stretch", children: phases.map((phase, idx) => (_jsxs("div", { className: "contents", children: [_jsxs("div", { className: phase.isHuman
49
- ? "px-[10px] py-[12px] text-center flex flex-col gap-[5px] justify-center border border-dashed border-gov bg-gov/10 rounded-[4px]"
50
- : "px-[10px] py-[12px] text-center flex flex-col gap-[5px] justify-center bg-paper-2 border border-line-2 rounded-[4px]", children: [_jsx("div", { className: "text-[10px] font-mono text-ink-4 tracking-[0.06em]", children: phase.num }), _jsx("div", { className: phase.isHuman
51
- ? "text-[14px] font-semibold text-gov tracking-[-0.005em]"
52
- : "text-[14px] font-semibold text-ink tracking-[-0.005em]", children: t(phase.nameKey) }), _jsx("div", { className: phase.isHuman
53
- ? "text-[11.5px] text-gov-2 italic leading-[1.45] whitespace-pre-line"
54
- : "text-[11.5px] text-ink-3 leading-[1.45] whitespace-pre-line", children: t(phase.descKey) })] }), idx < phases.length - 1 && (_jsx("div", { className: "flex items-center justify-center text-ink-4 font-mono", children: _jsx(ChevronRight, { className: "w-[18px] h-[18px]", "aria-hidden": "true" }) }))] }, phase.num))) }), _jsxs("div", { className: "mt-[14px] pt-[12px] border-t border-line-2 flex items-center gap-[10px] text-[11.5px] text-ink-4 font-mono leading-[1.5]", children: [_jsx(RefreshCw, { className: "w-[14px] h-[14px] text-gov shrink-0", "aria-hidden": "true" }), _jsx("span", { children: t("pages.controlCenter.workflow.loopHint") })] })] }));
55
- }
@@ -1,2 +0,0 @@
1
- import React from "react";
2
- export declare function DebtPage(): React.JSX.Element;