create-windy 0.8.3 → 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 (505) hide show
  1. package/dist/cli.js +838 -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/dsh-runtime-wire.test.ts +33 -0
  245. package/template/apps/server/src/agent/governance-runtime.ts +41 -0
  246. package/template/apps/server/src/agent/remote-runtime-response.ts +1 -1
  247. package/template/apps/server/src/agent/run-contracts.ts +1 -0
  248. package/template/apps/server/src/agent/run-definition-support.ts +9 -0
  249. package/template/apps/server/src/agent/runtime-tool-composition.ts +2 -0
  250. package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +9 -0
  251. package/template/apps/server/src/agent-skills/access.ts +88 -0
  252. package/template/apps/server/src/agent-skills/bootstrap.ts +49 -0
  253. package/template/apps/server/src/agent-skills/builtin-registration.ts +83 -0
  254. package/template/apps/server/src/agent-skills/builtins.ts +19 -0
  255. package/template/apps/server/src/agent-skills/bundle-zip.ts +163 -0
  256. package/template/apps/server/src/agent-skills/bundle.test.ts +79 -0
  257. package/template/apps/server/src/agent-skills/bundle.ts +133 -0
  258. package/template/apps/server/src/agent-skills/contracts.ts +46 -0
  259. package/template/apps/server/src/agent-skills/drizzle-repository.ts +125 -0
  260. package/template/apps/server/src/agent-skills/input.ts +29 -0
  261. package/template/apps/server/src/agent-skills/postgres.integration.test.ts +348 -0
  262. package/template/apps/server/src/agent-skills/read-routes.test.ts +116 -0
  263. package/template/apps/server/src/agent-skills/reader.ts +108 -0
  264. package/template/apps/server/src/agent-skills/repository.ts +105 -0
  265. package/template/apps/server/src/agent-skills/routes.ts +176 -0
  266. package/template/apps/server/src/agent-skills/service.test.ts +295 -0
  267. package/template/apps/server/src/agent-skills/service.ts +301 -0
  268. package/template/apps/server/src/agent-workflow/preset-registry.test.ts +137 -0
  269. package/template/apps/server/src/agent-workflow/preset-registry.ts +191 -0
  270. package/template/apps/server/src/agent-workflow/preset-routes.test.ts +94 -0
  271. package/template/apps/server/src/agent-workflow/preset-routes.ts +45 -0
  272. package/template/apps/server/src/ai-runtime-report/service.test.ts +10 -7
  273. package/template/apps/server/src/ai-runtime-report/service.ts +1 -1
  274. package/template/apps/server/src/app/agent-workflow-presets.ts +4 -0
  275. package/template/apps/server/src/app/dsh-skill-draft-audit.test.ts +195 -0
  276. package/template/apps/server/src/app/dsh-skill-draft-audit.ts +115 -0
  277. package/template/apps/server/src/app/dsh-workbench-audit.test.ts +71 -0
  278. package/template/apps/server/src/app/dsh-workbench-audit.ts +34 -0
  279. package/template/apps/server/src/app/dsh-workbench-handshake.test.ts +63 -0
  280. package/template/apps/server/src/app/dsh-workbench-handshake.ts +48 -0
  281. package/template/apps/server/src/app/dsh-workbench-http.test.ts +96 -0
  282. package/template/apps/server/src/app/dsh-workbench-lan-origin.test.ts +114 -0
  283. package/template/apps/server/src/app/dsh-workbench-launch.test.ts +70 -0
  284. package/template/apps/server/src/app/dsh-workbench-origin.test.ts +54 -0
  285. package/template/apps/server/src/app/dsh-workbench-proxy.ts +205 -0
  286. package/template/apps/server/src/app/dsh-workbench-session-conflict.test.ts +61 -0
  287. package/template/apps/server/src/app/dsh-workbench-session.ts +59 -0
  288. package/template/apps/server/src/app/dsh-workbench-socket-audit.test.ts +115 -0
  289. package/template/apps/server/src/app/dsh-workbench-socket.test.ts +246 -0
  290. package/template/apps/server/src/app/dsh-workbench-socket.ts +272 -0
  291. package/template/apps/server/src/app/dsh-workbench-test-support.ts +158 -0
  292. package/template/apps/server/src/app/dsh-workbench.test.ts +213 -0
  293. package/template/apps/server/src/app/dsh-workbench.ts +279 -0
  294. package/template/apps/server/src/app/workbench-public-origin.ts +16 -0
  295. package/template/apps/server/src/data-governance/user-plaintext-routes.test.ts +3 -0
  296. package/template/apps/server/src/http-app.ts +31 -0
  297. package/template/apps/server/src/mcp/adapter.ts +1 -0
  298. package/template/apps/server/src/module-composition.test.ts +23 -0
  299. package/template/apps/server/src/module-composition.ts +9 -2
  300. package/template/apps/server/src/observability/bootstrap.ts +12 -0
  301. package/template/apps/server/src/observability/diagnostic-failure-recorder.ts +94 -0
  302. package/template/apps/server/src/observability/diagnostic-http-contract.test.ts +42 -0
  303. package/template/apps/server/src/observability/diagnostic-index.test.ts +89 -0
  304. package/template/apps/server/src/observability/diagnostic-index.ts +88 -0
  305. package/template/apps/server/src/observability/diagnostic-repository.ts +67 -0
  306. package/template/apps/server/src/platform-app-bootstrap.ts +42 -0
  307. package/template/apps/server/src/platform-http-runtime.ts +6 -0
  308. package/template/apps/server/src/runtime-development.test.ts +25 -0
  309. package/template/apps/server/src/runtime-development.ts +6 -44
  310. package/template/apps/server/src/system/diagnostic-routes.test.ts +78 -0
  311. package/template/apps/server/src/system/diagnostic-routes.ts +66 -0
  312. package/template/apps/web/Dockerfile +9 -1
  313. package/template/apps/web/dev/start.ts +21 -10
  314. package/template/apps/web/dsh-workbench-location.ts +21 -0
  315. package/template/apps/web/dsh-workbench-proxy.test.ts +121 -0
  316. package/template/apps/web/dsh-workbench-proxy.ts +194 -0
  317. package/template/apps/web/package.json +3 -1
  318. package/template/apps/web/server.ts +27 -6
  319. package/template/apps/web/src/composables/useLoginFlow.ts +13 -1
  320. package/template/apps/web/src/pages/errors/PlatformErrorPage.vue +6 -0
  321. package/template/apps/web/src/pages/errors/PlatformErrorPage.webtest.ts +14 -1
  322. package/template/apps/web/src/pages/errors/error-page-extension.ts +1 -0
  323. package/template/apps/web/src/pages/system/AgentNativePage.vue +44 -0
  324. package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +20 -7
  325. package/template/apps/web/src/pages/system/DiagnosticLookupPage.vue +56 -0
  326. package/template/apps/web/src/pages/system/DiagnosticLookupPage.webtest.ts +99 -0
  327. package/template/apps/web/src/pages/system/SystemAgentSkillsPage.vue +88 -0
  328. package/template/apps/web/src/pages/system/components/DiagnosticRecordDetails.vue +52 -0
  329. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillDetailDialog.vue +166 -0
  330. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillGovernanceActionDialog.vue +51 -0
  331. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.vue +320 -0
  332. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.webtest.ts +96 -0
  333. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillsTable.vue +69 -0
  334. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.vue +82 -0
  335. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.webtest.ts +57 -0
  336. package/template/apps/web/src/pages/system/composables/useAgentSkillsGovernance.ts +105 -0
  337. package/template/apps/web/src/pages/system/composables/useAgentWorkflowPresets.ts +44 -0
  338. package/template/apps/web/src/pages/system/composables/useDiagnosticLookup.ts +64 -0
  339. package/template/apps/web/src/router/error-navigation.ts +3 -1
  340. package/template/apps/web/src/router/error-navigation.webtest.ts +14 -2
  341. package/template/apps/web/src/router/index.ts +8 -49
  342. package/template/apps/web/src/router/platform-admin-pages.ts +79 -0
  343. package/template/apps/web/src/router/platform-admin-route-bindings.ts +8 -0
  344. package/template/apps/web/src/services/agent-skills-api.ts +55 -0
  345. package/template/apps/web/src/services/agent-workflow-api.ts +12 -0
  346. package/template/apps/web/src/services/diagnostics-api.ts +12 -0
  347. package/template/apps/web/src/services/http.ts +18 -0
  348. package/template/apps/web/src/services/http.webtest.ts +51 -0
  349. package/template/apps/web/vite.config.ts +39 -0
  350. package/template/deploy/dsh/README.md +5 -0
  351. package/template/deploy/dsh/documents/README.md +9 -0
  352. package/template/deploy/dsh/documents/requirements.in +6 -0
  353. package/template/deploy/dsh/documents/requirements.lock +72 -0
  354. package/template/docker-compose.yml +24 -10
  355. package/template/docs/adr/0004-embedded-dsh-runtime.md +9 -0
  356. package/template/docs/architecture/agent-admin-workbench-implementation.md +73 -0
  357. package/template/docs/architecture/agent-admin-workbench-plan.md +41 -0
  358. package/template/docs/architecture/agent-harness.md +2 -0
  359. package/template/docs/architecture/agent-runtime-compatibility.md +2 -0
  360. package/template/docs/architecture/embedded-dsh-integration.md +44 -0
  361. package/template/docs/development/dsh-plugins.md +55 -0
  362. package/template/docs/operations/dsh-agent-migration.md +98 -0
  363. package/template/docs/platform/agent-production-store.md +5 -78
  364. package/template/docs/platform/agent-runtime-observability.md +2 -0
  365. package/template/docs/platform/agent-runtime.md +2 -0
  366. package/template/docs/platform/agent-skills.md +25 -0
  367. package/template/package.json +4 -3
  368. package/template/packages/database/drizzle/0064_dsh_skills_diagnostics.sql +42 -0
  369. package/template/packages/database/drizzle/meta/0064_snapshot.json +15349 -0
  370. package/template/packages/database/drizzle/meta/_journal.json +7 -0
  371. package/template/packages/database/package.json +2 -2
  372. package/template/packages/database/src/schema/agent-skills.ts +65 -0
  373. package/template/packages/database/src/schema/diagnostics.ts +27 -0
  374. package/template/packages/database/src/schema/index.ts +8 -0
  375. package/template/packages/modules/package.json +1 -1
  376. package/template/packages/modules/src/system-admin-routes.ts +24 -0
  377. package/template/packages/modules/src/system-admin-ui-catalog.ts +17 -10
  378. package/template/packages/modules/src/system-agent-admin-bindings.ts +2 -0
  379. package/template/packages/modules/src/system-agent-admin-menus.ts +20 -0
  380. package/template/packages/modules/src/system-agent-audit-actions.ts +3 -0
  381. package/template/packages/modules/src/system-agent-dsh.ts +119 -0
  382. package/template/packages/modules/src/system-api-permissions.ts +9 -0
  383. package/template/packages/modules/src/system-audit-actions.ts +11 -0
  384. package/template/packages/modules/src/system-features.ts +5 -0
  385. package/template/packages/modules/src/system-module-audit-selection.ts +25 -0
  386. package/template/packages/modules/src/system-module-catalog.ts +12 -32
  387. package/template/packages/modules/src/system-modules.ts +14 -3
  388. package/template/packages/modules/src/system-permissions.ts +10 -0
  389. package/template/packages/server-sdk/package.json +2 -2
  390. package/template/packages/shared/index.ts +12 -0
  391. package/template/packages/shared/package.json +1 -1
  392. package/template/packages/shared/src/agent-skills.ts +68 -0
  393. package/template/packages/shared/src/agent-workflow-presets.ts +26 -0
  394. package/template/packages/shared/src/diagnostics.ts +13 -0
  395. package/template/packages/shared/src/rbac.ts +1 -0
  396. package/template/apps/agent-server/install-python-dependencies.sh +0 -92
  397. package/template/apps/agent-server/pyproject.toml +0 -51
  398. package/template/apps/agent-server/src/southwind_agent_server/__init__.py +0 -5
  399. package/template/apps/agent-server/src/southwind_agent_server/app.py +0 -344
  400. package/template/apps/agent-server/src/southwind_agent_server/approval_resolution.py +0 -30
  401. package/template/apps/agent-server/src/southwind_agent_server/artifact_input.py +0 -153
  402. package/template/apps/agent-server/src/southwind_agent_server/asgi.py +0 -8
  403. package/template/apps/agent-server/src/southwind_agent_server/attempt_context.py +0 -199
  404. package/template/apps/agent-server/src/southwind_agent_server/attempt_context_projection.py +0 -203
  405. package/template/apps/agent-server/src/southwind_agent_server/client_completion_contracts.py +0 -61
  406. package/template/apps/agent-server/src/southwind_agent_server/client_completion_governance.py +0 -82
  407. package/template/apps/agent-server/src/southwind_agent_server/client_completion_routes.py +0 -121
  408. package/template/apps/agent-server/src/southwind_agent_server/client_completion_runtime.py +0 -158
  409. package/template/apps/agent-server/src/southwind_agent_server/config.py +0 -267
  410. package/template/apps/agent-server/src/southwind_agent_server/context_message_digest.py +0 -24
  411. package/template/apps/agent-server/src/southwind_agent_server/context_version_contracts.py +0 -71
  412. package/template/apps/agent-server/src/southwind_agent_server/context_version_port.py +0 -307
  413. package/template/apps/agent-server/src/southwind_agent_server/contracts.py +0 -297
  414. package/template/apps/agent-server/src/southwind_agent_server/deterministic.py +0 -63
  415. package/template/apps/agent-server/src/southwind_agent_server/engine.py +0 -134
  416. package/template/apps/agent-server/src/southwind_agent_server/engine_capacity.py +0 -31
  417. package/template/apps/agent-server/src/southwind_agent_server/engine_identity.py +0 -2
  418. package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +0 -61
  419. package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +0 -93
  420. package/template/apps/agent-server/src/southwind_agent_server/http_helpers.py +0 -62
  421. package/template/apps/agent-server/src/southwind_agent_server/lease.py +0 -15
  422. package/template/apps/agent-server/src/southwind_agent_server/multimodal.py +0 -76
  423. package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +0 -329
  424. package/template/apps/agent-server/src/southwind_agent_server/openai_engine_validation.py +0 -165
  425. package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +0 -345
  426. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_insert.py +0 -37
  427. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_queries.py +0 -235
  428. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_replay.py +0 -44
  429. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_status.py +0 -83
  430. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_store.py +0 -336
  431. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_summary.py +0 -304
  432. package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +0 -335
  433. package/template/apps/agent-server/src/southwind_agent_server/postgres_store_backend.py +0 -333
  434. package/template/apps/agent-server/src/southwind_agent_server/provider_audit.py +0 -144
  435. package/template/apps/agent-server/src/southwind_agent_server/provider_governance.py +0 -309
  436. package/template/apps/agent-server/src/southwind_agent_server/provider_output_guidance.py +0 -34
  437. package/template/apps/agent-server/src/southwind_agent_server/readiness_pin.py +0 -37
  438. package/template/apps/agent-server/src/southwind_agent_server/report_lifecycle.py +0 -218
  439. package/template/apps/agent-server/src/southwind_agent_server/report_metrics.py +0 -149
  440. package/template/apps/agent-server/src/southwind_agent_server/report_presenter.py +0 -300
  441. package/template/apps/agent-server/src/southwind_agent_server/report_routes.py +0 -132
  442. package/template/apps/agent-server/src/southwind_agent_server/report_store.py +0 -298
  443. package/template/apps/agent-server/src/southwind_agent_server/report_store_protocol.py +0 -75
  444. package/template/apps/agent-server/src/southwind_agent_server/report_types.py +0 -118
  445. package/template/apps/agent-server/src/southwind_agent_server/run_admission.py +0 -64
  446. package/template/apps/agent-server/src/southwind_agent_server/run_capacity.py +0 -59
  447. package/template/apps/agent-server/src/southwind_agent_server/runtime_budget.py +0 -74
  448. package/template/apps/agent-server/src/southwind_agent_server/runtime_compatibility.py +0 -89
  449. package/template/apps/agent-server/src/southwind_agent_server/runtime_factory.py +0 -105
  450. package/template/apps/agent-server/src/southwind_agent_server/runtime_logging.py +0 -57
  451. package/template/apps/agent-server/src/southwind_agent_server/service.py +0 -325
  452. package/template/apps/agent-server/src/southwind_agent_server/service_control.py +0 -64
  453. package/template/apps/agent-server/src/southwind_agent_server/service_errors.py +0 -4
  454. package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +0 -34
  455. package/template/apps/agent-server/src/southwind_agent_server/service_tasks.py +0 -34
  456. package/template/apps/agent-server/src/southwind_agent_server/signal_events.py +0 -53
  457. package/template/apps/agent-server/src/southwind_agent_server/sqlite_catalog.py +0 -118
  458. package/template/apps/agent-server/src/southwind_agent_server/sqlite_errors.py +0 -2
  459. package/template/apps/agent-server/src/southwind_agent_server/sqlite_schema.py +0 -73
  460. package/template/apps/agent-server/src/southwind_agent_server/sqlite_serialization.py +0 -16
  461. package/template/apps/agent-server/src/southwind_agent_server/sqlite_store.py +0 -350
  462. package/template/apps/agent-server/src/southwind_agent_server/sse.py +0 -41
  463. package/template/apps/agent-server/src/southwind_agent_server/store.py +0 -255
  464. package/template/apps/agent-server/src/southwind_agent_server/store_cipher.py +0 -40
  465. package/template/apps/agent-server/src/southwind_agent_server/structured_logging.py +0 -145
  466. package/template/apps/agent-server/src/southwind_agent_server/telemetry.py +0 -93
  467. package/template/apps/agent-server/src/southwind_agent_server/tool_host.py +0 -152
  468. package/template/apps/agent-server/src/southwind_agent_server/trajectory.py +0 -137
  469. package/template/apps/agent-server/src/southwind_agent_server/unavailable_engine.py +0 -58
  470. package/template/apps/agent-server/src/southwind_agent_server/vision_probe.py +0 -87
  471. package/template/apps/agent-server/src/southwind_agent_server/vision_requirement.py +0 -28
  472. package/template/apps/agent-server/src/southwind_agent_server/vlm_readiness.py +0 -247
  473. package/template/apps/agent-server/tests/__init__.py +0 -1
  474. package/template/apps/agent-server/tests/openai_provider_test_support.py +0 -131
  475. package/template/apps/agent-server/tests/test_api.py +0 -305
  476. package/template/apps/agent-server/tests/test_artifact_input.py +0 -110
  477. package/template/apps/agent-server/tests/test_client_completion.py +0 -230
  478. package/template/apps/agent-server/tests/test_config.py +0 -106
  479. package/template/apps/agent-server/tests/test_fingerprint.py +0 -10
  480. package/template/apps/agent-server/tests/test_multimodal.py +0 -81
  481. package/template/apps/agent-server/tests/test_openai_provider.py +0 -320
  482. package/template/apps/agent-server/tests/test_postgres_report_status.py +0 -59
  483. package/template/apps/agent-server/tests/test_postgres_report_summary.py +0 -298
  484. package/template/apps/agent-server/tests/test_postgres_store.py +0 -135
  485. package/template/apps/agent-server/tests/test_provider_attempt_reporting.py +0 -140
  486. package/template/apps/agent-server/tests/test_provider_governance.py +0 -276
  487. package/template/apps/agent-server/tests/test_report_attempt_lifecycle.py +0 -126
  488. package/template/apps/agent-server/tests/test_report_resilience.py +0 -183
  489. package/template/apps/agent-server/tests/test_report_routes.py +0 -143
  490. package/template/apps/agent-server/tests/test_report_store.py +0 -347
  491. package/template/apps/agent-server/tests/test_report_summary_parity.py +0 -116
  492. package/template/apps/agent-server/tests/test_report_terminal_sync.py +0 -177
  493. package/template/apps/agent-server/tests/test_run_capacity.py +0 -112
  494. package/template/apps/agent-server/tests/test_run_operational_logging.py +0 -114
  495. package/template/apps/agent-server/tests/test_runtime_compatibility.py +0 -119
  496. package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +0 -52
  497. package/template/apps/agent-server/tests/test_sqlite_store.py +0 -182
  498. package/template/apps/agent-server/tests/test_structured_logging.py +0 -142
  499. package/template/apps/agent-server/tests/test_telemetry.py +0 -25
  500. package/template/apps/agent-server/tests/test_tool_approval.py +0 -28
  501. package/template/apps/agent-server/tests/test_tool_structured_output.py +0 -347
  502. package/template/apps/agent-server/tests/test_trajectory.py +0 -91
  503. package/template/apps/agent-server/tests/test_vision_readiness_enforcement.py +0 -72
  504. package/template/apps/agent-server/tests/test_vlm_readiness.py +0 -106
  505. package/template/apps/agent-server/uv.lock +0 -831
@@ -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,6 +2,9 @@ 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"
@@ -9,6 +12,8 @@ export type PlatformAdminPageKey =
9
12
  | "operations"
10
13
  // @windy-module system.agent begin
11
14
  | "agent-tools"
15
+ | "agent-skills"
16
+ | "agent-native"
12
17
  | "agent-debug"
13
18
  | "agent-session"
14
19
  | "agent-workflow"
@@ -54,6 +59,7 @@ export const platformAdminRouteBindings: readonly PlatformAdminRouteBinding[] =
54
59
  // @windy-module system.license end
55
60
  // @windy-module system.audit begin
56
61
  { routeKey: "system.audit", page: "resource", resourceKey: "auditLogs" },
62
+ { routeKey: "system.diagnostics", page: "diagnostics" },
57
63
  // @windy-module system.audit end
58
64
  // @windy-module system.notification begin
59
65
  { routeKey: "system.notification", page: "notification" },
@@ -63,6 +69,8 @@ export const platformAdminRouteBindings: readonly PlatformAdminRouteBinding[] =
63
69
  // @windy-module system.operations end
64
70
  // @windy-module system.agent begin
65
71
  { routeKey: "system.agent-tools", page: "agent-tools" },
72
+ { routeKey: "system.agent-skill", page: "agent-skills" },
73
+ { routeKey: "system.agent-workbench", page: "agent-native" },
66
74
  { routeKey: "system.agent-debug", page: "agent-debug" },
67
75
  { routeKey: "system.agent-session", page: "agent-session" },
68
76
  { routeKey: "system.agent-workflow", page: "agent-workflow" },
@@ -0,0 +1,55 @@
1
+ import type {
2
+ AgentSkillBundle,
3
+ AgentSkillCommandRequest,
4
+ AgentSkillGovernanceItem,
5
+ AgentSkillVersion,
6
+ ImportAgentSkillRequest,
7
+ } from "@southwind-ai/shared";
8
+ import { apiRequest } from "./http";
9
+ export type {
10
+ AgentSkillGovernanceItem,
11
+ AgentSkillVersion,
12
+ ImportAgentSkillRequest,
13
+ };
14
+ export function listGovernedAgentSkills(signal?: AbortSignal) {
15
+ return apiRequest<readonly AgentSkillGovernanceItem[]>("/agent/skills", {
16
+ signal,
17
+ });
18
+ }
19
+ export function readAgentSkill(key: string, signal?: AbortSignal) {
20
+ return apiRequest<{ skill: AgentSkillVersion; bundle: AgentSkillBundle }>(
21
+ `/agent/skills/${encodeURIComponent(key)}`,
22
+ { signal },
23
+ );
24
+ }
25
+ export function listAgentSkillVersions(key: string, signal?: AbortSignal) {
26
+ return apiRequest<readonly AgentSkillVersion[]>(
27
+ `/agent/skills/${encodeURIComponent(key)}/versions`,
28
+ { signal },
29
+ );
30
+ }
31
+ export function importAgentSkill(
32
+ input: ImportAgentSkillRequest,
33
+ idempotencyKey: string,
34
+ ) {
35
+ return apiRequest<AgentSkillVersion>("/agent/skills", {
36
+ method: "POST",
37
+ headers: { "idempotency-key": idempotencyKey },
38
+ body: JSON.stringify(input),
39
+ });
40
+ }
41
+ export function governAgentSkill(
42
+ key: string,
43
+ action: "disable" | "rollback",
44
+ input: AgentSkillCommandRequest,
45
+ idempotencyKey: string,
46
+ ) {
47
+ return apiRequest<AgentSkillVersion>(
48
+ `/agent/skills/${encodeURIComponent(key)}/${action}`,
49
+ {
50
+ method: "POST",
51
+ headers: { "idempotency-key": idempotencyKey },
52
+ body: JSON.stringify(input),
53
+ },
54
+ );
55
+ }
@@ -1,4 +1,9 @@
1
1
  import { apiRequest } from "./http";
2
+ import type { AgentWorkflowPresetListResponse } from "@southwind-ai/shared";
3
+ export type {
4
+ AgentWorkflowPresetListResponse,
5
+ AgentWorkflowPresetSummary,
6
+ } from "@southwind-ai/shared";
2
7
 
3
8
  export type AgentWorkflowRunStatus =
4
9
  | "accepted"
@@ -179,3 +184,10 @@ export function getAgentWorkflowRun(runId: string, signal?: AbortSignal) {
179
184
  function requestOptions(signal?: AbortSignal): { signal?: AbortSignal } {
180
185
  return signal ? { signal } : {};
181
186
  }
187
+
188
+ export function listAgentWorkflowPresets(signal?: AbortSignal) {
189
+ return apiRequest<AgentWorkflowPresetListResponse>(
190
+ "/agent/workflows/presets",
191
+ requestOptions(signal),
192
+ );
193
+ }
@@ -0,0 +1,12 @@
1
+ import type { DiagnosticRecord } from "@southwind-ai/shared";
2
+ import { apiRequest } from "./http";
3
+
4
+ export type { DiagnosticRecord } from "@southwind-ai/shared";
5
+
6
+ export function getDiagnostic(id: string, signal: AbortSignal) {
7
+ return apiRequest<DiagnosticRecord>(
8
+ `/system/diagnostics/${encodeURIComponent(id)}`,
9
+ { signal, cache: "no-store" },
10
+ { suppressFailureHandler: true },
11
+ );
12
+ }
@@ -25,6 +25,7 @@ export interface ApiClientOptions {
25
25
  export interface ApiFailure {
26
26
  kind: "internal" | "maintenance" | "network";
27
27
  requestId?: string;
28
+ diagnosticId?: string;
28
29
  }
29
30
 
30
31
  export class ApiError extends Error {
@@ -34,6 +35,7 @@ export class ApiError extends Error {
34
35
  readonly code?: string,
35
36
  readonly reason?: string,
36
37
  readonly requestId?: string,
38
+ readonly diagnosticId?: string,
37
39
  ) {
38
40
  super(message);
39
41
  this.name = "ApiError";
@@ -87,6 +89,7 @@ export function createApiClient(options: ApiClientOptions) {
87
89
  failureHandler?.({
88
90
  kind: result.status === 503 ? "maintenance" : "internal",
89
91
  requestId: error.requestId,
92
+ ...(error.diagnosticId ? { diagnosticId: error.diagnosticId } : {}),
90
93
  });
91
94
  }
92
95
  throw error;
@@ -126,6 +129,9 @@ export function createApiClient(options: ApiClientOptions) {
126
129
  }
127
130
 
128
131
  async function readApiError(response: Response): Promise<ApiError> {
132
+ const diagnosticId = diagnosticIdFrom(
133
+ response.headers.get("x-diagnostic-id"),
134
+ );
129
135
  try {
130
136
  const payload = (await response.json()) as {
131
137
  error?: string;
@@ -142,6 +148,7 @@ async function readApiError(response: Response): Promise<ApiError> {
142
148
  payload.error,
143
149
  payload.reason,
144
150
  response.headers.get("x-request-id") || undefined,
151
+ diagnosticId,
145
152
  );
146
153
  } catch {
147
154
  return new ApiError(
@@ -150,10 +157,21 @@ async function readApiError(response: Response): Promise<ApiError> {
150
157
  undefined,
151
158
  undefined,
152
159
  response.headers.get("x-request-id") || undefined,
160
+ diagnosticId,
153
161
  );
154
162
  }
155
163
  }
156
164
 
165
+ /** Server diagnostic coordinates remain separate from request correlation IDs. */
166
+ export function diagnosticIdFrom(value: unknown): string | undefined {
167
+ return typeof value === "string" &&
168
+ /^diag-[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(
169
+ value,
170
+ )
171
+ ? value
172
+ : undefined;
173
+ }
174
+
157
175
  function configuredDevelopmentToken(): string | undefined {
158
176
  if (!import.meta.env.DEV || import.meta.env.VITE_DEV_AUTH_BYPASS !== "1") {
159
177
  return undefined;
@@ -110,6 +110,57 @@ describe("Web HTTP 会话策略", () => {
110
110
  ]);
111
111
  });
112
112
 
113
+ test.each([true, false])(
114
+ "保留服务端诊断编号且兼容 JSON/非 JSON 错误响应:%s",
115
+ async (json) => {
116
+ const diagnosticId = "diag-019a1234-5678-7000-8000-000000000001";
117
+ const headers = {
118
+ "x-request-id": "req-diagnostic",
119
+ "x-diagnostic-id": diagnosticId,
120
+ };
121
+ const client = createApiClient({
122
+ apiBase: "/api",
123
+ fetcher: async () =>
124
+ json
125
+ ? Response.json({ error: "UNAVAILABLE" }, { status: 503, headers })
126
+ : new Response("proxy unavailable", { status: 503, headers }),
127
+ });
128
+ const failures = vi.fn();
129
+ client.setFailureHandler(failures);
130
+ await expect(client.request("/failure")).rejects.toMatchObject({
131
+ status: 503,
132
+ requestId: "req-diagnostic",
133
+ diagnosticId,
134
+ });
135
+ expect(failures).toHaveBeenCalledWith({
136
+ kind: "maintenance",
137
+ requestId: "req-diagnostic",
138
+ diagnosticId,
139
+ });
140
+ },
141
+ );
142
+
143
+ test("不把 Request ID 或任意响应头伪装为服务端诊断编号", async () => {
144
+ const client = createApiClient({
145
+ apiBase: "/api",
146
+ fetcher: async () =>
147
+ Response.json(
148
+ { error: "UNAVAILABLE" },
149
+ {
150
+ status: 503,
151
+ headers: {
152
+ "x-request-id": "req-preserved",
153
+ "x-diagnostic-id": "not-a-diagnostic",
154
+ },
155
+ },
156
+ ),
157
+ });
158
+ await expect(client.request("/failure")).rejects.toMatchObject({
159
+ requestId: "req-preserved",
160
+ diagnosticId: undefined,
161
+ });
162
+ });
163
+
113
164
  test("传输失败进入网络异常,调用方可显式抑制全局错误页", async () => {
114
165
  const failures = vi.fn();
115
166
  const fetcher = vi.fn<typeof fetch>(async () => {
@@ -1,3 +1,10 @@
1
+ // @windy-module system.agent begin
2
+ import {
3
+ isDshWorkbenchPath,
4
+ dshWorkbenchProxyPath,
5
+ dshWorkbenchLoginPath,
6
+ } from "./dsh-workbench-location";
7
+ // @windy-module system.agent end
1
8
  import { spawnSync } from "node:child_process";
2
9
  import { fileURLToPath, URL } from "node:url";
3
10
  import tailwindcss from "@tailwindcss/vite";
@@ -43,6 +50,38 @@ export default defineConfig({
43
50
  strictPort: true,
44
51
  watch: usePolling ? { usePolling: true, interval: 200 } : undefined,
45
52
  proxy: {
53
+ // @windy-module system.agent begin
54
+ "^/agent(?:$|[/?])": {
55
+ target: process.env.API_UPSTREAM ?? "http://localhost:9747",
56
+ ws: true,
57
+ bypass: (request) =>
58
+ isDshWorkbenchPath(request.url ?? "/") ? undefined : "/index.html",
59
+ rewrite: dshWorkbenchProxyPath,
60
+ configure(proxy) {
61
+ proxy.on("proxyReq", (upstream, request) => {
62
+ for (const name of Object.keys(request.headers))
63
+ if (
64
+ name.startsWith("x-windy-") ||
65
+ name.startsWith("x-forwarded-") ||
66
+ name === "forwarded"
67
+ )
68
+ upstream.removeHeader(name);
69
+ });
70
+ proxy.on("proxyRes", (response, request) => {
71
+ const login = dshWorkbenchLoginPath(
72
+ (request.url ?? "/").replace(
73
+ /^\/api\/agent\/native\/(?=\?|$)/,
74
+ "/agent",
75
+ ),
76
+ );
77
+ if (response.statusCode === 401 && login) {
78
+ response.statusCode = 302;
79
+ response.headers.location = login;
80
+ }
81
+ });
82
+ },
83
+ },
84
+ // @windy-module system.agent end
46
85
  "/api": process.env.API_UPSTREAM ?? "http://localhost:9747",
47
86
  },
48
87
  },
@@ -0,0 +1,5 @@
1
+ # 内置 DSH 的构建资料
2
+
3
+ DSH通过`apps/agent-server` Bun workspace和原有Agent Server镜像交付;用户从Windy同源`/agent`进入。此目录只保存离线文档工具的依赖锁及说明,不创建独立DSH服务、端口或镜像栈。
4
+
5
+ 运行、隔离、容量和验证边界见[内置接入方案](../../docs/architecture/embedded-dsh-integration.md),构建与重置步骤见[迁移运维](../../docs/operations/dsh-agent-migration.md)。
@@ -0,0 +1,9 @@
1
+ # Agent 离线文档工具
2
+
3
+ Python仅供文档工具使用,Agent执行内核由Node/DSH承担。`requirements.in`描述直接依赖,`requirements.lock`固定完整版本与hash;Agent Server镜像在构建时下载wheel,最终环境从本地归档离线安装。运行时不安装新包。
4
+
5
+ 工具源位于`apps/agent-server/documents`,包括Office读写、工作区边界、报告与烟雾探针。只能处理当前用户已授权的工作区文件;正式业务回存仍走所属模块服务和审批。
6
+
7
+ DOCX在线预览沿用DSH官方`office-to-pdf`、固定`libreoffice-kit-wasm@0.1.5`与PDF.js。完整WASM包、许可证、源码配方和完整性清单随同Agent镜像保存;Python包或系统LibreOffice不替代该预览链路。
8
+
9
+ 更新依赖时使用实际解析结果生成锁,验证Linux原生架构与文档产物。禁止只改hash或在运行容器下载补丁。配置、资源限制和验收说明见[迁移运维](../../../docs/operations/dsh-agent-migration.md)。
@@ -0,0 +1,6 @@
1
+ # Direct dependencies. Install requirements.lock with --require-hashes instead.
2
+ python-docx==1.2.0
3
+ openpyxl==3.1.5
4
+ pypdf==6.20.1
5
+ reportlab==5.0.1
6
+ defusedxml==0.7.1
@@ -0,0 +1,72 @@
1
+ # Resolved from PyPI release metadata on 2026-10-15; no sdists or runtime downloads.
2
+ # Supported wheels: CPython 3.12/3.14, Linux glibc amd64/aarch64, macOS arm64/x86_64.
3
+ # Production runtime is Python 3.12; 3.14 wheels support host-only smoke checks.
4
+ # Online: python -m pip install --only-binary=:all: --require-hashes -r requirements.lock
5
+ # Offline: add --no-index --find-links=/wheelhouse to the same command.
6
+
7
+ python-docx==1.2.0 \
8
+ --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7
9
+
10
+ openpyxl==3.1.5 \
11
+ --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2
12
+
13
+ pypdf==6.20.1 \
14
+ --hash=sha256:aa5a55ddcffdc5e5ab291d5decb23f6383f4e56f8e3263dc39af41fff03885ad
15
+
16
+ reportlab==5.0.1 \
17
+ --hash=sha256:1c36e6bb0e71780c72331eba60da7f602e8d4389a8723825af71342e49d791e8
18
+
19
+ defusedxml==0.7.1 \
20
+ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
21
+
22
+ lxml==6.1.3 \
23
+ --hash=sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc \
24
+ --hash=sha256:2221e88679d1351e9a40aaee54bc65679b9795bbd0160bc3d5e36b163344eb75 \
25
+ --hash=sha256:28a23fefdb345b2d4d0ff2860571b5ff9a89a28b6a120f720e8fb0324d346626 \
26
+ --hash=sha256:2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165 \
27
+ --hash=sha256:2cae5d5c90a62d9139c512a0cb1aad1d182b022b5740daea2617eb5bf7fc658e \
28
+ --hash=sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11 \
29
+ --hash=sha256:4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d \
30
+ --hash=sha256:545ccc14fb05485f48b4439ec35beb16d5b5280eb6c81c658bd4707a2a119414 \
31
+ --hash=sha256:5a143e6207579de8baeded4eaac9134413200359f1969d636f0bfb98ee8c3c8f \
32
+ --hash=sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d \
33
+ --hash=sha256:8db38ff3fb7aee7d6a82ae4da2eef1178656fe1216841fbd24870062a9d60473 \
34
+ --hash=sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c \
35
+ --hash=sha256:a1cec0f99b9b914d39176347a93b7610dc09324491aee1cbc57cd291a41a1d55 \
36
+ --hash=sha256:a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0 \
37
+ --hash=sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a \
38
+ --hash=sha256:c6c0c13128a32eb04a51357e56a094e13aa8e6d3d1884de2e9ae923f6915e1a8 \
39
+ --hash=sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5 \
40
+ --hash=sha256:f6b9d2aad499c769ee8287609ab0e6de99d8bcea99c6e6c2e64945259fd52fb2
41
+
42
+ typing-extensions==4.16.0 \
43
+ --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8
44
+
45
+ et-xmlfile==2.0.0 \
46
+ --hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa
47
+
48
+ pillow==12.3.0 \
49
+ --hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \
50
+ --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \
51
+ --hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \
52
+ --hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \
53
+ --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \
54
+ --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \
55
+ --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \
56
+ --hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \
57
+ --hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \
58
+ --hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \
59
+ --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \
60
+ --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7
61
+
62
+ charset-normalizer==3.5.2 \
63
+ --hash=sha256:34276fd796040bf0993ab33a369aa572e6979c7aab225a88893667ad8eac8f7a \
64
+ --hash=sha256:3d31298449090ab8d47b7b1b2a555ff73cac7ed438a08b7ac160980c7ebed649 \
65
+ --hash=sha256:6bd128f206a7752ae1f2ab6c61bf8a24ba28913a10df8b14c2637b973ff97a80 \
66
+ --hash=sha256:8d86d6fc60743dc916eb79e2eb1ec4818e21e427731543af40a3021851174a13 \
67
+ --hash=sha256:b6b751274acb69d77b3323d6b7dbaa3c7fdfc1eb829b7eb61d262f32e1af9685 \
68
+ --hash=sha256:b91363207bd9dc966a691e959bb47f64b30f7ac4b072be9968b366982f7db77c \
69
+ --hash=sha256:dca9ab98072a5a54ebacebdc45f53e645336b320c667410b061be1ca588ae709 \
70
+ --hash=sha256:ed2a239c0ea213acc1908150a3037257083c7c083128f1a4cec2ec4b97dca491 \
71
+ --hash=sha256:f0aa869112ef88429ae17820d99c3dd9504c9e9c671d3c246f3d7442cb051084 \
72
+ --hash=sha256:fcff63213e8e6e47770541a4607175404f47cbb3ebea7b6058cc82d524a0e424
@@ -51,7 +51,7 @@ services:
51
51
  WINDY_SYSTEM_USAGE_PATHS: /app/data/audit
52
52
  PLATFORM_ENABLE_AI: ${PLATFORM_ENABLE_AI:-false}
53
53
  AGENT_SERVER_URL: http://agent-server:8080
54
- WINDY_PUBLIC_BASE_URL: ${WINDY_PUBLIC_BASE_URL:-http://localhost:9747}
54
+ WINDY_PUBLIC_BASE_URL: "${WINDY_PUBLIC_BASE_URL:-}"
55
55
  AGENT_TOOL_HOST_URL: http://server:9747
56
56
  TOOL_SANDBOX_SOCKET: /run/windy-tool-sandbox/worker.sock
57
57
  AGENT_SERVER_INTERNAL_TOKEN: ${AGENT_SERVER_INTERNAL_TOKEN:-}
@@ -161,23 +161,38 @@ services:
161
161
  context: .
162
162
  dockerfile: apps/agent-server/Dockerfile
163
163
  args:
164
- WINDY_PYPI_INDEX_URL: ${WINDY_PYPI_INDEX_URL:-http://mirrors.cloud.tencent.com/pypi/simple}
164
+ WINDY_AGENT_NATIVE_REGISTRY: ${WINDY_AGENT_NATIVE_REGISTRY:-https://registry.npmjs.org}
165
+ WINDY_PYPI_INDEX_URL: ${WINDY_PYPI_INDEX_URL:-https://pypi.org/simple}
166
+ cap_drop: ["ALL"]
167
+ cap_add: ["SETUID", "SETGID", "CHOWN", "DAC_OVERRIDE", "KILL"]
168
+ security_opt:
169
+ - no-new-privileges:true
170
+ pids_limit: 512
171
+ mem_limit: ${AGENT_SERVER_MEMORY_LIMIT:-4g}
172
+ cpus: ${AGENT_SERVER_CPU_LIMIT:-2}
165
173
  environment:
166
174
  AGENT_SERVER_INTERNAL_TOKEN: ${AGENT_SERVER_INTERNAL_TOKEN:-}
167
175
  AGENT_CONTEXT_HOST_URL: http://server:9747
168
- AGENT_RUN_STORE_PATH: /app/data/agent/runs.sqlite3
169
- AGENT_DATABASE_URL: postgresql://windy:${POSTGRES_PASSWORD}@postgres:5432/windy
170
- AGENT_RUN_ENCRYPTION_SECRET: ${AGENT_RUN_ENCRYPTION_SECRET:-}
171
- OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: ${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT:-}
172
- OTEL_EXPORTER_OTLP_HEADERS: ${OTEL_EXPORTER_OTLP_HEADERS:-}
173
- AI_PROVIDER_AUDIT_STORE_PATH: /app/data/agent/provider-audit.sqlite3
176
+ AGENT_INTERNAL_OUTPUT_ENCRYPTION_SECRET: ${AGENT_INTERNAL_OUTPUT_ENCRYPTION_SECRET:-}
177
+ AGENT_RUNTIME_DATABASE_PATH: /app/data/agent/embedded-dsh.sqlite
178
+ AI_TOOL_HOST_URL: http://server:9747
179
+ AI_ARTIFACT_URL: http://server:9747/api/internal/ai/artifacts
180
+ AGENT_DSH_HOME: /app/data/agent/dsh
181
+ AGENT_DSH_MAX_USERS: ${AGENT_DSH_MAX_USERS:-2}
182
+ AGENT_DSH_USER_EXTENSIONS: ${AGENT_DSH_USER_EXTENSIONS:-1}
183
+ AGENT_DSH_MAX_ACTIVE_RUNS: ${AGENT_DSH_MAX_ACTIVE_RUNS:-2}
184
+ AGENT_DSH_WORKSPACE_MAX_BYTES: ${AGENT_DSH_WORKSPACE_MAX_BYTES:-536870912}
174
185
  AI_PROVIDER_AUDIT_RETENTION_DAYS: ${AI_PROVIDER_AUDIT_RETENTION_DAYS:-90}
175
186
  QWEN_API_URL: ${QWEN_API_URL:-}
176
187
  QWEN_API_KEY: ${QWEN_API_KEY:-}
177
188
  QWEN_MODEL: ${QWEN_MODEL:-}
189
+ QWEN_STRUCTURED_OUTPUT_MODE: ${QWEN_STRUCTURED_OUTPUT_MODE:-json_schema}
178
190
  AI_PROVIDER_HTTPS_HOST_ALLOWLIST: ${AI_PROVIDER_HTTPS_HOST_ALLOWLIST:-}
179
- AI_PROVIDER_CONNECT_TIMEOUT_MS: ${AI_PROVIDER_CONNECT_TIMEOUT_MS:-5000}
180
191
  AI_PROVIDER_REQUEST_TIMEOUT_MS: ${AI_PROVIDER_REQUEST_TIMEOUT_MS:-60000}
192
+ AI_PROVIDER_CONTEXT_TOKENS: ${AI_PROVIDER_CONTEXT_TOKENS:-}
193
+ AI_PROVIDER_TOKENIZE_PATH: ${AI_PROVIDER_TOKENIZE_PATH:-}
194
+ AI_PROVIDER_OUTPUT_RESERVE_TOKENS: ${AI_PROVIDER_OUTPUT_RESERVE_TOKENS:-4096}
195
+ AI_PROVIDER_CONTEXT_SAFETY_TOKENS: ${AI_PROVIDER_CONTEXT_SAFETY_TOKENS:-512}
181
196
  AI_PROVIDER_MAX_RESPONSE_BYTES: ${AI_PROVIDER_MAX_RESPONSE_BYTES:-2097152}
182
197
  AI_PROVIDER_MAX_DURATION_SECONDS: ${AI_PROVIDER_MAX_DURATION_SECONDS:-300}
183
198
  AI_PROVIDER_MAX_INPUT_BYTES: ${AI_PROVIDER_MAX_INPUT_BYTES:-67108864}
@@ -197,7 +212,6 @@ services:
197
212
  condition: service_completed_successfully
198
213
  server:
199
214
  condition: service_started
200
-
201
215
  document-server:
202
216
  profiles: ["document"]
203
217
  build:
@@ -0,0 +1,9 @@
1
+ # 内置 DSH 接管通用 Agent 执行
2
+
3
+ 日期:2026-10-29。状态:接受。
4
+
5
+ Windy采用sharp-sword验证过的官方DSH嵌入模式,用Node/TypeScript Agent Server替换Python Direct Engine。DSH负责通用模型循环、原生会话、工作区与插件;Windy保留canonical Run、身份/授权、工具审批、审计、Artifact、长期业务Session/Memory与Workflow义务。
6
+
7
+ 该决定不改变ADR0003的业务Session事实源。DSH原生历史不是业务事实库,不将模型总结自动升级为领域事实。共享技能统一为DSH文件包及宿主版本治理,退役旧Code Skill执行依赖。
8
+
9
+ 取舍:复用公开上游能力,减少双引擎与业务项目维护负担;接受固定预发布版本的升级复核责任、Linux隔离要求及当前单副本SQLite边界。允许重置旧Agent专用数据,不提供旧Python历史迁移,业务数据库及文件保留。实现见[架构](../architecture/embedded-dsh-integration.md)。
@@ -0,0 +1,73 @@
1
+ # Agent 管理工作台技术实现
2
+
3
+ 日期:2026-10-07。对应[方案](./agent-admin-workbench-plan.md)。本轮实现已合入 main,0.8.3 已按用户授权跳过 gate 直接发布,见[发布记录](../operations/create-windy-0.8.3-release.md);尚未证明下游升级或生产部署。
4
+
5
+ ## 交付入口与业务结果
6
+
7
+ - `/admin/system/agent-tools`:管理员可按模块、Operation、当前条件及关键词查看实际装配的工具,并查看完整 JSON Schema、权限、Feature、审批、幂等、Scope、实际 Host/Sandbox 执行模式和预算。页面没有直接 Tool 执行按钮。
8
+ - `/admin/system/agent-debug`:支持授权 Operation 选择、JSON 输入、真实测试 Session/Run、实时事件、安全结果和取消;同一个本工作台新建测试 Session 可多轮运行。历史业务/Harness 会话在同一工作台逐步回放。
9
+ - 原 `/admin/system/agent-sessions` 提供受权限保护的回放入口;AI Runtime 报表和 Workflow 入口继续承担原业务职责。
10
+
11
+ 每一项执行使用当前登录用户、Operation Manifest 与正常 Run API。选择历史会话后发起测试必须创建独立 Session,回放播放器不调用任何执行、取消或业务写入 API。未保存测试输入在离开、切换模式/会话和刷新前确认;浏览器退出使用 beforeunload。离开运行页面仅断开查看,不自动取消运行。
12
+
13
+ ## 运行链与授权
14
+
15
+ `runtime-tool-composition` 构造 GovernedToolRegistry;动态目录复用注册表和正式 Operation 注册。`runtime-bootstrap` 装配目录与工作台,AI 关闭时目录仍显示契约,Operation 不可启动。声明 readiness 的 Operation 使用实际只读 readiness 投影,失败不降级。
16
+
17
+ 新能力在 system.agent 的 Feature、Permission、API、菜单、Admin Route、审计和 module distribution 一起登记:`system.agent-tools.read`、`system.agent-debug.read/manage`。创建测试会话还要求 `system.agent-session.manage`;读 Harness 要求 session.read;业务 Provider 和每一个 Run/Workflow 再按自身当前 Guard、Actor 和 Scope 重新授权。
18
+
19
+ 测试创建通过 PostgreSQL AH-1 Session 服务,随后正常 `/api/agent/runs` 签发授权、准备输入并启动 Runtime。缺少持久 Session 或 Run Runtime 时返回 503,不制造内存假会话。运行结果路径负责现有 Memory/Turn 终态投影;回放通过独立只读 Reader 读取 Runtime,不借用会写终态的普通 result 路径。
20
+
21
+ Manifest 新增可选 `visibility: public|internal`,缺省 public,未知值装配拒绝。internal Operation 的浏览器创建、events、result、cancel、attach 和历史 Reader 全部关闭;可信服务端编排仍通过正常 Facade Guard。Workflow-only 和尚未交付的隔离执行不从普通调试入口启动。
22
+
23
+ ## 业务会话接入
24
+
25
+ 继续使用 `registerAgentSessionProviders()`;旧 `registerDebugSessionProviders()` alias 保持兼容。Provider get() 在当前 Actor、案件范围及 revision 下读取业务消息,可提供可选:
26
+
27
+ ```ts
28
+ const sessionReferences = {
29
+ runRefs: [
30
+ {
31
+ runId: "run_1",
32
+ operationKey: "analysis.copilot.case",
33
+ messageSequence: 3,
34
+ },
35
+ ],
36
+ workflowRefs: [{ workflowRunId: "workflow_run_1", messageSequence: 3 }],
37
+ truncated: true,
38
+ };
39
+ ```
40
+
41
+ Run 引用还可声明真实 sessionId、turnId 和 workflowRunId;具体定义以 SDK TypeScript 类型为准。引用必须来自真实已验证历史,不允许按文本推断。平台校验有界数量、唯一 ID、合法 Operation 和消息序号;Provider 授权通过仍不能代替逐 Run/Workflow 重新授权。历史 Run binding 已过期、权限收回、Scope 改变或 Runtime 记录不可用时显示缺失,不旁路授权。
42
+
43
+ 利剑 `createCopilotDebugSessionProvider()` 保留当前案件与 revision 校验,从本次显示的已完成、runtimeVerified 助手消息取 runId/operationKey,关联 messageSequence。超过 16 条可见消息返回 truncated:true,不扩大业务消息披露范围。当前集成是源码补丁,不能宣称利剑已通过新发布版本官方升级。
44
+
45
+ ## 事件与关联
46
+
47
+ Fork 回放复用 AH-1 checkpoint/lineage replay,并逐父/子 Session 当前重授权,以分段保留独立序号。
48
+
49
+ Session、业务消息、Run 和 Workflow 分别保持各自 ledger 顺序,不把相互独立 sequence 合并成伪全局序列。播放器展示明确的父记录与子日志,并支持 Run/Turn/Step、model attempt/usage、Tool call、审批、Artifact 及节点尝试/分支定位。Tool 请求和结果按 toolCallId 互跳;Workflow 节点优先 nodeRunId。审批节点只从 approval-work-item adapter 的真实安全坐标投影 workItemId,并关联同节点的事件,不披露审批 payload。
50
+
51
+ Run 事件白名单保留 canonical answer delta、Tool/审批坐标、usage/attempt 和安全错误代码,丢弃原始参数、Provider body 和未知事件细节。安全历史结果有界裁剪;internal 结果不读取。Workflow 查询端口读取所有 nodeRuns,保留之前的失败与重试,不使用原详情的 latest-only 投影冒充完整历史。事件读取、业务窗口和 Workflow 发现有界截断时显示 partial/missing。
52
+
53
+ 未记录的模型尝试、进程丢失前未结算的事件、旧记录缺少 Run 引用均无法恢复。当前使用已交付 canonical 事件,不把尚未发布的 Execution Runtime/Workspace/Process/Job 轨迹能力混入验收;对应独立 Trace 待办仍保留。
54
+
55
+ ## 升级与运维
56
+
57
+ 新 Server 子目录随 system.agent 整体分发;新增页面、composables、services、共享 DTO、模块辅助文件和文档均归属 system.agent。Shared/router/Manifest import 使用 module marker,未选择 Agent 时可裁剪。Module ownership selector 拆出独立 helper,保持目录文件大小。
58
+
59
+ 源码已合入 main;本次用户明确授权跳过全部门禁,0.8.3 已直接发布,冻结 SHA 与公开字节及 CLI 消费事实已核验,不声明完整发布矩阵通过。下游升级 owner 已收到通知,使用官方 windy update 事务及 doctor,再验证新菜单权限、Runtime/readiness、PostgreSQL Session 和业务 Provider。业务 Provider 及 Router/page loader 的项目代码是 preserve 层接入,需要由下游 owner 对照新契约集成。
60
+
61
+ ## 验证证据与边界
62
+
63
+ - 目录与 internal 可见性:22 项定向测试、55 个断言通过;读取不调用 prepare、Provider 或 Tool。
64
+ - Manifest 组合与注册:10 项测试、62 个断言通过。
65
+ - Agent Facade、会话兼容与可选模块裁剪:30 项集中回归、217 个断言通过。
66
+ - Web API 编排、目录、播放器和 fork 分段:主 Agent 集中 15 项定向测试通过,Web 类型检查、Oxfmt、Oxlint 通过。
67
+ - 利剑 Provider 关联:12 项相关测试、42 个断言通过;三文件定向 TypeScript、Oxfmt、Oxlint 通过。
68
+ - 目录、internal 可见性、工作台、只读 Reader、Session/fork、SSE 和 HTTP 接缝:主 Agent 集中 29 项定向测试、113 个断言通过;Workflow 投影单独定向验证保留全部节点尝试。
69
+ - 主 Agent 新增 Session 服务 → PersistentRunLink → 普通 Run HTTP → 终态投影 → 只读记录链路契约测试:1 项、18 个断言通过,确认回放不追加日志或重启 Runtime。该检查的持久适配器和 Runtime 是受控内存 fixture。
70
+
71
+ 后端提交 `a0a626c2`,UI 与分发提交 `5cbd5565`;利剑 Provider 提交 `a5e615e50`。提交门禁的全项目 TypeScript/Vue 类型检查及所提交文件 Oxfmt/Oxlint 通过;最终 Manifest composition 验证通过。
72
+
73
+ 这些检查使用受控 fixtures,不冒充新工作台真实 Provider、PostgreSQL 部署或浏览器端到端验收。此前 0.8.2 模型链路证据不自动等同于新工作台部署验证。未运行 Playwright、Chrome、GitHub Actions 或完整发布矩阵。