create-principles-disciple 1.82.0 → 1.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/console/dist/server/config/pd-config-store.d.ts +135 -0
  2. package/console/dist/server/config/pd-config-store.js +660 -0
  3. package/console/dist/server/index.js +40 -389
  4. package/console/dist/server/models/ActivationsConsoleModel.d.ts +33 -0
  5. package/console/dist/server/models/ActivationsConsoleModel.js +112 -0
  6. package/console/dist/server/models/ApprovalsConsoleModel.d.ts +5 -0
  7. package/console/dist/server/models/ApprovalsConsoleModel.js +14 -0
  8. package/console/dist/server/models/ApprovalsGroupedConsoleModel.d.ts +25 -0
  9. package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +126 -0
  10. package/console/dist/server/models/ConsoleLifecycleDatasource.d.ts +13 -0
  11. package/console/dist/server/models/ConsoleLifecycleDatasource.js +73 -0
  12. package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +58 -0
  13. package/console/dist/server/models/EvidenceChainConsoleModel.js +493 -0
  14. package/console/dist/server/models/GovernanceConsoleModel.d.ts +74 -0
  15. package/console/dist/server/models/GovernanceConsoleModel.js +246 -0
  16. package/console/dist/server/models/HealthCheckModel.d.ts +0 -4
  17. package/console/dist/server/models/HealthCheckModel.js +49 -80
  18. package/console/dist/server/models/LifecycleConsoleModel.d.ts +19 -0
  19. package/console/dist/server/models/LifecycleConsoleModel.js +55 -0
  20. package/console/dist/server/models/PrincipleClassifier.d.ts +41 -0
  21. package/console/dist/server/models/PrincipleClassifier.js +100 -0
  22. package/console/dist/server/models/PrinciplesConsoleModel.d.ts +12 -1
  23. package/console/dist/server/models/PrinciplesConsoleModel.js +53 -6
  24. package/console/dist/server/models/WorkspaceService.d.ts +2 -1
  25. package/console/dist/server/models/WorkspaceService.js +51 -23
  26. package/console/dist/server/routes/activations.d.ts +3 -0
  27. package/console/dist/server/routes/activations.js +111 -0
  28. package/console/dist/server/routes/approvals-grouped.d.ts +3 -0
  29. package/console/dist/server/routes/approvals-grouped.js +32 -0
  30. package/console/dist/server/routes/approvals.js +28 -4
  31. package/console/dist/server/routes/config.d.ts +27 -0
  32. package/console/dist/server/routes/config.js +213 -0
  33. package/console/dist/server/routes/evidence-chain.d.ts +9 -0
  34. package/console/dist/server/routes/evidence-chain.js +32 -0
  35. package/console/dist/server/routes/governance.d.ts +3 -0
  36. package/console/dist/server/routes/governance.js +32 -0
  37. package/console/dist/server/routes/{evolution.d.ts → lifecycle.d.ts} +2 -2
  38. package/console/dist/server/routes/lifecycle.js +48 -0
  39. package/console/dist/server/routes/principles.js +74 -1
  40. package/console/dist/server/routes/workspaces.js +8 -1
  41. package/console/dist/server/utils/response.d.ts +1 -1
  42. package/console/dist/server/utils/response.js +6 -2
  43. package/console/dist/types.d.ts +1 -0
  44. package/console/dist/ui/App.js +116 -40
  45. package/console/dist/ui/api.d.ts +88 -501
  46. package/console/dist/ui/api.js +139 -162
  47. package/console/dist/ui/components/approval-card.js +1 -1
  48. package/console/dist/ui/components/approval-detail-dialog.js +1 -1
  49. package/console/dist/ui/components/auth/login-form.d.ts +3 -0
  50. package/console/dist/ui/components/auth/login-form.js +36 -0
  51. package/console/dist/ui/components/auth/splash-screen.d.ts +8 -0
  52. package/console/dist/ui/components/auth/splash-screen.js +22 -0
  53. package/console/dist/ui/components/layout/app-sidebar.d.ts +1 -0
  54. package/console/dist/ui/components/layout/app-sidebar.js +56 -0
  55. package/console/dist/ui/components/layout/page-shell.d.ts +11 -0
  56. package/console/dist/ui/components/layout/page-shell.js +10 -0
  57. package/console/dist/ui/components/layout/section-title.d.ts +10 -0
  58. package/console/dist/ui/components/layout/section-title.js +9 -0
  59. package/console/dist/ui/components/theme-provider.d.ts +1 -1
  60. package/console/dist/ui/components/theme-provider.js +13 -8
  61. package/console/dist/ui/components/theme-toggle.js +2 -21
  62. package/console/dist/ui/components/ui/badge.d.ts +1 -1
  63. package/console/dist/ui/components/ui/badge.js +7 -5
  64. package/console/dist/ui/components/ui/button.d.ts +2 -2
  65. package/console/dist/ui/components/ui/button.js +12 -11
  66. package/console/dist/ui/components/ui/card.js +6 -6
  67. package/console/dist/ui/components/ui/sheet.d.ts +1 -1
  68. package/console/dist/ui/i18n/en.json +401 -343
  69. package/console/dist/ui/i18n/index.js +2 -2
  70. package/console/dist/ui/i18n/zh-CN.json +406 -348
  71. package/console/dist/ui/main.d.ts +1 -1
  72. package/console/dist/ui/main.js +1 -0
  73. package/console/dist/ui/pages/activation/ActivationPage.d.ts +1 -0
  74. package/console/dist/ui/pages/activation/ActivationPage.js +150 -0
  75. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +20 -0
  76. package/console/dist/ui/pages/activation/ActivationValidators.js +156 -0
  77. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +1 -0
  78. package/console/dist/ui/pages/control-center/ControlCenterPage.js +447 -0
  79. package/console/dist/ui/pages/debt/DebtPage.d.ts +1 -0
  80. package/console/dist/ui/pages/debt/DebtPage.js +5 -0
  81. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +1 -0
  82. package/console/dist/ui/pages/design-system/DesignSystemPage.js +30 -0
  83. package/console/dist/ui/pages/focus/FocusPage.d.ts +1 -0
  84. package/console/dist/ui/pages/focus/FocusPage.js +265 -0
  85. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +59 -0
  86. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +125 -0
  87. package/console/dist/ui/pages/pain/PainPage.js +136 -0
  88. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +264 -0
  89. package/console/dist/ui/pages/principles/PrinciplesPage.js +244 -0
  90. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +245 -0
  91. package/console/dist/ui/pages/settings/SettingsPage.d.ts +4 -0
  92. package/console/dist/ui/pages/settings/SettingsPage.js +202 -0
  93. package/console/dist/ui/pages/settings/UpdatePage.d.ts +5 -0
  94. package/console/dist/ui/pages/settings/UpdatePage.js +168 -0
  95. package/console/dist/ui/utils/control-center-helpers.d.ts +58 -0
  96. package/console/dist/ui/utils/control-center-helpers.js +152 -0
  97. package/console/dist/ui/utils/validators.d.ts +350 -0
  98. package/console/dist/ui/utils/validators.js +995 -0
  99. package/console/dist/web/assets/app.css +672 -902
  100. package/console/dist/web/assets/app.js +6404 -15347
  101. package/console/dist/web/assets/jetbrains-mono-cyrillic-400-normal-C5JECUCT.woff2 +0 -0
  102. package/console/dist/web/assets/jetbrains-mono-cyrillic-400-normal-FGCZYWMY.woff +0 -0
  103. package/console/dist/web/assets/jetbrains-mono-cyrillic-ext-400-normal-C7IFWGF6.woff2 +0 -0
  104. package/console/dist/web/assets/jetbrains-mono-cyrillic-ext-400-normal-PWXUA557.woff +0 -0
  105. package/console/dist/web/assets/jetbrains-mono-greek-400-normal-JJNQZMPZ.woff +0 -0
  106. package/console/dist/web/assets/jetbrains-mono-greek-400-normal-O7JTTR3P.woff2 +0 -0
  107. package/console/dist/web/assets/jetbrains-mono-latin-400-normal-3OOWLGQ2.woff2 +0 -0
  108. package/console/dist/web/assets/jetbrains-mono-latin-400-normal-WDD34GPP.woff +0 -0
  109. package/console/dist/web/assets/jetbrains-mono-latin-ext-400-normal-55RNMRQS.woff +0 -0
  110. package/console/dist/web/assets/jetbrains-mono-latin-ext-400-normal-JVR3IR4Z.woff2 +0 -0
  111. package/console/dist/web/assets/jetbrains-mono-vietnamese-400-normal-7ULXAK72.woff +0 -0
  112. package/console/dist/web/assets/jetbrains-mono-vietnamese-400-normal-KU7YLUPA.woff2 +0 -0
  113. package/console/package.json +2 -1
  114. package/core/dist/runtime-v2/__tests__/admission-gate.test.js +49 -0
  115. package/core/dist/runtime-v2/__tests__/admission-gate.test.js.map +1 -1
  116. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +16 -1
  117. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  118. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts +21 -0
  119. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts.map +1 -0
  120. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.js +354 -0
  121. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.js.map +1 -0
  122. package/core/dist/runtime-v2/__tests__/language-directive.test.d.ts +12 -0
  123. package/core/dist/runtime-v2/__tests__/language-directive.test.d.ts.map +1 -0
  124. package/core/dist/runtime-v2/__tests__/language-directive.test.js +162 -0
  125. package/core/dist/runtime-v2/__tests__/language-directive.test.js.map +1 -0
  126. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +23 -1
  127. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  128. package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +48 -3
  129. package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
  130. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +13 -1
  131. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
  132. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts +12 -0
  133. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts.map +1 -0
  134. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js +194 -0
  135. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js.map +1 -0
  136. package/core/dist/runtime-v2/__tests__/runtime-config-boundary.test.js +5 -3
  137. package/core/dist/runtime-v2/__tests__/runtime-config-boundary.test.js.map +1 -1
  138. package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +1 -0
  139. package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
  140. package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js +54 -0
  141. package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
  142. package/core/dist/runtime-v2/activation/__tests__/memory-activation-state-store.test.js +15 -2
  143. package/core/dist/runtime-v2/activation/__tests__/memory-activation-state-store.test.js.map +1 -1
  144. package/core/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js +10 -0
  145. package/core/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js.map +1 -1
  146. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +17 -2
  147. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
  148. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +36 -0
  149. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
  150. package/core/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
  151. package/core/dist/runtime-v2/activation/activation-dispatcher.js +1 -1
  152. package/core/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
  153. package/core/dist/runtime-v2/activation/activation-types.d.ts +10 -0
  154. package/core/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
  155. package/core/dist/runtime-v2/activation/activation-types.js.map +1 -1
  156. package/core/dist/runtime-v2/activation/approval-queue.d.ts +6 -0
  157. package/core/dist/runtime-v2/activation/approval-queue.d.ts.map +1 -1
  158. package/core/dist/runtime-v2/activation/approval-queue.js +3 -0
  159. package/core/dist/runtime-v2/activation/approval-queue.js.map +1 -1
  160. package/core/dist/runtime-v2/activation/memory-activation-state-store.d.ts +2 -0
  161. package/core/dist/runtime-v2/activation/memory-activation-state-store.d.ts.map +1 -1
  162. package/core/dist/runtime-v2/activation/memory-activation-state-store.js +17 -1
  163. package/core/dist/runtime-v2/activation/memory-activation-state-store.js.map +1 -1
  164. package/core/dist/runtime-v2/activation/memory-approval-store.d.ts +6 -0
  165. package/core/dist/runtime-v2/activation/memory-approval-store.d.ts.map +1 -1
  166. package/core/dist/runtime-v2/activation/memory-approval-store.js +16 -0
  167. package/core/dist/runtime-v2/activation/memory-approval-store.js.map +1 -1
  168. package/core/dist/runtime-v2/activation/prompt-activation-reader-contract.js +1 -1
  169. package/core/dist/runtime-v2/activation/prompt-activation-reader-contract.js.map +1 -1
  170. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts +2 -0
  171. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
  172. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +34 -6
  173. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
  174. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts +6 -0
  175. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
  176. package/core/dist/runtime-v2/activation/sqlite-approval-store.js +10 -0
  177. package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
  178. package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js +51 -1
  179. package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js.map +1 -1
  180. package/core/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter.test.js +145 -0
  181. package/core/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter.test.js.map +1 -1
  182. package/core/dist/runtime-v2/adapter/json-extractor.d.ts +13 -0
  183. package/core/dist/runtime-v2/adapter/json-extractor.d.ts.map +1 -1
  184. package/core/dist/runtime-v2/adapter/json-extractor.js +103 -0
  185. package/core/dist/runtime-v2/adapter/json-extractor.js.map +1 -1
  186. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts +4 -2
  187. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts.map +1 -1
  188. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js +57 -5
  189. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js.map +1 -1
  190. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts +18 -0
  191. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts.map +1 -0
  192. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +633 -0
  193. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -0
  194. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +92 -0
  195. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -1
  196. package/core/dist/runtime-v2/config/index.d.ts +3 -1
  197. package/core/dist/runtime-v2/config/index.d.ts.map +1 -1
  198. package/core/dist/runtime-v2/config/index.js +1 -0
  199. package/core/dist/runtime-v2/config/index.js.map +1 -1
  200. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts +93 -0
  201. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -0
  202. package/core/dist/runtime-v2/config/pd-config-agent-binding.js +184 -0
  203. package/core/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -0
  204. package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
  205. package/core/dist/runtime-v2/config/pd-config-defaults.js +2 -0
  206. package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  207. package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
  208. package/core/dist/runtime-v2/config/pd-config-effective.js +3 -0
  209. package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
  210. package/core/dist/runtime-v2/config/pd-config-types.d.ts +8 -0
  211. package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
  212. package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
  213. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts +13 -0
  214. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts.map +1 -0
  215. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js +97 -0
  216. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js.map +1 -0
  217. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +3 -2
  218. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  219. package/core/dist/runtime-v2/diagnostician-prompt-builder.js +6 -4
  220. package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  221. package/core/dist/runtime-v2/evidence-sanitizer.d.ts +57 -0
  222. package/core/dist/runtime-v2/evidence-sanitizer.d.ts.map +1 -0
  223. package/core/dist/runtime-v2/evidence-sanitizer.js +213 -0
  224. package/core/dist/runtime-v2/evidence-sanitizer.js.map +1 -0
  225. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts +7 -0
  226. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts.map +1 -0
  227. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js +170 -0
  228. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js.map +1 -0
  229. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts +18 -0
  230. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts.map +1 -0
  231. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js +277 -0
  232. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js.map +1 -0
  233. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts +13 -0
  234. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts.map +1 -0
  235. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +264 -0
  236. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -0
  237. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts +16 -0
  238. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts.map +1 -0
  239. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js +316 -0
  240. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js.map +1 -0
  241. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts +126 -0
  242. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts.map +1 -0
  243. package/core/dist/runtime-v2/evidence-triage/admission-events.js +159 -0
  244. package/core/dist/runtime-v2/evidence-triage/admission-events.js.map +1 -0
  245. package/core/dist/runtime-v2/evidence-triage/index.d.ts +16 -0
  246. package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -0
  247. package/core/dist/runtime-v2/evidence-triage/index.js +13 -0
  248. package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -0
  249. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +48 -0
  250. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -0
  251. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +131 -0
  252. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -0
  253. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +32 -0
  254. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -0
  255. package/core/dist/runtime-v2/evidence-triage/triage-policy.js +95 -0
  256. package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -0
  257. package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts +116 -0
  258. package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts.map +1 -0
  259. package/core/dist/runtime-v2/evidence-triage/trigger-controller.js +218 -0
  260. package/core/dist/runtime-v2/evidence-triage/trigger-controller.js.map +1 -0
  261. package/core/dist/runtime-v2/evidence-triage/types.d.ts +65 -0
  262. package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -0
  263. package/core/dist/runtime-v2/evidence-triage/types.js +38 -0
  264. package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -0
  265. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +10 -0
  266. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  267. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  268. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
  269. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  270. package/core/dist/runtime-v2/index.d.ts +8 -1
  271. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  272. package/core/dist/runtime-v2/index.js +7 -1
  273. package/core/dist/runtime-v2/index.js.map +1 -1
  274. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts +12 -0
  275. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts.map +1 -0
  276. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js +83 -0
  277. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js.map +1 -0
  278. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +10 -0
  279. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  280. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +13 -1
  281. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  282. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +3 -0
  283. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  284. package/core/dist/runtime-v2/internalization/scribe-runner.js +2 -0
  285. package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  286. package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js +1 -1
  287. package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js.map +1 -1
  288. package/core/dist/runtime-v2/language-directive.d.ts +80 -0
  289. package/core/dist/runtime-v2/language-directive.d.ts.map +1 -0
  290. package/core/dist/runtime-v2/language-directive.js +108 -0
  291. package/core/dist/runtime-v2/language-directive.js.map +1 -0
  292. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  293. package/core/dist/runtime-v2/pain-signal-observability.js +24 -11
  294. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  295. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +16 -0
  296. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  297. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +97 -6
  298. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  299. package/core/dist/runtime-v2/pain-to-principle-service.d.ts +7 -0
  300. package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  301. package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
  302. package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  303. package/core/dist/runtime-v2/proven-channel-baseline.d.ts.map +1 -1
  304. package/core/dist/runtime-v2/proven-channel-baseline.js +14 -0
  305. package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
  306. package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js +40 -0
  307. package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js.map +1 -1
  308. package/core/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  309. package/core/dist/runtime-v2/runner/base-peer-runner.js +1 -0
  310. package/core/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  311. package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts +10 -0
  312. package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts.map +1 -1
  313. package/core/dist/runtime-v2/runner/diagnostician-runner-options.js +1 -0
  314. package/core/dist/runtime-v2/runner/diagnostician-runner-options.js.map +1 -1
  315. package/core/dist/runtime-v2/runner/diagnostician-runner.d.ts.map +1 -1
  316. package/core/dist/runtime-v2/runner/diagnostician-runner.js +28 -4
  317. package/core/dist/runtime-v2/runner/diagnostician-runner.js.map +1 -1
  318. package/core/dist/runtime-v2/runner/peer-runner-types.d.ts +9 -0
  319. package/core/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
  320. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  321. package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js +34 -1
  322. package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js.map +1 -1
  323. package/core/dist/runtime-v2/store/runtime-state-manager.js +1 -0
  324. package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  325. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  326. package/core/dist/runtime-v2/store/sqlite-connection.js +9 -1
  327. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  328. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +1 -1
  329. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  330. package/core/dist/runtime-v2/task-status.d.ts +4 -4
  331. package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
  332. package/core/dist/runtime-v2/task-status.js +2 -2
  333. package/core/dist/runtime-v2/task-status.js.map +1 -1
  334. package/core/package.json +1 -1
  335. package/package.json +2 -2
  336. package/pd-cli/dist/commands/console.d.ts +2 -0
  337. package/pd-cli/dist/commands/console.d.ts.map +1 -1
  338. package/pd-cli/dist/commands/console.js +6 -1
  339. package/pd-cli/dist/commands/console.js.map +1 -1
  340. package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
  341. package/pd-cli/dist/commands/diagnose.js +18 -1
  342. package/pd-cli/dist/commands/diagnose.js.map +1 -1
  343. package/pd-cli/dist/commands/pain-evidence.d.ts +41 -0
  344. package/pd-cli/dist/commands/pain-evidence.d.ts.map +1 -0
  345. package/pd-cli/dist/commands/pain-evidence.js +177 -0
  346. package/pd-cli/dist/commands/pain-evidence.js.map +1 -0
  347. package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
  348. package/pd-cli/dist/commands/pain-record.js +24 -9
  349. package/pd-cli/dist/commands/pain-record.js.map +1 -1
  350. package/pd-cli/dist/commands/pain-retry.d.ts +19 -0
  351. package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -0
  352. package/pd-cli/dist/commands/pain-retry.js +485 -0
  353. package/pd-cli/dist/commands/pain-retry.js.map +1 -0
  354. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  355. package/pd-cli/dist/commands/runtime-internalization-run-once.js +59 -9
  356. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  357. package/pd-cli/dist/commands/runtime-uat.d.ts +1 -0
  358. package/pd-cli/dist/commands/runtime-uat.d.ts.map +1 -1
  359. package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts +2 -0
  360. package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts.map +1 -0
  361. package/pd-cli/dist/commands/runtime-uat.guard.test.js +155 -0
  362. package/pd-cli/dist/commands/runtime-uat.guard.test.js.map +1 -0
  363. package/pd-cli/dist/commands/runtime-uat.js +29 -3
  364. package/pd-cli/dist/commands/runtime-uat.js.map +1 -1
  365. package/pd-cli/dist/config-reader.d.ts +25 -0
  366. package/pd-cli/dist/config-reader.d.ts.map +1 -0
  367. package/pd-cli/dist/config-reader.js +109 -0
  368. package/pd-cli/dist/config-reader.js.map +1 -0
  369. package/pd-cli/dist/index.js +40 -5
  370. package/pd-cli/dist/index.js.map +1 -1
  371. package/pd-cli/dist/services/console-launcher.d.ts.map +1 -1
  372. package/pd-cli/dist/services/console-launcher.js +29 -15
  373. package/pd-cli/dist/services/console-launcher.js.map +1 -1
  374. package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
  375. package/pd-cli/dist/services/demo-story-a-runner.js +1 -0
  376. package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
  377. package/pd-cli/dist/utils/production-workspace-guard.d.ts +77 -0
  378. package/pd-cli/dist/utils/production-workspace-guard.d.ts.map +1 -0
  379. package/pd-cli/dist/utils/production-workspace-guard.js +170 -0
  380. package/pd-cli/dist/utils/production-workspace-guard.js.map +1 -0
  381. package/pd-cli/dist/utils/production-workspace-guard.test.d.ts +2 -0
  382. package/pd-cli/dist/utils/production-workspace-guard.test.d.ts.map +1 -0
  383. package/pd-cli/dist/utils/production-workspace-guard.test.js +95 -0
  384. package/pd-cli/dist/utils/production-workspace-guard.test.js.map +1 -0
  385. package/pd-cli/package.json +1 -1
  386. package/plugin/dist/commands/pain.js +27 -2
  387. package/plugin/dist/core/pain-diagnostic-gate.d.ts +6 -0
  388. package/plugin/dist/core/pain-diagnostic-gate.js +9 -0
  389. package/plugin/dist/hooks/after-tool-call-helpers.d.ts +90 -0
  390. package/plugin/dist/hooks/after-tool-call-helpers.js +486 -0
  391. package/plugin/dist/hooks/after-tool-call-types.d.ts +92 -0
  392. package/plugin/dist/hooks/after-tool-call-types.js +13 -0
  393. package/plugin/dist/hooks/gate-block-helper.js +73 -29
  394. package/plugin/dist/hooks/llm.js +49 -29
  395. package/plugin/dist/hooks/message-sanitize.d.ts +21 -0
  396. package/plugin/dist/hooks/message-sanitize.js +30 -0
  397. package/plugin/dist/hooks/pain.d.ts +26 -3
  398. package/plugin/dist/hooks/pain.js +165 -425
  399. package/plugin/dist/hooks/prompt.js +3 -2
  400. package/plugin/dist/hooks/trajectory-evidence.d.ts +11 -0
  401. package/plugin/dist/hooks/trajectory-evidence.js +65 -0
  402. package/plugin/dist/hooks/triage-adapter.d.ts +82 -0
  403. package/plugin/dist/hooks/triage-adapter.js +121 -0
  404. package/console/dist/server/models/EventLogReadModel.d.ts +0 -33
  405. package/console/dist/server/models/EventLogReadModel.js +0 -218
  406. package/console/dist/server/models/EvolutionConsoleModel.d.ts +0 -79
  407. package/console/dist/server/models/EvolutionConsoleModel.js +0 -179
  408. package/console/dist/server/models/FeedbackConsoleModel.d.ts +0 -38
  409. package/console/dist/server/models/FeedbackConsoleModel.js +0 -129
  410. package/console/dist/server/models/GateConsoleModel.d.ts +0 -50
  411. package/console/dist/server/models/GateConsoleModel.js +0 -151
  412. package/console/dist/server/models/OverviewConsoleModel.d.ts +0 -22
  413. package/console/dist/server/models/OverviewConsoleModel.js +0 -202
  414. package/console/dist/server/models/PipelineStatsModel.d.ts +0 -35
  415. package/console/dist/server/models/PipelineStatsModel.js +0 -129
  416. package/console/dist/server/models/SampleConsoleModel.d.ts +0 -21
  417. package/console/dist/server/models/SampleConsoleModel.js +0 -188
  418. package/console/dist/server/models/ThinkingModelsConsoleModel.d.ts +0 -22
  419. package/console/dist/server/models/ThinkingModelsConsoleModel.js +0 -75
  420. package/console/dist/server/routes/agents.d.ts +0 -3
  421. package/console/dist/server/routes/agents.js +0 -442
  422. package/console/dist/server/routes/central.d.ts +0 -5
  423. package/console/dist/server/routes/central.js +0 -31
  424. package/console/dist/server/routes/events.d.ts +0 -10
  425. package/console/dist/server/routes/events.js +0 -99
  426. package/console/dist/server/routes/evolution.js +0 -73
  427. package/console/dist/server/routes/feedback.d.ts +0 -3
  428. package/console/dist/server/routes/feedback.js +0 -65
  429. package/console/dist/server/routes/gates.d.ts +0 -3
  430. package/console/dist/server/routes/gates.js +0 -52
  431. package/console/dist/server/routes/overview.d.ts +0 -3
  432. package/console/dist/server/routes/overview.js +0 -49
  433. package/console/dist/server/routes/pipeline.d.ts +0 -3
  434. package/console/dist/server/routes/pipeline.js +0 -33
  435. package/console/dist/server/routes/samples.d.ts +0 -3
  436. package/console/dist/server/routes/samples.js +0 -101
  437. package/console/dist/server/routes/thinking-models.d.ts +0 -3
  438. package/console/dist/server/routes/thinking-models.js +0 -54
  439. package/console/dist/ui/components/app-sidebar.d.ts +0 -7
  440. package/console/dist/ui/components/app-sidebar.js +0 -75
  441. package/console/dist/ui/components/compare-view.d.ts +0 -7
  442. package/console/dist/ui/components/compare-view.js +0 -32
  443. package/console/dist/ui/components/data-freshness-indicator.d.ts +0 -10
  444. package/console/dist/ui/components/data-freshness-indicator.js +0 -63
  445. package/console/dist/ui/components/health-diagnostic-card.d.ts +0 -15
  446. package/console/dist/ui/components/health-diagnostic-card.js +0 -42
  447. package/console/dist/ui/components/page-header.d.ts +0 -10
  448. package/console/dist/ui/components/page-header.js +0 -37
  449. package/console/dist/ui/hooks/useAutoRefresh.d.ts +0 -13
  450. package/console/dist/ui/hooks/useAutoRefresh.js +0 -64
  451. package/console/dist/ui/hooks/useBookmarks.d.ts +0 -6
  452. package/console/dist/ui/hooks/useBookmarks.js +0 -43
  453. package/console/dist/ui/hooks/useDebounce.d.ts +0 -2
  454. package/console/dist/ui/hooks/useDebounce.js +0 -32
  455. package/console/dist/ui/hooks/useKeyboardNavigation.d.ts +0 -14
  456. package/console/dist/ui/hooks/useKeyboardNavigation.js +0 -75
  457. package/console/dist/ui/pages/AgentsPage.d.ts +0 -1
  458. package/console/dist/ui/pages/AgentsPage.js +0 -167
  459. package/console/dist/ui/pages/ApprovalsPage.d.ts +0 -1
  460. package/console/dist/ui/pages/ApprovalsPage.js +0 -123
  461. package/console/dist/ui/pages/CentralPage.d.ts +0 -1
  462. package/console/dist/ui/pages/CentralPage.js +0 -57
  463. package/console/dist/ui/pages/DataFlowPage.d.ts +0 -1
  464. package/console/dist/ui/pages/DataFlowPage.js +0 -158
  465. package/console/dist/ui/pages/EventLogPage.d.ts +0 -1
  466. package/console/dist/ui/pages/EventLogPage.js +0 -176
  467. package/console/dist/ui/pages/EvolutionPage.d.ts +0 -1
  468. package/console/dist/ui/pages/EvolutionPage.js +0 -118
  469. package/console/dist/ui/pages/FeedbackPage.d.ts +0 -1
  470. package/console/dist/ui/pages/FeedbackPage.js +0 -46
  471. package/console/dist/ui/pages/GatesPage.d.ts +0 -1
  472. package/console/dist/ui/pages/GatesPage.js +0 -31
  473. package/console/dist/ui/pages/LoginPage.d.ts +0 -5
  474. package/console/dist/ui/pages/LoginPage.js +0 -39
  475. package/console/dist/ui/pages/OverviewPage.d.ts +0 -1
  476. package/console/dist/ui/pages/OverviewPage.js +0 -50
  477. package/console/dist/ui/pages/PainPage.js +0 -50
  478. package/console/dist/ui/pages/PrincipleDetailPage.js +0 -145
  479. package/console/dist/ui/pages/PrinciplesPage.js +0 -322
  480. package/console/dist/ui/pages/ReportProblemPage.js +0 -186
  481. package/console/dist/ui/pages/SamplesPage.d.ts +0 -1
  482. package/console/dist/ui/pages/SamplesPage.js +0 -105
  483. package/console/dist/ui/pages/SettingsPage.d.ts +0 -1
  484. package/console/dist/ui/pages/SettingsPage.js +0 -86
  485. package/console/dist/ui/pages/TasksPage.d.ts +0 -1
  486. package/console/dist/ui/pages/TasksPage.js +0 -373
  487. package/console/dist/ui/pages/ThinkingModelsPage.d.ts +0 -1
  488. package/console/dist/ui/pages/ThinkingModelsPage.js +0 -32
  489. package/console/dist/ui/pages/UpdatePage.d.ts +0 -1
  490. package/console/dist/ui/pages/UpdatePage.js +0 -142
  491. /package/console/dist/ui/pages/{PainPage.d.ts → pain/PainPage.d.ts} +0 -0
  492. /package/console/dist/ui/pages/{PrincipleDetailPage.d.ts → principles/PrincipleDetailPage.d.ts} +0 -0
  493. /package/console/dist/ui/pages/{PrinciplesPage.d.ts → principles/PrinciplesPage.d.ts} +0 -0
  494. /package/console/dist/ui/pages/{ReportProblemPage.d.ts → report-problem/ReportProblemPage.d.ts} +0 -0
@@ -1,105 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
3
- import { useSearchParams } from "react-router-dom";
4
- import { useTranslation } from "react-i18next";
5
- import { fetchSamples, fetchSampleDetail, reviewSample } from "../api.js";
6
- import { PageHeader } from "../components/page-header.js";
7
- import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card.js";
8
- import { Button } from "../components/ui/button.js";
9
- import { Select, SelectTrigger, SelectContent, SelectItem, SelectValue } from "../components/ui/select.js";
10
- import { Badge } from "../components/ui/badge.js";
11
- import { Skeleton } from "../components/ui/skeleton.js";
12
- import { Check, X, ChevronLeft, ChevronRight, ClipboardList } from "lucide-react";
13
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "../components/ui/alert-dialog.js";
14
- import { formatDate } from "../utils/format.js";
15
- const STATUS_VARIANT = {
16
- pending: "outline",
17
- approved: "default",
18
- rejected: "destructive",
19
- };
20
- export function SamplesPage() {
21
- const { t } = useTranslation();
22
- const [searchParams, setSearchParams] = useSearchParams();
23
- const [statusFilter, setStatusFilter] = useState(() => searchParams.get("status") ?? "all");
24
- const [page, setPage] = useState(() => {
25
- const p = searchParams.get("page");
26
- return p ? Math.max(1, parseInt(p, 10) || 1) : 1;
27
- });
28
- const [data, setData] = useState(null);
29
- const [selected, setSelected] = useState(null);
30
- const [selectedId, setSelectedId] = useState(() => searchParams.get("id") ?? "");
31
- const [error, setError] = useState("");
32
- const [reviewLoading, setReviewLoading] = useState(false);
33
- useEffect(() => {
34
- const params = new URLSearchParams();
35
- if (statusFilter !== "all")
36
- params.set("status", statusFilter);
37
- if (page > 1)
38
- params.set("page", String(page));
39
- if (selectedId)
40
- params.set("id", selectedId);
41
- setSearchParams(params, { replace: true });
42
- }, [statusFilter, page, selectedId, setSearchParams]);
43
- useEffect(() => {
44
- fetchSamples(statusFilter, page).then((result) => {
45
- if (result.success) {
46
- setData(result.data);
47
- setError("");
48
- }
49
- else {
50
- setError(result.error);
51
- }
52
- });
53
- }, [statusFilter, page]);
54
- useEffect(() => {
55
- if (!selectedId) {
56
- setSelected(null);
57
- return;
58
- }
59
- fetchSampleDetail(selectedId).then((result) => {
60
- if (result.success) {
61
- setSelected(result.data);
62
- setError("");
63
- }
64
- else {
65
- setError(result.error);
66
- }
67
- });
68
- }, [selectedId]);
69
- async function handleReview(decision) {
70
- if (!selected)
71
- return;
72
- setReviewLoading(true);
73
- try {
74
- const result = await reviewSample(selected.sampleId, decision);
75
- if (result.success) {
76
- const [samplesResult, detailResult] = await Promise.all([
77
- fetchSamples(statusFilter, page),
78
- fetchSampleDetail(selected.sampleId),
79
- ]);
80
- if (samplesResult.success)
81
- setData(samplesResult.data);
82
- if (detailResult.success)
83
- setSelected(detailResult.data);
84
- }
85
- else {
86
- setError(result.error);
87
- }
88
- }
89
- finally {
90
- setReviewLoading(false);
91
- }
92
- }
93
- if (error && !data) {
94
- return (_jsx(Card, { children: _jsxs(CardContent, { className: "p-6", children: [_jsx("p", { className: "text-destructive", children: error }), _jsx(Button, { variant: "outline", className: "mt-4", onClick: () => window.location.reload(), children: t("components:errorBoundary.retry") })] }) }));
95
- }
96
- if (!data) {
97
- return (_jsxs("div", { children: [_jsx(Skeleton, { className: "h-8 w-48 mb-6" }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsx(Card, { children: _jsx(CardContent, { className: "p-6", children: _jsx(Skeleton, { className: "h-40" }) }) }), _jsx(Card, { children: _jsx(CardContent, { className: "p-6", children: _jsx(Skeleton, { className: "h-40" }) }) })] })] }));
98
- }
99
- return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:samples.title"), description: t("pages:samples.description"), actions: _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("span", { id: "samples-status-filter-label", className: "text-sm text-muted-foreground", children: [t("pages:samples.filterByStatus"), ":"] }), _jsxs(Select, { value: statusFilter, onValueChange: (v) => { setStatusFilter(v); setPage(1); setSelectedId(""); }, children: [_jsx(SelectTrigger, { className: "h-9 text-sm w-[130px]", "aria-labelledby": "samples-status-filter-label", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "all", children: t("common:all") }), _jsx(SelectItem, { value: "pending", children: t("common:pending") }), _jsx(SelectItem, { value: "approved", children: t("common:completed") }), _jsx(SelectItem, { value: "rejected", children: t("common:failed") })] })] })] }) }), Object.keys(data.counters).length > 0 && (_jsx("div", { className: "flex gap-2 mb-4 flex-wrap", children: Object.entries(data.counters).map(([key, value]) => (_jsxs(Badge, { variant: "secondary", children: [key, ": ", _jsx("strong", { className: "ml-1", children: value })] }, key))) })), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [_jsxs(Card, { children: [_jsx(CardHeader, { className: "pb-3", children: _jsxs(CardTitle, { className: "text-sm", children: [t("pages:samples.title"), " (", data.pagination.total, ")"] }) }), _jsxs(CardContent, { className: "max-h-[500px] overflow-y-auto", children: [data.items.length === 0 && (_jsx("p", { className: "text-sm text-muted-foreground text-center py-8", children: t("components:zoneSection.empty") })), data.items.map((item) => (_jsxs("div", { onClick: () => setSelectedId(item.sampleId), role: "button", tabIndex: 0, onKeyDown: (e) => { if (e.key === "Enter" || e.key === " ") {
100
- e.preventDefault();
101
- setSelectedId(item.sampleId);
102
- } }, className: `p-3 border-b border-border cursor-pointer transition-colors duration-150 ${selectedId === item.sampleId
103
- ? "bg-primary/5 border-l-2 border-l-primary"
104
- : "hover:bg-accent"}`, children: [_jsxs("div", { className: "flex justify-between items-start", children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("p", { className: "font-medium text-sm truncate", children: item.title || item.sampleId }), _jsx("p", { className: "text-xs text-muted-foreground mt-0.5 line-clamp-2", children: item.description })] }), _jsxs("div", { className: "flex flex-col items-end gap-1 ml-2", children: [_jsx(Badge, { variant: STATUS_VARIANT[item.reviewStatus] ?? "outline", children: item.reviewStatus }), item.confidence !== null && (_jsxs("span", { className: "text-xs text-muted-foreground", children: [t("pages:samples.score"), " ", item.confidence] }))] })] }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: formatDate(item.createdAt) })] }, item.sampleId)))] }), data.pagination.totalPages > 1 && (_jsxs("div", { className: "flex justify-center items-center gap-3 p-3 border-t border-border", children: [_jsx(Button, { variant: "outline", size: "sm", disabled: page <= 1, onClick: () => setPage(page - 1), children: _jsx(ChevronLeft, { className: "h-4 w-4" }) }), _jsxs("span", { className: "text-sm text-muted-foreground", children: [data.pagination.page, " / ", data.pagination.totalPages] }), _jsx(Button, { variant: "outline", size: "sm", disabled: page >= data.pagination.totalPages, onClick: () => setPage(page + 1), children: _jsx(ChevronRight, { className: "h-4 w-4" }) })] }))] }), _jsxs(Card, { children: [!selected && (_jsxs("div", { className: "flex flex-col items-center justify-center py-16 text-muted-foreground", children: [_jsx(ClipboardList, { className: "h-12 w-12 mb-3 opacity-50" }), _jsx("p", { className: "text-sm", children: t("pages:samples.selectSample") })] })), selected && (_jsxs("div", { children: [_jsx("div", { className: "p-4 border-b border-border bg-muted/30", children: _jsxs("div", { className: "flex justify-between items-start", children: [_jsxs("div", { children: [_jsx("p", { className: "font-semibold text-sm", children: selected.title || selected.sampleId }), _jsxs("div", { className: "flex items-center gap-2 mt-1 text-xs text-muted-foreground", children: [_jsxs("span", { children: [selected.sampleId.slice(0, 12), "\u2026"] }), _jsx(Badge, { variant: STATUS_VARIANT[selected.reviewStatus] ?? "outline", children: selected.reviewStatus }), selected.confidence !== null && (_jsxs("span", { children: [t("pages:samples.score"), " ", selected.confidence] }))] })] }), selected.reviewStatus === "pending" && (_jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { size: "sm", onClick: () => handleReview("approved"), disabled: reviewLoading, children: [_jsx(Check, { className: "h-3 w-3 mr-1" }), reviewLoading ? "…" : t("components:taskCard.approve")] }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "destructive", size: "sm", disabled: reviewLoading, children: [_jsx(X, { className: "h-3 w-3 mr-1" }), reviewLoading ? "…" : t("components:taskCard.reject")] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t("pages:samples.confirmRejectTitle") }), _jsx(AlertDialogDescription, { children: t("pages:samples.confirmRejectDescription") })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: t("common:cancel") }), _jsx(AlertDialogAction, { className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", onClick: () => handleReview("rejected"), children: t("common:confirm") })] })] })] })] }))] }) }), _jsxs("div", { className: "p-4 max-h-[450px] overflow-y-auto", children: [selected.description && (_jsxs("div", { className: "mb-4", children: [_jsx("h4", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("common:description") }), _jsx("p", { className: "text-sm leading-relaxed", children: selected.description })] })), selected.recommendation && (_jsxs("div", { className: "mb-4", children: [_jsx("h4", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("pages:samples.recommendation") }), _jsxs("div", { className: "bg-muted/50 p-3 rounded-md text-sm flex flex-col gap-2", children: [selected.recommendation.title && (_jsxs("div", { children: [_jsx("strong", { children: t("pages:samples.titleLabel") }), " ", selected.recommendation.title] })), selected.recommendation.text && (_jsxs("div", { children: [_jsx("strong", { children: t("pages:samples.textLabel") }), " ", selected.recommendation.text] })), selected.recommendation.triggerPattern && (_jsxs("div", { children: [_jsx("strong", { children: t("pages:samples.triggerPatternLabel") }), " ", _jsx("code", { className: "bg-muted px-1.5 py-0.5 rounded text-xs", children: selected.recommendation.triggerPattern })] })), selected.recommendation.action && (_jsxs("div", { children: [_jsx("strong", { children: t("pages:samples.actionLabel") }), " ", selected.recommendation.action] })), selected.recommendation.abstractedPrinciple && (_jsxs("div", { children: [_jsx("strong", { children: t("pages:samples.abstractedPrinciple") }), " ", selected.recommendation.abstractedPrinciple] }))] })] })), selected.artifactContent && (_jsxs("div", { className: "mb-4", children: [_jsx("h4", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("pages:samples.artifactContent") }), _jsx("pre", { className: "bg-muted/50 p-3 rounded-md text-xs overflow-x-auto max-h-[200px]", children: JSON.stringify(selected.artifactContent, null, 2) })] })), _jsxs("p", { className: "text-xs text-muted-foreground mt-4", children: [t("pages:samples.createdLabel"), " ", formatDate(selected.createdAt), " | ", t("pages:samples.taskLabel"), " ", selected.taskId.slice(0, 12), "\u2026"] })] })] }))] })] })] }));
105
- }
@@ -1 +0,0 @@
1
- export declare function SettingsPage(): import("react/jsx-runtime").JSX.Element;
@@ -1,86 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { getToken, setToken, fetchWorkspaces, addWorkspace, removeWorkspace, syncWorkspace } from "../api.js";
5
- import { formatDate } from "../utils/format.js";
6
- import { PageHeader } from "../components/page-header.js";
7
- import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card.js";
8
- import { Button } from "../components/ui/button.js";
9
- import { Input } from "../components/ui/input.js";
10
- import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger } from "../components/ui/alert-dialog.js";
11
- import { Separator } from "../components/ui/separator.js";
12
- import { Key, Plus, RefreshCw, Trash2, CheckCircle, XCircle } from "lucide-react";
13
- function AuthSettings() {
14
- const { t } = useTranslation();
15
- const [tokenValue, setTokenValue] = useState(() => getToken() ?? "");
16
- const [saved, setSaved] = useState(false);
17
- function handleSave() {
18
- const trimmed = tokenValue.trim();
19
- if (!trimmed)
20
- return;
21
- setToken(trimmed);
22
- setSaved(true);
23
- setTimeout(() => setSaved(false), 3000);
24
- }
25
- return (_jsxs(Card, { className: "mb-6", children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { className: "flex items-center gap-2", children: [_jsx(Key, { className: "h-4 w-4" }), t("pages:settings.auth")] }) }), _jsxs(CardContent, { children: [_jsxs("label", { className: "block mb-2 text-sm font-medium", htmlFor: "bearer-token", children: [t("pages:settings.bearerToken"), _jsx(Input, { id: "bearer-token", type: "password", value: tokenValue, onChange: (e) => { setTokenValue(e.target.value); setSaved(false); }, placeholder: t("pages:settings.enterAccessToken"), className: "mt-1" })] }), _jsx(Button, { onClick: handleSave, disabled: !tokenValue.trim(), children: t("common:save") }), saved && (_jsxs("div", { className: "mt-3 flex items-center gap-2 text-sm text-primary", children: [_jsx(CheckCircle, { className: "h-4 w-4" }), t("pages:settings.tokenSaved")] })), _jsx("p", { className: "mt-3 text-xs text-muted-foreground", children: t("pages:settings.tokenSessionOnly") })] })] }));
26
- }
27
- function WorkspaceManager() {
28
- const { t } = useTranslation();
29
- const [workspaces, setWorkspaces] = useState([]);
30
- const [newName, setNewName] = useState("");
31
- const [newPath, setNewPath] = useState("");
32
- const [message, setMessage] = useState(null);
33
- useEffect(() => {
34
- fetchWorkspaces().then((r) => {
35
- if (r.success)
36
- setWorkspaces(r.data);
37
- });
38
- }, []);
39
- function showMessage(type, text) {
40
- setMessage({ type, text });
41
- setTimeout(() => setMessage(null), 3000);
42
- }
43
- async function handleAdd() {
44
- if (!newName.trim() || !newPath.trim())
45
- return;
46
- const result = await addWorkspace(newName.trim(), newPath.trim());
47
- if (result.success) {
48
- setWorkspaces((prev) => [...prev, result.data]);
49
- setNewName("");
50
- setNewPath("");
51
- showMessage("success", t("pages:settings.workspaceAdded"));
52
- }
53
- else {
54
- showMessage("error", result.error);
55
- }
56
- }
57
- async function handleRemove(name) {
58
- const result = await removeWorkspace(name);
59
- if (result.success) {
60
- setWorkspaces((prev) => prev.filter(w => w.name !== name));
61
- showMessage("success", t("pages:settings.workspaceRemoved"));
62
- }
63
- else {
64
- showMessage("error", result.error);
65
- }
66
- }
67
- async function handleSync(name) {
68
- const result = await syncWorkspace(name);
69
- if (result.success) {
70
- showMessage("success", `Workspace "${name}" synced`);
71
- const refreshResult = await fetchWorkspaces();
72
- if (refreshResult.success)
73
- setWorkspaces(refreshResult.data);
74
- }
75
- else {
76
- showMessage("error", result.error);
77
- }
78
- }
79
- return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t("pages:settings.workspace") }) }), _jsxs(CardContent, { children: [workspaces.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground text-center py-6", children: "No workspaces configured" })) : (_jsx("div", { className: "flex flex-col gap-3", children: workspaces.map((ws) => (_jsxs("div", { className: "flex justify-between items-center py-3 border-b border-border last:border-0", children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium text-sm", children: ws.config?.displayName ?? ws.name }), _jsx("p", { className: "text-xs text-muted-foreground", children: ws.path }), ws.lastSync && (_jsxs("p", { className: "text-xs text-muted-foreground mt-0.5", children: [t("pages:settings.lastSync"), " ", formatDate(ws.lastSync)] }))] }), _jsxs("div", { className: "flex gap-2", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: () => handleSync(ws.name), children: [_jsx(RefreshCw, { className: "h-3 w-3 mr-1" }), t("pages:settings.syncWorkspace")] }), _jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: _jsxs(Button, { variant: "destructive", size: "sm", children: [_jsx(Trash2, { className: "h-3 w-3 mr-1" }), t("pages:settings.removeWorkspace")] }) }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: t("pages:settings.confirmDeleteTitle") }), _jsx(AlertDialogDescription, { children: t("pages:settings.confirmDeleteDescription", { name: ws.name }) })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: t("common:cancel") }), _jsx(AlertDialogAction, { className: "bg-destructive text-destructive-foreground hover:bg-destructive/90", onClick: () => handleRemove(ws.name), children: t("common:confirm") })] })] })] })] })] }, ws.name))) })), _jsx(Separator, { className: "my-4" }), _jsx("h4", { className: "text-sm font-medium mb-3", children: t("pages:settings.addWorkspace") }), _jsxs("div", { className: "flex gap-2 items-end", children: [_jsxs("div", { className: "flex-1", children: [_jsx("label", { className: "text-xs text-muted-foreground", htmlFor: "ws-name", children: t("pages:settings.name") }), _jsx(Input, { id: "ws-name", value: newName, onChange: (e) => setNewName(e.target.value), placeholder: "my-workspace", className: "mt-1 h-8 text-sm" })] }), _jsxs("div", { className: "flex-[2]", children: [_jsx("label", { className: "text-xs text-muted-foreground", htmlFor: "ws-path", children: t("pages:settings.path") }), _jsx(Input, { id: "ws-path", value: newPath, onChange: (e) => setNewPath(e.target.value), placeholder: "/path/to/workspace", className: "mt-1 h-8 text-sm" })] }), _jsxs(Button, { onClick: handleAdd, disabled: !newName.trim() || !newPath.trim(), size: "sm", children: [_jsx(Plus, { className: "h-3 w-3 mr-1" }), t("common:add")] })] }), message && (_jsxs("div", { className: `mt-3 flex items-center gap-2 text-sm p-2 rounded-md ${message.type === "success"
80
- ? "bg-primary/10 text-primary"
81
- : "bg-destructive/10 text-destructive"}`, children: [message.type === "success" ? (_jsx(CheckCircle, { className: "h-4 w-4" })) : (_jsx(XCircle, { className: "h-4 w-4" })), message.text] }))] })] }));
82
- }
83
- export function SettingsPage() {
84
- const { t } = useTranslation();
85
- return (_jsxs("div", { className: "max-w-2xl", children: [_jsx(PageHeader, { title: t("pages:settings.title"), description: t("pages:settings.description") }), _jsx(AuthSettings, {}), _jsx(WorkspaceManager, {})] }));
86
- }
@@ -1 +0,0 @@
1
- export declare function TasksPage(): import("react/jsx-runtime").JSX.Element;
@@ -1,373 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState, useEffect, useRef, useCallback } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { fetchTasks, fetchTaskEvidence, approveTask, rejectTask, cleanupTask, checkAuth, fetchApprovals, fetchApprovalDetail, approveApproval, rejectApproval } from "../api.js";
5
- import { PageHeader } from "../components/page-header.js";
6
- import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "../components/ui/card.js";
7
- import { Button } from "../components/ui/button.js";
8
- import { Badge } from "../components/ui/badge.js";
9
- import { Skeleton } from "../components/ui/skeleton.js";
10
- import { Separator } from "../components/ui/separator.js";
11
- import { ChevronRight, Trash2, Check, X, Undo2, AlertCircle, ListTodo, ShieldCheck } from "lucide-react";
12
- import { ApprovalCard } from "../components/approval-card.js";
13
- import { ApprovalDetailDialog } from "../components/approval-detail-dialog.js";
14
- import { RejectionReasonDialog } from "../components/rejection-reason-dialog.js";
15
- const ZONE_CONFIG = [
16
- { key: "needsConfirmation", label: "needsConfirmation", color: "bg-red-50 border-red-200", headerColor: "bg-red-100", badgeColor: "bg-red-500" },
17
- { key: "suggestedAttention", label: "suggestedAttention", color: "bg-amber-50 border-amber-200", headerColor: "bg-amber-100", badgeColor: "bg-amber-500" },
18
- { key: "recentActivity", label: "recentActivity", color: "bg-blue-50 border-blue-200", headerColor: "bg-blue-100", badgeColor: "bg-blue-500" },
19
- ];
20
- const TASK_KIND_AGENT = {
21
- diagnostician: { id: 'diagnostician', i18nKey: 'pages:tasks.agentDiagnostician' },
22
- keyword_optimization: { id: 'correction-observer', i18nKey: 'pages:tasks.agentCorrectionObserver' },
23
- principle_candidate_intake: { id: 'diagnostician', i18nKey: 'pages:tasks.agentDiagnostician' },
24
- };
25
- function timeAgo(date, t) {
26
- const seconds = Math.floor((Date.now() - date.getTime()) / 1000);
27
- if (seconds < 60)
28
- return t("pages:tasks.secondsAgo", { count: seconds });
29
- const minutes = Math.floor(seconds / 60);
30
- if (minutes < 60)
31
- return t("pages:tasks.minutesAgo", { count: minutes });
32
- const hours = Math.floor(minutes / 60);
33
- return t("pages:tasks.hoursAgo", { count: hours });
34
- }
35
- function TaskCard({ task, expanded, evidence, evidenceLoading, onToggleExpand, onApprove, onReject, onCleanup, undoState, undoTimer, onUndo, }) {
36
- const { t } = useTranslation();
37
- return (_jsx(Card, { className: "mb-3 transition-all duration-200 hover:shadow-sm", children: _jsxs(CardContent, { className: "p-4", children: [_jsxs("button", { type: "button", "aria-expanded": expanded, className: "flex items-start justify-between cursor-pointer w-full text-left", onClick: onToggleExpand, children: [_jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: task.kind }), TASK_KIND_AGENT[task.title] && (_jsx("a", { href: `#/agents/${TASK_KIND_AGENT[task.title].id}`, className: "text-xs text-primary hover:underline", onClick: (e) => e.stopPropagation(), children: t(TASK_KIND_AGENT[task.title].i18nKey) })), _jsx("span", { className: "text-xs text-muted-foreground", children: timeAgo(new Date(task.createdAt), t) })] }), _jsx("p", { className: "font-medium text-sm truncate", children: task.title }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: task.sourceSummary })] }), _jsx(ChevronRight, { className: `h-4 w-4 text-muted-foreground transition-transform duration-200 ${expanded ? "rotate-90" : ""}` })] }), _jsxs("div", { className: `overflow-hidden transition-all duration-300 ${expanded ? "max-h-[500px] opacity-100" : "max-h-0 opacity-0"}`, children: [_jsx(Separator, { className: "my-3" }), evidenceLoading ? (_jsxs("div", { className: "space-y-3", children: [_jsx(Skeleton, { className: "h-4 w-32" }), _jsx(Skeleton, { className: "h-4 w-full" }), _jsx(Skeleton, { className: "h-4 w-full" })] })) : evidence ? (_jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:evidencePanel.summary") }), _jsx("p", { className: "text-sm", children: evidence.summary })] }), _jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:evidencePanel.why") }), _jsx("p", { className: "text-sm", children: evidence.why })] }), _jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:evidencePanel.whatHappens") }), _jsx("p", { className: "text-sm", children: evidence.whatHappensIf })] })] })) : null, _jsx(Separator, { className: "my-3" }), _jsx("div", { className: "flex items-center gap-2", children: undoState ? (_jsxs(Button, { variant: "secondary", size: "sm", onClick: (e) => {
38
- e.stopPropagation();
39
- onUndo();
40
- }, className: "flex items-center gap-1", children: [_jsx(Undo2, { className: "h-3 w-3" }), t("components:taskCard.undo"), " (", undoTimer, "s)"] })) : (_jsxs(_Fragment, { children: [_jsxs(Button, { variant: "default", size: "sm", onClick: (e) => {
41
- e.stopPropagation();
42
- onApprove();
43
- }, className: "flex items-center gap-1", children: [_jsx(Check, { className: "h-3 w-3" }), t("components:taskCard.approve")] }), _jsxs(Button, { variant: "destructive", size: "sm", onClick: (e) => {
44
- e.stopPropagation();
45
- onReject();
46
- }, className: "flex items-center gap-1", children: [_jsx(X, { className: "h-3 w-3" }), t("components:taskCard.reject")] }), task.kind === "cleanup" && (_jsxs(Button, { variant: "outline", size: "sm", onClick: (e) => {
47
- e.stopPropagation();
48
- onCleanup();
49
- }, className: "flex items-center gap-1", children: [_jsx(Trash2, { className: "h-3 w-3" }), t("components:taskCard.cleanup")] }))] })) })] })] }) }));
50
- }
51
- function LoadingSkeleton() {
52
- return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between mb-6", children: [_jsx(Skeleton, { className: "h-8 w-32" }), _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(Skeleton, { className: "h-4 w-24" }), _jsx(Skeleton, { className: "h-8 w-20" })] })] }), ZONE_CONFIG.map((zone) => (_jsxs(Card, { className: `${zone.color} mb-6`, children: [_jsx(CardHeader, { className: zone.headerColor, children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(Skeleton, { className: "h-5 w-40" }), _jsx(Skeleton, { className: "h-5 w-12 rounded-full" })] }) }), _jsx(CardContent, { className: "pt-4 space-y-4", children: Array.from({ length: 3 }).map((_, i) => (_jsx(Card, { children: _jsxs(CardContent, { className: "p-4", children: [_jsx(Skeleton, { className: "h-4 w-24 mb-2" }), _jsx(Skeleton, { className: "h-4 w-full mb-2" }), _jsx(Skeleton, { className: "h-4 w-3/4" })] }) }, i))) })] }, zone.key)))] }));
53
- }
54
- function TasksPageInner() {
55
- const { t } = useTranslation();
56
- const [zones, setZones] = useState({
57
- needsConfirmation: [],
58
- suggestedAttention: [],
59
- recentActivity: [],
60
- });
61
- const [loading, setLoading] = useState(true);
62
- const [error, setError] = useState(null);
63
- const [expandedIds, setExpandedIds] = useState(new Set());
64
- const [evidenceCache, setEvidenceCache] = useState(new Map());
65
- const [loadingEvidenceIds, setLoadingEvidenceIds] = useState(new Set());
66
- const [undoMap, setUndoMap] = useState(new Map());
67
- const [lastUpdated, setLastUpdated] = useState(null);
68
- const [tab, setTab] = useState("tasks");
69
- const [approvals, setApprovals] = useState([]);
70
- const [approvalStats, setApprovalStats] = useState({ pending: 0, approved: 0, rejected: 0, cancelled: 0 });
71
- const [approvalsLoading, setApprovalsLoading] = useState(false);
72
- const [detailApproval, setDetailApproval] = useState(null);
73
- const [detailOpen, setDetailOpen] = useState(false);
74
- const [rejectTarget, setRejectTarget] = useState(null);
75
- const [rejectOpen, setRejectOpen] = useState(false);
76
- const [actionLoading, setActionLoading] = useState(null);
77
- const undoMapRef = useRef(undoMap);
78
- undoMapRef.current = undoMap;
79
- useEffect(() => {
80
- return () => {
81
- undoMapRef.current.forEach((entry) => clearTimeout(entry.timer));
82
- };
83
- }, []);
84
- useEffect(() => {
85
- if (undoMap.size === 0)
86
- return;
87
- const interval = setInterval(() => {
88
- setUndoMap((prev) => {
89
- const next = new Map(prev);
90
- let changed = false;
91
- for (const [id, entry] of next) {
92
- const newCountdown = entry.countdown - 1;
93
- if (newCountdown <= 0)
94
- continue;
95
- next.set(id, { ...entry, countdown: newCountdown });
96
- changed = true;
97
- }
98
- return changed ? next : prev;
99
- });
100
- }, 1000);
101
- return () => clearInterval(interval);
102
- }, [undoMap.size]);
103
- async function loadData() {
104
- const result = await fetchTasks();
105
- if (!result.success) {
106
- setError(result.error ?? t("pages:tasks.loadFailed"));
107
- }
108
- else {
109
- setZones(result.data);
110
- setLastUpdated(new Date());
111
- setError(null);
112
- }
113
- setLoading(false);
114
- }
115
- const loadApprovals = useCallback(async () => {
116
- setApprovalsLoading(true);
117
- try {
118
- const result = await fetchApprovals();
119
- if (!result.success) {
120
- setError(result.error);
121
- return;
122
- }
123
- setApprovals(result.data.items);
124
- setApprovalStats(result.data.stats);
125
- }
126
- catch {
127
- setError('Failed to load approvals');
128
- }
129
- finally {
130
- setApprovalsLoading(false);
131
- }
132
- }, []);
133
- useEffect(() => {
134
- if (tab !== 'tasks')
135
- return;
136
- let cancelled = false;
137
- async function load() {
138
- if (cancelled)
139
- return;
140
- await loadData();
141
- }
142
- load();
143
- const intervalId = setInterval(load, 30_000);
144
- return () => {
145
- cancelled = true;
146
- clearInterval(intervalId);
147
- };
148
- }, [tab]);
149
- useEffect(() => {
150
- if (tab !== "approvals")
151
- return;
152
- loadApprovals();
153
- const id = setInterval(loadApprovals, 15_000);
154
- return () => clearInterval(id);
155
- }, [tab, loadApprovals]);
156
- async function handleApprovalDetail(approvalId) {
157
- setActionLoading(approvalId);
158
- try {
159
- const result = await fetchApprovalDetail(approvalId);
160
- if (!result.success) {
161
- setError(result.error);
162
- return;
163
- }
164
- setDetailApproval(result.data);
165
- setDetailOpen(true);
166
- }
167
- catch {
168
- setError('Failed to load detail');
169
- }
170
- finally {
171
- setActionLoading(null);
172
- }
173
- }
174
- async function handleApprovalApprove(approvalId) {
175
- setActionLoading(approvalId);
176
- setDetailOpen(false);
177
- try {
178
- const result = await approveApproval(approvalId);
179
- if (!result.success) {
180
- setError(result.error);
181
- return;
182
- }
183
- await loadApprovals();
184
- }
185
- catch {
186
- setError('Approve failed');
187
- }
188
- finally {
189
- setActionLoading(null);
190
- }
191
- }
192
- function handleApprovalRejectClick(approval) {
193
- setRejectTarget(approval);
194
- setRejectOpen(true);
195
- }
196
- async function handleApprovalRejectSubmit(reason) {
197
- if (!rejectTarget)
198
- return;
199
- setActionLoading(rejectTarget.approvalId);
200
- setRejectOpen(false);
201
- setDetailOpen(false);
202
- try {
203
- const result = await rejectApproval(rejectTarget.approvalId, reason);
204
- if (!result.success) {
205
- setError(result.error);
206
- return;
207
- }
208
- await loadApprovals();
209
- }
210
- catch {
211
- setError('Reject failed');
212
- }
213
- finally {
214
- setRejectTarget(null);
215
- setActionLoading(null);
216
- }
217
- }
218
- async function handleToggleExpand(id) {
219
- const nextExpanded = new Set(expandedIds);
220
- if (nextExpanded.has(id)) {
221
- nextExpanded.delete(id);
222
- }
223
- else {
224
- nextExpanded.add(id);
225
- if (!evidenceCache.has(id) && !loadingEvidenceIds.has(id)) {
226
- setLoadingEvidenceIds((prev) => {
227
- const n = new Set(prev);
228
- n.add(id);
229
- return n;
230
- });
231
- const result = await fetchTaskEvidence(id);
232
- if (result.success && result.data) {
233
- setEvidenceCache((prev) => {
234
- const n = new Map(prev);
235
- n.set(id, result.data);
236
- return n;
237
- });
238
- }
239
- setLoadingEvidenceIds((prev) => {
240
- const n = new Set(prev);
241
- n.delete(id);
242
- return n;
243
- });
244
- }
245
- }
246
- setExpandedIds(nextExpanded);
247
- }
248
- function handleApprove(taskId, zone) {
249
- const task = zones[zone].find((t) => t.id === taskId);
250
- if (!task)
251
- return;
252
- setZones((prev) => ({ ...prev, [zone]: prev[zone].filter((t) => t.id !== taskId) }));
253
- const timer = setTimeout(async () => {
254
- setUndoMap((prev) => {
255
- const n = new Map(prev);
256
- n.delete(taskId);
257
- return n;
258
- });
259
- const result = await approveTask(taskId);
260
- if (!result.success) {
261
- setZones((prev) => ({ ...prev, [zone]: [task, ...prev[zone]] }));
262
- setError(t("pages:tasks.operationFailed", { error: result.error ?? t("pages:tasks.unknownError") }));
263
- }
264
- }, 5000);
265
- setUndoMap((prev) => {
266
- const n = new Map(prev);
267
- n.set(taskId, { task, zone, timer, action: "approve", countdown: 5 });
268
- return n;
269
- });
270
- }
271
- function handleReject(taskId, zone) {
272
- const task = zones[zone].find((t) => t.id === taskId);
273
- if (!task)
274
- return;
275
- setZones((prev) => ({ ...prev, [zone]: prev[zone].filter((t) => t.id !== taskId) }));
276
- const timer = setTimeout(async () => {
277
- setUndoMap((prev) => {
278
- const n = new Map(prev);
279
- n.delete(taskId);
280
- return n;
281
- });
282
- const result = await rejectTask(taskId);
283
- if (!result.success) {
284
- setZones((prev) => ({ ...prev, [zone]: [task, ...prev[zone]] }));
285
- setError(t("pages:tasks.operationFailed", { error: result.error ?? t("pages:tasks.unknownError") }));
286
- }
287
- }, 5000);
288
- setUndoMap((prev) => {
289
- const n = new Map(prev);
290
- n.set(taskId, { task, zone, timer, action: "reject", countdown: 5 });
291
- return n;
292
- });
293
- }
294
- function handleUndo(taskId) {
295
- const entry = undoMap.get(taskId);
296
- if (!entry)
297
- return;
298
- clearTimeout(entry.timer);
299
- setZones((prev) => ({ ...prev, [entry.zone]: [entry.task, ...prev[entry.zone]] }));
300
- setUndoMap((prev) => {
301
- const n = new Map(prev);
302
- n.delete(taskId);
303
- return n;
304
- });
305
- }
306
- async function handleBatchCleanup() {
307
- const cleanupTasks = zones.suggestedAttention.filter((t) => t.kind === "cleanup");
308
- let failed = 0;
309
- for (const t of cleanupTasks) {
310
- const result = await cleanupTask(t.id);
311
- if (result.success) {
312
- setZones((prev) => ({
313
- ...prev,
314
- suggestedAttention: prev.suggestedAttention.filter((st) => st.id !== t.id),
315
- }));
316
- }
317
- else {
318
- failed++;
319
- }
320
- }
321
- if (failed > 0) {
322
- setError(t("pages:tasks.batchCleanupResult", { failed, total: cleanupTasks.length }));
323
- }
324
- }
325
- if (loading)
326
- return _jsx(LoadingSkeleton, {});
327
- if (error) {
328
- return (_jsx(Card, { children: _jsxs(CardContent, { className: "p-6", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx(AlertCircle, { className: "h-5 w-5 text-destructive" }), _jsx("p", { className: "text-destructive", children: error })] }), _jsx(Button, { variant: "outline", className: "mt-4", onClick: loadData, children: t("common:refresh") })] }) }));
329
- }
330
- const zoneLabels = {
331
- needsConfirmation: t("pages:tasks.needsConfirmation"),
332
- suggestedAttention: t("pages:tasks.suggestedAttention"),
333
- recentActivity: t("pages:tasks.recentActivity"),
334
- };
335
- return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:tasks.title"), description: t("pages:tasks.description"), onRefresh: tab === "tasks" ? loadData : loadApprovals, lastUpdated: lastUpdated ?? undefined }), _jsxs("div", { className: "flex items-center gap-1 mb-6 border-b", children: [_jsxs("button", { type: "button", className: "flex items-center gap-1.5 px-4 py-2.5 text-sm font-medium border-b-2 transition-colors " + (tab === "tasks" ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground"), onClick: () => setTab("tasks"), children: [_jsx(ListTodo, { className: "h-4 w-4" }), t("pages:tasks.tabs.tasks")] }), _jsxs("button", { type: "button", className: "flex items-center gap-1.5 px-4 py-2.5 text-sm font-medium border-b-2 transition-colors " + (tab === "approvals" ? "border-primary text-primary" : "border-transparent text-muted-foreground hover:text-foreground"), onClick: () => setTab("approvals"), children: [_jsx(ShieldCheck, { className: "h-4 w-4" }), t("pages:tasks.tabs.approvals"), approvalStats.pending > 0 && (_jsx(Badge, { className: "ml-1 bg-red-500 text-white text-xs px-1.5", children: approvalStats.pending }))] })] }), tab === "tasks" && ZONE_CONFIG.map((zone) => {
336
- const tasks = zones[zone.key];
337
- const hasCleanupTasks = tasks.some((t) => t.kind === "cleanup");
338
- return (_jsxs(Card, { className: `${zone.color} border-l-4 mb-6`, children: [_jsx(CardHeader, { className: zone.headerColor, children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsx(CardTitle, { className: "text-base font-medium", children: zoneLabels[zone.label] }), _jsx(Badge, { className: zone.badgeColor, children: tasks.length })] }) }), _jsxs(CardContent, { className: "pt-4", children: [tasks.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground text-center py-8", children: t("components:zoneSection.empty") })) : (tasks.map((task) => {
339
- const undo = undoMap.get(task.id);
340
- return (_jsx(TaskCard, { task: task, expanded: expandedIds.has(task.id), evidence: evidenceCache.get(task.id) ?? null, evidenceLoading: loadingEvidenceIds.has(task.id), onToggleExpand: () => handleToggleExpand(task.id), onApprove: () => handleApprove(task.id, zone.key), onReject: () => handleReject(task.id, zone.key), onCleanup: async () => {
341
- const result = await cleanupTask(task.id);
342
- if (result.success) {
343
- setZones((prev) => ({
344
- ...prev,
345
- [zone.key]: prev[zone.key].filter((t) => t.id !== task.id),
346
- }));
347
- }
348
- }, undoState: undo?.action ?? null, undoTimer: undo?.countdown ?? null, onUndo: () => handleUndo(task.id) }, task.id));
349
- })), zone.key === "suggestedAttention" && hasCleanupTasks && (_jsx("div", { className: "mt-4 flex justify-end", children: _jsxs(Button, { variant: "outline", size: "sm", onClick: handleBatchCleanup, className: "bg-amber-100 hover:bg-amber-200 border-amber-300 text-amber-700", children: [_jsx(Trash2, { className: "h-3 w-3 mr-1" }), t("pages:tasks.batchCleanup")] }) }))] })] }, zone.key));
350
- }), tab === "approvals" && (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-3 mb-4", children: [_jsxs(Badge, { variant: "outline", children: [t("components:approvalCard.stats.pending"), ": ", approvalStats.pending] }), _jsxs(Badge, { variant: "outline", children: [t("components:approvalCard.stats.approved"), ": ", approvalStats.approved] }), _jsxs(Badge, { variant: "outline", children: [t("components:approvalCard.stats.rejected"), ": ", approvalStats.rejected] })] }), approvalsLoading && approvals.length === 0 ? (_jsx("div", { className: "space-y-3", children: Array.from({ length: 3 }).map((_, i) => (_jsx(Card, { children: _jsx(CardContent, { className: "p-4", children: _jsx(Skeleton, { className: "h-16 w-full" }) }) }, i))) })) : approvals.length === 0 ? (_jsx(Card, { children: _jsxs(CardContent, { className: "py-12 text-center", children: [_jsx(ShieldCheck, { className: "h-10 w-10 text-muted-foreground mx-auto mb-3" }), _jsx("p", { className: "text-sm text-muted-foreground", children: t("components:approvalCard.empty") })] }) })) : (approvals.map((a) => (_jsx(ApprovalCard, { approval: a, loading: actionLoading === a.approvalId, onViewDetail: () => handleApprovalDetail(a.approvalId), onApprove: () => handleApprovalApprove(a.approvalId), onReject: () => handleApprovalRejectClick(a) }, a.approvalId))))] })), _jsx(ApprovalDetailDialog, { approval: detailApproval, open: detailOpen, onOpenChange: setDetailOpen, onApprove: () => { if (detailApproval)
351
- handleApprovalApprove(detailApproval.approvalId); }, onReject: () => { if (detailApproval) {
352
- setDetailOpen(false);
353
- handleApprovalRejectClick(detailApproval);
354
- } }, loading: actionLoading !== null }), _jsx(RejectionReasonDialog, { open: rejectOpen, onOpenChange: setRejectOpen, onSubmit: handleApprovalRejectSubmit, loading: actionLoading !== null })] }));
355
- }
356
- export function TasksPage() {
357
- const { t } = useTranslation();
358
- const [hasToken, setHasToken] = useState(false);
359
- const [checking, setChecking] = useState(true);
360
- useEffect(() => {
361
- checkAuth().then((valid) => {
362
- setHasToken(valid);
363
- setChecking(false);
364
- });
365
- }, []);
366
- if (checking) {
367
- return (_jsx(Card, { className: "max-w-md mx-auto mt-12", children: _jsx(CardContent, { className: "p-8 text-center", children: _jsx("div", { className: "animate-pulse", children: t("pages:tasks.checkingAuth") }) }) }));
368
- }
369
- if (!hasToken) {
370
- return (_jsx(Card, { className: "max-w-md mx-auto mt-12", children: _jsxs(CardContent, { className: "p-8 text-center", children: [_jsx(AlertCircle, { className: "h-12 w-12 text-amber-500 mx-auto mb-4" }), _jsx(CardTitle, { className: "text-xl mb-2", children: t("pages:tasks.noToken") }), _jsx(CardDescription, { className: "mb-4", children: t("pages:tasks.noToken") }), _jsx(Button, { asChild: true, children: _jsx("a", { href: "#/settings", children: t("common:settings") }) })] }) }));
371
- }
372
- return _jsx(TasksPageInner, {});
373
- }
@@ -1 +0,0 @@
1
- export declare function ThinkingModelsPage(): import("react/jsx-runtime").JSX.Element;
@@ -1,32 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useEffect } from "react";
3
- import { useTranslation } from "react-i18next";
4
- import { fetchThinkingModels } from "../api.js";
5
- import { PageHeader } from "../components/page-header.js";
6
- import { Card, CardContent } from "../components/ui/card.js";
7
- import { Skeleton } from "../components/ui/skeleton.js";
8
- import { Brain, ChevronRight } from "lucide-react";
9
- export function ThinkingModelsPage() {
10
- const { t } = useTranslation();
11
- const [data, setData] = useState(null);
12
- const [error, setError] = useState("");
13
- const [expandedId, setExpandedId] = useState(null);
14
- useEffect(() => {
15
- fetchThinkingModels().then((result) => {
16
- if (result.success) {
17
- setData(result.data);
18
- setError("");
19
- }
20
- else {
21
- setError(result.error);
22
- }
23
- });
24
- }, []);
25
- if (error && !data) {
26
- return (_jsx(Card, { children: _jsx(CardContent, { className: "p-6", children: _jsx("p", { className: "text-destructive", children: error }) }) }));
27
- }
28
- if (!data) {
29
- return (_jsxs("div", { children: [_jsx(Skeleton, { className: "h-8 w-48 mb-6" }), Array.from({ length: 3 }).map((_, i) => (_jsx(Card, { className: "mb-3", children: _jsxs(CardContent, { className: "p-4", children: [_jsx(Skeleton, { className: "h-5 w-40 mb-2" }), _jsx(Skeleton, { className: "h-3 w-full" })] }) }, i)))] }));
30
- }
31
- return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:thinking-models.title"), description: t("pages:thinking-models.description"), actions: _jsxs("span", { className: "text-sm text-muted-foreground", children: [data.totalModels, " ", t("pages:thinking-models.modelsLabel"), " | ", t("pages:thinking-models.sourceLabel"), " ", data.source] }) }), data.totalModels === 0 && (_jsx(Card, { children: _jsxs(CardContent, { className: "flex flex-col items-center justify-center py-16 text-muted-foreground", children: [_jsx(Brain, { className: "h-12 w-12 mb-3 opacity-50" }), _jsx("p", { className: "text-sm mb-1", children: t("pages:thinking-models.noModels") }), _jsx("p", { className: "text-xs", children: t("pages:thinking-models.placeThinkingOs") })] }) })), _jsx("div", { className: "flex flex-col gap-3", children: data.models.map((model) => (_jsxs(Card, { className: "overflow-hidden", children: [_jsxs("button", { type: "button", "aria-expanded": expandedId === model.id, onClick: () => setExpandedId(expandedId === model.id ? null : model.id), className: `w-full text-left p-4 cursor-pointer flex justify-between items-center transition-colors duration-150 ${expandedId === model.id ? "bg-primary/5" : "hover:bg-accent"}`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-semibold text-sm text-primary", children: model.id }), _jsx("span", { className: "text-sm", children: model.name })] }), _jsx(ChevronRight, { className: `h-4 w-4 text-muted-foreground transition-transform duration-200 motion-reduce:transition-none ${expandedId === model.id ? "rotate-90" : ""}` })] }), _jsx("div", { className: `overflow-hidden transition-all duration-300 ${expandedId === model.id ? "max-h-[600px] opacity-100" : "max-h-0 opacity-0"}`, children: _jsxs("div", { className: "p-4 border-t border-border flex flex-col gap-4", children: [model.trigger && (_jsxs("div", { children: [_jsx("h4", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("pages:thinking-models.trigger") }), _jsx("div", { className: "bg-muted/50 p-3 rounded-md text-sm leading-relaxed whitespace-pre-wrap", children: model.trigger })] })), model.must && (_jsxs("div", { children: [_jsx("h4", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("pages:thinking-models.must") }), _jsx("div", { className: "bg-primary/5 p-3 rounded-md text-sm leading-relaxed whitespace-pre-wrap border-l-3 border-l-primary", children: model.must })] })), model.forbidden && (_jsxs("div", { children: [_jsx("h4", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("pages:thinking-models.forbidden") }), _jsx("div", { className: "bg-destructive/5 p-3 rounded-md text-sm leading-relaxed whitespace-pre-wrap border-l-3 border-l-destructive", children: model.forbidden })] }))] }) })] }, model.id))) })] }));
32
- }