create-windy 0.8.2 → 0.9.1

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 (574) hide show
  1. package/dist/cli.js +855 -560
  2. package/package.json +1 -1
  3. package/template/.windy-template.json +2 -2
  4. package/template/apps/agent-server/Dockerfile +92 -22
  5. package/template/apps/agent-server/README.md +47 -85
  6. package/template/apps/agent-server/documents/office.py +216 -0
  7. package/template/apps/agent-server/documents/query_report.py +136 -0
  8. package/template/apps/agent-server/documents/smoke.py +177 -0
  9. package/template/apps/agent-server/documents/test_boundaries.py +185 -0
  10. package/template/apps/agent-server/host-contracts.ts +56 -0
  11. package/template/apps/agent-server/install-native.ts +167 -0
  12. package/template/apps/agent-server/main.ts +179 -0
  13. package/template/apps/agent-server/native/EXTENSIONS.md +46 -0
  14. package/template/apps/agent-server/native/admission.ts +73 -0
  15. package/template/apps/agent-server/native/authorization.test.ts +176 -0
  16. package/template/apps/agent-server/native/authorization.ts +118 -0
  17. package/template/apps/agent-server/native/boundary-io.ts +93 -0
  18. package/template/apps/agent-server/native/boundary-product.ts +107 -0
  19. package/template/apps/agent-server/native/boundary-project.test.ts +247 -0
  20. package/template/apps/agent-server/native/boundary-project.ts +188 -0
  21. package/template/apps/agent-server/native/boundary.ts +188 -0
  22. package/template/apps/agent-server/native/compaction-policy.test.ts +175 -0
  23. package/template/apps/agent-server/native/config.ts +95 -0
  24. package/template/apps/agent-server/native/conversation-instructions.ts +9 -0
  25. package/template/apps/agent-server/native/extensions.test.ts +190 -0
  26. package/template/apps/agent-server/native/extensions.ts +31 -0
  27. package/template/apps/agent-server/native/host-profile.test.ts +91 -0
  28. package/template/apps/agent-server/native/host-profile.ts +33 -0
  29. package/template/apps/agent-server/native/host-test-fixture.ts +13 -0
  30. package/template/apps/agent-server/native/http.ts +129 -0
  31. package/template/apps/agent-server/native/lifecycle.test.ts +285 -0
  32. package/template/apps/agent-server/native/lifecycle.ts +136 -0
  33. package/template/apps/agent-server/native/manager.ts +292 -0
  34. package/template/apps/agent-server/native/native.test.ts +207 -0
  35. package/template/apps/agent-server/native/office-preview.test.ts +50 -0
  36. package/template/apps/agent-server/native/office-preview.ts +25 -0
  37. package/template/apps/agent-server/native/parallel-harness.ts +242 -0
  38. package/template/apps/agent-server/native/parallel-mcp-fixture.ts +97 -0
  39. package/template/apps/agent-server/native/parallel.test.ts +256 -0
  40. package/template/apps/agent-server/native/profile-composition.test.ts +147 -0
  41. package/template/apps/agent-server/native/profile.ts +307 -0
  42. package/template/apps/agent-server/native/request.ts +61 -0
  43. package/template/apps/agent-server/native/session-conflict.test.ts +235 -0
  44. package/template/apps/agent-server/native/session-conflict.ts +21 -0
  45. package/template/apps/agent-server/native/shared-skills.test.ts +128 -0
  46. package/template/apps/agent-server/native/shared-skills.ts +240 -0
  47. package/template/apps/agent-server/native/socket-lifecycle.test.ts +48 -0
  48. package/template/apps/agent-server/native/socket.ts +130 -0
  49. package/template/apps/agent-server/native/storage-lifecycle.test.ts +217 -0
  50. package/template/apps/agent-server/native/storage.ts +188 -0
  51. package/template/apps/agent-server/native/stream-authorization.test.ts +89 -0
  52. package/template/apps/agent-server/native/worker.ts +77 -0
  53. package/template/apps/agent-server/native-download.test.ts +119 -0
  54. package/template/apps/agent-server/native-download.ts +145 -0
  55. package/template/apps/agent-server/package.json +63 -0
  56. package/template/apps/agent-server/plugins/access.mjs +126 -0
  57. package/template/apps/agent-server/plugins/branding/README.md +9 -0
  58. package/template/apps/agent-server/plugins/branding/brand.css +85 -0
  59. package/template/apps/agent-server/plugins/branding/client.js +338 -0
  60. package/template/apps/agent-server/plugins/branding/index.mjs +35 -0
  61. package/template/apps/agent-server/plugins/branding/loading.d.mts +2 -0
  62. package/template/apps/agent-server/plugins/branding/loading.mjs +66 -0
  63. package/template/apps/agent-server/plugins/branding/loading.test.ts +89 -0
  64. package/template/apps/agent-server/plugins/branding/package.json +21 -0
  65. package/template/apps/agent-server/plugins/branding.test.ts +294 -0
  66. package/template/apps/agent-server/plugins/compaction.mjs +83 -0
  67. package/template/apps/agent-server/plugins/compaction.test.ts +91 -0
  68. package/template/apps/agent-server/plugins/confine-network.py +57 -0
  69. package/template/apps/agent-server/plugins/default-skills.test.ts +62 -0
  70. package/template/apps/agent-server/plugins/downloads/README.md +28 -0
  71. package/template/apps/agent-server/plugins/downloads/client.js +126 -0
  72. package/template/apps/agent-server/plugins/downloads/downloads.test.ts +222 -0
  73. package/template/apps/agent-server/plugins/downloads/index.d.mts +19 -0
  74. package/template/apps/agent-server/plugins/downloads/index.mjs +180 -0
  75. package/template/apps/agent-server/plugins/downloads/package.json +20 -0
  76. package/template/apps/agent-server/plugins/drop-overlay/README.md +24 -0
  77. package/template/apps/agent-server/plugins/drop-overlay/drop-overlay.test.ts +199 -0
  78. package/template/apps/agent-server/plugins/drop-overlay/index.d.mts +8 -0
  79. package/template/apps/agent-server/plugins/drop-overlay/index.mjs +12 -0
  80. package/template/apps/agent-server/plugins/drop-overlay/style.css +102 -0
  81. package/template/apps/agent-server/plugins/locale/client.js +61 -0
  82. package/template/apps/agent-server/plugins/locale/index.d.mts +9 -0
  83. package/template/apps/agent-server/plugins/locale/index.mjs +16 -0
  84. package/template/apps/agent-server/plugins/locale/locale.test.ts +217 -0
  85. package/template/apps/agent-server/plugins/locale/package.json +19 -0
  86. package/template/apps/agent-server/plugins/parallel.mjs +146 -0
  87. package/template/apps/agent-server/plugins/preset-registry.d.mts +2 -0
  88. package/template/apps/agent-server/plugins/preset-registry.mjs +41 -0
  89. package/template/apps/agent-server/plugins/preset-registry.test.ts +46 -0
  90. package/template/apps/agent-server/plugins/questions.d.mts +25 -0
  91. package/template/apps/agent-server/plugins/questions.mjs +142 -0
  92. package/template/apps/agent-server/plugins/questions.test.ts +105 -0
  93. package/template/apps/agent-server/plugins/settings/README.md +17 -0
  94. package/template/apps/agent-server/plugins/settings/client.js +102 -0
  95. package/template/apps/agent-server/plugins/settings/index.mjs +17 -0
  96. package/template/apps/agent-server/plugins/settings/package.json +19 -0
  97. package/template/apps/agent-server/plugins/settings/settings.test.ts +129 -0
  98. package/template/apps/agent-server/plugins/settings-controller.d.mts +4 -0
  99. package/template/apps/agent-server/plugins/settings-controller.mjs +31 -0
  100. package/template/apps/agent-server/plugins/settings-controller.test.ts +17 -0
  101. package/template/apps/agent-server/plugins/settings-dispatch.test.ts +34 -0
  102. package/template/apps/agent-server/plugins/shared-skills.d.mts +15 -0
  103. package/template/apps/agent-server/plugins/shared-skills.mjs +82 -0
  104. package/template/apps/agent-server/plugins/shared-skills.test.ts +51 -0
  105. package/template/apps/agent-server/plugins/skill-library/README.md +11 -0
  106. package/template/apps/agent-server/plugins/skill-library/archive.test.ts +43 -0
  107. package/template/apps/agent-server/plugins/skill-library/bundle.mjs +234 -0
  108. package/template/apps/agent-server/plugins/skill-library/client-chunks.test.ts +107 -0
  109. package/template/apps/agent-server/plugins/skill-library/client-form-mount.test.ts +139 -0
  110. package/template/apps/agent-server/plugins/skill-library/client-form.test.ts +261 -0
  111. package/template/apps/agent-server/plugins/skill-library/client-ui.test.ts +268 -0
  112. package/template/apps/agent-server/plugins/skill-library/client-use.test.ts +158 -0
  113. package/template/apps/agent-server/plugins/skill-library/client.editor.js +93 -0
  114. package/template/apps/agent-server/plugins/skill-library/client.form.js +316 -0
  115. package/template/apps/agent-server/plugins/skill-library/client.js +348 -0
  116. package/template/apps/agent-server/plugins/skill-library/client.request.js +52 -0
  117. package/template/apps/agent-server/plugins/skill-library/client.transfer.js +48 -0
  118. package/template/apps/agent-server/plugins/skill-library/client.use.js +46 -0
  119. package/template/apps/agent-server/plugins/skill-library/default-roots.test.ts +84 -0
  120. package/template/apps/agent-server/plugins/skill-library/draft.d.mts +17 -0
  121. package/template/apps/agent-server/plugins/skill-library/draft.mjs +152 -0
  122. package/template/apps/agent-server/plugins/skill-library/draft.test.ts +287 -0
  123. package/template/apps/agent-server/plugins/skill-library/index.d.mts +49 -0
  124. package/template/apps/agent-server/plugins/skill-library/index.mjs +226 -0
  125. package/template/apps/agent-server/plugins/skill-library/package.json +24 -0
  126. package/template/apps/agent-server/plugins/skill-library/presentation/README.md +27 -0
  127. package/template/apps/agent-server/plugins/skill-library/presentation/UPSTREAM.md +54 -0
  128. package/template/apps/agent-server/plugins/skill-library/presentation/boot.test.ts +150 -0
  129. package/template/apps/agent-server/plugins/skill-library/presentation/client.js +146 -0
  130. package/template/apps/agent-server/plugins/skill-library/presentation/client.test.ts +195 -0
  131. package/template/apps/agent-server/plugins/skill-library/presentation/index.d.mts +9 -0
  132. package/template/apps/agent-server/plugins/skill-library/presentation/index.mjs +30 -0
  133. package/template/apps/agent-server/plugins/skill-library/presentation/metadata.test.ts +82 -0
  134. package/template/apps/agent-server/plugins/skill-library/presentation/package.json +21 -0
  135. package/template/apps/agent-server/plugins/skill-library/presentation/react-boot.test.ts +162 -0
  136. package/template/apps/agent-server/plugins/skill-library/skills.test.ts +342 -0
  137. package/template/apps/agent-server/plugins/skill-library/storage.mjs +293 -0
  138. package/template/apps/agent-server/plugins/skill-library/style.css +229 -0
  139. package/template/apps/agent-server/plugins/skill-library/test-fixture.ts +77 -0
  140. package/template/apps/agent-server/plugins/skill-library/workflow.d.mts +18 -0
  141. package/template/apps/agent-server/plugins/skill-library/workflow.mjs +189 -0
  142. package/template/apps/agent-server/plugins/skill-library/workflow.test.ts +164 -0
  143. package/template/apps/agent-server/plugins/skills/README.md +5 -0
  144. package/template/apps/agent-server/plugins/skills/windy-data-summary/SKILL.md +14 -0
  145. package/template/apps/agent-server/plugins/skills/windy-extension-guide/SKILL.md +14 -0
  146. package/template/apps/agent-server/plugins/skills/windy-office/SKILL.md +14 -0
  147. package/template/apps/agent-server/plugins/skills/windy-skill-capture/SKILL.md +14 -0
  148. package/template/apps/agent-server/plugins/skills/windy-source-compare/SKILL.md +14 -0
  149. package/template/apps/agent-server/plugins/subprocess.mjs +40 -0
  150. package/template/apps/agent-server/plugins/theme/README.md +18 -0
  151. package/template/apps/agent-server/plugins/theme/client.js +18 -0
  152. package/template/apps/agent-server/plugins/theme/index.d.mts +9 -0
  153. package/template/apps/agent-server/plugins/theme/index.mjs +18 -0
  154. package/template/apps/agent-server/plugins/theme/package.json +19 -0
  155. package/template/apps/agent-server/plugins/theme/source-tokens.ts +82 -0
  156. package/template/apps/agent-server/plugins/theme/sync-tokens.ts +12 -0
  157. package/template/apps/agent-server/plugins/theme/theme.test.ts +193 -0
  158. package/template/apps/agent-server/plugins/theme/tokens.json +166 -0
  159. package/template/apps/agent-server/plugins/tool-catalog/README.md +79 -0
  160. package/template/apps/agent-server/plugins/tool-catalog/categories.mjs +111 -0
  161. package/template/apps/agent-server/plugins/tool-catalog/categories.test.ts +118 -0
  162. package/template/apps/agent-server/plugins/tool-catalog/client-cache.test.ts +264 -0
  163. package/template/apps/agent-server/plugins/tool-catalog/client.js +333 -0
  164. package/template/apps/agent-server/plugins/tool-catalog/client.test.ts +136 -0
  165. package/template/apps/agent-server/plugins/tool-catalog/discovery.d.mts +42 -0
  166. package/template/apps/agent-server/plugins/tool-catalog/discovery.mjs +242 -0
  167. package/template/apps/agent-server/plugins/tool-catalog/discovery.test.ts +229 -0
  168. package/template/apps/agent-server/plugins/tool-catalog/index.d.mts +5 -0
  169. package/template/apps/agent-server/plugins/tool-catalog/index.mjs +91 -0
  170. package/template/apps/agent-server/plugins/tool-catalog/package.json +23 -0
  171. package/template/apps/agent-server/plugins/tool-catalog/presentation.d.mts +21 -0
  172. package/template/apps/agent-server/plugins/tool-catalog/presentation.mjs +153 -0
  173. package/template/apps/agent-server/plugins/tool-catalog/presentation.test.ts +166 -0
  174. package/template/apps/agent-server/plugins/tool-catalog/routes.test.ts +209 -0
  175. package/template/apps/agent-server/plugins/tool-catalog/style.css +155 -0
  176. package/template/apps/agent-server/plugins/tool-catalog/use-tool.test.ts +160 -0
  177. package/template/apps/agent-server/plugins/tool-presentation/README.md +7 -0
  178. package/template/apps/agent-server/plugins/tool-presentation/build-client.ts +29 -0
  179. package/template/apps/agent-server/plugins/tool-presentation/client.js +312 -0
  180. package/template/apps/agent-server/plugins/tool-presentation/client.results.js +9 -0
  181. package/template/apps/agent-server/plugins/tool-presentation/client.test.ts +178 -0
  182. package/template/apps/agent-server/plugins/tool-presentation/index.mjs +10 -0
  183. package/template/apps/agent-server/plugins/tool-presentation/package.json +24 -0
  184. package/template/apps/agent-server/plugins/tool-presentation/result-discovery.mjs +43 -0
  185. package/template/apps/agent-server/plugins/tool-presentation/result-model.d.mts +51 -0
  186. package/template/apps/agent-server/plugins/tool-presentation/result-model.mjs +96 -0
  187. package/template/apps/agent-server/plugins/workspace/README.md +5 -0
  188. package/template/apps/agent-server/plugins/workspace/index.mjs +8 -0
  189. package/template/apps/agent-server/plugins/workspace/package.json +10 -0
  190. package/template/apps/agent-server/plugins/workspace/style.css +124 -0
  191. package/template/apps/agent-server/project/host.ts +13 -0
  192. package/template/apps/agent-server/runtime/artifacts.ts +115 -0
  193. package/template/apps/agent-server/runtime/audit.nodecheck.ts +60 -0
  194. package/template/apps/agent-server/runtime/capacity.ts +61 -0
  195. package/template/apps/agent-server/runtime/client-completion-budget.nodecheck.ts +92 -0
  196. package/template/apps/agent-server/runtime/compatibility.ts +33 -0
  197. package/template/apps/agent-server/runtime/completions.ts +320 -0
  198. package/template/apps/agent-server/runtime/config.ts +246 -0
  199. package/template/apps/agent-server/runtime/context-budget.ts +70 -0
  200. package/template/apps/agent-server/runtime/context-plugin.ts +306 -0
  201. package/template/apps/agent-server/runtime/context.nodecheck.ts +241 -0
  202. package/template/apps/agent-server/runtime/contracts.ts +201 -0
  203. package/template/apps/agent-server/runtime/dsh-engine.ts +196 -0
  204. package/template/apps/agent-server/runtime/evaluation-plugin.ts +115 -0
  205. package/template/apps/agent-server/runtime/evaluation.nodecheck.ts +194 -0
  206. package/template/apps/agent-server/runtime/events.ts +71 -0
  207. package/template/apps/agent-server/runtime/governance.ts +194 -0
  208. package/template/apps/agent-server/runtime/index.ts +339 -0
  209. package/template/apps/agent-server/runtime/internal-output.ts +37 -0
  210. package/template/apps/agent-server/runtime/isolation.nodecheck.ts +287 -0
  211. package/template/apps/agent-server/runtime/model-payload.ts +97 -0
  212. package/template/apps/agent-server/runtime/model-plugin.ts +308 -0
  213. package/template/apps/agent-server/runtime/model-route.ts +34 -0
  214. package/template/apps/agent-server/runtime/model-usage.ts +51 -0
  215. package/template/apps/agent-server/runtime/model-wire.ts +45 -0
  216. package/template/apps/agent-server/runtime/native-authorization.nodecheck.ts +126 -0
  217. package/template/apps/agent-server/runtime/native-completion.nodecheck.ts +81 -0
  218. package/template/apps/agent-server/runtime/output-validation.ts +66 -0
  219. package/template/apps/agent-server/runtime/production-capacity.nodecheck.ts +121 -0
  220. package/template/apps/agent-server/runtime/questions-workflow.nodecheck.ts +249 -0
  221. package/template/apps/agent-server/runtime/report-breakdown.ts +79 -0
  222. package/template/apps/agent-server/runtime/reporting.ts +219 -0
  223. package/template/apps/agent-server/runtime/run-completion.ts +39 -0
  224. package/template/apps/agent-server/runtime/run-request-digest.ts +18 -0
  225. package/template/apps/agent-server/runtime/runtime-test-fixtures.ts +264 -0
  226. package/template/apps/agent-server/runtime/runtime.nodecheck.ts +150 -0
  227. package/template/apps/agent-server/runtime/store-idempotency.nodecheck.ts +74 -0
  228. package/template/apps/agent-server/runtime/store.ts +324 -0
  229. package/template/apps/agent-server/runtime/structured-output-mode.nodecheck.ts +51 -0
  230. package/template/apps/agent-server/runtime/tool-name.ts +6 -0
  231. package/template/apps/agent-server/runtime/tool-plugin.ts +201 -0
  232. package/template/apps/agent-server/runtime/vision-readiness.ts +200 -0
  233. package/template/apps/agent-server/scripts/confinement-check.mjs +103 -0
  234. package/template/apps/agent-server/scripts/coordinator-check.mjs +344 -0
  235. package/template/apps/agent-server/scripts/documents-delivery-check.mjs +309 -0
  236. package/template/apps/agent-server/scripts/office-preview-check.mjs +92 -0
  237. package/template/apps/agent-server/scripts/test-confinement.ts +58 -0
  238. package/template/apps/agent-server/scripts/test-coordinator.ts +36 -0
  239. package/template/apps/agent-server/scripts/test-runtime.ts +46 -0
  240. package/template/apps/agent-server/tsconfig.json +21 -0
  241. package/template/apps/server/Dockerfile +3 -0
  242. package/template/apps/server/package.json +5 -1
  243. package/template/apps/server/scripts/check-dsh-platform-example.ts +251 -0
  244. package/template/apps/server/src/agent/admin-catalog-bootstrap.ts +25 -0
  245. package/template/apps/server/src/agent/agent-session-bootstrap.ts +7 -8
  246. package/template/apps/server/src/agent/agent-session-facade.ts +12 -0
  247. package/template/apps/server/src/agent/agent-session-validation.ts +43 -0
  248. package/template/apps/server/src/agent/dsh-runtime-wire.test.ts +33 -0
  249. package/template/apps/server/src/agent/governance-runtime.ts +41 -0
  250. package/template/apps/server/src/agent/operation-catalog.test.ts +202 -0
  251. package/template/apps/server/src/agent/operation-catalog.ts +135 -0
  252. package/template/apps/server/src/agent/remote-runtime-response.ts +1 -1
  253. package/template/apps/server/src/agent/run-browser-visibility.test.ts +59 -0
  254. package/template/apps/server/src/agent/run-browser-visibility.ts +11 -0
  255. package/template/apps/server/src/agent/run-contracts.ts +1 -0
  256. package/template/apps/server/src/agent/run-definition-support.ts +9 -0
  257. package/template/apps/server/src/agent/run-operation-policy.ts +1 -0
  258. package/template/apps/server/src/agent/run-route-response.ts +35 -0
  259. package/template/apps/server/src/agent/run-routes.ts +46 -43
  260. package/template/apps/server/src/agent/runtime-bootstrap.ts +21 -20
  261. package/template/apps/server/src/agent/runtime-disabled-composition.ts +28 -0
  262. package/template/apps/server/src/agent/runtime-tool-composition.ts +2 -0
  263. package/template/apps/server/src/agent/session-projection-facade.ts +8 -9
  264. package/template/apps/server/src/agent/session-projection-governance.ts +10 -0
  265. package/template/apps/server/src/agent/session-projection-view.ts +19 -16
  266. package/template/apps/server/src/agent/session-recording-reader.contract.test.ts +131 -0
  267. package/template/apps/server/src/agent/session-recording-reader.ts +62 -0
  268. package/template/apps/server/src/agent/tool-catalog-audit.ts +22 -0
  269. package/template/apps/server/src/agent/tool-catalog-availability.ts +21 -0
  270. package/template/apps/server/src/agent/tool-catalog-routes.test.ts +103 -0
  271. package/template/apps/server/src/agent/tool-catalog-routes.ts +62 -0
  272. package/template/apps/server/src/agent/tool-catalog.test.ts +122 -0
  273. package/template/apps/server/src/agent/tool-catalog.ts +44 -0
  274. package/template/apps/server/src/agent/tool-registry.ts +45 -14
  275. package/template/apps/server/src/agent/workbench-bootstrap.ts +39 -0
  276. package/template/apps/server/src/agent/workbench-event-projection.ts +115 -0
  277. package/template/apps/server/src/agent/workbench-facade.contract.test.ts +189 -0
  278. package/template/apps/server/src/agent/workbench-facade.ts +339 -0
  279. package/template/apps/server/src/agent/workbench-recording.contract.test.ts +328 -0
  280. package/template/apps/server/src/agent/workbench-routes.ts +97 -0
  281. package/template/apps/server/src/agent/workbench-run-integration.test.ts +231 -0
  282. package/template/apps/server/src/agent/workbench-run-reader.ts +187 -0
  283. package/template/apps/server/src/agent/workbench-safe-result.ts +61 -0
  284. package/template/apps/server/src/agent/workbench-sse.ts +50 -0
  285. package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +9 -0
  286. package/template/apps/server/src/agent-skills/access.ts +88 -0
  287. package/template/apps/server/src/agent-skills/bootstrap.ts +49 -0
  288. package/template/apps/server/src/agent-skills/builtin-registration.ts +83 -0
  289. package/template/apps/server/src/agent-skills/builtins.ts +19 -0
  290. package/template/apps/server/src/agent-skills/bundle-zip.ts +163 -0
  291. package/template/apps/server/src/agent-skills/bundle.test.ts +79 -0
  292. package/template/apps/server/src/agent-skills/bundle.ts +133 -0
  293. package/template/apps/server/src/agent-skills/contracts.ts +46 -0
  294. package/template/apps/server/src/agent-skills/drizzle-repository.ts +125 -0
  295. package/template/apps/server/src/agent-skills/input.ts +29 -0
  296. package/template/apps/server/src/agent-skills/postgres.integration.test.ts +348 -0
  297. package/template/apps/server/src/agent-skills/read-routes.test.ts +116 -0
  298. package/template/apps/server/src/agent-skills/reader.ts +108 -0
  299. package/template/apps/server/src/agent-skills/repository.ts +105 -0
  300. package/template/apps/server/src/agent-skills/routes.ts +176 -0
  301. package/template/apps/server/src/agent-skills/service.test.ts +295 -0
  302. package/template/apps/server/src/agent-skills/service.ts +301 -0
  303. package/template/apps/server/src/agent-workflow/preset-registry.test.ts +137 -0
  304. package/template/apps/server/src/agent-workflow/preset-registry.ts +191 -0
  305. package/template/apps/server/src/agent-workflow/preset-routes.test.ts +94 -0
  306. package/template/apps/server/src/agent-workflow/preset-routes.ts +45 -0
  307. package/template/apps/server/src/agent-workflow/query-service.ts +36 -0
  308. package/template/apps/server/src/agent-workflow/recording-projection.contract.test.ts +196 -0
  309. package/template/apps/server/src/agent-workflow/recording-projection.ts +86 -0
  310. package/template/apps/server/src/ai-runtime-report/service.test.ts +10 -7
  311. package/template/apps/server/src/ai-runtime-report/service.ts +1 -1
  312. package/template/apps/server/src/app/agent-workflow-presets.ts +4 -0
  313. package/template/apps/server/src/app/dsh-skill-draft-audit.test.ts +195 -0
  314. package/template/apps/server/src/app/dsh-skill-draft-audit.ts +115 -0
  315. package/template/apps/server/src/app/dsh-workbench-audit.test.ts +71 -0
  316. package/template/apps/server/src/app/dsh-workbench-audit.ts +34 -0
  317. package/template/apps/server/src/app/dsh-workbench-handshake.test.ts +63 -0
  318. package/template/apps/server/src/app/dsh-workbench-handshake.ts +48 -0
  319. package/template/apps/server/src/app/dsh-workbench-http.test.ts +96 -0
  320. package/template/apps/server/src/app/dsh-workbench-lan-origin.test.ts +114 -0
  321. package/template/apps/server/src/app/dsh-workbench-launch.test.ts +70 -0
  322. package/template/apps/server/src/app/dsh-workbench-origin.test.ts +54 -0
  323. package/template/apps/server/src/app/dsh-workbench-proxy.ts +205 -0
  324. package/template/apps/server/src/app/dsh-workbench-session-conflict.test.ts +61 -0
  325. package/template/apps/server/src/app/dsh-workbench-session.ts +59 -0
  326. package/template/apps/server/src/app/dsh-workbench-socket-audit.test.ts +115 -0
  327. package/template/apps/server/src/app/dsh-workbench-socket.test.ts +246 -0
  328. package/template/apps/server/src/app/dsh-workbench-socket.ts +272 -0
  329. package/template/apps/server/src/app/dsh-workbench-test-support.ts +158 -0
  330. package/template/apps/server/src/app/dsh-workbench.test.ts +213 -0
  331. package/template/apps/server/src/app/dsh-workbench.ts +279 -0
  332. package/template/apps/server/src/app/workbench-public-origin.ts +16 -0
  333. package/template/apps/server/src/data-governance/user-plaintext-routes.test.ts +3 -0
  334. package/template/apps/server/src/http-app.ts +31 -0
  335. package/template/apps/server/src/mcp/adapter.ts +1 -0
  336. package/template/apps/server/src/module-composition.test.ts +23 -0
  337. package/template/apps/server/src/module-composition.ts +9 -2
  338. package/template/apps/server/src/observability/bootstrap.ts +12 -0
  339. package/template/apps/server/src/observability/diagnostic-failure-recorder.ts +94 -0
  340. package/template/apps/server/src/observability/diagnostic-http-contract.test.ts +42 -0
  341. package/template/apps/server/src/observability/diagnostic-index.test.ts +89 -0
  342. package/template/apps/server/src/observability/diagnostic-index.ts +88 -0
  343. package/template/apps/server/src/observability/diagnostic-repository.ts +67 -0
  344. package/template/apps/server/src/platform-app-bootstrap.ts +42 -0
  345. package/template/apps/server/src/platform-http-runtime.ts +6 -0
  346. package/template/apps/server/src/runtime-development.test.ts +25 -0
  347. package/template/apps/server/src/runtime-development.ts +6 -44
  348. package/template/apps/server/src/system/diagnostic-routes.test.ts +78 -0
  349. package/template/apps/server/src/system/diagnostic-routes.ts +66 -0
  350. package/template/apps/web/Dockerfile +9 -1
  351. package/template/apps/web/dev/start.ts +21 -10
  352. package/template/apps/web/dsh-workbench-location.ts +21 -0
  353. package/template/apps/web/dsh-workbench-proxy.test.ts +121 -0
  354. package/template/apps/web/dsh-workbench-proxy.ts +194 -0
  355. package/template/apps/web/package.json +3 -1
  356. package/template/apps/web/server.ts +27 -6
  357. package/template/apps/web/src/composables/useLoginFlow.ts +13 -1
  358. package/template/apps/web/src/pages/errors/PlatformErrorPage.vue +6 -0
  359. package/template/apps/web/src/pages/errors/PlatformErrorPage.webtest.ts +14 -1
  360. package/template/apps/web/src/pages/errors/error-page-extension.ts +1 -0
  361. package/template/apps/web/src/pages/system/AgentDebugPage.vue +14 -0
  362. package/template/apps/web/src/pages/system/AgentNativePage.vue +44 -0
  363. package/template/apps/web/src/pages/system/AgentSessionPage.vue +29 -8
  364. package/template/apps/web/src/pages/system/AgentToolsPage.vue +76 -0
  365. package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +20 -7
  366. package/template/apps/web/src/pages/system/DiagnosticLookupPage.vue +56 -0
  367. package/template/apps/web/src/pages/system/DiagnosticLookupPage.webtest.ts +99 -0
  368. package/template/apps/web/src/pages/system/SystemAgentSkillsPage.vue +88 -0
  369. package/template/apps/web/src/pages/system/components/DiagnosticRecordDetails.vue +52 -0
  370. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillDetailDialog.vue +166 -0
  371. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillGovernanceActionDialog.vue +51 -0
  372. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.vue +320 -0
  373. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.webtest.ts +96 -0
  374. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillsTable.vue +69 -0
  375. package/template/apps/web/src/pages/system/components/agent-workbench/AgentWorkbench.vue +236 -0
  376. package/template/apps/web/src/pages/system/components/agent-workbench/DraftLeaveDialog.vue +34 -0
  377. package/template/apps/web/src/pages/system/components/agent-workbench/ReplayEventDetail.vue +175 -0
  378. package/template/apps/web/src/pages/system/components/agent-workbench/SessionReplayTimeline.vue +142 -0
  379. package/template/apps/web/src/pages/system/components/agent-workbench/SessionReplayTimeline.webtest.ts +242 -0
  380. package/template/apps/web/src/pages/system/components/agent-workbench/TestRunComposer.vue +97 -0
  381. package/template/apps/web/src/pages/system/components/agent-workbench/ToolCatalogPanel.vue +100 -0
  382. package/template/apps/web/src/pages/system/components/agent-workbench/ToolCatalogPanel.webtest.ts +55 -0
  383. package/template/apps/web/src/pages/system/components/agent-workbench/ToolRuleDetail.vue +81 -0
  384. package/template/apps/web/src/pages/system/components/agent-workbench/WorkbenchSessionList.vue +57 -0
  385. package/template/apps/web/src/pages/system/components/agent-workbench/catalog-presenter.ts +20 -0
  386. package/template/apps/web/src/pages/system/components/agent-workbench/replay-presenter.ts +94 -0
  387. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.vue +82 -0
  388. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.webtest.ts +57 -0
  389. package/template/apps/web/src/pages/system/composables/useAgentSkillsGovernance.ts +105 -0
  390. package/template/apps/web/src/pages/system/composables/useAgentWorkbench.ts +298 -0
  391. package/template/apps/web/src/pages/system/composables/useAgentWorkbench.webtest.ts +164 -0
  392. package/template/apps/web/src/pages/system/composables/useAgentWorkflowPresets.ts +44 -0
  393. package/template/apps/web/src/pages/system/composables/useDiagnosticLookup.ts +64 -0
  394. package/template/apps/web/src/pages/system/composables/useSessionReplay.ts +48 -0
  395. package/template/apps/web/src/router/error-navigation.ts +3 -1
  396. package/template/apps/web/src/router/error-navigation.webtest.ts +14 -2
  397. package/template/apps/web/src/router/index.ts +8 -45
  398. package/template/apps/web/src/router/platform-admin-pages.ts +79 -0
  399. package/template/apps/web/src/router/platform-admin-route-bindings.ts +12 -0
  400. package/template/apps/web/src/services/agent-admin-api.ts +155 -0
  401. package/template/apps/web/src/services/agent-admin-api.webtest.ts +120 -0
  402. package/template/apps/web/src/services/agent-skills-api.ts +55 -0
  403. package/template/apps/web/src/services/agent-workbench-event.ts +60 -0
  404. package/template/apps/web/src/services/agent-workflow-api.ts +12 -0
  405. package/template/apps/web/src/services/diagnostics-api.ts +12 -0
  406. package/template/apps/web/src/services/http.ts +18 -0
  407. package/template/apps/web/src/services/http.webtest.ts +51 -0
  408. package/template/apps/web/vite.config.ts +39 -0
  409. package/template/deploy/dsh/README.md +5 -0
  410. package/template/deploy/dsh/documents/README.md +9 -0
  411. package/template/deploy/dsh/documents/requirements.in +6 -0
  412. package/template/deploy/dsh/documents/requirements.lock +72 -0
  413. package/template/docker-compose.yml +24 -10
  414. package/template/docs/adr/0004-embedded-dsh-runtime.md +9 -0
  415. package/template/docs/architecture/agent-admin-workbench-implementation.md +73 -0
  416. package/template/docs/architecture/agent-admin-workbench-plan.md +41 -0
  417. package/template/docs/architecture/agent-harness.md +6 -0
  418. package/template/docs/architecture/agent-runtime-compatibility.md +2 -0
  419. package/template/docs/architecture/embedded-dsh-integration.md +44 -0
  420. package/template/docs/development/dsh-plugins.md +55 -0
  421. package/template/docs/operations/dsh-agent-migration.md +98 -0
  422. package/template/docs/platform/agent-production-store.md +5 -78
  423. package/template/docs/platform/agent-runtime-observability.md +2 -0
  424. package/template/docs/platform/agent-runtime.md +2 -0
  425. package/template/docs/platform/agent-skills.md +25 -0
  426. package/template/package.json +4 -3
  427. package/template/packages/database/drizzle/0064_dsh_skills_diagnostics.sql +42 -0
  428. package/template/packages/database/drizzle/meta/0064_snapshot.json +15349 -0
  429. package/template/packages/database/drizzle/meta/_journal.json +7 -0
  430. package/template/packages/database/package.json +2 -2
  431. package/template/packages/database/src/schema/agent-skills.ts +65 -0
  432. package/template/packages/database/src/schema/diagnostics.ts +27 -0
  433. package/template/packages/database/src/schema/index.ts +8 -0
  434. package/template/packages/modules/package.json +1 -1
  435. package/template/packages/modules/src/ai-operation-composition.ts +9 -0
  436. package/template/packages/modules/src/ai-operation-visibility.test.ts +33 -0
  437. package/template/packages/modules/src/manifest.ts +2 -0
  438. package/template/packages/modules/src/system-admin-routes.ts +40 -0
  439. package/template/packages/modules/src/system-admin-ui-catalog.ts +24 -11
  440. package/template/packages/modules/src/system-agent-admin-bindings.ts +44 -0
  441. package/template/packages/modules/src/system-agent-admin-menus.ts +46 -0
  442. package/template/packages/modules/src/system-agent-admin-registration.test.ts +52 -0
  443. package/template/packages/modules/src/system-agent-audit-actions.ts +8 -0
  444. package/template/packages/modules/src/system-agent-dsh.ts +119 -0
  445. package/template/packages/modules/src/system-ai-api-bindings.ts +2 -0
  446. package/template/packages/modules/src/system-api-permissions.ts +9 -0
  447. package/template/packages/modules/src/system-audit-actions.ts +36 -0
  448. package/template/packages/modules/src/system-features.ts +24 -0
  449. package/template/packages/modules/src/system-module-audit-selection.ts +25 -0
  450. package/template/packages/modules/src/system-module-catalog.ts +22 -40
  451. package/template/packages/modules/src/system-module-ownership.ts +12 -0
  452. package/template/packages/modules/src/system-modules.ts +16 -3
  453. package/template/packages/modules/src/system-permissions.ts +15 -0
  454. package/template/packages/server-sdk/index.ts +2 -0
  455. package/template/packages/server-sdk/package.json +2 -2
  456. package/template/packages/server-sdk/src/agent-session-provider.ts +19 -0
  457. package/template/packages/shared/index.ts +14 -0
  458. package/template/packages/shared/package.json +1 -1
  459. package/template/packages/shared/src/agent-admin-catalog.ts +73 -0
  460. package/template/packages/shared/src/agent-skills.ts +68 -0
  461. package/template/packages/shared/src/agent-workbench.ts +100 -0
  462. package/template/packages/shared/src/agent-workflow-presets.ts +26 -0
  463. package/template/packages/shared/src/diagnostics.ts +13 -0
  464. package/template/packages/shared/src/rbac.ts +1 -0
  465. package/template/apps/agent-server/install-python-dependencies.sh +0 -92
  466. package/template/apps/agent-server/pyproject.toml +0 -51
  467. package/template/apps/agent-server/src/southwind_agent_server/__init__.py +0 -5
  468. package/template/apps/agent-server/src/southwind_agent_server/app.py +0 -344
  469. package/template/apps/agent-server/src/southwind_agent_server/approval_resolution.py +0 -30
  470. package/template/apps/agent-server/src/southwind_agent_server/artifact_input.py +0 -153
  471. package/template/apps/agent-server/src/southwind_agent_server/asgi.py +0 -8
  472. package/template/apps/agent-server/src/southwind_agent_server/attempt_context.py +0 -199
  473. package/template/apps/agent-server/src/southwind_agent_server/attempt_context_projection.py +0 -203
  474. package/template/apps/agent-server/src/southwind_agent_server/client_completion_contracts.py +0 -61
  475. package/template/apps/agent-server/src/southwind_agent_server/client_completion_governance.py +0 -82
  476. package/template/apps/agent-server/src/southwind_agent_server/client_completion_routes.py +0 -121
  477. package/template/apps/agent-server/src/southwind_agent_server/client_completion_runtime.py +0 -158
  478. package/template/apps/agent-server/src/southwind_agent_server/config.py +0 -267
  479. package/template/apps/agent-server/src/southwind_agent_server/context_message_digest.py +0 -24
  480. package/template/apps/agent-server/src/southwind_agent_server/context_version_contracts.py +0 -71
  481. package/template/apps/agent-server/src/southwind_agent_server/context_version_port.py +0 -307
  482. package/template/apps/agent-server/src/southwind_agent_server/contracts.py +0 -297
  483. package/template/apps/agent-server/src/southwind_agent_server/deterministic.py +0 -63
  484. package/template/apps/agent-server/src/southwind_agent_server/engine.py +0 -134
  485. package/template/apps/agent-server/src/southwind_agent_server/engine_capacity.py +0 -31
  486. package/template/apps/agent-server/src/southwind_agent_server/engine_identity.py +0 -2
  487. package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +0 -61
  488. package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +0 -93
  489. package/template/apps/agent-server/src/southwind_agent_server/http_helpers.py +0 -62
  490. package/template/apps/agent-server/src/southwind_agent_server/lease.py +0 -15
  491. package/template/apps/agent-server/src/southwind_agent_server/multimodal.py +0 -76
  492. package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +0 -329
  493. package/template/apps/agent-server/src/southwind_agent_server/openai_engine_validation.py +0 -165
  494. package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +0 -345
  495. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_insert.py +0 -37
  496. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_queries.py +0 -235
  497. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_replay.py +0 -44
  498. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_status.py +0 -83
  499. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_store.py +0 -336
  500. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_summary.py +0 -304
  501. package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +0 -335
  502. package/template/apps/agent-server/src/southwind_agent_server/postgres_store_backend.py +0 -333
  503. package/template/apps/agent-server/src/southwind_agent_server/provider_audit.py +0 -144
  504. package/template/apps/agent-server/src/southwind_agent_server/provider_governance.py +0 -309
  505. package/template/apps/agent-server/src/southwind_agent_server/provider_output_guidance.py +0 -34
  506. package/template/apps/agent-server/src/southwind_agent_server/readiness_pin.py +0 -37
  507. package/template/apps/agent-server/src/southwind_agent_server/report_lifecycle.py +0 -218
  508. package/template/apps/agent-server/src/southwind_agent_server/report_metrics.py +0 -149
  509. package/template/apps/agent-server/src/southwind_agent_server/report_presenter.py +0 -300
  510. package/template/apps/agent-server/src/southwind_agent_server/report_routes.py +0 -132
  511. package/template/apps/agent-server/src/southwind_agent_server/report_store.py +0 -298
  512. package/template/apps/agent-server/src/southwind_agent_server/report_store_protocol.py +0 -75
  513. package/template/apps/agent-server/src/southwind_agent_server/report_types.py +0 -118
  514. package/template/apps/agent-server/src/southwind_agent_server/run_admission.py +0 -64
  515. package/template/apps/agent-server/src/southwind_agent_server/run_capacity.py +0 -59
  516. package/template/apps/agent-server/src/southwind_agent_server/runtime_budget.py +0 -74
  517. package/template/apps/agent-server/src/southwind_agent_server/runtime_compatibility.py +0 -89
  518. package/template/apps/agent-server/src/southwind_agent_server/runtime_factory.py +0 -105
  519. package/template/apps/agent-server/src/southwind_agent_server/runtime_logging.py +0 -57
  520. package/template/apps/agent-server/src/southwind_agent_server/service.py +0 -325
  521. package/template/apps/agent-server/src/southwind_agent_server/service_control.py +0 -64
  522. package/template/apps/agent-server/src/southwind_agent_server/service_errors.py +0 -4
  523. package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +0 -34
  524. package/template/apps/agent-server/src/southwind_agent_server/service_tasks.py +0 -34
  525. package/template/apps/agent-server/src/southwind_agent_server/signal_events.py +0 -53
  526. package/template/apps/agent-server/src/southwind_agent_server/sqlite_catalog.py +0 -118
  527. package/template/apps/agent-server/src/southwind_agent_server/sqlite_errors.py +0 -2
  528. package/template/apps/agent-server/src/southwind_agent_server/sqlite_schema.py +0 -73
  529. package/template/apps/agent-server/src/southwind_agent_server/sqlite_serialization.py +0 -16
  530. package/template/apps/agent-server/src/southwind_agent_server/sqlite_store.py +0 -350
  531. package/template/apps/agent-server/src/southwind_agent_server/sse.py +0 -41
  532. package/template/apps/agent-server/src/southwind_agent_server/store.py +0 -255
  533. package/template/apps/agent-server/src/southwind_agent_server/store_cipher.py +0 -40
  534. package/template/apps/agent-server/src/southwind_agent_server/structured_logging.py +0 -145
  535. package/template/apps/agent-server/src/southwind_agent_server/telemetry.py +0 -93
  536. package/template/apps/agent-server/src/southwind_agent_server/tool_host.py +0 -152
  537. package/template/apps/agent-server/src/southwind_agent_server/trajectory.py +0 -137
  538. package/template/apps/agent-server/src/southwind_agent_server/unavailable_engine.py +0 -58
  539. package/template/apps/agent-server/src/southwind_agent_server/vision_probe.py +0 -87
  540. package/template/apps/agent-server/src/southwind_agent_server/vision_requirement.py +0 -28
  541. package/template/apps/agent-server/src/southwind_agent_server/vlm_readiness.py +0 -247
  542. package/template/apps/agent-server/tests/__init__.py +0 -1
  543. package/template/apps/agent-server/tests/openai_provider_test_support.py +0 -131
  544. package/template/apps/agent-server/tests/test_api.py +0 -305
  545. package/template/apps/agent-server/tests/test_artifact_input.py +0 -110
  546. package/template/apps/agent-server/tests/test_client_completion.py +0 -230
  547. package/template/apps/agent-server/tests/test_config.py +0 -106
  548. package/template/apps/agent-server/tests/test_fingerprint.py +0 -10
  549. package/template/apps/agent-server/tests/test_multimodal.py +0 -81
  550. package/template/apps/agent-server/tests/test_openai_provider.py +0 -320
  551. package/template/apps/agent-server/tests/test_postgres_report_status.py +0 -59
  552. package/template/apps/agent-server/tests/test_postgres_report_summary.py +0 -298
  553. package/template/apps/agent-server/tests/test_postgres_store.py +0 -135
  554. package/template/apps/agent-server/tests/test_provider_attempt_reporting.py +0 -140
  555. package/template/apps/agent-server/tests/test_provider_governance.py +0 -276
  556. package/template/apps/agent-server/tests/test_report_attempt_lifecycle.py +0 -126
  557. package/template/apps/agent-server/tests/test_report_resilience.py +0 -183
  558. package/template/apps/agent-server/tests/test_report_routes.py +0 -143
  559. package/template/apps/agent-server/tests/test_report_store.py +0 -347
  560. package/template/apps/agent-server/tests/test_report_summary_parity.py +0 -116
  561. package/template/apps/agent-server/tests/test_report_terminal_sync.py +0 -177
  562. package/template/apps/agent-server/tests/test_run_capacity.py +0 -112
  563. package/template/apps/agent-server/tests/test_run_operational_logging.py +0 -114
  564. package/template/apps/agent-server/tests/test_runtime_compatibility.py +0 -119
  565. package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +0 -52
  566. package/template/apps/agent-server/tests/test_sqlite_store.py +0 -182
  567. package/template/apps/agent-server/tests/test_structured_logging.py +0 -142
  568. package/template/apps/agent-server/tests/test_telemetry.py +0 -25
  569. package/template/apps/agent-server/tests/test_tool_approval.py +0 -28
  570. package/template/apps/agent-server/tests/test_tool_structured_output.py +0 -347
  571. package/template/apps/agent-server/tests/test_trajectory.py +0 -91
  572. package/template/apps/agent-server/tests/test_vision_readiness_enforcement.py +0 -72
  573. package/template/apps/agent-server/tests/test_vlm_readiness.py +0 -106
  574. package/template/apps/agent-server/uv.lock +0 -831
@@ -0,0 +1,164 @@
1
+ import { defineComponent, shallowRef } from "vue";
2
+ import { flushPromises, mount } from "@vue/test-utils";
3
+ import { beforeEach, describe, expect, test, vi } from "vitest";
4
+ import type { AgentWorkbenchRecordingV1 } from "@southwind-ai/shared";
5
+ const mocks = vi.hoisted(() => ({
6
+ list: vi.fn(),
7
+ operations: vi.fn(),
8
+ detail: vi.fn(),
9
+ session: vi.fn(),
10
+ run: vi.fn(),
11
+ stream: vi.fn(),
12
+ result: vi.fn(),
13
+ cancel: vi.fn(),
14
+ }));
15
+ vi.mock("@/services/agent-admin-api", () => ({
16
+ listWorkbenchRecordings: mocks.list,
17
+ listAdminOperations: mocks.operations,
18
+ getWorkbenchRecording: mocks.detail,
19
+ createTestSession: mocks.session,
20
+ createTestRun: mocks.run,
21
+ streamTestRun: mocks.stream,
22
+ getTestRunResult: mocks.result,
23
+ cancelTestRun: mocks.cancel,
24
+ }));
25
+ const fingerprint = shallowRef("actor-one");
26
+ vi.mock("@/composables/useAccessSnapshot", () => ({
27
+ useAccessSnapshot: () => ({
28
+ fingerprint,
29
+ snapshot: shallowRef({
30
+ actor: { permissionKeys: ["system.agent-debug.manage"] },
31
+ }),
32
+ }),
33
+ }));
34
+ vi.mock("@/composables/useAuthSession", () => ({
35
+ useAuthSession: () => ({ actor: shallowRef({ id: "actor-one" }) }),
36
+ }));
37
+ import { useAgentWorkbench } from "./useAgentWorkbench";
38
+ const history: AgentWorkbenchRecordingV1 = {
39
+ source: "harness",
40
+ sessionId: "session_test",
41
+ title: "测试",
42
+ updatedAt: "today",
43
+ mode: "read-only",
44
+ sideEffectPolicy: "no-reexecution",
45
+ correlationStatus: "complete",
46
+ timeline: [],
47
+ messages: [],
48
+ runs: [],
49
+ workflows: [],
50
+ missing: [],
51
+ };
52
+ function setup() {
53
+ let state!: ReturnType<typeof useAgentWorkbench>;
54
+ const wrapper = mount(
55
+ defineComponent({
56
+ setup() {
57
+ state = useAgentWorkbench();
58
+ return () => null;
59
+ },
60
+ }),
61
+ );
62
+ return { state, wrapper };
63
+ }
64
+ beforeEach(() => {
65
+ fingerprint.value = "actor-one";
66
+ vi.clearAllMocks();
67
+ mocks.list.mockResolvedValue({ items: [] });
68
+ mocks.operations.mockResolvedValue([]);
69
+ mocks.detail.mockResolvedValue(history);
70
+ mocks.session.mockResolvedValue({ sessionId: "session_test" });
71
+ mocks.run.mockResolvedValue({ runId: "run_test", status: "accepted" });
72
+ mocks.result.mockResolvedValue({
73
+ status: "completed",
74
+ output: { total: 12 },
75
+ });
76
+ mocks.cancel.mockResolvedValue({});
77
+ mocks.stream.mockImplementation(
78
+ async (_run, _operation, _session, onEvent) => {
79
+ onEvent({ sequence: 1, type: "run.completed", summary: "已完成" });
80
+ },
81
+ );
82
+ });
83
+ describe("真实测试工作台编排", () => {
84
+ test("选中的历史 canonical Session 只读,另起运行使用新 Session", async () => {
85
+ const { state, wrapper } = setup();
86
+ await flushPromises();
87
+ await state.select({
88
+ source: "harness",
89
+ sessionId: "session_historical",
90
+ title: "历史",
91
+ updatedAt: "today",
92
+ });
93
+ expect(mocks.run).not.toHaveBeenCalled();
94
+ await state.start("finance.query", {});
95
+ await flushPromises();
96
+ expect(mocks.session).toHaveBeenCalledTimes(1);
97
+ expect(mocks.run.mock.calls[0]?.[2]).toBe("session_test");
98
+ wrapper.unmount();
99
+ });
100
+
101
+ test("使用常规治理API,成功结果后同一Session可以再运行,不重复建Session", async () => {
102
+ const { state, wrapper } = setup();
103
+ await flushPromises();
104
+ expect(await state.start("finance.query", { request: "sum" })).toBe(true);
105
+ await flushPromises();
106
+ expect(state.output.value).toEqual({ total: 12 });
107
+ expect(await state.start("finance.query", { request: "next" })).toBe(true);
108
+ await flushPromises();
109
+ expect(mocks.session).toHaveBeenCalledTimes(1);
110
+ expect(mocks.run).toHaveBeenCalledTimes(2);
111
+ expect(mocks.run.mock.calls[1]?.slice(0, 3)).toEqual([
112
+ "finance.query",
113
+ { request: "next" },
114
+ "session_test",
115
+ ]);
116
+ wrapper.unmount();
117
+ });
118
+ test("只读业务选择不会启动模型;另起测试使用独立Session", async () => {
119
+ const { state, wrapper } = setup();
120
+ await flushPromises();
121
+ await state.select({
122
+ source: "business",
123
+ sessionId: "copilot_one",
124
+ title: "业务",
125
+ updatedAt: "today",
126
+ });
127
+ expect(mocks.run).not.toHaveBeenCalled();
128
+ expect(mocks.stream).not.toHaveBeenCalled();
129
+ expect(mocks.result).not.toHaveBeenCalled();
130
+ await state.start("finance.query", {});
131
+ await flushPromises();
132
+ expect(mocks.run.mock.calls[0]?.[2]).toBe("session_test");
133
+ wrapper.unmount();
134
+ });
135
+ test("手动取消运行与离开detach分开,授权变化会隐藏旧记录", async () => {
136
+ mocks.stream.mockImplementation(() => new Promise(() => {}));
137
+ const { state, wrapper } = setup();
138
+ await flushPromises();
139
+ await state.start("finance.query", {});
140
+ await state.cancel();
141
+ expect(mocks.cancel.mock.calls[0]?.slice(0, 3)).toEqual([
142
+ "run_test",
143
+ "finance.query",
144
+ "session_test",
145
+ ]);
146
+ fingerprint.value = "actor-two";
147
+ await flushPromises();
148
+ expect(state.liveRun.value).toBeUndefined();
149
+ expect(state.recording.value).toBeUndefined();
150
+ expect(state.sessions.value).toEqual([]);
151
+ wrapper.unmount();
152
+ expect(mocks.cancel).toHaveBeenCalledTimes(1);
153
+ });
154
+ test("新建失败保留错误且不自动重试", async () => {
155
+ mocks.run.mockRejectedValue(new Error("Runtime不可用"));
156
+ const { state, wrapper } = setup();
157
+ await flushPromises();
158
+ expect(await state.start("finance.query", {})).toBe(false);
159
+ await flushPromises();
160
+ expect(state.error.value).toContain("Runtime不可用");
161
+ expect(mocks.run).toHaveBeenCalledTimes(1);
162
+ wrapper.unmount();
163
+ });
164
+ });
@@ -0,0 +1,44 @@
1
+ import { onBeforeUnmount, onMounted, readonly, shallowRef } from "vue";
2
+ import {
3
+ listAgentWorkflowPresets,
4
+ type AgentWorkflowPresetSummary,
5
+ } from "@/services/agent-workflow-api";
6
+
7
+ export function useAgentWorkflowPresets() {
8
+ const presets = shallowRef<readonly AgentWorkflowPresetSummary[]>([]);
9
+ const loading = shallowRef(false);
10
+ const error = shallowRef("");
11
+ let controller: AbortController | undefined;
12
+ let revision = 0;
13
+ onMounted(() => void refresh());
14
+ onBeforeUnmount(() => {
15
+ revision++;
16
+ controller?.abort();
17
+ });
18
+
19
+ async function refresh() {
20
+ const current = ++revision;
21
+ controller?.abort();
22
+ const request = new AbortController();
23
+ controller = request;
24
+ loading.value = true;
25
+ error.value = "";
26
+ try {
27
+ const response = await listAgentWorkflowPresets(request.signal);
28
+ if (current === revision && !request.signal.aborted)
29
+ presets.value = response.items;
30
+ } catch (cause) {
31
+ if (current === revision && !request.signal.aborted)
32
+ error.value =
33
+ cause instanceof Error ? cause.message : "Workflow 预设目录读取失败";
34
+ } finally {
35
+ if (current === revision) loading.value = false;
36
+ }
37
+ }
38
+ return {
39
+ presets: readonly(presets),
40
+ loading: readonly(loading),
41
+ error: readonly(error),
42
+ refresh,
43
+ };
44
+ }
@@ -0,0 +1,64 @@
1
+ import { onBeforeUnmount, shallowRef, watch } from "vue";
2
+ import {
3
+ getDiagnostic,
4
+ type DiagnosticRecord,
5
+ } from "@/services/diagnostics-api";
6
+ import { ApiError, diagnosticIdFrom } from "@/services/http";
7
+ const messages: Record<number, string> = {
8
+ 400: "诊断编号格式无效,请复制完整的 diag-… 编号。",
9
+ 401: "登录已失效,请重新登录后查询。",
10
+ 403: "当前身份无权查询,请确认错误诊断读取权限及功能是否可用。",
11
+ 404: "未找到该诊断编号。请确认编号来自当前部署且对应失败请求;索引也可能未成功保存。",
12
+ 410: "该诊断编号已超过 30 天保留期,请结合发生时间查询已留存的服务日志。",
13
+ 422: "这是浏览器本地编号,服务端没有对应索引,请结合发生时间检查浏览器控制台。",
14
+ 503: "诊断索引暂不可用,请稍后重试或检查服务端日志。",
15
+ };
16
+
17
+ export function useDiagnosticLookup() {
18
+ const input = shallowRef("");
19
+ const record = shallowRef<DiagnosticRecord>();
20
+ const error = shallowRef("");
21
+ const loading = shallowRef(false);
22
+ let controller: AbortController | undefined;
23
+ let generation = 0;
24
+
25
+ function clear() {
26
+ generation++;
27
+ controller?.abort();
28
+ record.value = undefined;
29
+ error.value = "";
30
+ loading.value = false;
31
+ }
32
+ watch(input, clear, { flush: "sync" });
33
+ onBeforeUnmount(clear);
34
+
35
+ async function lookup() {
36
+ clear();
37
+ const id = input.value.trim();
38
+ if (id.startsWith("web-")) {
39
+ error.value = messages[422]!;
40
+ return;
41
+ }
42
+ if (!diagnosticIdFrom(id)) {
43
+ error.value = messages[400]!;
44
+ return;
45
+ }
46
+ const current = generation;
47
+ controller = new AbortController();
48
+ loading.value = true;
49
+ try {
50
+ const result = await getDiagnostic(id, controller.signal);
51
+ if (current === generation) record.value = result;
52
+ } catch (failure) {
53
+ if (current !== generation) return;
54
+ error.value =
55
+ failure instanceof ApiError
56
+ ? (messages[failure.status] ??
57
+ "诊断查询失败,请稍后重试或联系维护人员检查服务日志。")
58
+ : "无法连接诊断服务,请检查网络及服务状态后重试。";
59
+ } finally {
60
+ if (current === generation) loading.value = false;
61
+ }
62
+ }
63
+ return { input, record, error, loading, lookup };
64
+ }
@@ -0,0 +1,48 @@
1
+ import { computed, onBeforeUnmount, shallowRef, watch, type Ref } from "vue";
2
+ import type { AgentWorkbenchEventV1 } from "@southwind-ai/shared";
3
+ /** Local playback changes only the visible cursor; it never calls a runtime. */
4
+ export function useSessionReplay(
5
+ events: Readonly<Ref<readonly AgentWorkbenchEventV1[]>>,
6
+ ) {
7
+ const cursor = shallowRef(-1);
8
+ const playing = shallowRef(false);
9
+ const speed = shallowRef(1);
10
+ let timer: ReturnType<typeof setTimeout> | undefined;
11
+ const current = computed(() => events.value[cursor.value]);
12
+ const visible = computed(() => events.value.slice(0, cursor.value + 1));
13
+ function pause() {
14
+ playing.value = false;
15
+ if (timer) clearTimeout(timer);
16
+ timer = undefined;
17
+ }
18
+ function seek(index: number) {
19
+ pause();
20
+ cursor.value = Math.max(-1, Math.min(index, events.value.length - 1));
21
+ }
22
+ function advance() {
23
+ if (!playing.value) return;
24
+ if (cursor.value >= events.value.length - 1) {
25
+ pause();
26
+ return;
27
+ }
28
+ cursor.value += 1;
29
+ timer = setTimeout(advance, 1000 / speed.value);
30
+ }
31
+ function play() {
32
+ if (cursor.value >= events.value.length - 1) cursor.value = -1;
33
+ playing.value = true;
34
+ advance();
35
+ }
36
+ watch(events, () => {
37
+ pause();
38
+ cursor.value = events.value.length ? 0 : -1;
39
+ });
40
+ watch(speed, () => {
41
+ if (playing.value) {
42
+ pause();
43
+ play();
44
+ }
45
+ });
46
+ onBeforeUnmount(pause);
47
+ return { cursor, playing, speed, current, visible, seek, pause, play };
48
+ }
@@ -1,5 +1,5 @@
1
1
  import type { Router } from "vue-router";
2
- import type { ApiFailure } from "@/services/http";
2
+ import { diagnosticIdFrom, type ApiFailure } from "@/services/http";
3
3
  import { safeReturnTo } from "./auth-navigation";
4
4
 
5
5
  const errorRouteNames = {
@@ -15,6 +15,8 @@ export function installApiFailureNavigation(router: Router) {
15
15
  from: safeErrorReturnTo(router.currentRoute.value.fullPath),
16
16
  };
17
17
  if (failure.requestId) query.requestId = failure.requestId;
18
+ const diagnosticId = diagnosticIdFrom(failure.diagnosticId);
19
+ if (diagnosticId) query.diagnosticId = diagnosticId;
18
20
  scheduleErrorNavigation(router, {
19
21
  name: errorRouteNames[failure.kind],
20
22
  query,
@@ -37,13 +37,14 @@ function testRouter() {
37
37
  }
38
38
 
39
39
  describe("统一错误导航", () => {
40
- test("HTTP 失败类型映射到对应页面并保留 Request ID", async () => {
40
+ test("HTTP 失败页面分别保留诊断编号与 Request ID", async () => {
41
41
  const router = testRouter();
42
42
  await router.push("/records");
43
43
 
44
44
  installApiFailureNavigation(router)({
45
45
  kind: "maintenance",
46
46
  requestId: "req-maintenance-1",
47
+ diagnosticId: "diag-019a1234-5678-7000-8000-000000000001",
47
48
  });
48
49
  await vi.waitFor(() => {
49
50
  expect(router.currentRoute.value.name).toBe("maintenance");
@@ -52,6 +53,7 @@ describe("统一错误导航", () => {
52
53
  expect(router.currentRoute.value.query).toEqual({
53
54
  from: "/records",
54
55
  requestId: "req-maintenance-1",
56
+ diagnosticId: "diag-019a1234-5678-7000-8000-000000000001",
55
57
  });
56
58
  });
57
59
 
@@ -83,7 +85,13 @@ describe("统一错误导航", () => {
83
85
  fetcher: async () =>
84
86
  Response.json(
85
87
  { error: "MAINTENANCE" },
86
- { status: 503, headers: { "x-request-id": "req-guard-1" } },
88
+ {
89
+ status: 503,
90
+ headers: {
91
+ "x-request-id": "req-guard-1",
92
+ "x-diagnostic-id": "diag-019a1234-5678-7000-8000-000000000001",
93
+ },
94
+ },
87
95
  ),
88
96
  });
89
97
  client.setFailureHandler(installApiFailureNavigation(router));
@@ -102,5 +110,9 @@ describe("统一错误导航", () => {
102
110
  await vi.waitFor(() => {
103
111
  expect(router.currentRoute.value.name).toBe("maintenance");
104
112
  });
113
+ expect(router.currentRoute.value.query.diagnosticId).toBe(
114
+ "diag-019a1234-5678-7000-8000-000000000001",
115
+ );
116
+ expect(router.currentRoute.value.query.requestId).toBe("req-guard-1");
105
117
  });
106
118
  });
@@ -1,10 +1,12 @@
1
+ import { platformAdminPageComponents } from "./platform-admin-pages";
1
2
  import {
2
3
  createRouter,
3
4
  createWebHistory,
4
5
  type RouterHistory,
5
6
  type RouteRecordRaw,
6
7
  } from "vue-router";
7
- import type { Component } from "vue";
8
+ // @windy-module system.audit begin
9
+ // @windy-module system.audit end
8
10
  import DashboardPage from "@/pages/dashboard/DashboardPage.vue";
9
11
  import HomePage from "@/app/home/HomePage.vue";
10
12
  import { loginPageComponent } from "@/app/auth/login-page";
@@ -13,27 +15,16 @@ import AccessDeniedPage from "@/pages/AccessDeniedPage.vue";
13
15
  import ServiceUnavailablePage from "@/pages/ServiceUnavailablePage.vue";
14
16
  import ChangePasswordPage from "@/pages/auth/ChangePasswordPage.vue";
15
17
  // @windy-module system.license begin
16
- import LicensePage from "@/pages/license/LicensePage.vue";
17
18
  // @windy-module system.license end
18
19
  // @windy-module system.operations begin
19
- import SystemOperationsPage from "@/pages/system/SystemOperationsPage.vue";
20
20
  // @windy-module system.operations end
21
21
  // @windy-module system.agent begin
22
- import AiRuntimePage from "@/pages/system/AiRuntimePage.vue";
23
- import AgentSessionPage from "@/pages/system/AgentSessionPage.vue";
24
- import AgentWorkflowPage from "@/pages/system/AgentWorkflowPage.vue";
25
22
  // @windy-module system.agent end
26
23
  // @windy-module system.notification begin
27
- import SystemNotificationsPage from "@/pages/system/SystemNotificationsPage.vue";
28
24
  // @windy-module system.notification end
29
- import SystemResourceRoutePage from "@/pages/system/SystemResourceRoutePage.vue";
30
25
  // @windy-module system.settings begin
31
- import GlobalSettingsPage from "@/pages/settings/GlobalSettingsPage.vue";
32
26
  // @windy-module system.settings end
33
- import PersonalSettingsPage from "@/pages/profile/PersonalSettingsPage.vue";
34
- import UiComponentPage from "@/pages/ui/UiComponentPage.vue";
35
27
  // @windy-module system.configuration begin
36
- import ModuleConfigurationPage from "@/pages/configuration/ModuleConfigurationPage.vue";
37
28
  // @windy-module system.configuration end
38
29
  import { useAccessSnapshot } from "@/composables/useAccessSnapshot";
39
30
  import {
@@ -44,7 +35,7 @@ import {
44
35
  import { useLicenseRuntime } from "@/composables/useLicenseRuntime";
45
36
  // @windy-module system.license end
46
37
  import { evaluateWebAccess, type WebAccessSnapshot } from "@/layout/navigation";
47
- import { isApiErrorStatus } from "@/services/http";
38
+ import { diagnosticIdFrom, isApiErrorStatus } from "@/services/http";
48
39
  import { loginRoute, safeReturnTo } from "./auth-navigation";
49
40
  import {
50
41
  deniedRoute,
@@ -60,10 +51,7 @@ import {
60
51
  manifestAdminRoute,
61
52
  validateWebModuleComposition,
62
53
  } from "./manifest-routes";
63
- import {
64
- platformAdminRouteBindings,
65
- type PlatformAdminPageKey,
66
- } from "./platform-admin-route-bindings";
54
+ import { platformAdminRouteBindings } from "./platform-admin-route-bindings";
67
55
  import { reservedWebRoutePaths } from "./reserved-route-paths";
68
56
  import { webAdminUiComposition } from "./web-composition-host";
69
57
 
@@ -82,34 +70,6 @@ export interface RouterAuthProvider {
82
70
  clear(): void;
83
71
  }
84
72
 
85
- const platformAdminPageComponents: Partial<
86
- Record<PlatformAdminPageKey, Component>
87
- > = {
88
- resource: SystemResourceRoutePage,
89
- profile: PersonalSettingsPage,
90
- "ui-components": UiComponentPage,
91
- // @windy-module system.settings begin
92
- settings: GlobalSettingsPage,
93
- // @windy-module system.settings end
94
- // @windy-module system.license begin
95
- license: LicensePage,
96
- // @windy-module system.license end
97
- // @windy-module system.notification begin
98
- notification: SystemNotificationsPage,
99
- // @windy-module system.notification end
100
- // @windy-module system.operations begin
101
- operations: SystemOperationsPage,
102
- // @windy-module system.operations end
103
- // @windy-module system.agent begin
104
- "agent-session": AgentSessionPage,
105
- "agent-workflow": AgentWorkflowPage,
106
- "ai-runtime": AiRuntimePage,
107
- // @windy-module system.agent end
108
- // @windy-module system.configuration begin
109
- configuration: ModuleConfigurationPage,
110
- // @windy-module system.configuration end
111
- };
112
-
113
73
  const platformAdminRoutes = platformAdminRouteBindings.map((binding) => {
114
74
  const component = platformAdminPageComponents[binding.page];
115
75
  if (!component) {
@@ -178,6 +138,7 @@ const declaredRoutes: RouteRecordRaw[] = [
178
138
  kind: "internal",
179
139
  from: safeErrorReturnTo(String(route.query.from || "/")),
180
140
  requestId: requestIdFrom(route.query.requestId),
141
+ diagnosticId: diagnosticIdFrom(route.query.diagnosticId),
181
142
  }),
182
143
  meta: {
183
144
  title: "页面运行异常",
@@ -194,6 +155,7 @@ const declaredRoutes: RouteRecordRaw[] = [
194
155
  kind: "maintenance",
195
156
  from: safeErrorReturnTo(String(route.query.from || "/")),
196
157
  requestId: requestIdFrom(route.query.requestId),
158
+ diagnosticId: diagnosticIdFrom(route.query.diagnosticId),
197
159
  }),
198
160
  meta: {
199
161
  title: "服务维护中",
@@ -210,6 +172,7 @@ const declaredRoutes: RouteRecordRaw[] = [
210
172
  kind: "network",
211
173
  from: safeErrorReturnTo(String(route.query.from || "/")),
212
174
  requestId: requestIdFrom(route.query.requestId),
175
+ diagnosticId: diagnosticIdFrom(route.query.diagnosticId),
213
176
  }),
214
177
  meta: {
215
178
  title: "网络异常",
@@ -0,0 +1,79 @@
1
+ import type { Component } from "vue";
2
+ import type { PlatformAdminPageKey } from "./platform-admin-route-bindings";
3
+ // @windy-module system.audit begin
4
+ import DiagnosticLookupPage from "@/pages/system/DiagnosticLookupPage.vue";
5
+ // @windy-module system.audit end
6
+ // @windy-module system.license begin
7
+ import LicensePage from "@/pages/license/LicensePage.vue";
8
+ // @windy-module system.license end
9
+ // @windy-module system.operations begin
10
+ import SystemOperationsPage from "@/pages/system/SystemOperationsPage.vue";
11
+ // @windy-module system.operations end
12
+ // @windy-module system.agent begin
13
+ import AiRuntimePage from "@/pages/system/AiRuntimePage.vue";
14
+ // @windy-module system.agent end
15
+ // @windy-module system.agent begin
16
+ import SystemAgentSkillsPage from "@/pages/system/SystemAgentSkillsPage.vue";
17
+ // @windy-module system.agent end
18
+ // @windy-module system.agent begin
19
+ import AgentNativePage from "@/pages/system/AgentNativePage.vue";
20
+ // @windy-module system.agent end
21
+ // @windy-module system.agent begin
22
+ import AgentToolsPage from "@/pages/system/AgentToolsPage.vue";
23
+ // @windy-module system.agent end
24
+ // @windy-module system.agent begin
25
+ import AgentDebugPage from "@/pages/system/AgentDebugPage.vue";
26
+ // @windy-module system.agent end
27
+ // @windy-module system.agent begin
28
+ import AgentSessionPage from "@/pages/system/AgentSessionPage.vue";
29
+ // @windy-module system.agent end
30
+ // @windy-module system.agent begin
31
+ import AgentWorkflowPage from "@/pages/system/AgentWorkflowPage.vue";
32
+ // @windy-module system.agent end
33
+ // @windy-module system.notification begin
34
+ import SystemNotificationsPage from "@/pages/system/SystemNotificationsPage.vue";
35
+ // @windy-module system.notification end
36
+ import SystemResourceRoutePage from "@/pages/system/SystemResourceRoutePage.vue";
37
+ // @windy-module system.settings begin
38
+ import GlobalSettingsPage from "@/pages/settings/GlobalSettingsPage.vue";
39
+ // @windy-module system.settings end
40
+ import PersonalSettingsPage from "@/pages/profile/PersonalSettingsPage.vue";
41
+ import UiComponentPage from "@/pages/ui/UiComponentPage.vue";
42
+ // @windy-module system.configuration begin
43
+ import ModuleConfigurationPage from "@/pages/configuration/ModuleConfigurationPage.vue";
44
+ // @windy-module system.configuration end
45
+
46
+ export const platformAdminPageComponents: Partial<
47
+ Record<PlatformAdminPageKey, Component>
48
+ > = {
49
+ resource: SystemResourceRoutePage,
50
+ // @windy-module system.audit begin
51
+ diagnostics: DiagnosticLookupPage,
52
+ // @windy-module system.audit end
53
+ profile: PersonalSettingsPage,
54
+ "ui-components": UiComponentPage,
55
+ // @windy-module system.settings begin
56
+ settings: GlobalSettingsPage,
57
+ // @windy-module system.settings end
58
+ // @windy-module system.license begin
59
+ license: LicensePage,
60
+ // @windy-module system.license end
61
+ // @windy-module system.notification begin
62
+ notification: SystemNotificationsPage,
63
+ // @windy-module system.notification end
64
+ // @windy-module system.operations begin
65
+ operations: SystemOperationsPage,
66
+ // @windy-module system.operations end
67
+ // @windy-module system.agent begin
68
+ "agent-tools": AgentToolsPage,
69
+ "agent-skills": SystemAgentSkillsPage,
70
+ "agent-native": AgentNativePage,
71
+ "agent-debug": AgentDebugPage,
72
+ "agent-session": AgentSessionPage,
73
+ "agent-workflow": AgentWorkflowPage,
74
+ "ai-runtime": AiRuntimePage,
75
+ // @windy-module system.agent end
76
+ // @windy-module system.configuration begin
77
+ configuration: ModuleConfigurationPage,
78
+ // @windy-module system.configuration end
79
+ };
@@ -2,12 +2,19 @@ import type { SystemResourceKey } from "@/pages/system/resource-config";
2
2
 
3
3
  export type PlatformAdminPageKey =
4
4
  | "resource"
5
+ // @windy-module system.audit begin
6
+ | "diagnostics"
7
+ // @windy-module system.audit end
5
8
  | "settings"
6
9
  | "profile"
7
10
  | "license"
8
11
  | "notification"
9
12
  | "operations"
10
13
  // @windy-module system.agent begin
14
+ | "agent-tools"
15
+ | "agent-skills"
16
+ | "agent-native"
17
+ | "agent-debug"
11
18
  | "agent-session"
12
19
  | "agent-workflow"
13
20
  | "ai-runtime"
@@ -52,6 +59,7 @@ export const platformAdminRouteBindings: readonly PlatformAdminRouteBinding[] =
52
59
  // @windy-module system.license end
53
60
  // @windy-module system.audit begin
54
61
  { routeKey: "system.audit", page: "resource", resourceKey: "auditLogs" },
62
+ { routeKey: "system.diagnostics", page: "diagnostics" },
55
63
  // @windy-module system.audit end
56
64
  // @windy-module system.notification begin
57
65
  { routeKey: "system.notification", page: "notification" },
@@ -60,6 +68,10 @@ export const platformAdminRouteBindings: readonly PlatformAdminRouteBinding[] =
60
68
  { routeKey: "system.ops", page: "operations" },
61
69
  // @windy-module system.operations end
62
70
  // @windy-module system.agent begin
71
+ { routeKey: "system.agent-tools", page: "agent-tools" },
72
+ { routeKey: "system.agent-skill", page: "agent-skills" },
73
+ { routeKey: "system.agent-workbench", page: "agent-native" },
74
+ { routeKey: "system.agent-debug", page: "agent-debug" },
63
75
  { routeKey: "system.agent-session", page: "agent-session" },
64
76
  { routeKey: "system.agent-workflow", page: "agent-workflow" },
65
77
  { routeKey: "system.ai-runtime", page: "ai-runtime" },