create-windy 0.8.3 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (691) hide show
  1. package/dist/cli.js +2714 -1944
  2. package/package.json +2 -2
  3. package/template/.agents/skills/windy-business-module/SKILL.md +33 -1
  4. package/template/.windy-template.json +6 -2
  5. package/template/AGENTS.md +4 -0
  6. package/template/README.md +2 -0
  7. package/template/apps/agent-server/Dockerfile +92 -22
  8. package/template/apps/agent-server/README.md +47 -85
  9. package/template/apps/agent-server/documents/office.py +216 -0
  10. package/template/apps/agent-server/documents/query_report.py +136 -0
  11. package/template/apps/agent-server/documents/smoke.py +177 -0
  12. package/template/apps/agent-server/documents/test_boundaries.py +185 -0
  13. package/template/apps/agent-server/host-contracts.ts +56 -0
  14. package/template/apps/agent-server/install-native.ts +167 -0
  15. package/template/apps/agent-server/main.ts +179 -0
  16. package/template/apps/agent-server/native/EXTENSIONS.md +46 -0
  17. package/template/apps/agent-server/native/admission.ts +73 -0
  18. package/template/apps/agent-server/native/authorization.test.ts +176 -0
  19. package/template/apps/agent-server/native/authorization.ts +118 -0
  20. package/template/apps/agent-server/native/boundary-io.ts +93 -0
  21. package/template/apps/agent-server/native/boundary-product.ts +107 -0
  22. package/template/apps/agent-server/native/boundary-project.test.ts +247 -0
  23. package/template/apps/agent-server/native/boundary-project.ts +188 -0
  24. package/template/apps/agent-server/native/boundary.ts +188 -0
  25. package/template/apps/agent-server/native/compaction-policy.test.ts +175 -0
  26. package/template/apps/agent-server/native/config.ts +95 -0
  27. package/template/apps/agent-server/native/conversation-instructions.ts +9 -0
  28. package/template/apps/agent-server/native/extensions.test.ts +190 -0
  29. package/template/apps/agent-server/native/extensions.ts +31 -0
  30. package/template/apps/agent-server/native/host-profile.test.ts +91 -0
  31. package/template/apps/agent-server/native/host-profile.ts +33 -0
  32. package/template/apps/agent-server/native/host-test-fixture.ts +13 -0
  33. package/template/apps/agent-server/native/http.ts +129 -0
  34. package/template/apps/agent-server/native/lifecycle.test.ts +285 -0
  35. package/template/apps/agent-server/native/lifecycle.ts +136 -0
  36. package/template/apps/agent-server/native/manager.ts +292 -0
  37. package/template/apps/agent-server/native/native.test.ts +207 -0
  38. package/template/apps/agent-server/native/office-preview.test.ts +50 -0
  39. package/template/apps/agent-server/native/office-preview.ts +25 -0
  40. package/template/apps/agent-server/native/parallel-harness.ts +244 -0
  41. package/template/apps/agent-server/native/parallel-mcp-fixture.ts +97 -0
  42. package/template/apps/agent-server/native/parallel.test.ts +256 -0
  43. package/template/apps/agent-server/native/profile-composition.test.ts +147 -0
  44. package/template/apps/agent-server/native/profile.ts +307 -0
  45. package/template/apps/agent-server/native/request.ts +61 -0
  46. package/template/apps/agent-server/native/session-conflict.test.ts +235 -0
  47. package/template/apps/agent-server/native/session-conflict.ts +21 -0
  48. package/template/apps/agent-server/native/shared-skills.test.ts +128 -0
  49. package/template/apps/agent-server/native/shared-skills.ts +240 -0
  50. package/template/apps/agent-server/native/socket-lifecycle.test.ts +48 -0
  51. package/template/apps/agent-server/native/socket.ts +130 -0
  52. package/template/apps/agent-server/native/storage-lifecycle.test.ts +218 -0
  53. package/template/apps/agent-server/native/storage.ts +188 -0
  54. package/template/apps/agent-server/native/stream-authorization.test.ts +89 -0
  55. package/template/apps/agent-server/native/worker.ts +77 -0
  56. package/template/apps/agent-server/native-download.test.ts +119 -0
  57. package/template/apps/agent-server/native-download.ts +145 -0
  58. package/template/apps/agent-server/package.json +64 -0
  59. package/template/apps/agent-server/plugins/access.mjs +126 -0
  60. package/template/apps/agent-server/plugins/branding/README.md +9 -0
  61. package/template/apps/agent-server/plugins/branding/brand.css +85 -0
  62. package/template/apps/agent-server/plugins/branding/client.js +338 -0
  63. package/template/apps/agent-server/plugins/branding/index.mjs +35 -0
  64. package/template/apps/agent-server/plugins/branding/loading.d.mts +2 -0
  65. package/template/apps/agent-server/plugins/branding/loading.mjs +66 -0
  66. package/template/apps/agent-server/plugins/branding/loading.test.ts +89 -0
  67. package/template/apps/agent-server/plugins/branding/package.json +21 -0
  68. package/template/apps/agent-server/plugins/branding.test.ts +294 -0
  69. package/template/apps/agent-server/plugins/compaction.mjs +83 -0
  70. package/template/apps/agent-server/plugins/compaction.test.ts +91 -0
  71. package/template/apps/agent-server/plugins/confine-network.py +57 -0
  72. package/template/apps/agent-server/plugins/default-skills.test.ts +62 -0
  73. package/template/apps/agent-server/plugins/downloads/README.md +28 -0
  74. package/template/apps/agent-server/plugins/downloads/client.js +126 -0
  75. package/template/apps/agent-server/plugins/downloads/downloads.test.ts +222 -0
  76. package/template/apps/agent-server/plugins/downloads/index.d.mts +19 -0
  77. package/template/apps/agent-server/plugins/downloads/index.mjs +180 -0
  78. package/template/apps/agent-server/plugins/downloads/package.json +20 -0
  79. package/template/apps/agent-server/plugins/drop-overlay/README.md +24 -0
  80. package/template/apps/agent-server/plugins/drop-overlay/drop-overlay.test.ts +199 -0
  81. package/template/apps/agent-server/plugins/drop-overlay/index.d.mts +8 -0
  82. package/template/apps/agent-server/plugins/drop-overlay/index.mjs +12 -0
  83. package/template/apps/agent-server/plugins/drop-overlay/style.css +102 -0
  84. package/template/apps/agent-server/plugins/locale/client.js +61 -0
  85. package/template/apps/agent-server/plugins/locale/index.d.mts +9 -0
  86. package/template/apps/agent-server/plugins/locale/index.mjs +16 -0
  87. package/template/apps/agent-server/plugins/locale/locale.test.ts +217 -0
  88. package/template/apps/agent-server/plugins/locale/package.json +19 -0
  89. package/template/apps/agent-server/plugins/parallel.mjs +146 -0
  90. package/template/apps/agent-server/plugins/preset-registry.d.mts +2 -0
  91. package/template/apps/agent-server/plugins/preset-registry.mjs +41 -0
  92. package/template/apps/agent-server/plugins/preset-registry.test.ts +46 -0
  93. package/template/apps/agent-server/plugins/questions.d.mts +25 -0
  94. package/template/apps/agent-server/plugins/questions.mjs +142 -0
  95. package/template/apps/agent-server/plugins/questions.test.ts +105 -0
  96. package/template/apps/agent-server/plugins/settings/README.md +17 -0
  97. package/template/apps/agent-server/plugins/settings/client.js +102 -0
  98. package/template/apps/agent-server/plugins/settings/index.mjs +17 -0
  99. package/template/apps/agent-server/plugins/settings/package.json +19 -0
  100. package/template/apps/agent-server/plugins/settings/settings.test.ts +129 -0
  101. package/template/apps/agent-server/plugins/settings-controller.d.mts +4 -0
  102. package/template/apps/agent-server/plugins/settings-controller.mjs +31 -0
  103. package/template/apps/agent-server/plugins/settings-controller.test.ts +17 -0
  104. package/template/apps/agent-server/plugins/settings-dispatch.test.ts +34 -0
  105. package/template/apps/agent-server/plugins/shared-skills.d.mts +15 -0
  106. package/template/apps/agent-server/plugins/shared-skills.mjs +82 -0
  107. package/template/apps/agent-server/plugins/shared-skills.test.ts +51 -0
  108. package/template/apps/agent-server/plugins/skill-library/README.md +11 -0
  109. package/template/apps/agent-server/plugins/skill-library/archive.test.ts +43 -0
  110. package/template/apps/agent-server/plugins/skill-library/bundle.mjs +234 -0
  111. package/template/apps/agent-server/plugins/skill-library/client-chunks.test.ts +110 -0
  112. package/template/apps/agent-server/plugins/skill-library/client-form-mount.test.ts +139 -0
  113. package/template/apps/agent-server/plugins/skill-library/client-form.test.ts +261 -0
  114. package/template/apps/agent-server/plugins/skill-library/client-ui.test.ts +268 -0
  115. package/template/apps/agent-server/plugins/skill-library/client-use.test.ts +158 -0
  116. package/template/apps/agent-server/plugins/skill-library/client.editor.js +93 -0
  117. package/template/apps/agent-server/plugins/skill-library/client.form.js +316 -0
  118. package/template/apps/agent-server/plugins/skill-library/client.js +348 -0
  119. package/template/apps/agent-server/plugins/skill-library/client.request.js +52 -0
  120. package/template/apps/agent-server/plugins/skill-library/client.transfer.js +48 -0
  121. package/template/apps/agent-server/plugins/skill-library/client.use.js +46 -0
  122. package/template/apps/agent-server/plugins/skill-library/default-roots.test.ts +84 -0
  123. package/template/apps/agent-server/plugins/skill-library/draft.d.mts +17 -0
  124. package/template/apps/agent-server/plugins/skill-library/draft.mjs +152 -0
  125. package/template/apps/agent-server/plugins/skill-library/draft.test.ts +287 -0
  126. package/template/apps/agent-server/plugins/skill-library/index.d.mts +49 -0
  127. package/template/apps/agent-server/plugins/skill-library/index.mjs +226 -0
  128. package/template/apps/agent-server/plugins/skill-library/package.json +24 -0
  129. package/template/apps/agent-server/plugins/skill-library/presentation/README.md +27 -0
  130. package/template/apps/agent-server/plugins/skill-library/presentation/UPSTREAM.md +54 -0
  131. package/template/apps/agent-server/plugins/skill-library/presentation/boot.test.ts +150 -0
  132. package/template/apps/agent-server/plugins/skill-library/presentation/client.js +146 -0
  133. package/template/apps/agent-server/plugins/skill-library/presentation/client.test.ts +195 -0
  134. package/template/apps/agent-server/plugins/skill-library/presentation/index.d.mts +9 -0
  135. package/template/apps/agent-server/plugins/skill-library/presentation/index.mjs +30 -0
  136. package/template/apps/agent-server/plugins/skill-library/presentation/metadata.test.ts +82 -0
  137. package/template/apps/agent-server/plugins/skill-library/presentation/package.json +21 -0
  138. package/template/apps/agent-server/plugins/skill-library/presentation/react-boot.test.ts +162 -0
  139. package/template/apps/agent-server/plugins/skill-library/skills.test.ts +342 -0
  140. package/template/apps/agent-server/plugins/skill-library/storage.mjs +293 -0
  141. package/template/apps/agent-server/plugins/skill-library/style.css +229 -0
  142. package/template/apps/agent-server/plugins/skill-library/test-fixture.ts +77 -0
  143. package/template/apps/agent-server/plugins/skill-library/workflow.d.mts +18 -0
  144. package/template/apps/agent-server/plugins/skill-library/workflow.mjs +189 -0
  145. package/template/apps/agent-server/plugins/skill-library/workflow.test.ts +164 -0
  146. package/template/apps/agent-server/plugins/skills/README.md +5 -0
  147. package/template/apps/agent-server/plugins/skills/windy-data-summary/SKILL.md +14 -0
  148. package/template/apps/agent-server/plugins/skills/windy-extension-guide/SKILL.md +14 -0
  149. package/template/apps/agent-server/plugins/skills/windy-office/SKILL.md +14 -0
  150. package/template/apps/agent-server/plugins/skills/windy-skill-capture/SKILL.md +14 -0
  151. package/template/apps/agent-server/plugins/skills/windy-source-compare/SKILL.md +14 -0
  152. package/template/apps/agent-server/plugins/subprocess.mjs +40 -0
  153. package/template/apps/agent-server/plugins/theme/README.md +22 -0
  154. package/template/apps/agent-server/plugins/theme/client.js +18 -0
  155. package/template/apps/agent-server/plugins/theme/index.d.mts +9 -0
  156. package/template/apps/agent-server/plugins/theme/index.mjs +18 -0
  157. package/template/apps/agent-server/plugins/theme/package.json +19 -0
  158. package/template/apps/agent-server/plugins/theme/source-tokens.ts +81 -0
  159. package/template/apps/agent-server/plugins/theme/sync-tokens.ts +12 -0
  160. package/template/apps/agent-server/plugins/theme/theme.test.ts +193 -0
  161. package/template/apps/agent-server/plugins/theme/tokens.json +162 -0
  162. package/template/apps/agent-server/plugins/tool-catalog/README.md +82 -0
  163. package/template/apps/agent-server/plugins/tool-catalog/categories.mjs +111 -0
  164. package/template/apps/agent-server/plugins/tool-catalog/categories.test.ts +118 -0
  165. package/template/apps/agent-server/plugins/tool-catalog/client-cache.test.ts +264 -0
  166. package/template/apps/agent-server/plugins/tool-catalog/client.js +333 -0
  167. package/template/apps/agent-server/plugins/tool-catalog/client.test.ts +136 -0
  168. package/template/apps/agent-server/plugins/tool-catalog/discovery.d.mts +42 -0
  169. package/template/apps/agent-server/plugins/tool-catalog/discovery.mjs +245 -0
  170. package/template/apps/agent-server/plugins/tool-catalog/discovery.test.ts +291 -0
  171. package/template/apps/agent-server/plugins/tool-catalog/index.d.mts +5 -0
  172. package/template/apps/agent-server/plugins/tool-catalog/index.mjs +91 -0
  173. package/template/apps/agent-server/plugins/tool-catalog/package.json +23 -0
  174. package/template/apps/agent-server/plugins/tool-catalog/presentation.d.mts +21 -0
  175. package/template/apps/agent-server/plugins/tool-catalog/presentation.mjs +153 -0
  176. package/template/apps/agent-server/plugins/tool-catalog/presentation.test.ts +166 -0
  177. package/template/apps/agent-server/plugins/tool-catalog/routes.test.ts +209 -0
  178. package/template/apps/agent-server/plugins/tool-catalog/style.css +155 -0
  179. package/template/apps/agent-server/plugins/tool-catalog/use-tool.test.ts +160 -0
  180. package/template/apps/agent-server/plugins/tool-presentation/README.md +7 -0
  181. package/template/apps/agent-server/plugins/tool-presentation/build-client.ts +29 -0
  182. package/template/apps/agent-server/plugins/tool-presentation/client.js +312 -0
  183. package/template/apps/agent-server/plugins/tool-presentation/client.results.js +9 -0
  184. package/template/apps/agent-server/plugins/tool-presentation/client.test.ts +178 -0
  185. package/template/apps/agent-server/plugins/tool-presentation/index.mjs +10 -0
  186. package/template/apps/agent-server/plugins/tool-presentation/package.json +24 -0
  187. package/template/apps/agent-server/plugins/tool-presentation/result-discovery.mjs +43 -0
  188. package/template/apps/agent-server/plugins/tool-presentation/result-model.d.mts +51 -0
  189. package/template/apps/agent-server/plugins/tool-presentation/result-model.mjs +96 -0
  190. package/template/apps/agent-server/plugins/workspace/README.md +5 -0
  191. package/template/apps/agent-server/plugins/workspace/index.mjs +8 -0
  192. package/template/apps/agent-server/plugins/workspace/package.json +10 -0
  193. package/template/apps/agent-server/plugins/workspace/style.css +124 -0
  194. package/template/apps/agent-server/project/host.ts +13 -0
  195. package/template/apps/agent-server/runtime/artifacts.ts +115 -0
  196. package/template/apps/agent-server/runtime/audit.nodecheck.ts +60 -0
  197. package/template/apps/agent-server/runtime/capacity.ts +61 -0
  198. package/template/apps/agent-server/runtime/client-completion-budget.nodecheck.ts +92 -0
  199. package/template/apps/agent-server/runtime/compatibility.ts +39 -0
  200. package/template/apps/agent-server/runtime/completions.ts +320 -0
  201. package/template/apps/agent-server/runtime/config.ts +246 -0
  202. package/template/apps/agent-server/runtime/context-budget.ts +70 -0
  203. package/template/apps/agent-server/runtime/context-plugin.ts +306 -0
  204. package/template/apps/agent-server/runtime/context.nodecheck.ts +241 -0
  205. package/template/apps/agent-server/runtime/contracts.ts +201 -0
  206. package/template/apps/agent-server/runtime/dsh-engine.ts +198 -0
  207. package/template/apps/agent-server/runtime/evaluation-plugin.ts +115 -0
  208. package/template/apps/agent-server/runtime/evaluation.nodecheck.ts +194 -0
  209. package/template/apps/agent-server/runtime/events.ts +71 -0
  210. package/template/apps/agent-server/runtime/governance.ts +194 -0
  211. package/template/apps/agent-server/runtime/index.ts +339 -0
  212. package/template/apps/agent-server/runtime/internal-output.ts +37 -0
  213. package/template/apps/agent-server/runtime/isolation.nodecheck.ts +287 -0
  214. package/template/apps/agent-server/runtime/model-payload.ts +97 -0
  215. package/template/apps/agent-server/runtime/model-plugin.ts +308 -0
  216. package/template/apps/agent-server/runtime/model-route.ts +34 -0
  217. package/template/apps/agent-server/runtime/model-usage.ts +51 -0
  218. package/template/apps/agent-server/runtime/model-wire.ts +45 -0
  219. package/template/apps/agent-server/runtime/native-authorization.nodecheck.ts +126 -0
  220. package/template/apps/agent-server/runtime/native-completion.nodecheck.ts +81 -0
  221. package/template/apps/agent-server/runtime/output-validation.ts +66 -0
  222. package/template/apps/agent-server/runtime/production-capacity.nodecheck.ts +121 -0
  223. package/template/apps/agent-server/runtime/questions-workflow.nodecheck.ts +251 -0
  224. package/template/apps/agent-server/runtime/report-breakdown.ts +79 -0
  225. package/template/apps/agent-server/runtime/reporting.ts +219 -0
  226. package/template/apps/agent-server/runtime/run-completion.ts +39 -0
  227. package/template/apps/agent-server/runtime/run-request-digest.ts +18 -0
  228. package/template/apps/agent-server/runtime/runtime-test-fixtures.ts +264 -0
  229. package/template/apps/agent-server/runtime/runtime.nodecheck.ts +150 -0
  230. package/template/apps/agent-server/runtime/store-idempotency.nodecheck.ts +74 -0
  231. package/template/apps/agent-server/runtime/store.ts +324 -0
  232. package/template/apps/agent-server/runtime/structured-output-mode.nodecheck.ts +51 -0
  233. package/template/apps/agent-server/runtime/tool-name.ts +6 -0
  234. package/template/apps/agent-server/runtime/tool-plugin.ts +201 -0
  235. package/template/apps/agent-server/runtime/vision-readiness.ts +200 -0
  236. package/template/apps/agent-server/scripts/confinement-check.mjs +103 -0
  237. package/template/apps/agent-server/scripts/coordinator-check.mjs +344 -0
  238. package/template/apps/agent-server/scripts/documents-delivery-check.mjs +309 -0
  239. package/template/apps/agent-server/scripts/office-preview-check.mjs +92 -0
  240. package/template/apps/agent-server/scripts/test-confinement.ts +58 -0
  241. package/template/apps/agent-server/scripts/test-coordinator.ts +36 -0
  242. package/template/apps/agent-server/scripts/test-runtime.ts +46 -0
  243. package/template/apps/agent-server/tsconfig.json +21 -0
  244. package/template/apps/server/Dockerfile +5 -1
  245. package/template/apps/server/package.json +14 -10
  246. package/template/apps/server/scripts/check-dsh-platform-example.ts +251 -0
  247. package/template/apps/server/scripts/validate-module-composition-once.ts +2 -0
  248. package/template/apps/server/scripts/validate-module-composition.ts +8 -4
  249. package/template/apps/server/src/admin/routes.test.ts +29 -1
  250. package/template/apps/server/src/admin/routes.ts +20 -2
  251. package/template/apps/server/src/agent/client-session/completion.ts +1 -1
  252. package/template/apps/server/src/agent/client-session/manifest-admission.ts +1 -1
  253. package/template/apps/server/src/agent/client-session/request.ts +1 -1
  254. package/template/apps/server/src/agent/context-version-routes.ts +37 -13
  255. package/template/apps/server/src/agent/dsh-runtime-wire.test.ts +33 -0
  256. package/template/apps/server/src/agent/governance-runtime.ts +41 -0
  257. package/template/apps/server/src/agent/remote-runtime-response.ts +1 -1
  258. package/template/apps/server/src/agent/run-contracts.ts +1 -0
  259. package/template/apps/server/src/agent/run-definition-support.ts +9 -0
  260. package/template/apps/server/src/agent/run-facade.ts +1 -1
  261. package/template/apps/server/src/agent/run-input-verification.ts +1 -1
  262. package/template/apps/server/src/agent/run-routes.ts +1 -14
  263. package/template/apps/server/src/agent/run-start-preparation.ts +1 -1
  264. package/template/apps/server/src/agent/runtime-bootstrap-input.ts +2 -0
  265. package/template/apps/server/src/agent/runtime-bootstrap.ts +49 -157
  266. package/template/apps/server/src/agent/runtime-disabled-composition.ts +2 -1
  267. package/template/apps/server/src/agent/runtime-tool-composition.ts +2 -0
  268. package/template/apps/server/src/agent/session-invalidation/authorization-revocation.ts +54 -0
  269. package/template/apps/server/src/agent/session-runtime-composition.ts +1 -51
  270. package/template/apps/server/src/agent/unavailable-routes.ts +13 -2
  271. package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +9 -0
  272. package/template/apps/server/src/agent-skills/access.ts +88 -0
  273. package/template/apps/server/src/agent-skills/bootstrap.ts +49 -0
  274. package/template/apps/server/src/agent-skills/builtin-registration.ts +83 -0
  275. package/template/apps/server/src/agent-skills/builtins.ts +19 -0
  276. package/template/apps/server/src/agent-skills/bundle-zip.ts +163 -0
  277. package/template/apps/server/src/agent-skills/bundle.test.ts +79 -0
  278. package/template/apps/server/src/agent-skills/bundle.ts +133 -0
  279. package/template/apps/server/src/agent-skills/contracts.ts +46 -0
  280. package/template/apps/server/src/agent-skills/drizzle-repository.ts +125 -0
  281. package/template/apps/server/src/agent-skills/input.ts +29 -0
  282. package/template/apps/server/src/agent-skills/postgres.integration.test.ts +348 -0
  283. package/template/apps/server/src/agent-skills/read-routes.test.ts +116 -0
  284. package/template/apps/server/src/agent-skills/reader.ts +108 -0
  285. package/template/apps/server/src/agent-skills/repository.ts +105 -0
  286. package/template/apps/server/src/agent-skills/routes.ts +176 -0
  287. package/template/apps/server/src/agent-skills/service.test.ts +295 -0
  288. package/template/apps/server/src/agent-skills/service.ts +301 -0
  289. package/template/apps/server/src/agent-workflow/preset-registry.test.ts +137 -0
  290. package/template/apps/server/src/agent-workflow/preset-registry.ts +191 -0
  291. package/template/apps/server/src/agent-workflow/preset-routes.test.ts +94 -0
  292. package/template/apps/server/src/agent-workflow/preset-routes.ts +45 -0
  293. package/template/apps/server/src/agent-workflow/runtime-composition.ts +3 -0
  294. package/template/apps/server/src/agent-workflow/service.ts +17 -1
  295. package/template/apps/server/src/ai-artifact/media-resource-route.test.ts +134 -0
  296. package/template/apps/server/src/ai-artifact/routes.ts +1 -1
  297. package/template/apps/server/src/ai-artifact/runtime.ts +12 -0
  298. package/template/apps/server/src/ai-runtime-readiness/operation-port.test-support.ts +1 -1
  299. package/template/apps/server/src/ai-runtime-readiness/operation-port.ts +8 -0
  300. package/template/apps/server/src/ai-runtime-report/service.test.ts +10 -7
  301. package/template/apps/server/src/ai-runtime-report/service.ts +1 -1
  302. package/template/apps/server/src/ai-runtime-security/internal-token.ts +14 -0
  303. package/template/apps/server/src/app/agent-workflow-presets.ts +4 -0
  304. package/template/apps/server/src/app/antivirus-composition.test.ts +63 -0
  305. package/template/apps/server/src/app/antivirus-composition.ts +29 -0
  306. package/template/apps/server/src/app/dsh-skill-draft-audit.test.ts +195 -0
  307. package/template/apps/server/src/app/dsh-skill-draft-audit.ts +115 -0
  308. package/template/apps/server/src/app/dsh-workbench-audit.test.ts +71 -0
  309. package/template/apps/server/src/app/dsh-workbench-audit.ts +34 -0
  310. package/template/apps/server/src/app/dsh-workbench-handshake.test.ts +63 -0
  311. package/template/apps/server/src/app/dsh-workbench-handshake.ts +48 -0
  312. package/template/apps/server/src/app/dsh-workbench-http.test.ts +96 -0
  313. package/template/apps/server/src/app/dsh-workbench-lan-origin.test.ts +114 -0
  314. package/template/apps/server/src/app/dsh-workbench-launch.test.ts +70 -0
  315. package/template/apps/server/src/app/dsh-workbench-origin.test.ts +54 -0
  316. package/template/apps/server/src/app/dsh-workbench-proxy.ts +205 -0
  317. package/template/apps/server/src/app/dsh-workbench-session-conflict.test.ts +61 -0
  318. package/template/apps/server/src/app/dsh-workbench-session.ts +59 -0
  319. package/template/apps/server/src/app/dsh-workbench-socket-audit.test.ts +116 -0
  320. package/template/apps/server/src/app/dsh-workbench-socket.test.ts +246 -0
  321. package/template/apps/server/src/app/dsh-workbench-socket.ts +272 -0
  322. package/template/apps/server/src/app/dsh-workbench-test-support.ts +158 -0
  323. package/template/apps/server/src/app/dsh-workbench.test.ts +213 -0
  324. package/template/apps/server/src/app/dsh-workbench.ts +279 -0
  325. package/template/apps/server/src/app/workbench-public-origin.ts +16 -0
  326. package/template/apps/server/src/configuration/definition.ts +15 -11
  327. package/template/apps/server/src/data-governance/user-plaintext-routes.test.ts +3 -0
  328. package/template/apps/server/src/document/facade-support.ts +2 -2
  329. package/template/apps/server/src/document/facade.ts +2 -2
  330. package/template/apps/server/src/document/output-artifact-composition.ts +9 -5
  331. package/template/apps/server/src/document/output-artifact.test-support.ts +1 -1
  332. package/template/apps/server/src/embedding/facade.ts +1 -1
  333. package/template/apps/server/src/embedding/input.ts +1 -1
  334. package/template/apps/server/src/embedding/routes.ts +1 -1
  335. package/template/apps/server/src/http-app.ts +31 -0
  336. package/template/apps/server/src/index.ts +60 -60
  337. package/template/apps/server/src/license/routes.ts +4 -1
  338. package/template/apps/server/src/license/runtime-business-access.test.ts +261 -0
  339. package/template/apps/server/src/mcp/adapter.ts +1 -0
  340. package/template/apps/server/src/media-runtime/composition.ts +157 -0
  341. package/template/apps/server/src/media-runtime/media-only-composition.ts +44 -0
  342. package/template/apps/server/src/media-runtime/module-ai-port-factory.test.ts +69 -0
  343. package/template/apps/server/src/media-runtime/module-ai-port-factory.ts +72 -0
  344. package/template/apps/server/src/{agent → media-runtime}/runtime-readiness-sources.ts +14 -6
  345. package/template/apps/server/src/media-runtime/shared-composition.ts +104 -0
  346. package/template/apps/server/src/module-composition.test.ts +45 -0
  347. package/template/apps/server/src/module-composition.ts +57 -2
  348. package/template/apps/server/src/module-host/ai-operation-port.ts +97 -30
  349. package/template/apps/server/src/module-host/ai-operation-speech-normalize.test.ts +1 -1
  350. package/template/apps/server/src/module-host/http-runtime.ts +9 -3
  351. package/template/apps/server/src/module-host/static-route-authorization.test.ts +6 -3
  352. package/template/apps/server/src/module-host/storage-authorization-binding.test.ts +4 -0
  353. package/template/apps/server/src/module-runtime-validation.ts +2 -0
  354. package/template/apps/server/src/observability/bootstrap.ts +12 -0
  355. package/template/apps/server/src/observability/diagnostic-failure-recorder.ts +94 -0
  356. package/template/apps/server/src/observability/diagnostic-http-contract.test.ts +42 -0
  357. package/template/apps/server/src/observability/diagnostic-index.test.ts +89 -0
  358. package/template/apps/server/src/observability/diagnostic-index.ts +113 -0
  359. package/template/apps/server/src/observability/diagnostic-repository.ts +96 -0
  360. package/template/apps/server/src/platform-app-bootstrap.ts +42 -0
  361. package/template/apps/server/src/platform-http-runtime.ts +7 -1
  362. package/template/apps/server/src/runtime-development.test.ts +25 -0
  363. package/template/apps/server/src/runtime-development.ts +6 -44
  364. package/template/apps/server/src/runtime-feature.ts +5 -1
  365. package/template/apps/server/src/runtime.ts +3 -0
  366. package/template/apps/server/src/settings/drizzle-watermark-repository.ts +35 -4
  367. package/template/apps/server/src/settings/watermark-repository.ts +14 -0
  368. package/template/apps/server/src/settings/watermark-routes.test.ts +84 -2
  369. package/template/apps/server/src/settings/watermark-routes.ts +109 -0
  370. package/template/apps/server/src/settings/watermark-transfer.ts +79 -0
  371. package/template/apps/server/src/speech/facade-validation.ts +1 -1
  372. package/template/apps/server/src/speech/facade.ts +2 -2
  373. package/template/apps/server/src/startup-composition-validation.test.ts +32 -0
  374. package/template/apps/server/src/startup-finalization.ts +2 -0
  375. package/template/apps/server/src/startup-runtime.ts +77 -0
  376. package/template/apps/server/src/system/ai-runtime-build.ts +3 -0
  377. package/template/apps/server/src/system/ai-runtime-configuration.test.ts +36 -0
  378. package/template/apps/server/src/system/ai-runtime-configuration.ts +58 -0
  379. package/template/apps/server/src/system/diagnostic-routes.test.ts +123 -0
  380. package/template/apps/server/src/system/diagnostic-routes.ts +101 -0
  381. package/template/apps/server/src/system/environment-policy-reader.test.ts +74 -0
  382. package/template/apps/server/src/system/environment-policy-reader.ts +62 -0
  383. package/template/apps/server/src/system/feature-environment-assessment.test.ts +148 -0
  384. package/template/apps/server/src/system/feature-environment-assessment.ts +179 -0
  385. package/template/apps/server/src/system/host-diagnostics.test.ts +155 -0
  386. package/template/apps/server/src/system/host-diagnostics.ts +225 -0
  387. package/template/apps/server/src/system/menu-registry.test.ts +26 -0
  388. package/template/apps/server/src/system/menu-registry.ts +9 -7
  389. package/template/apps/server/src/system/operations.test.ts +5 -0
  390. package/template/apps/server/src/system/operations.ts +36 -12
  391. package/template/apps/server/src/system/role-authorization-postgres.integration.test.ts +181 -0
  392. package/template/apps/web/Dockerfile +15 -3
  393. package/template/apps/web/dev/dev-port.test.ts +6 -6
  394. package/template/apps/web/dev/dev-port.ts +1 -1
  395. package/template/apps/web/dev/start.ts +27 -11
  396. package/template/apps/web/dsh-workbench-location.ts +21 -0
  397. package/template/apps/web/dsh-workbench-proxy.test.ts +121 -0
  398. package/template/apps/web/dsh-workbench-proxy.ts +194 -0
  399. package/template/apps/web/index.html +1 -0
  400. package/template/apps/web/package.json +18 -16
  401. package/template/apps/web/runtime-server.test.ts +22 -1
  402. package/template/apps/web/runtime-server.ts +6 -0
  403. package/template/apps/web/server.ts +27 -6
  404. package/template/apps/web/src/App.vue +6 -3
  405. package/template/apps/web/src/assets/windy.svg +4 -0
  406. package/template/apps/web/src/components/auth/LoginForm.vue +2 -2
  407. package/template/apps/web/src/components/auth/PasswordChangeForm.vue +14 -3
  408. package/template/apps/web/src/components/common/FormDialog.vue +1 -1
  409. package/template/apps/web/src/components/license/LicenseFlow.webtest.ts +3 -0
  410. package/template/apps/web/src/components/license/LicenseMachineCodeQr.vue +99 -0
  411. package/template/apps/web/src/components/license/LicenseMachineCodeQr.webtest.ts +83 -0
  412. package/template/apps/web/src/components/license/LicensePairingCard.vue +1 -1
  413. package/template/apps/web/src/components/license/LicenseStatusCard.vue +14 -2
  414. package/template/apps/web/src/composables/useLoginFlow.ts +13 -1
  415. package/template/apps/web/src/composables/usePlatformSettings.ts +1 -1
  416. package/template/apps/web/src/composables/useWatermarkSettings.ts +1 -0
  417. package/template/apps/web/src/layout/AppSidebar.vue +5 -9
  418. package/template/apps/web/src/layout/AppSidebar.webtest.ts +4 -1
  419. package/template/apps/web/src/pages/auth/ChangePasswordPage.vue +67 -6
  420. package/template/apps/web/src/pages/auth/LoginPage.vue +3 -12
  421. package/template/apps/web/src/pages/configuration/components/ModuleConfigurationEditor.vue +30 -0
  422. package/template/apps/web/src/pages/configuration/components/ModuleConfigurationWorkbench.vue +25 -14
  423. package/template/apps/web/src/pages/configuration/components/TimeZoneSelect.vue +55 -0
  424. package/template/apps/web/src/pages/errors/PlatformErrorPage.vue +6 -0
  425. package/template/apps/web/src/pages/errors/PlatformErrorPage.webtest.ts +14 -1
  426. package/template/apps/web/src/pages/errors/error-page-extension.ts +1 -0
  427. package/template/apps/web/src/pages/profile/PersonalSettingsPage.vue +64 -11
  428. package/template/apps/web/src/pages/profile/PersonalSettingsPage.webtest.ts +21 -1
  429. package/template/apps/web/src/pages/settings/BrandingSettingsSection.vue +7 -18
  430. package/template/apps/web/src/pages/settings/BrandingSettingsSection.webtest.ts +9 -4
  431. package/template/apps/web/src/pages/settings/GlobalSettingsPage.vue +51 -6
  432. package/template/apps/web/src/pages/settings/GlobalSettingsPage.webtest.ts +19 -3
  433. package/template/apps/web/src/pages/settings/WatermarkSettingsSection.vue +1 -0
  434. package/template/apps/web/src/pages/settings/WatermarkYamlTransfer.vue +211 -0
  435. package/template/apps/web/src/pages/system/AgentNativePage.vue +44 -0
  436. package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +20 -7
  437. package/template/apps/web/src/pages/system/DiagnosticLookupPage.vue +71 -0
  438. package/template/apps/web/src/pages/system/DiagnosticLookupPage.webtest.ts +102 -0
  439. package/template/apps/web/src/pages/system/SystemAgentSkillsPage.vue +88 -0
  440. package/template/apps/web/src/pages/system/SystemOperationsPage.vue +23 -0
  441. package/template/apps/web/src/pages/system/components/DiagnosticLogList.vue +120 -0
  442. package/template/apps/web/src/pages/system/components/DiagnosticRecordDetails.vue +52 -0
  443. package/template/apps/web/src/pages/system/components/OperationEnvironmentPanel.vue +237 -0
  444. package/template/apps/web/src/pages/system/components/OperationFeatureAssessmentPanel.vue +131 -0
  445. package/template/apps/web/src/pages/system/components/PagedSelectionList.vue +31 -24
  446. package/template/apps/web/src/pages/system/components/SystemResourceActions.vue +2 -1
  447. package/template/apps/web/src/pages/system/components/SystemResourceEditor.vue +11 -2
  448. package/template/apps/web/src/pages/system/components/SystemResourcePage.vue +1 -0
  449. package/template/apps/web/src/pages/system/components/SystemResourcePage.webtest.ts +6 -2
  450. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillDetailDialog.vue +166 -0
  451. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillGovernanceActionDialog.vue +51 -0
  452. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.vue +329 -0
  453. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.webtest.ts +96 -0
  454. package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillsTable.vue +69 -0
  455. package/template/apps/web/src/pages/system/components/agent-workbench/SessionReplayTimeline.vue +18 -9
  456. package/template/apps/web/src/pages/system/components/agent-workbench/TestRunComposer.vue +66 -34
  457. package/template/apps/web/src/pages/system/components/agent-workbench/ToolCatalogPanel.vue +48 -33
  458. package/template/apps/web/src/pages/system/components/agent-workbench/ToolCatalogPanel.webtest.ts +9 -2
  459. package/template/apps/web/src/pages/system/components/agent-workbench/ToolRuleDetail.vue +23 -16
  460. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.vue +82 -0
  461. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.webtest.ts +57 -0
  462. package/template/apps/web/src/pages/system/components/dictionary-bulk/DictionaryBulkJobDetail.vue +10 -7
  463. package/template/apps/web/src/pages/system/components/user-account/RolePermissionSummary.vue +81 -57
  464. package/template/apps/web/src/pages/system/components/user-account/UserRoleSelector.vue +6 -4
  465. package/template/apps/web/src/pages/system/components/user-account/UserRoleSelector.webtest.ts +20 -4
  466. package/template/apps/web/src/pages/system/composables/useAgentSkillsGovernance.ts +105 -0
  467. package/template/apps/web/src/pages/system/composables/useAgentWorkflowPresets.ts +44 -0
  468. package/template/apps/web/src/pages/system/composables/useDiagnosticLookup.ts +64 -0
  469. package/template/apps/web/src/pages/system/resource-config.ts +9 -0
  470. package/template/apps/web/src/pages/work-orders/WorkOrderListPage.vue +1 -1
  471. package/template/apps/web/src/router/disabled-feature-loading.webtest.ts +78 -0
  472. package/template/apps/web/src/router/error-navigation.ts +3 -1
  473. package/template/apps/web/src/router/error-navigation.webtest.ts +14 -2
  474. package/template/apps/web/src/router/index.ts +11 -55
  475. package/template/apps/web/src/router/manifest-routes.ts +2 -3
  476. package/template/apps/web/src/router/platform-admin-pages.ts +38 -0
  477. package/template/apps/web/src/router/platform-admin-route-bindings.ts +12 -4
  478. package/template/apps/web/src/services/agent-skills-api.ts +55 -0
  479. package/template/apps/web/src/services/agent-workflow-api.ts +12 -0
  480. package/template/apps/web/src/services/diagnostics-api.ts +24 -0
  481. package/template/apps/web/src/services/http.ts +18 -0
  482. package/template/apps/web/src/services/http.webtest.ts +51 -0
  483. package/template/apps/web/src/services/operations-api.ts +4 -0
  484. package/template/apps/web/src/services/platform-settings-api.ts +35 -1
  485. package/template/apps/web/vite.config.ts +47 -2
  486. package/template/deploy/dsh/README.md +5 -0
  487. package/template/deploy/dsh/documents/README.md +9 -0
  488. package/template/deploy/dsh/documents/requirements.in +6 -0
  489. package/template/deploy/dsh/documents/requirements.lock +72 -0
  490. package/template/deploy/environment/windy.environment.example.yaml +53 -0
  491. package/template/docker-compose.yml +27 -11
  492. package/template/docs/adr/0004-embedded-dsh-runtime.md +9 -0
  493. package/template/docs/architecture/agent-admin-workbench-implementation.md +73 -0
  494. package/template/docs/architecture/agent-admin-workbench-plan.md +41 -0
  495. package/template/docs/architecture/agent-harness.md +2 -0
  496. package/template/docs/architecture/agent-runtime-compatibility.md +2 -0
  497. package/template/docs/architecture/agent-workflow.md +8 -0
  498. package/template/docs/architecture/durable-jobs.md +17 -0
  499. package/template/docs/architecture/embedded-dsh-integration.md +44 -0
  500. package/template/docs/development/dsh-plugins.md +55 -0
  501. package/template/docs/development/performance-engineering.md +24 -0
  502. package/template/docs/operations/admin-settings-yaml.md +29 -0
  503. package/template/docs/operations/dsh-agent-migration.md +98 -0
  504. package/template/docs/operations/environment-capabilities.md +185 -0
  505. package/template/docs/platform/agent-production-store.md +5 -78
  506. package/template/docs/platform/agent-runtime-observability.md +2 -0
  507. package/template/docs/platform/agent-runtime.md +2 -0
  508. package/template/docs/platform/agent-skills.md +25 -0
  509. package/template/docs/platform/module-configuration.md +18 -3
  510. package/template/docs/platform/platform-authentication.md +1 -1
  511. package/template/package.json +13 -10
  512. package/template/packages/config/package.json +2 -2
  513. package/template/packages/config/src/definition.ts +14 -4
  514. package/template/packages/config/src/environment-loader.ts +27 -3
  515. package/template/packages/config/src/platform-ai-runtime.test.ts +94 -0
  516. package/template/packages/config/src/platform.ts +5 -2
  517. package/template/packages/database/drizzle/0064_dsh_skills_diagnostics.sql +42 -0
  518. package/template/packages/database/drizzle/0065_durable_job_lease_snapshot_lookup.sql +1 -0
  519. package/template/packages/database/drizzle/0066_agent_source_sequence_bigint.sql +3 -0
  520. package/template/packages/database/drizzle/0067_media_runtime_access.sql +46 -0
  521. package/template/packages/database/drizzle/meta/0064_snapshot.json +15349 -0
  522. package/template/packages/database/drizzle/meta/0065_snapshot.json +15370 -0
  523. package/template/packages/database/drizzle/meta/0066_snapshot.json +15370 -0
  524. package/template/packages/database/drizzle/meta/0067_snapshot.json +15370 -0
  525. package/template/packages/database/drizzle/meta/_journal.json +28 -0
  526. package/template/packages/database/package.json +4 -4
  527. package/template/packages/database/src/schema/agent-session.ts +4 -3
  528. package/template/packages/database/src/schema/agent-skills.ts +65 -0
  529. package/template/packages/database/src/schema/diagnostics.ts +27 -0
  530. package/template/packages/database/src/schema/durable-jobs.ts +4 -0
  531. package/template/packages/database/src/schema/index.ts +10 -0
  532. package/template/packages/database/src/schema-durable-recovery.test.ts +21 -1
  533. package/template/packages/database/src/schema-source-sequence.test.ts +24 -0
  534. package/template/packages/example-work-order/package.json +2 -2
  535. package/template/packages/modules/package.json +1 -1
  536. package/template/packages/modules/src/admin-ui-boundary.test.ts +33 -0
  537. package/template/packages/modules/src/composition.ts +11 -28
  538. package/template/packages/modules/src/manifest.ts +2 -0
  539. package/template/packages/modules/src/menu-composition.ts +24 -0
  540. package/template/packages/modules/src/system-admin-routes.ts +26 -2
  541. package/template/packages/modules/src/system-admin-ui-catalog.ts +23 -11
  542. package/template/packages/modules/src/system-agent-admin-bindings.ts +2 -0
  543. package/template/packages/modules/src/system-agent-admin-menus.ts +20 -0
  544. package/template/packages/modules/src/system-agent-audit-actions.ts +3 -0
  545. package/template/packages/modules/src/system-agent-dsh.ts +119 -0
  546. package/template/packages/modules/src/system-ai-api-bindings.ts +0 -16
  547. package/template/packages/modules/src/system-api-control-plane.ts +9 -1
  548. package/template/packages/modules/src/system-api-permissions.ts +16 -0
  549. package/template/packages/modules/src/system-api-watermark.ts +21 -0
  550. package/template/packages/modules/src/system-audit-actions.ts +14 -1
  551. package/template/packages/modules/src/system-features.ts +25 -2
  552. package/template/packages/modules/src/system-media-api-bindings.ts +97 -0
  553. package/template/packages/modules/src/system-module-audit-selection.ts +27 -0
  554. package/template/packages/modules/src/system-module-catalog.test.ts +13 -6
  555. package/template/packages/modules/src/system-module-catalog.ts +12 -267
  556. package/template/packages/modules/src/system-module-definitions.ts +260 -0
  557. package/template/packages/modules/src/system-modules-access.test.ts +2 -0
  558. package/template/packages/modules/src/system-modules.test.ts +7 -1
  559. package/template/packages/modules/src/system-modules.ts +39 -16
  560. package/template/packages/modules/src/system-permissions.ts +22 -0
  561. package/template/packages/server-sdk/package.json +2 -2
  562. package/template/packages/shared/index.ts +15 -0
  563. package/template/packages/shared/package.json +1 -1
  564. package/template/packages/shared/src/agent-skills.ts +68 -0
  565. package/template/packages/shared/src/agent-workflow-presets.ts +26 -0
  566. package/template/packages/shared/src/diagnostics.ts +13 -0
  567. package/template/packages/shared/src/environment-assessment.ts +68 -0
  568. package/template/packages/shared/src/environment-policy.ts +205 -0
  569. package/template/packages/shared/src/license-console-capabilities.ts +7 -0
  570. package/template/packages/shared/src/license.ts +1 -0
  571. package/template/packages/shared/src/module-configuration.ts +2 -1
  572. package/template/packages/shared/src/rbac.ts +1 -0
  573. package/template/scripts/operations/collect-device-info.py +230 -0
  574. package/template/apps/agent-server/install-python-dependencies.sh +0 -92
  575. package/template/apps/agent-server/pyproject.toml +0 -51
  576. package/template/apps/agent-server/src/southwind_agent_server/__init__.py +0 -5
  577. package/template/apps/agent-server/src/southwind_agent_server/app.py +0 -344
  578. package/template/apps/agent-server/src/southwind_agent_server/approval_resolution.py +0 -30
  579. package/template/apps/agent-server/src/southwind_agent_server/artifact_input.py +0 -153
  580. package/template/apps/agent-server/src/southwind_agent_server/asgi.py +0 -8
  581. package/template/apps/agent-server/src/southwind_agent_server/attempt_context.py +0 -199
  582. package/template/apps/agent-server/src/southwind_agent_server/attempt_context_projection.py +0 -203
  583. package/template/apps/agent-server/src/southwind_agent_server/client_completion_contracts.py +0 -61
  584. package/template/apps/agent-server/src/southwind_agent_server/client_completion_governance.py +0 -82
  585. package/template/apps/agent-server/src/southwind_agent_server/client_completion_routes.py +0 -121
  586. package/template/apps/agent-server/src/southwind_agent_server/client_completion_runtime.py +0 -158
  587. package/template/apps/agent-server/src/southwind_agent_server/config.py +0 -267
  588. package/template/apps/agent-server/src/southwind_agent_server/context_message_digest.py +0 -24
  589. package/template/apps/agent-server/src/southwind_agent_server/context_version_contracts.py +0 -71
  590. package/template/apps/agent-server/src/southwind_agent_server/context_version_port.py +0 -307
  591. package/template/apps/agent-server/src/southwind_agent_server/contracts.py +0 -297
  592. package/template/apps/agent-server/src/southwind_agent_server/deterministic.py +0 -63
  593. package/template/apps/agent-server/src/southwind_agent_server/engine.py +0 -134
  594. package/template/apps/agent-server/src/southwind_agent_server/engine_capacity.py +0 -31
  595. package/template/apps/agent-server/src/southwind_agent_server/engine_identity.py +0 -2
  596. package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +0 -61
  597. package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +0 -93
  598. package/template/apps/agent-server/src/southwind_agent_server/http_helpers.py +0 -62
  599. package/template/apps/agent-server/src/southwind_agent_server/lease.py +0 -15
  600. package/template/apps/agent-server/src/southwind_agent_server/multimodal.py +0 -76
  601. package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +0 -329
  602. package/template/apps/agent-server/src/southwind_agent_server/openai_engine_validation.py +0 -165
  603. package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +0 -345
  604. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_insert.py +0 -37
  605. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_queries.py +0 -235
  606. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_replay.py +0 -44
  607. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_status.py +0 -83
  608. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_store.py +0 -336
  609. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_summary.py +0 -304
  610. package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +0 -335
  611. package/template/apps/agent-server/src/southwind_agent_server/postgres_store_backend.py +0 -333
  612. package/template/apps/agent-server/src/southwind_agent_server/provider_audit.py +0 -144
  613. package/template/apps/agent-server/src/southwind_agent_server/provider_governance.py +0 -309
  614. package/template/apps/agent-server/src/southwind_agent_server/provider_output_guidance.py +0 -34
  615. package/template/apps/agent-server/src/southwind_agent_server/readiness_pin.py +0 -37
  616. package/template/apps/agent-server/src/southwind_agent_server/report_lifecycle.py +0 -218
  617. package/template/apps/agent-server/src/southwind_agent_server/report_metrics.py +0 -149
  618. package/template/apps/agent-server/src/southwind_agent_server/report_presenter.py +0 -300
  619. package/template/apps/agent-server/src/southwind_agent_server/report_routes.py +0 -132
  620. package/template/apps/agent-server/src/southwind_agent_server/report_store.py +0 -298
  621. package/template/apps/agent-server/src/southwind_agent_server/report_store_protocol.py +0 -75
  622. package/template/apps/agent-server/src/southwind_agent_server/report_types.py +0 -118
  623. package/template/apps/agent-server/src/southwind_agent_server/run_admission.py +0 -64
  624. package/template/apps/agent-server/src/southwind_agent_server/run_capacity.py +0 -59
  625. package/template/apps/agent-server/src/southwind_agent_server/runtime_budget.py +0 -74
  626. package/template/apps/agent-server/src/southwind_agent_server/runtime_compatibility.py +0 -89
  627. package/template/apps/agent-server/src/southwind_agent_server/runtime_factory.py +0 -105
  628. package/template/apps/agent-server/src/southwind_agent_server/runtime_logging.py +0 -57
  629. package/template/apps/agent-server/src/southwind_agent_server/service.py +0 -325
  630. package/template/apps/agent-server/src/southwind_agent_server/service_control.py +0 -64
  631. package/template/apps/agent-server/src/southwind_agent_server/service_errors.py +0 -4
  632. package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +0 -34
  633. package/template/apps/agent-server/src/southwind_agent_server/service_tasks.py +0 -34
  634. package/template/apps/agent-server/src/southwind_agent_server/signal_events.py +0 -53
  635. package/template/apps/agent-server/src/southwind_agent_server/sqlite_catalog.py +0 -118
  636. package/template/apps/agent-server/src/southwind_agent_server/sqlite_errors.py +0 -2
  637. package/template/apps/agent-server/src/southwind_agent_server/sqlite_schema.py +0 -73
  638. package/template/apps/agent-server/src/southwind_agent_server/sqlite_serialization.py +0 -16
  639. package/template/apps/agent-server/src/southwind_agent_server/sqlite_store.py +0 -350
  640. package/template/apps/agent-server/src/southwind_agent_server/sse.py +0 -41
  641. package/template/apps/agent-server/src/southwind_agent_server/store.py +0 -255
  642. package/template/apps/agent-server/src/southwind_agent_server/store_cipher.py +0 -40
  643. package/template/apps/agent-server/src/southwind_agent_server/structured_logging.py +0 -145
  644. package/template/apps/agent-server/src/southwind_agent_server/telemetry.py +0 -93
  645. package/template/apps/agent-server/src/southwind_agent_server/tool_host.py +0 -152
  646. package/template/apps/agent-server/src/southwind_agent_server/trajectory.py +0 -137
  647. package/template/apps/agent-server/src/southwind_agent_server/unavailable_engine.py +0 -58
  648. package/template/apps/agent-server/src/southwind_agent_server/vision_probe.py +0 -87
  649. package/template/apps/agent-server/src/southwind_agent_server/vision_requirement.py +0 -28
  650. package/template/apps/agent-server/src/southwind_agent_server/vlm_readiness.py +0 -247
  651. package/template/apps/agent-server/tests/__init__.py +0 -1
  652. package/template/apps/agent-server/tests/openai_provider_test_support.py +0 -131
  653. package/template/apps/agent-server/tests/test_api.py +0 -305
  654. package/template/apps/agent-server/tests/test_artifact_input.py +0 -110
  655. package/template/apps/agent-server/tests/test_client_completion.py +0 -230
  656. package/template/apps/agent-server/tests/test_config.py +0 -106
  657. package/template/apps/agent-server/tests/test_fingerprint.py +0 -10
  658. package/template/apps/agent-server/tests/test_multimodal.py +0 -81
  659. package/template/apps/agent-server/tests/test_openai_provider.py +0 -320
  660. package/template/apps/agent-server/tests/test_postgres_report_status.py +0 -59
  661. package/template/apps/agent-server/tests/test_postgres_report_summary.py +0 -298
  662. package/template/apps/agent-server/tests/test_postgres_store.py +0 -135
  663. package/template/apps/agent-server/tests/test_provider_attempt_reporting.py +0 -140
  664. package/template/apps/agent-server/tests/test_provider_governance.py +0 -276
  665. package/template/apps/agent-server/tests/test_report_attempt_lifecycle.py +0 -126
  666. package/template/apps/agent-server/tests/test_report_resilience.py +0 -183
  667. package/template/apps/agent-server/tests/test_report_routes.py +0 -143
  668. package/template/apps/agent-server/tests/test_report_store.py +0 -347
  669. package/template/apps/agent-server/tests/test_report_summary_parity.py +0 -116
  670. package/template/apps/agent-server/tests/test_report_terminal_sync.py +0 -177
  671. package/template/apps/agent-server/tests/test_run_capacity.py +0 -112
  672. package/template/apps/agent-server/tests/test_run_operational_logging.py +0 -114
  673. package/template/apps/agent-server/tests/test_runtime_compatibility.py +0 -119
  674. package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +0 -52
  675. package/template/apps/agent-server/tests/test_sqlite_store.py +0 -182
  676. package/template/apps/agent-server/tests/test_structured_logging.py +0 -142
  677. package/template/apps/agent-server/tests/test_telemetry.py +0 -25
  678. package/template/apps/agent-server/tests/test_tool_approval.py +0 -28
  679. package/template/apps/agent-server/tests/test_tool_structured_output.py +0 -347
  680. package/template/apps/agent-server/tests/test_trajectory.py +0 -91
  681. package/template/apps/agent-server/tests/test_vision_readiness_enforcement.py +0 -72
  682. package/template/apps/agent-server/tests/test_vlm_readiness.py +0 -106
  683. package/template/apps/agent-server/uv.lock +0 -831
  684. package/template/apps/server/src/agent/module-ai-port-factory.ts +0 -41
  685. /package/template/apps/server/src/{agent → ai-runtime-security}/execution-grants.ts +0 -0
  686. /package/template/apps/server/src/{agent → ai-runtime-security}/idempotency-key.test.ts +0 -0
  687. /package/template/apps/server/src/{agent → ai-runtime-security}/idempotency-key.ts +0 -0
  688. /package/template/apps/server/src/{agent → ai-runtime-security}/provider-input-governance.test.ts +0 -0
  689. /package/template/apps/server/src/{agent → ai-runtime-security}/provider-input-governance.ts +0 -0
  690. /package/template/apps/server/src/{agent → media-runtime}/required-environment.ts +0 -0
  691. /package/template/apps/server/src/{agent → media-runtime}/runtime-readiness-sources.test.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-windy",
3
- "version": "0.8.3",
3
+ "version": "0.10.0",
4
4
  "description": "创建单组织、单租户、私有部署优先的 Windy 企业 Dashboard Starter",
5
5
  "type": "module",
6
6
  "bin": {
@@ -36,6 +36,6 @@
36
36
  },
37
37
  "private": false,
38
38
  "dependencies": {
39
- "@inquirer/checkbox": "^5.2.1"
39
+ "@inquirer/checkbox": "^5.2.8"
40
40
  }
41
41
  }
@@ -24,7 +24,9 @@ description: "在 Windy 或 create-windy 生成项目中新增或修改业务 Mo
24
24
  Route、Audit Action,以及需要的 Migration/Schema Export、Task、Provider、JSON
25
25
  Schema、Tool、AI Operation、Secret 和 Data Policy。Feature 使用能力基础 Key,
26
26
  Permission 在同一 Key 后追加动作;非匿名入口和 Handler 只能引用已声明且同基础 Key
27
- 的治理能力。**完成标准:Manifest 声明和 Host 实现双向枚举无缺失、未知或重复 Key。**
27
+ 的治理能力。预览、校验等只读 API 即使使用 POST,也要声明已注册的 Audit Action。
28
+ 按行为选择动作,读取当前配置并计算差异的预览可复用 `data.read`,实际写入使用对应更新动作。
29
+ **完成标准:Manifest 声明和 Host 实现双向枚举无缺失、未知或重复 Key。**
28
30
  4. 数据层使用 Drizzle Schema、前向 Migration 和 Repository;Service 持有业务规则,
29
31
  其它模块只能通过 Service、公开 Port 或注册机制协作。Manifest 与 Migration Bundle
30
32
  版本、顺序、依赖和 Schema Export 必须一致;已发布 Migration ID/checksum 不改写。
@@ -92,6 +94,36 @@ description: "在 Windy 或 create-windy 生成项目中新增或修改业务 Mo
92
94
  一次 `release:verify`。仅当项目提供 `lint` 脚本时运行 lint;一个 cohesive slice 一个
93
95
  Conventional Commit。**完成标准:验证层级、未执行项和提交 SHA 均可审计。**
94
96
 
97
+ ### 启动与人工验收交接
98
+
99
+ 用户要求启动服务做人工验收时,先确认端口归属和数据库目标。迁移独立验收库后,核对
100
+ API、Web 代理及相关独立服务的就绪端点。模块装配失败时,从报错的 Manifest 绑定查起,
101
+ 修复后重新走正常启动入口。交接时用发布标签和实际候选 SHA 界定差异,逐模块列出入口、
102
+ 操作、预期结果和依赖环境,分别记录服务就绪与实际业务验收结果。
103
+
104
+ ## 环境适配与可选能力
105
+
106
+ 业务能力需要 GPU、模型、外部服务或可选软件时,先读
107
+ [环境能力评估与构建预设](../../../docs/operations/environment-capabilities.md),
108
+ 将环境评估与能力声明一起设计:
109
+
110
+ - 分别记录硬件/操作系统证据、软件/Adapter 的真实支持、readiness 和功能质量验收。
111
+ 没有 GPU 不能直接推出 OCR 不可用;探测不到设备或服务也不能写成已确认不支持。
112
+ - 构建模块选择决定实际交付内容;运行时 Feature 开关控制已有能力的可用性。
113
+ 环境 YAML 的 `features` 仅生成评估建议,不能把它当作已执行的启停配置。
114
+ `build.modules` 必须接到生成器/打包器已经支持的裁剪入口,并检查源码、依赖、路由、
115
+ 服务与数据库对象。仅隐藏入口或写入 YAML,不算物理裁剪。
116
+ - 评估报告给出可用、缺依赖或未验证的证据与原因;停用/恢复按用户已授权策略执行,
117
+ 没有策略时先呈现具体受影响功能,再由用户确认。不要因探测失败自动改写功能开关。
118
+ - CPU OCR 项目选用 `system.media-runtime`,通过 `build.runtimes` 决定独立应用交付范围,
119
+ 通过 `runtime` 决定 Server 启动装配。业务 UI 和服务入口使用对应的
120
+ `system.agent`、`system.document`、`system.speech` 或 `system.embedding` Feature。
121
+ - 病毒扫描独立使用 `antivirus` 配置。需要扫描的项目负责交付执行器和病毒库,并通过项目
122
+ Composition 将就绪检查与实际入库流程接通。验证时分别检查启动状态和文件处理结果。
123
+
124
+ **完成标准:构建内容、运行时预设、环境证据和人工决定可以分别核对;已验证与待验收
125
+ 项明确,普通业务能力不被共享 AI 开关误伤。**
126
+
95
127
  ## Client Agent Workflow 重复故障解法
96
128
 
97
129
  - 跨层 opaque ID 必须选一个 canonical prefix,并同步 Server 生成器、public SDK、客户端
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "templateCommit": "c701e845048c839516533e164cb550e3348eb89c",
4
- "generatorVersion": "0.8.3",
3
+ "templateCommit": "30a73d57ac4b83d1bee4bf412be7f6abbdc351f8",
4
+ "generatorVersion": "0.10.0",
5
5
  "modules": [
6
6
  {
7
7
  "name": "system",
@@ -31,6 +31,10 @@
31
31
  "name": "system.storage",
32
32
  "version": "0.1.0"
33
33
  },
34
+ {
35
+ "name": "system.media-runtime",
36
+ "version": "0.1.0"
37
+ },
34
38
  {
35
39
  "name": "system.agent",
36
40
  "version": "0.1.2"
@@ -78,6 +78,8 @@
78
78
  或 MCP 暴露时使用的仓库内开发流程。
79
79
  - `docs/development/custom-login-page.md`:完整替换登录页的 ownership、认证复用和
80
80
  升级迁移说明。
81
+ - 修改公共入口、懒加载、模块裁剪、缓存或慢查询时,读取
82
+ `docs/development/performance-engineering.md`。
81
83
  - `docs/development/custom-error-pages.md`:统一错误语义、Request ID 与业务页面
82
84
  替换方式。
83
85
  - `bun run dev`:复用 Docker 镜像启动 PostgreSQL、自动 migration、Server 与支持热更新的 Web。
@@ -86,5 +88,7 @@
86
88
  - `bun run dev:server`:启动 Server 开发服务。
87
89
  - `/admin/system/ai-runtime`:查看受治理的 Run、Provider Attempt 与脱敏 Trajectory。
88
90
  - `bun run lint`、`bun run typecheck`、`bun run test`、`bun run build`:执行基础验证;未选择 Oxc 时没有 lint 脚本。
91
+ - `windy.environment.yaml`:构建模块记录与环境评估建议;接入与边界见
92
+ `docs/operations/environment-capabilities.md`。
89
93
  - `docs/README.md`:平台架构、模块接入和运维文档入口。
90
94
  - `.windy/generation.json`:本次生成器版本、所选模块和选项记录。
@@ -74,6 +74,7 @@ Skill 仍可用于普通业务模块开发。
74
74
 
75
75
 
76
76
 
77
+
77
78
  ## 页面与登录
78
79
 
79
80
  全新数据库的初始平台账号为 `admin`。初始密码不是所有项目共用的固定值,而是
@@ -119,6 +120,7 @@ create-windy 在本机 `.env` 中随机生成的 `WINDY_BOOTSTRAP_ADMIN_PASSWORD
119
120
  | `system.audit` | 未包含 | H2 | 审计查询、可靠写入和恢复。 |
120
121
  | `system.operations` | 未包含 | H2 | 服务、数据库、缓存、磁盘和会话监控。 |
121
122
  | `system.storage` | 未包含 | H2 | 上传、下载和对象生命周期。 |
123
+ | `system.media-runtime` | 未包含 | H2 | 受治理的文档、语音、嵌入与公共文件引用。 |
122
124
  | `system.agent` | 未包含 | H2 | 受控 Agent 工具宿主。 |
123
125
  | `system.scheduler` | 未包含 | H2 | 任务、重试、历史和恢复。 |
124
126
  | `system.notification` | 未包含 | H2 | 通知定向与定时发布、用户偏好、外部渠道投递、修改历史、阅读、收藏和归档。 |
@@ -1,27 +1,97 @@
1
1
  # syntax=docker/dockerfile:1
2
+ # One application-owned Agent Server image; DSH is an npm workspace dependency.
3
+ FROM oven/bun:1.3.14-slim@sha256:d56a2534ffd262e92c12fd3249d3924d296d97086da773f821d7d0477435ea04 AS bun
4
+ FROM node:24.9.0-bookworm-slim@sha256:3e69116c924bfcba6c6979aff60d966c37aef56d488ce091c69d442ebec9f103 AS node
5
+ FROM bun AS dependencies
6
+ WORKDIR /app
7
+ COPY package.json bun.lock ./
2
8
 
3
- FROM python:3.12-slim AS runtime
4
- WORKDIR /app/apps/agent-server
5
-
6
- ARG WINDY_PYPI_INDEX_URL=http://mirrors.cloud.tencent.com/pypi/simple
7
- ARG WINDY_PYPI_TOTAL_TIMEOUT_SECONDS=180
9
+ # windy-copy:deps begin
10
+ COPY apps/agent-server/package.json apps/agent-server/package.json
11
+ COPY apps/license/package.json apps/license/package.json
12
+ COPY apps/server/package.json apps/server/package.json
13
+ COPY apps/signing-service/package.json apps/signing-service/package.json
14
+ COPY apps/web/package.json apps/web/package.json
15
+ COPY apps/windy-gateway/package.json apps/windy-gateway/package.json
16
+ COPY packages/ai-client/package.json packages/ai-client/package.json
17
+ COPY packages/config/package.json packages/config/package.json
18
+ COPY packages/create-windy/package.json packages/create-windy/package.json
19
+ COPY packages/crud-generator/package.json packages/crud-generator/package.json
20
+ COPY packages/database/package.json packages/database/package.json
21
+ COPY packages/delivery/package.json packages/delivery/package.json
22
+ COPY packages/example-work-order/package.json packages/example-work-order/package.json
23
+ COPY packages/jobs/package.json packages/jobs/package.json
24
+ COPY packages/license-sdk/package.json packages/license-sdk/package.json
25
+ COPY packages/model-gateway/package.json packages/model-gateway/package.json
26
+ COPY packages/modules/package.json packages/modules/package.json
27
+ COPY packages/server-sdk/package.json packages/server-sdk/package.json
28
+ COPY packages/shared/package.json packages/shared/package.json
29
+ COPY packages/storage/package.json packages/storage/package.json
30
+ # windy-copy:deps end
31
+ # Other platforms and unused audio engines are excluded. Install the fixed
32
+ # Debian prerequisites and Office WASM engine against this workspace lock.
33
+ RUN --mount=type=cache,id=windy-agent-bun-1.3.14,target=/root/.bun/install/cache,sharing=shared \
34
+ bun install --frozen-lockfile --filter @southwind-ai/agent-server --production --ignore-scripts --omit=optional --linker=hoisted
35
+ COPY apps/agent-server/install-native.ts apps/agent-server/native-download.ts /opt/
36
+ ARG WINDY_AGENT_NATIVE_REGISTRY=https://registry.npmjs.org
37
+ RUN --mount=type=cache,id=windy-agent-native-v1,target=/root/.cache/windy-agent-native,sharing=locked \
38
+ DSH_NATIVE_CACHE_DIR=/root/.cache/windy-agent-native DSH_NATIVE_REGISTRY=$WINDY_AGENT_NATIVE_REGISTRY bun /opt/install-native.ts
39
+ # Keep the complete upstream engine package, including sources/, licenses/ and
40
+ # prebuilds.json. Office conversion never downloads an engine at runtime.
41
+ FROM dependencies AS build
42
+ COPY packages packages
43
+ COPY apps/agent-server apps/agent-server
44
+ RUN bun run --cwd apps/agent-server build
8
45
 
9
- COPY apps/agent-server/install-python-dependencies.sh /usr/local/bin/windy-agent-python-install
10
- RUN chmod 0755 /usr/local/bin/windy-agent-python-install \
11
- && windy-agent-python-install install-uv \
12
- && useradd --create-home --uid 10001 windy
13
- COPY apps/agent-server/pyproject.toml apps/agent-server/uv.lock ./
14
- RUN windy-agent-python-install lock
15
- RUN windy-agent-python-install sync --frozen --no-dev --no-install-project
16
- COPY apps/agent-server/src ./src
17
- RUN windy-agent-python-install sync --frozen --no-dev
46
+ FROM scratch AS fonts
47
+ ADD --checksum=sha256:4a2515eb6db3978b897fef9709ed0d2b1f4c6c4df4d83d6c4ef65f71f1b1f502 \
48
+ https://deb.debian.org/debian/pool/main/f/fonts-noto-cjk/fonts-noto-cjk_20220127+repack1-1_all.deb /fonts.deb
49
+ FROM python:3.12.12-slim-bookworm@sha256:593bd06efe90efa80dc4eee3948be7c0fde4134606dd40d8dd8dbcade98e669c AS document-wheels
50
+ ARG WINDY_PYPI_INDEX_URL=https://pypi.org/simple
51
+ ARG WINDY_PYPI_TOTAL_TIMEOUT_SECONDS=600
52
+ COPY deploy/dsh/documents/requirements.lock /requirements.lock
53
+ RUN --mount=type=cache,target=/root/.cache/pip \
54
+ test "$WINDY_PYPI_TOTAL_TIMEOUT_SECONDS" -ge 1 && test "$WINDY_PYPI_TOTAL_TIMEOUT_SECONDS" -le 600 && \
55
+ timeout --kill-after=5s "$WINDY_PYPI_TOTAL_TIMEOUT_SECONDS" pip download \
56
+ --index-url "$WINDY_PYPI_INDEX_URL" --timeout 30 --retries 2 \
57
+ --require-hashes --only-binary=:all: -r /requirements.lock --dest /wheels
18
58
 
19
- ENV PATH="/app/apps/agent-server/.venv/bin:${PATH}"
20
- ENV PYTHONUNBUFFERED=1
59
+ FROM python:3.12.12-slim-bookworm@sha256:593bd06efe90efa80dc4eee3948be7c0fde4134606dd40d8dd8dbcade98e669c AS runtime
60
+ WORKDIR /app/apps/agent-server
61
+ ARG WINDY_DEBIAN_MIRROR=http://deb.debian.org/debian
62
+ ARG WINDY_DEBIAN_SECURITY_MIRROR=http://deb.debian.org/debian-security
63
+ RUN --mount=type=cache,id=windy-agent-apt,target=/var/cache/apt,sharing=locked \
64
+ set -eu; \
65
+ echo "$WINDY_DEBIAN_MIRROR" | grep -Eq '^https?://[A-Za-z0-9./:_-]+$'; \
66
+ echo "$WINDY_DEBIAN_SECURITY_MIRROR" | grep -Eq '^https?://[A-Za-z0-9./:_-]+$'; \
67
+ sed -i -e "s|^URIs: http://deb.debian.org/debian$|URIs: $WINDY_DEBIAN_MIRROR|" \
68
+ -e "s|^URIs: http://deb.debian.org/debian-security$|URIs: $WINDY_DEBIAN_SECURITY_MIRROR|" \
69
+ /etc/apt/sources.list.d/debian.sources; \
70
+ timeout --kill-after=5s 300s apt-get update -o APT::Update::Error-Mode=any \
71
+ -o Acquire::http::Timeout=30 -o Acquire::https::Timeout=30 -o Acquire::Retries=2; \
72
+ timeout --kill-after=5s 600s apt-get install --no-install-recommends --yes libseccomp2 util-linux git ca-certificates; \
73
+ rm -rf /var/lib/apt/lists/*
74
+ RUN --mount=type=bind,from=fonts,source=/,target=/font-source \
75
+ echo '4a2515eb6db3978b897fef9709ed0d2b1f4c6c4df4d83d6c4ef65f71f1b1f502 /font-source/fonts.deb' | sha256sum -c - && \
76
+ dpkg -i /font-source/fonts.deb
77
+ COPY --from=node /usr/local/bin/node /usr/local/bin/node
78
+ COPY --from=dependencies /app/node_modules /app/node_modules
79
+ COPY --from=build /app/apps/agent-server/dist ./dist
80
+ COPY apps/agent-server/package.json ./package.json
81
+ COPY apps/agent-server/plugins ./plugins
82
+ COPY --chown=0:0 apps/agent-server/project ./project
83
+ RUN chmod -R a+rX,a-w ./project
84
+ RUN chmod 0444 ./plugins/subprocess.mjs ./plugins/confine-network.py
85
+ COPY deploy/dsh/documents/requirements.lock /opt/windy-documents/requirements.lock
86
+ COPY apps/agent-server/documents /opt/windy-documents
87
+ RUN --mount=type=bind,from=document-wheels,source=/wheels,target=/wheels python -m venv /opt/venv && \
88
+ /opt/venv/bin/pip install --no-index --find-links=/wheels --require-hashes --only-binary=:all: -r /opt/windy-documents/requirements.lock && \
89
+ mkdir -p /app/data/agent/dsh && chmod 0711 /app/data/agent /app/data/agent/dsh
90
+ ENV NODE_ENV=production PATH=/opt/venv/bin:/usr/local/bin:/usr/bin:/bin \
91
+ PYTHONDONTWRITEBYTECODE=1 PYTHONUTF8=1 PIP_NO_INDEX=1 \
92
+ AGENT_RUNTIME_DATABASE_PATH=/app/data/agent/embedded-dsh.sqlite AGENT_DSH_HOME=/app/data/agent/dsh
21
93
  EXPOSE 8080
22
- RUN mkdir -p /app/data/agent \
23
- && chown -R windy:windy /app/data
24
- USER windy
25
- HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=4 \
26
- CMD ["python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/health/ready', timeout=3)"]
27
- CMD ["uvicorn", "southwind_agent_server.asgi:app", "--host", "0.0.0.0", "--port", "8080"]
94
+ # Coordinator changes UID/GID for isolated workers; workers never run as root.
95
+ HEALTHCHECK --interval=15s --timeout=5s --start-period=15s --retries=4 \
96
+ CMD ["node", "-e", "fetch('http://127.0.0.1:8080/health/ready',{signal:AbortSignal.timeout(3000)}).then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
97
+ CMD ["node", "dist/main.js"]
@@ -1,90 +1,52 @@
1
- # Windy Agent Server
2
-
3
- Python 3.12 Agent 运行时。HTTP 层只公开 Windy canonical Agent 契约;真实业务 Run 由
4
- `OpenAiCompatibleEngineAdapter` 直接执行,模型调用复用受治理的 OpenAI-compatible
5
- `/chat/completions` Provider。Engine、Provider 和 Tool 私有类型不会越过
6
- `AgentEngineAdapter`。
7
-
8
- ```bash
9
- uv sync --frozen
10
- uv run pytest
11
- uv run ruff check .
12
- uv run ruff format --check .
13
- uv run mypy
14
- ```
1
+ # Agent Server:内置 DSH
2
+
3
+ 官方 npm DSH(`~0.2.2-rc.1`)和 Cordis(`^4.1.0`)随 Bun workspace 按锁文件安装,Node 24.9+ 执行。Python 仅用于镜像内固定文档工具。
15
4
 
16
- HTTP 接口:
17
-
18
- - `GET /api/agent/runtime/compatibility`(内部认证、V1 协议 Offer)
19
- - `POST /api/agent/runs`
20
- - `GET /api/agent/runs/:runId/events`
21
- - `GET /api/agent/runs/:runId/result`
22
- - `POST /api/agent/runs/:runId/cancel`
23
-
24
- Run 创建使用 `Idempotency-Key`。事件以 SSE 传输,支持 `Last-Event-ID` 和 `after`
25
- 断线重放,并周期发送 comment heartbeat。Provider 或 Engine 异常只映射为 canonical
26
- 安全错误,不把原始异常正文暴露给调用方。
27
-
28
- 兼容 Offer 返回 Engine identity、支持的协议版本、传输能力、callback auth profile 及三层摘要。
29
- 新 Windy Server 会在 Run 请求头固定所选版本和 Offer digest;新 Agent Server 仍接受完全不带 pin
30
- 的旧调用方,但拒绝半套或不匹配 pin。它只用于同一受控部署,不能把内部 token 发给外部业务系统。
31
- 跨系统限制见 [Remote Agent Runtime 兼容契约](../../docs/architecture/agent-runtime-compatibility.md)。
32
-
33
- 配置以下仅服务端可见的环境变量后启用 Direct Engine:
34
-
35
- ```bash
36
- export AGENT_SERVER_INTERNAL_TOKEN='<random-token>'
37
- export QWEN_API_URL='https://dashscope-intl.aliyuncs.com/compatible-mode/v1'
38
- export QWEN_API_KEY='<server-secret>'
39
- export QWEN_MODEL='qwen-plus'
40
- export AI_PROVIDER_HTTPS_HOST_ALLOWLIST='dashscope-intl.aliyuncs.com'
41
- export AI_PROVIDER_CAPABILITIES='text-generation'
42
- export AI_PROVIDER_INPUT_MODALITIES='text'
43
- export AGENT_RUN_STORE_PATH='.data/agent-runs.sqlite3'
44
- export AI_PROVIDER_AUDIT_STORE_PATH='.data/provider-audit.sqlite3'
45
- export AI_PROVIDER_AUDIT_RETENTION_DAYS='90'
46
- uv run uvicorn southwind_agent_server.asgi:app
5
+ ```sh
6
+ bun install --frozen-lockfile
7
+ bun run --cwd apps/agent-server build
8
+ bun run --cwd apps/agent-server start
47
9
  ```
48
10
 
49
- 公网 URL 必须使用 HTTPS 且 Host 精确命中 allowlist;本机、容器服务名和内网地址允许
50
- HTTP。Provider 请求有连接与总超时、响应大小限制、错误脱敏和出网审计。缺少 URL、
51
- Key 或 Model 时使用 `UnavailableEngineAdapter` 稳定返回 unavailable,不调用模型。
52
-
53
- Direct Engine 保留文本、结构化输出、Citation、Vision Artifact、受治理 Tool、多轮 Tool、
54
- 审批等待/恢复、取消、Usage 和 Provider Attempt。Tool 只接受 Operation 允许的 Key,执行时
55
- 回调 Windy Tool Host 并携带当前 Run 的 opaque Execution Grant。Service 在每次模型轮次
56
- 和 Tool 前后重新检查取消,避免取消后继续产生副作用或发布成功终态。
57
-
58
- VLM Operation readiness 比 Endpoint 可达性更严格。必须固定 Deployment 事实并声明图片
59
- offer;否则 `/health/vlm-ready` 返回 V1 `unavailable` snapshot,视觉 Operation 保持关闭:
60
-
61
- ```bash
62
- export AI_PROVIDER_CAPABILITIES='text-generation,vision'
63
- export AI_PROVIDER_INPUT_MODALITIES='text,image'
64
- export AI_PROVIDER_DEPLOYMENT_IDENTITY='windy-deployment-v1_<uuid-v4>'
65
- export AI_PROVIDER_RELEASE_DIGEST='sha256:<64-lowercase-hex>'
66
- export AI_PROVIDER_READINESS_TTL_SECONDS='60'
67
- export AI_PROVIDER_MAX_CONCURRENT_RUNS='1'
68
- export AI_PROVIDER_MAX_QUEUE_DEPTH='0'
11
+ 产品登录后的同源 `/agent` 使用上游原生工作台。Windy Server 负责 Feature、License、RBAC、当前登录与业务工具授权;协调器保管 Provider 和内部凭据,用户 worker 仅持有可撤销的边界 token。Run、SSE、幂等、取消、Client Agent Session、Context、Artifact、审计和结果加密维持原公开协议。
12
+
13
+ Linux 协调器按账号创建独立 UID、0700 HOME 与 workspace。默认最多两个 worker;每用户 heap 768 MiB、进程 128、文件描述符 512、单文件 128 MiB、HOME 软配额 512 MiB。子进程使用 Landlock 和 seccomp,能力缺失拒绝执行。全局模型容量至少预留一个槽位给 canonical/Client 调用,原生排队与父子任务共享预算;这些保护上限不代表硬件容量承诺。
14
+
15
+ `AGENT_DSH_USER_EXTENSIONS` 默认开启;设为 `0` 关闭个人管理入口与个人技能发现,但不会卸载既有插件。用户安装的插件是其授权的可信代码,可访问本人的 HOME、会话和网络。撤销应先停用或卸载,再关闭入口。
16
+
17
+ ## 项目接入
18
+
19
+ `project/host.ts` 是项目自有组合入口,使用 `DshHostConfiguration` 提供助手名称、业务说明、只读技能目录与额外公开 DSH 插件。Windy 不包含案件、笔录、产品 Copilot 历史或领域预设。项目插件只能调用受治理 Host 接口,不能通过工作区元数据授予权限。
20
+
21
+ 项目插件与技能资源放在 `project/` 下,例如 `project/plugins/business.mjs` 和 `project/skills/review/`;在 `host.ts` 中填写相对 Agent Server 的路径。整个目录随生产镜像交付,属于 root、对 Worker 只读,升级保留项目自有内容。该目录不承载 Provider 凭据或其它 Secret。
22
+
23
+ 品牌客户端读取当前平台 `/api/platform/branding` 的 `softwareName`、`logoUrl`、`description`,默认 Windy。中文、主题和 UI 使用公开 locale、theme、slots 与插件生命周期。
24
+
25
+ 共享技能通过官方 `ctx.skills.registerProvider` 接入;每次发现与读取都向产品 Server 重做当前授权。协调器将已授权的版本及附件物化为 HOME 外的 root-owned、用户组只读目录,版本变化后撤下旧目录。个人 `.dsh/skills` 仍由原生技能管理负责。
26
+
27
+ ## 存储与交付
28
+
29
+ canonical 数据库使用 `AGENT_RUNTIME_DATABASE_PATH`(默认 `/app/data/agent/embedded-dsh.sqlite`),用户数据使用 `AGENT_DSH_HOME`(默认 `/app/data/agent/dsh`)。当前仅支持单 Agent Server 副本。
30
+
31
+ 旧 Python Agent 专用数据库不读取、不迁移;切换前备份后使用新路径。业务 PostgreSQL、文件、AH-1 Session、Memory 和 Workflow 的治理义务继续保留。旧记录无法取得运行详情时明确标记缺失。Provider 原有配置继续使用;已退役 Python 的 OTEL exporter 和 connect-only timeout 不再声称受支持。
32
+
33
+ Office 预览复用官方 office-to-pdf/PDF.js,Linux `libreoffice-kit-wasm@0.1.5` 及许可源码随镜像离线交付。每用户转换并发 1、后台 0、输入 16 MiB、输出 20 MiB、缓存 32 MiB/2 项、超时 60 秒。WASM RSS 不受 V8 heap 完整限制。
34
+
35
+ ## 聚焦验证入口
36
+
37
+ ```sh
38
+ bun run --cwd apps/agent-server typecheck
39
+ bun run --cwd apps/agent-server test
40
+ bun test apps/agent-server/native apps/agent-server/plugins
41
+ bun run --cwd apps/agent-server test:coordinator
42
+ bun run --cwd apps/agent-server test:confinement
69
43
  ```
70
44
 
71
- Readiness 使用固定一像素合成图片调用已配置的 `/chat/completions` 并要求有界结构化结果。
72
- 它不读取客户截图,也不把用户 Artifact、URL、Run ID、Prompt 或 Provider 输出放进 health
73
- payload。
74
-
75
- 未设置 `AGENT_RUN_STORE_PATH` 时的 `InMemoryRunStore` 仅用于 deterministic 测试。
76
- 配置路径后使用有界 SQLite Store,可在单副本重启后保留 Run/Event/Result 和 cursor;
77
- 多副本部署必须使用共享 Store。Run 固定保存稳定 Engine ID
78
- `windy.direct.openai-compatible.v1`;历史 `google.adk.v2` Run 只读兼容,不回填,也不能由
79
- Direct Engine 从中断点继续。
80
-
81
- 每次实际 Provider HTTP 调用前,Runtime 对 Manifest 允许的输入 JSON Pointer 与 outbound
82
- envelope 执行 DLP,并将 deployment、operation、run、attempt、分类集合、序列化字节数和
83
- allow/redact/reject 决策写入 append-only 审计。审计不保存 Prompt、请求正文或 Secret;
84
- 审计写入失败时禁止出网。
85
-
86
- 开发与运维统一使用 Windy 主站 `/admin/system/ai-runtime`。详情中的脱敏 Trajectory 展示
87
- Run、输入模态、Tool Key、审批、Usage、Artifact 数量、取消/失败和终态,不展示输入输出正文、
88
- Tool 参数、chain-of-thought 或 Provider 原始响应。业务历史会话通过
89
- `registerAgentSessionProviders()` 投影到受当前登录身份、Feature、RBAC 和对象范围保护的
90
- 主站接口;不再存在独立调试站点、专用调试身份或第二种 Token。
45
+ Node 契约使用真实 DSH Loop 与合成 Provider。Linux 镜像、真实认证模型、文档质量及现场负载分别验收;不得互相替代。镜像验证可用 `WINDY_AGENT_TEST_IMAGE` 指定已构建镜像。
46
+
47
+ ### 本机 JSON 输出兼容模式
48
+
49
+ 默认 `QWEN_STRUCTURED_OUTPUT_MODE=json_schema` 保持提供方严格结构输出。
50
+ 只有运行器无法编译合法业务 Schema 时,可在该部署显式设置 `json_object`。
51
+ 此模式仅改变无工具请求的 `response_format`:完整授权 Schema 仍进入系统提示,输出仍经过原有 JSON Schema 与业务校验;缺字段、类型错误和无效引用不会被补齐或放行。
52
+ 该配置不改变 Manifest、Host Guard、输出 Schema 授权或其它部署的默认值。
@@ -0,0 +1,216 @@
1
+ """Bounded, local document helpers; no model calls, network, or business writes."""
2
+
3
+ from datetime import date, datetime
4
+ from decimal import Decimal, InvalidOperation
5
+ from hashlib import sha256
6
+ from io import BytesIO
7
+ from pathlib import Path
8
+ from zipfile import ZipFile
9
+
10
+ from docx import Document
11
+ from docx.oxml.ns import qn
12
+ from docx.shared import Pt
13
+ from docx.table import Table
14
+ from openpyxl import Workbook, load_workbook
15
+ from openpyxl.comments import Comment
16
+ from pypdf import PdfReader
17
+
18
+ MAX_INPUT_BYTES = 16 * 1024 * 1024
19
+ # Upstream /api/file uses attachments.imageLimits.maxImageBytes (20 MiB by default).
20
+ MAX_OUTPUT_BYTES = 20 * 1024 * 1024
21
+ MAX_ROWS = 10_000
22
+
23
+
24
+ def digest(path: Path) -> str:
25
+ return sha256(path.read_bytes()).hexdigest()
26
+
27
+
28
+ def check_input(path: Path, zipped: bool = False) -> None:
29
+ if not path.is_file() or not 0 < path.stat().st_size <= MAX_INPUT_BYTES:
30
+ raise ValueError("input must be a nonempty file of at most 16 MiB")
31
+ if zipped:
32
+ with ZipFile(path) as archive:
33
+ entries = archive.infolist()
34
+ if len(entries) > 2048 or sum(e.file_size for e in entries) > 64 * 1024 * 1024:
35
+ raise ValueError("Office ZIP exceeds entry/expanded-size budget")
36
+ if any(e.file_size > MAX_INPUT_BYTES for e in entries):
37
+ raise ValueError("Office ZIP member exceeds 16 MiB")
38
+
39
+
40
+ def save_new(document, output: Path) -> None:
41
+ """Exclusive creation preserves originals and previously generated revisions."""
42
+ content = BytesIO()
43
+ document.save(content)
44
+ data = content.getvalue()
45
+ if not 0 < len(data) <= MAX_OUTPUT_BYTES:
46
+ raise ValueError("output exceeds the 20 MiB native download budget")
47
+ with output.open("xb") as handle:
48
+ handle.write(data)
49
+
50
+
51
+ def new_document(title: str):
52
+ document = Document()
53
+ normal = document.styles["Normal"]
54
+ normal.font.name = "Noto Sans CJK SC"
55
+ normal.font.size = Pt(11)
56
+ normal.element.rPr.rFonts.set(qn("w:eastAsia"), "Noto Sans CJK SC")
57
+ document.core_properties.title = title
58
+ document.core_properties.author = ""
59
+ document.core_properties.last_modified_by = ""
60
+ document.add_heading(title, 0)
61
+ return document
62
+
63
+
64
+ def read_text(source: Path) -> str:
65
+ suffix = source.suffix.lower()
66
+ check_input(source, zipped=suffix == ".docx")
67
+ if suffix == ".docx":
68
+ document = Document(source)
69
+ lines = []
70
+ for block in document.iter_inner_content():
71
+ if isinstance(block, Table):
72
+ lines.extend(" | ".join(cell.text for cell in row.cells) for row in block.rows)
73
+ else:
74
+ lines.append(block.text)
75
+ text = "\n".join(lines)
76
+ elif suffix == ".pdf":
77
+ reader = PdfReader(source, strict=True)
78
+ if reader.is_encrypted or len(reader.pages) > 100:
79
+ raise ValueError("encrypted PDFs or PDFs over 100 pages are unsupported")
80
+ pages = [page.extract_text() or "" for page in reader.pages]
81
+ if any(not page.strip() for page in pages):
82
+ raise ValueError("PDF has a page without extractable text; OCR or page review is required")
83
+ text = "\n".join(pages)
84
+ else:
85
+ raise ValueError("only .docx and text-based .pdf are supported")
86
+ if not text.strip() or len(text) > 1_000_000:
87
+ raise ValueError("missing extractable text or extracted text exceeds budget")
88
+ return text
89
+
90
+
91
+ def write_revision(source: Path, output: Path, text: str, title: str) -> None:
92
+ """Write a new editable text draft, without promising source layout fidelity."""
93
+ if output.suffix.lower() != ".docx":
94
+ raise ValueError("revision output must use .docx")
95
+ read_text(source)
96
+ if not text.strip() or len(text) > 1_000_000:
97
+ raise ValueError("revision text is empty or exceeds budget")
98
+ before = digest(source)
99
+ document = new_document(title)
100
+ document.core_properties.subject = f"Source SHA256: {before}"
101
+ for paragraph in text.splitlines():
102
+ document.add_paragraph(paragraph)
103
+ save_new(document, output)
104
+ if digest(source) != before:
105
+ raise RuntimeError("source changed during revision")
106
+
107
+
108
+ def money(value) -> Decimal:
109
+ if isinstance(value, bool) or not isinstance(value, (str, int, float, Decimal)):
110
+ raise ValueError("amount must be a finite decimal value")
111
+ try:
112
+ amount = Decimal(str(value))
113
+ except InvalidOperation as error:
114
+ raise ValueError("invalid decimal amount") from error
115
+ if not amount.is_finite() or abs(amount) >= Decimal("1e12"):
116
+ raise ValueError("amount is non-finite or outside budget")
117
+ if amount != amount.quantize(Decimal("0.01")):
118
+ raise ValueError("amount must have at most two decimal places")
119
+ return amount
120
+
121
+
122
+ def summarize_excel(source: Path, output: Path, *, unit: str) -> Decimal:
123
+ """Known four-column sample contract; formulas/macros are deliberately rejected."""
124
+ if not isinstance(unit, str) or not unit.strip() or len(unit) > 32:
125
+ raise ValueError("an explicit amount unit is required; no automatic conversion")
126
+ if source.suffix.lower() != ".xlsx" or output.suffix.lower() != ".xlsx":
127
+ raise ValueError("only .xlsx is supported")
128
+ check_input(source, zipped=True)
129
+ before = digest(source)
130
+ workbook = load_workbook(source, read_only=True, data_only=False)
131
+ try:
132
+ if len(workbook.worksheets) != 1:
133
+ raise ValueError("sample summarizer requires exactly one worksheet")
134
+ sheet = workbook.active
135
+ if sheet.max_row is not None and sheet.max_row > MAX_ROWS + 1:
136
+ raise ValueError("worksheet exceeds row budget")
137
+ # XLSX dimension metadata can understate the data and silently truncate read_only iteration.
138
+ sheet.reset_dimensions()
139
+ rows = sheet.iter_rows()
140
+ header = next(rows, ())
141
+ if [cell.value for cell in header] != ["编号", "名称", "日期", "金额"]:
142
+ raise ValueError("expected columns: 编号, 名称, 日期, 金额")
143
+ result = Workbook()
144
+ target = result.active
145
+ target.title = "整理结果"
146
+ target.append(["编号", "名称", "日期", "金额"])
147
+ total = Decimal("0.00")
148
+ last_row = 1
149
+ for last_row, row in enumerate(rows, start=2):
150
+ if last_row > MAX_ROWS + 1 or len(row) != 4:
151
+ raise ValueError("actual worksheet data exceeds row/column contract")
152
+ if any(cell.data_type in ("f", "e") for cell in row):
153
+ raise ValueError("formula or error cells require a separately verified calculation")
154
+ identifier, label, when, value = (cell.value for cell in row)
155
+ if not isinstance(identifier, str) or not identifier.isdigit():
156
+ raise ValueError("identifiers must be text so leading zeros remain exact")
157
+ if not isinstance(label, str) or not isinstance(when, (date, datetime)):
158
+ raise ValueError("name/date column types do not match contract")
159
+ amount = money(value)
160
+ total += amount
161
+ target.append([identifier, label, when, format(amount, ".2f")])
162
+ # append() infers formulas from '=' even when the source cell was literal text.
163
+ for column in (1, 2, 4):
164
+ target.cell(target.max_row, column).data_type = "s"
165
+ target.cell(target.max_row, 1).number_format = "@"
166
+ target.cell(target.max_row, 3).number_format = "yyyy-mm-dd"
167
+ target.append(["汇总", "", None, format(total, ".2f")])
168
+ # Currency stays decimal text: no binary-float coercion or cached formula claim.
169
+ target.column_dimensions["A"].width = 16
170
+ target.column_dimensions["B"].width = 24
171
+ target.column_dimensions["C"].width = 16
172
+ target.column_dimensions["D"].width = 20
173
+ source_range = f"{sheet.title}!A1:D{last_row}"
174
+ target["D1"].comment = Comment(f"金额单位:{unit};未转换单位。来源:{source_range}。", "DSH")
175
+ provenance = result.create_sheet("来源说明")
176
+ for label, value in (("来源文件", source.name), ("来源 SHA256", before),
177
+ ("来源范围", source_range), ("筛选条件", "全部输入数据行,无过滤"),
178
+ ("金额单位", unit), ("单位转换", "未转换"),
179
+ ("数据行数", str(last_row - 1)), ("Decimal 合计", format(total, ".2f"))):
180
+ provenance.append([label, value])
181
+ provenance.cell(provenance.max_row, 2).data_type = "s"
182
+ provenance.column_dimensions["A"].width = 18
183
+ provenance.column_dimensions["B"].width = 72
184
+ save_new(result, output)
185
+ finally:
186
+ workbook.close()
187
+ if digest(source) != before:
188
+ raise RuntimeError("source changed during summary")
189
+ return total
190
+
191
+
192
+ if __name__ == "__main__":
193
+ import argparse
194
+
195
+ parser = argparse.ArgumentParser(description=__doc__)
196
+ subparsers = parser.add_subparsers(dest="command", required=True)
197
+ read_parser = subparsers.add_parser("read")
198
+ read_parser.add_argument("source", type=Path)
199
+ revise_parser = subparsers.add_parser("revise")
200
+ revise_parser.add_argument("source", type=Path)
201
+ revise_parser.add_argument("output", type=Path)
202
+ revise_parser.add_argument("--text", type=Path, required=True)
203
+ revise_parser.add_argument("--title", default="文档修订稿")
204
+ excel_parser = subparsers.add_parser("summarize-excel")
205
+ excel_parser.add_argument("source", type=Path)
206
+ excel_parser.add_argument("output", type=Path)
207
+ excel_parser.add_argument("--unit", required=True, help="source amount unit, e.g. 元; no conversion")
208
+ arguments = parser.parse_args()
209
+ if arguments.command == "read":
210
+ print(read_text(arguments.source))
211
+ elif arguments.command == "revise":
212
+ check_input(arguments.text)
213
+ write_revision(arguments.source, arguments.output,
214
+ arguments.text.read_text(encoding="utf-8"), arguments.title)
215
+ else:
216
+ print(format(summarize_excel(arguments.source, arguments.output, unit=arguments.unit), ".2f"))