create-windy 0.5.2 → 0.6.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 (589) hide show
  1. package/dist/cli.js +370 -156
  2. package/package.json +2 -1
  3. package/template/.windy-template.json +2 -2
  4. package/template/apps/agent-server/README.md +25 -6
  5. package/template/apps/agent-server/src/southwind_agent_server/adk_adapter.py +15 -2
  6. package/template/apps/agent-server/src/southwind_agent_server/app.py +13 -34
  7. package/template/apps/agent-server/src/southwind_agent_server/config.py +49 -0
  8. package/template/apps/agent-server/src/southwind_agent_server/contracts.py +13 -0
  9. package/template/apps/agent-server/src/southwind_agent_server/engine_capacity.py +31 -0
  10. package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +5 -0
  11. package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +50 -0
  12. package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +11 -2
  13. package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +3 -9
  14. package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +5 -0
  15. package/template/apps/agent-server/src/southwind_agent_server/readiness_pin.py +37 -0
  16. package/template/apps/agent-server/src/southwind_agent_server/run_admission.py +64 -0
  17. package/template/apps/agent-server/src/southwind_agent_server/run_capacity.py +59 -0
  18. package/template/apps/agent-server/src/southwind_agent_server/service.py +42 -43
  19. package/template/apps/agent-server/src/southwind_agent_server/service_errors.py +4 -0
  20. package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +31 -0
  21. package/template/apps/agent-server/src/southwind_agent_server/service_tasks.py +34 -0
  22. package/template/apps/agent-server/src/southwind_agent_server/sqlite_catalog.py +11 -0
  23. package/template/apps/agent-server/src/southwind_agent_server/store.py +6 -0
  24. package/template/apps/agent-server/src/southwind_agent_server/vision_probe.py +87 -0
  25. package/template/apps/agent-server/src/southwind_agent_server/vision_requirement.py +28 -0
  26. package/template/apps/agent-server/src/southwind_agent_server/vlm_readiness.py +247 -0
  27. package/template/apps/agent-server/tests/test_api.py +16 -3
  28. package/template/apps/agent-server/tests/test_openai_provider.py +21 -4
  29. package/template/apps/agent-server/tests/test_postgres_store.py +3 -0
  30. package/template/apps/agent-server/tests/test_run_capacity.py +110 -0
  31. package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +37 -0
  32. package/template/apps/agent-server/tests/test_sqlite_store.py +3 -0
  33. package/template/apps/agent-server/tests/test_vision_readiness_enforcement.py +72 -0
  34. package/template/apps/agent-server/tests/test_vlm_readiness.py +106 -0
  35. package/template/apps/document-server/src/southwind_document_server/adapter.py +117 -205
  36. package/template/apps/document-server/src/southwind_document_server/adapter_errors.py +13 -0
  37. package/template/apps/document-server/src/southwind_document_server/app.py +62 -14
  38. package/template/apps/document-server/src/southwind_document_server/artifacts.py +27 -0
  39. package/template/apps/document-server/src/southwind_document_server/config.py +96 -2
  40. package/template/apps/document-server/src/southwind_document_server/contracts.py +168 -13
  41. package/template/apps/document-server/src/southwind_document_server/fingerprint.py +128 -0
  42. package/template/apps/document-server/src/southwind_document_server/grants.py +81 -0
  43. package/template/apps/document-server/src/southwind_document_server/multipart_output.py +265 -0
  44. package/template/apps/document-server/src/southwind_document_server/output_validation.py +202 -0
  45. package/template/apps/document-server/src/southwind_document_server/progress.py +27 -0
  46. package/template/apps/document-server/src/southwind_document_server/readiness.py +280 -0
  47. package/template/apps/document-server/src/southwind_document_server/readiness_contracts.py +280 -0
  48. package/template/apps/document-server/src/southwind_document_server/readiness_http.py +87 -0
  49. package/template/apps/document-server/src/southwind_document_server/readiness_support.py +120 -0
  50. package/template/apps/document-server/src/southwind_document_server/request_validation.py +48 -0
  51. package/template/apps/document-server/src/southwind_document_server/service.py +297 -96
  52. package/template/apps/document-server/src/southwind_document_server/service_recovery.py +183 -0
  53. package/template/apps/document-server/src/southwind_document_server/sink.py +316 -0
  54. package/template/apps/document-server/src/southwind_document_server/store.py +301 -141
  55. package/template/apps/document-server/src/southwind_document_server/store_events.py +40 -0
  56. package/template/apps/document-server/src/southwind_document_server/store_models.py +62 -0
  57. package/template/apps/document-server/src/southwind_document_server/store_recovery.py +247 -0
  58. package/template/apps/document-server/src/southwind_document_server/store_schema.py +50 -0
  59. package/template/apps/document-server/tests/recovery_support.py +230 -0
  60. package/template/apps/document-server/tests/support.py +210 -0
  61. package/template/apps/document-server/tests/test_adapter.py +251 -0
  62. package/template/apps/document-server/tests/test_config.py +43 -0
  63. package/template/apps/document-server/tests/test_contracts.py +80 -0
  64. package/template/apps/document-server/tests/test_fingerprint.py +125 -0
  65. package/template/apps/document-server/tests/test_grants.py +46 -0
  66. package/template/apps/document-server/tests/test_handshake.py +154 -0
  67. package/template/apps/document-server/tests/test_integration.py +192 -0
  68. package/template/apps/document-server/tests/test_multipart_security.py +259 -0
  69. package/template/apps/document-server/tests/test_readiness.py +311 -0
  70. package/template/apps/document-server/tests/test_readiness_contracts.py +131 -0
  71. package/template/apps/document-server/tests/test_recovery.py +222 -0
  72. package/template/apps/document-server/tests/test_recovery_faults.py +101 -0
  73. package/template/apps/document-server/tests/test_recovery_races.py +283 -0
  74. package/template/apps/document-server/tests/test_service.py +16 -13
  75. package/template/apps/document-server/tests/test_service_artifacts.py +296 -0
  76. package/template/apps/document-server/tests/test_sink.py +253 -0
  77. package/template/apps/document-server/tests/test_store.py +199 -0
  78. package/template/apps/embedding-server/pyproject.toml +5 -0
  79. package/template/apps/embedding-server/src/southwind_embedding_server/adapter.py +38 -2
  80. package/template/apps/embedding-server/src/southwind_embedding_server/app.py +135 -20
  81. package/template/apps/embedding-server/src/southwind_embedding_server/config.py +138 -4
  82. package/template/apps/embedding-server/src/southwind_embedding_server/contracts.py +13 -0
  83. package/template/apps/embedding-server/src/southwind_embedding_server/image_input.py +16 -5
  84. package/template/apps/embedding-server/src/southwind_embedding_server/pin_cli.py +62 -0
  85. package/template/apps/embedding-server/src/southwind_embedding_server/readiness.py +259 -0
  86. package/template/apps/embedding-server/src/southwind_embedding_server/readiness_contracts.py +221 -0
  87. package/template/apps/embedding-server/src/southwind_embedding_server/readiness_http.py +91 -0
  88. package/template/apps/embedding-server/src/southwind_embedding_server/run_cipher.py +31 -0
  89. package/template/apps/embedding-server/src/southwind_embedding_server/run_service.py +150 -0
  90. package/template/apps/embedding-server/src/southwind_embedding_server/run_store.py +250 -0
  91. package/template/apps/embedding-server/tests/test_adapter.py +25 -0
  92. package/template/apps/embedding-server/tests/test_config.py +13 -0
  93. package/template/apps/embedding-server/tests/test_readiness.py +202 -0
  94. package/template/apps/embedding-server/tests/test_run_http.py +257 -0
  95. package/template/apps/embedding-server/tests/test_run_service.py +202 -0
  96. package/template/apps/embedding-server/uv.lock +71 -0
  97. package/template/apps/server/Dockerfile +13 -0
  98. package/template/apps/server/package.json +1 -0
  99. package/template/apps/server/src/agent/drizzle-screenshot-intake-repository.integration.test.ts +286 -0
  100. package/template/apps/server/src/agent/drizzle-screenshot-intake-repository.ts +175 -0
  101. package/template/apps/server/src/agent/persistent-screenshot-intake-producer.ts +320 -0
  102. package/template/apps/server/src/agent/remote-runtime.ts +8 -1
  103. package/template/apps/server/src/agent/required-environment.ts +5 -0
  104. package/template/apps/server/src/agent/run-attach.ts +41 -0
  105. package/template/apps/server/src/agent/run-audit.ts +49 -0
  106. package/template/apps/server/src/agent/run-contracts.ts +6 -1
  107. package/template/apps/server/src/agent/run-facade.ts +67 -68
  108. package/template/apps/server/src/agent/run-route-input.ts +26 -1
  109. package/template/apps/server/src/agent/run-route-screenshot-context.test.ts +13 -0
  110. package/template/apps/server/src/agent/run-routes.ts +1 -0
  111. package/template/apps/server/src/agent/runtime-bootstrap-report.test.ts +1 -1
  112. package/template/apps/server/src/agent/runtime-bootstrap.ts +112 -60
  113. package/template/apps/server/src/agent/runtime-readiness-sources.test.ts +27 -0
  114. package/template/apps/server/src/agent/runtime-readiness-sources.ts +31 -0
  115. package/template/apps/server/src/agent/runtime-reporting-bootstrap.ts +40 -0
  116. package/template/apps/server/src/agent/screenshot-context-admission.test.ts +249 -0
  117. package/template/apps/server/src/agent/screenshot-context-attestation.ts +60 -0
  118. package/template/apps/server/src/agent/screenshot-intake-authorization.ts +29 -0
  119. package/template/apps/server/src/agent/screenshot-intake-bootstrap.ts +59 -0
  120. package/template/apps/server/src/agent/screenshot-intake-durable.ts +53 -0
  121. package/template/apps/server/src/agent/screenshot-intake-errors.ts +9 -0
  122. package/template/apps/server/src/agent/screenshot-intake-producer.ts +41 -0
  123. package/template/apps/server/src/agent/screenshot-intake-record.ts +44 -0
  124. package/template/apps/server/src/agent/screenshot-intake-recovery.ts +106 -0
  125. package/template/apps/server/src/agent/screenshot-intake-repository.ts +64 -0
  126. package/template/apps/server/src/agent/screenshot-intake-reservation.ts +24 -0
  127. package/template/apps/server/src/agent/screenshot-intake-routes.ts +171 -0
  128. package/template/apps/server/src/agent/screenshot-intake-runtime-types.ts +6 -0
  129. package/template/apps/server/src/agent/screenshot-intake-sweep.ts +26 -0
  130. package/template/apps/server/src/agent/screenshot-intake-test-support.ts +91 -0
  131. package/template/apps/server/src/agent/screenshot-intake-v2-validation.ts +176 -0
  132. package/template/apps/server/src/agent/screenshot-intake-v2.test.ts +345 -0
  133. package/template/apps/server/src/agent/screenshot-intake-v2.ts +348 -0
  134. package/template/apps/server/src/agent/screenshot-png.ts +15 -0
  135. package/template/apps/server/src/agent/screenshot-run-binding.ts +49 -0
  136. package/template/apps/server/src/agent/unavailable-routes.ts +9 -0
  137. package/template/apps/server/src/agent/vision-facade.test.ts +98 -8
  138. package/template/apps/server/src/agent/vision-input.ts +5 -2
  139. package/template/apps/server/src/agent/vision-readiness-pin.ts +32 -0
  140. package/template/apps/server/src/agent/vision-readiness.ts +58 -0
  141. package/template/apps/server/src/ai-artifact/runtime-reference.test.ts +135 -0
  142. package/template/apps/server/src/ai-artifact/runtime.ts +134 -5
  143. package/template/apps/server/src/ai-output-artifact/cleanup.ts +214 -0
  144. package/template/apps/server/src/ai-output-artifact/contracts.ts +152 -0
  145. package/template/apps/server/src/ai-output-artifact/drizzle-cleanup.ts +37 -0
  146. package/template/apps/server/src/ai-output-artifact/drizzle-complete.ts +71 -0
  147. package/template/apps/server/src/ai-output-artifact/drizzle-grant-cleanup.ts +45 -0
  148. package/template/apps/server/src/ai-output-artifact/drizzle-grants.ts +109 -0
  149. package/template/apps/server/src/ai-output-artifact/drizzle-mapping.ts +77 -0
  150. package/template/apps/server/src/ai-output-artifact/drizzle-readiness.ts +46 -0
  151. package/template/apps/server/src/ai-output-artifact/drizzle-repository.ts +350 -0
  152. package/template/apps/server/src/ai-output-artifact/drizzle-seal.ts +64 -0
  153. package/template/apps/server/src/ai-output-artifact/grant.ts +30 -0
  154. package/template/apps/server/src/ai-output-artifact/host-registry.ts +53 -0
  155. package/template/apps/server/src/ai-output-artifact/memory-cleanup.ts +47 -0
  156. package/template/apps/server/src/ai-output-artifact/memory-grants.ts +98 -0
  157. package/template/apps/server/src/ai-output-artifact/memory-readiness.ts +26 -0
  158. package/template/apps/server/src/ai-output-artifact/memory-repository.ts +348 -0
  159. package/template/apps/server/src/ai-output-artifact/policy.test.ts +67 -0
  160. package/template/apps/server/src/ai-output-artifact/policy.ts +125 -0
  161. package/template/apps/server/src/ai-output-artifact/postgres-test-support.ts +147 -0
  162. package/template/apps/server/src/ai-output-artifact/postgres.integration.test.ts +349 -0
  163. package/template/apps/server/src/ai-output-artifact/reference-codec.ts +128 -0
  164. package/template/apps/server/src/ai-output-artifact/repository-grant-invariants.test-support.ts +165 -0
  165. package/template/apps/server/src/ai-output-artifact/repository-invariants.test-support.ts +239 -0
  166. package/template/apps/server/src/ai-output-artifact/repository-invariants.test.ts +18 -0
  167. package/template/apps/server/src/ai-output-artifact/repository.ts +107 -0
  168. package/template/apps/server/src/ai-output-artifact/route-input.ts +173 -0
  169. package/template/apps/server/src/ai-output-artifact/routes-delete.test.ts +287 -0
  170. package/template/apps/server/src/ai-output-artifact/routes-grant.test.ts +116 -0
  171. package/template/apps/server/src/ai-output-artifact/routes-nonblocking-body.test.ts +136 -0
  172. package/template/apps/server/src/ai-output-artifact/routes-security.test.ts +176 -0
  173. package/template/apps/server/src/ai-output-artifact/routes-storage-error.test.ts +105 -0
  174. package/template/apps/server/src/ai-output-artifact/routes.test-support.ts +84 -0
  175. package/template/apps/server/src/ai-output-artifact/routes.test.ts +198 -0
  176. package/template/apps/server/src/ai-output-artifact/routes.ts +280 -0
  177. package/template/apps/server/src/ai-output-artifact/service-completion.ts +60 -0
  178. package/template/apps/server/src/ai-output-artifact/service-grants.test.ts +169 -0
  179. package/template/apps/server/src/ai-output-artifact/service-grants.ts +217 -0
  180. package/template/apps/server/src/ai-output-artifact/service-input.ts +175 -0
  181. package/template/apps/server/src/ai-output-artifact/service-read.ts +89 -0
  182. package/template/apps/server/src/ai-output-artifact/service-recovery.test.ts +238 -0
  183. package/template/apps/server/src/ai-output-artifact/service-support.ts +240 -0
  184. package/template/apps/server/src/ai-output-artifact/service.test.ts +283 -0
  185. package/template/apps/server/src/ai-output-artifact/service.ts +334 -0
  186. package/template/apps/server/src/ai-output-artifact/storage-recovery.ts +33 -0
  187. package/template/apps/server/src/ai-output-artifact/storage-writer.ts +103 -0
  188. package/template/apps/server/src/ai-output-artifact/test-support.ts +161 -0
  189. package/template/apps/server/src/ai-runtime-readiness/deployment-pin.ts +69 -0
  190. package/template/apps/server/src/ai-runtime-readiness/health-response.ts +92 -0
  191. package/template/apps/server/src/ai-runtime-readiness/operation-port-trust.test.ts +66 -0
  192. package/template/apps/server/src/ai-runtime-readiness/operation-port.test-support.ts +143 -0
  193. package/template/apps/server/src/ai-runtime-readiness/operation-port.test.ts +193 -0
  194. package/template/apps/server/src/ai-runtime-readiness/operation-port.ts +172 -0
  195. package/template/apps/server/src/ai-runtime-readiness/trust-store.ts +61 -0
  196. package/template/apps/server/src/app/ai-screenshot-intake-binding.ts +22 -0
  197. package/template/apps/server/src/app/document-output-artifact-bindings.ts +5 -0
  198. package/template/apps/server/src/app/speech-output-artifact-bindings.ts +5 -0
  199. package/template/apps/server/src/application-services.ts +9 -3
  200. package/template/apps/server/src/audit/redaction.ts +1 -0
  201. package/template/apps/server/src/audit/reliable-writer.test.ts +8 -0
  202. package/template/apps/server/src/auth/password-change-license-restriction.test.ts +156 -0
  203. package/template/apps/server/src/document/cancel-response.ts +33 -0
  204. package/template/apps/server/src/document/contracts.ts +6 -0
  205. package/template/apps/server/src/document/errors.ts +11 -0
  206. package/template/apps/server/src/document/facade-cancel.test.ts +226 -0
  207. package/template/apps/server/src/document/facade-cancel.ts +110 -0
  208. package/template/apps/server/src/document/facade-grant-handoff.test.ts +113 -0
  209. package/template/apps/server/src/document/facade-idempotency.test.ts +195 -0
  210. package/template/apps/server/src/document/facade-invocation.ts +46 -0
  211. package/template/apps/server/src/document/facade-output-artifact.test.ts +310 -0
  212. package/template/apps/server/src/document/facade-read-response.ts +116 -0
  213. package/template/apps/server/src/document/facade-readiness.test.ts +95 -0
  214. package/template/apps/server/src/document/facade-support.ts +297 -0
  215. package/template/apps/server/src/document/facade.ts +164 -173
  216. package/template/apps/server/src/document/output-artifact-composition.test.ts +64 -0
  217. package/template/apps/server/src/document/output-artifact-composition.ts +78 -0
  218. package/template/apps/server/src/document/output-artifact-fingerprint.contract.test.ts +110 -0
  219. package/template/apps/server/src/document/output-artifact-fingerprint.ts +150 -0
  220. package/template/apps/server/src/document/output-artifact-host-registry.ts +44 -0
  221. package/template/apps/server/src/document/output-artifact-host.test.ts +332 -0
  222. package/template/apps/server/src/document/output-artifact-host.ts +331 -0
  223. package/template/apps/server/src/document/output-artifact-manifest.test-support.ts +71 -0
  224. package/template/apps/server/src/document/output-artifact-publish.test-support.ts +48 -0
  225. package/template/apps/server/src/document/output-artifact-readiness-probe.ts +347 -0
  226. package/template/apps/server/src/document/output-artifact-readiness-timeout.ts +30 -0
  227. package/template/apps/server/src/document/output-artifact-readiness.test.ts +264 -0
  228. package/template/apps/server/src/document/output-artifact-readiness.ts +87 -0
  229. package/template/apps/server/src/document/output-artifact-route-composition.test.ts +27 -0
  230. package/template/apps/server/src/document/output-artifact-route-composition.ts +14 -0
  231. package/template/apps/server/src/document/output-artifact-runtime.test-support.ts +8 -0
  232. package/template/apps/server/src/document/output-artifact-runtime.test.ts +124 -0
  233. package/template/apps/server/src/document/output-artifact-runtime.ts +275 -0
  234. package/template/apps/server/src/document/output-artifact.test-support.ts +350 -0
  235. package/template/apps/server/src/document/remote-response.ts +162 -0
  236. package/template/apps/server/src/document/remote-runtime.test.ts +100 -4
  237. package/template/apps/server/src/document/remote-runtime.ts +37 -85
  238. package/template/apps/server/src/document/routes-read-response.test.ts +267 -0
  239. package/template/apps/server/src/document/routes.test.ts +109 -0
  240. package/template/apps/server/src/document/routes.ts +23 -14
  241. package/template/apps/server/src/embedding/audit.ts +46 -0
  242. package/template/apps/server/src/embedding/contracts.ts +19 -1
  243. package/template/apps/server/src/embedding/drizzle-run-binding-repository.integration.test.ts +100 -0
  244. package/template/apps/server/src/embedding/drizzle-run-binding-repository.ts +102 -0
  245. package/template/apps/server/src/embedding/facade-readiness.test.ts +307 -0
  246. package/template/apps/server/src/embedding/facade-types.ts +18 -0
  247. package/template/apps/server/src/embedding/facade.ts +248 -115
  248. package/template/apps/server/src/embedding/operation-authorization.ts +23 -0
  249. package/template/apps/server/src/embedding/readiness-admission.ts +26 -0
  250. package/template/apps/server/src/embedding/remote-runtime.test.ts +103 -0
  251. package/template/apps/server/src/embedding/remote-runtime.ts +98 -0
  252. package/template/apps/server/src/embedding/routes.test.ts +118 -0
  253. package/template/apps/server/src/embedding/routes.ts +98 -0
  254. package/template/apps/server/src/embedding/run-artifact.ts +18 -0
  255. package/template/apps/server/src/embedding/run-authorization.test.ts +133 -0
  256. package/template/apps/server/src/embedding/run-authorization.ts +91 -0
  257. package/template/apps/server/src/embedding/run-binding-repository.ts +75 -0
  258. package/template/apps/server/src/embedding/run-fingerprint.test.ts +78 -0
  259. package/template/apps/server/src/embedding/run-fingerprint.ts +48 -0
  260. package/template/apps/server/src/embedding/terminal-observer.test.ts +26 -0
  261. package/template/apps/server/src/embedding/terminal-observer.ts +44 -0
  262. package/template/apps/server/src/index.ts +38 -31
  263. package/template/apps/server/src/module-host/ai-operation-port.test.ts +72 -0
  264. package/template/apps/server/src/module-host/ai-operation-port.ts +46 -3
  265. package/template/apps/server/src/module-host/ai-operation-speech-normalize.test.ts +186 -0
  266. package/template/apps/server/src/module-host/durable-context.ts +194 -16
  267. package/template/apps/server/src/module-host/durable-handler-registration.ts +1 -0
  268. package/template/apps/server/src/module-host/durable-storage-filesystem-restart.test.ts +265 -0
  269. package/template/apps/server/src/module-host/durable-storage-write.test.ts +345 -0
  270. package/template/apps/server/src/module-host/http-runtime.ts +25 -0
  271. package/template/apps/server/src/module-host/initialize-contracts.ts +18 -1
  272. package/template/apps/server/src/module-host/initialize.test.ts +18 -0
  273. package/template/apps/server/src/module-host/initialize.ts +42 -2
  274. package/template/apps/server/src/module-host/module-secret-audit-version.test.ts +73 -0
  275. package/template/apps/server/src/module-host/module-secret-binding-resolution.ts +60 -0
  276. package/template/apps/server/src/module-host/module-secret-durable.test.ts +206 -0
  277. package/template/apps/server/src/module-host/module-secret-port.test-support.ts +125 -0
  278. package/template/apps/server/src/module-host/module-secret-port.test.ts +161 -0
  279. package/template/apps/server/src/module-host/module-secret-port.ts +249 -0
  280. package/template/apps/server/src/module-host/module-secret-result.test.ts +324 -0
  281. package/template/apps/server/src/module-host/module-secret-result.ts +274 -0
  282. package/template/apps/server/src/module-host/module-secret-tool-boundary.test.ts +143 -0
  283. package/template/apps/server/src/module-host/project-composition.ts +1 -0
  284. package/template/apps/server/src/module-host/report-staging-port.ts +55 -0
  285. package/template/apps/server/src/module-host/report-staging-registration.test.ts +104 -0
  286. package/template/apps/server/src/module-host/request-context.ts +58 -1
  287. package/template/apps/server/src/module-host/route-declaration.ts +11 -4
  288. package/template/apps/server/src/module-host/route-installer.test-fixture.ts +246 -0
  289. package/template/apps/server/src/module-host/route-installer.test.ts +47 -211
  290. package/template/apps/server/src/module-host/route-installer.ts +192 -21
  291. package/template/apps/server/src/module-host/route-registration.test.ts +44 -4
  292. package/template/apps/server/src/module-host/runtime-composition.ts +2 -0
  293. package/template/apps/server/src/module-host/scoped-host.ts +84 -0
  294. package/template/apps/server/src/module-host/screenshot-artifact-ref.ts +91 -0
  295. package/template/apps/server/src/module-host/screenshot-intake-composition.test.ts +292 -0
  296. package/template/apps/server/src/module-host/screenshot-intake-deadline.ts +38 -0
  297. package/template/apps/server/src/module-host/screenshot-intake-plan.ts +75 -0
  298. package/template/apps/server/src/module-host/screenshot-intake-port.ts +297 -0
  299. package/template/apps/server/src/module-host/screenshot-intake-security.test.ts +311 -0
  300. package/template/apps/server/src/module-host/screenshot-intake-store.ts +76 -0
  301. package/template/apps/server/src/module-host/screenshot-intake-test-support.ts +68 -0
  302. package/template/apps/server/src/module-host/secret-bindings.test.ts +167 -0
  303. package/template/apps/server/src/module-host/secret-bindings.ts +184 -0
  304. package/template/apps/server/src/module-host/storage-authorization-binding.test.ts +242 -0
  305. package/template/apps/server/src/module-host/storage-port.test.ts +8 -1
  306. package/template/apps/server/src/module-host/storage-port.ts +84 -8
  307. package/template/apps/server/src/module-host/storage-restart-fixture.test-support.ts +242 -0
  308. package/template/apps/server/src/module-host/storage-restart-postgres.integration.test.ts +280 -0
  309. package/template/apps/server/src/module-host/storage-scope-drift-http.test.ts +68 -0
  310. package/template/apps/server/src/module-host/storage-scope.ts +52 -1
  311. package/template/apps/server/src/module-host/storage-stream-route.test.ts +282 -0
  312. package/template/apps/server/src/module-host/storage-write-error.test.ts +174 -0
  313. package/template/apps/server/src/module-host/storage-write-error.ts +62 -0
  314. package/template/apps/server/src/module-host/storage-write-port.test.ts +323 -0
  315. package/template/apps/server/src/module-host/storage-write-port.ts +320 -0
  316. package/template/apps/server/src/module-host/storage-write-unavailable.ts +21 -0
  317. package/template/apps/server/src/module-host/storage-writer-retention.test.ts +109 -0
  318. package/template/apps/server/src/module-host/user-directory-composition.test.ts +1 -0
  319. package/template/apps/server/src/module-preflight-secret.test.ts +79 -0
  320. package/template/apps/server/src/module-preflight.ts +5 -0
  321. package/template/apps/server/src/platform-http-runtime.ts +16 -4
  322. package/template/apps/server/src/report-staging/archive-frame-stream.test.ts +209 -0
  323. package/template/apps/server/src/report-staging/archive-frame-stream.ts +341 -0
  324. package/template/apps/server/src/report-staging/archive-process.test.ts +302 -0
  325. package/template/apps/server/src/report-staging/archive-process.ts +257 -0
  326. package/template/apps/server/src/report-staging/archive-volumes.ts +30 -0
  327. package/template/apps/server/src/report-staging/cancellation.ts +13 -0
  328. package/template/apps/server/src/report-staging/contracts.ts +94 -0
  329. package/template/apps/server/src/report-staging/drizzle-lifecycle.ts +278 -0
  330. package/template/apps/server/src/report-staging/drizzle-mapping.ts +140 -0
  331. package/template/apps/server/src/report-staging/drizzle-repository.integration.test.ts +346 -0
  332. package/template/apps/server/src/report-staging/drizzle-repository.ts +255 -0
  333. package/template/apps/server/src/report-staging/drizzle-seal.integration.test.ts +267 -0
  334. package/template/apps/server/src/report-staging/drizzle-seal.ts +177 -0
  335. package/template/apps/server/src/report-staging/filesystem-cleanup.test.ts +68 -0
  336. package/template/apps/server/src/report-staging/filesystem-cleanup.ts +102 -0
  337. package/template/apps/server/src/report-staging/filesystem-errors.ts +15 -0
  338. package/template/apps/server/src/report-staging/filesystem-identifiers.ts +19 -0
  339. package/template/apps/server/src/report-staging/filesystem-io.test.ts +85 -0
  340. package/template/apps/server/src/report-staging/filesystem-io.ts +206 -0
  341. package/template/apps/server/src/report-staging/filesystem-scan.ts +85 -0
  342. package/template/apps/server/src/report-staging/filesystem-store.ts +346 -0
  343. package/template/apps/server/src/report-staging/heartbeat.test.ts +47 -0
  344. package/template/apps/server/src/report-staging/heartbeat.ts +53 -0
  345. package/template/apps/server/src/report-staging/manifest-stream.ts +46 -0
  346. package/template/apps/server/src/report-staging/memory-repository.ts +256 -0
  347. package/template/apps/server/src/report-staging/metadata-catalog.ts +89 -0
  348. package/template/apps/server/src/report-staging/metadata-spool-paths.ts +195 -0
  349. package/template/apps/server/src/report-staging/metadata-spool-schema.ts +54 -0
  350. package/template/apps/server/src/report-staging/metadata-spool.test.ts +214 -0
  351. package/template/apps/server/src/report-staging/metadata-spool.ts +305 -0
  352. package/template/apps/server/src/report-staging/native/archive-frame-helper.c +309 -0
  353. package/template/apps/server/src/report-staging/path-policy.test.ts +127 -0
  354. package/template/apps/server/src/report-staging/path-policy.ts +263 -0
  355. package/template/apps/server/src/report-staging/repository-fence.test.ts +114 -0
  356. package/template/apps/server/src/report-staging/repository.ts +75 -0
  357. package/template/apps/server/src/report-staging/runtime.ts +31 -0
  358. package/template/apps/server/src/report-staging/sealed-file.test.ts +34 -0
  359. package/template/apps/server/src/report-staging/sealed-file.ts +137 -0
  360. package/template/apps/server/src/report-staging/service-input-limits.test.ts +62 -0
  361. package/template/apps/server/src/report-staging/service-input.ts +204 -0
  362. package/template/apps/server/src/report-staging/service-lifecycle.test.ts +132 -0
  363. package/template/apps/server/src/report-staging/service-read-fence.test.ts +37 -0
  364. package/template/apps/server/src/report-staging/service-read.ts +172 -0
  365. package/template/apps/server/src/report-staging/service-support.ts +149 -0
  366. package/template/apps/server/src/report-staging/service.test-fixture.ts +226 -0
  367. package/template/apps/server/src/report-staging/service.test.ts +314 -0
  368. package/template/apps/server/src/report-staging/service.ts +255 -0
  369. package/template/apps/server/src/report-staging/supervised-process.ts +194 -0
  370. package/template/apps/server/src/speech/contracts.ts +8 -0
  371. package/template/apps/server/src/speech/errors.ts +10 -0
  372. package/template/apps/server/src/speech/facade-contract.ts +49 -0
  373. package/template/apps/server/src/speech/facade-output.test.ts +299 -0
  374. package/template/apps/server/src/speech/facade-output.ts +298 -0
  375. package/template/apps/server/src/speech/facade-validation.ts +127 -0
  376. package/template/apps/server/src/speech/facade.ts +185 -151
  377. package/template/apps/server/src/speech/fingerprint.test.ts +42 -0
  378. package/template/apps/server/src/speech/fingerprint.ts +28 -0
  379. package/template/apps/server/src/speech/output-artifact-binding.test.ts +11 -0
  380. package/template/apps/server/src/speech/output-artifact-binding.ts +30 -0
  381. package/template/apps/server/src/speech/output-artifact-error.ts +9 -0
  382. package/template/apps/server/src/speech/output-artifact-host.test-support.ts +73 -0
  383. package/template/apps/server/src/speech/output-artifact-host.test.ts +302 -0
  384. package/template/apps/server/src/speech/output-artifact-host.ts +279 -0
  385. package/template/apps/server/src/speech/output-artifact-policy.ts +114 -0
  386. package/template/apps/server/src/speech/output-artifact-replay.ts +91 -0
  387. package/template/apps/server/src/speech/remote-response.ts +158 -0
  388. package/template/apps/server/src/speech/remote-runtime.test.ts +90 -0
  389. package/template/apps/server/src/speech/remote-runtime.ts +36 -78
  390. package/template/apps/server/src/speech/routes.ts +60 -16
  391. package/template/apps/server/src/startup-finalization.ts +52 -0
  392. package/template/apps/server/src/startup-preflight.ts +2 -0
  393. package/template/apps/server/src/startup-shutdown.test.ts +69 -0
  394. package/template/apps/server/src/startup-shutdown.ts +61 -0
  395. package/template/apps/server/src/storage/drizzle-upload-purge.ts +61 -0
  396. package/template/apps/server/src/storage/drizzle-upload-references.ts +23 -0
  397. package/template/apps/server/src/storage/drizzle-upload-repository.integration.test.ts +103 -0
  398. package/template/apps/server/src/storage/drizzle-upload-repository.ts +109 -14
  399. package/template/apps/server/src/storage/host-runtime.ts +15 -0
  400. package/template/apps/server/src/storage/routes-stream-cancellation.test.ts +154 -0
  401. package/template/apps/server/src/storage/routes.test.ts +13 -2
  402. package/template/apps/server/src/storage/routes.ts +57 -18
  403. package/template/apps/server/src/storage/runtime.ts +17 -4
  404. package/template/apps/server/src/system/route-types.ts +5 -1
  405. package/template/apps/server/src/system/system-resource-monitoring.test.ts +47 -0
  406. package/template/apps/server/src/system/system-resource-monitoring.ts +60 -10
  407. package/template/apps/server/src/work-order/routes.test.ts +1 -0
  408. package/template/apps/speech-server/src/southwind_speech_server/adapter.py +58 -17
  409. package/template/apps/speech-server/src/southwind_speech_server/app.py +24 -17
  410. package/template/apps/speech-server/src/southwind_speech_server/bounded_json.py +60 -0
  411. package/template/apps/speech-server/src/southwind_speech_server/config.py +122 -2
  412. package/template/apps/speech-server/src/southwind_speech_server/contracts.py +58 -0
  413. package/template/apps/speech-server/src/southwind_speech_server/errors.py +8 -0
  414. package/template/apps/speech-server/src/southwind_speech_server/normalizer.py +14 -0
  415. package/template/apps/speech-server/src/southwind_speech_server/output_artifact.py +190 -0
  416. package/template/apps/speech-server/src/southwind_speech_server/output_validation.py +54 -0
  417. package/template/apps/speech-server/src/southwind_speech_server/pin_cli.py +83 -0
  418. package/template/apps/speech-server/src/southwind_speech_server/readiness.py +266 -0
  419. package/template/apps/speech-server/src/southwind_speech_server/readiness_contracts.py +268 -0
  420. package/template/apps/speech-server/src/southwind_speech_server/readiness_http.py +91 -0
  421. package/template/apps/speech-server/src/southwind_speech_server/readiness_local.py +161 -0
  422. package/template/apps/speech-server/src/southwind_speech_server/readiness_support.py +106 -0
  423. package/template/apps/speech-server/src/southwind_speech_server/service.py +118 -13
  424. package/template/apps/speech-server/src/southwind_speech_server/store.py +7 -0
  425. package/template/apps/speech-server/tests/test_bounded_json.py +55 -0
  426. package/template/apps/speech-server/tests/test_config.py +22 -0
  427. package/template/apps/speech-server/tests/test_output_artifact.py +60 -0
  428. package/template/apps/speech-server/tests/test_output_validation.py +44 -0
  429. package/template/apps/speech-server/tests/test_readiness.py +315 -0
  430. package/template/apps/speech-server/tests/test_readiness_http.py +48 -0
  431. package/template/apps/speech-server/tests/test_readiness_local.py +43 -0
  432. package/template/apps/speech-server/tests/test_service.py +211 -36
  433. package/template/apps/web/src/pages/system/components/OperationGpuMonitor.vue +2 -1
  434. package/template/apps/web/src/pages/system/components/OperationGpuMonitor.webtest.ts +29 -0
  435. package/template/apps/web/src/pages/system/components/OperationServiceMonitor.vue +2 -1
  436. package/template/apps/web/src/pages/system/components/OperationServiceMonitor.webtest.ts +4 -1
  437. package/template/docker-compose.yml +49 -1
  438. package/template/docs/architecture/ai-runtime-readiness.md +504 -0
  439. package/template/docs/architecture/ai-runtime.md +20 -4
  440. package/template/docs/architecture/durable-jobs.md +54 -5
  441. package/template/docs/architecture/module-host.md +72 -9
  442. package/template/docs/architecture/module-manifest-composition.md +5 -2
  443. package/template/docs/architecture/module-secret-resolution.md +250 -0
  444. package/template/docs/architecture/object-storage.md +144 -3
  445. package/template/docs/architecture/report-staging.md +158 -0
  446. package/template/docs/architecture/server-module-interface.md +29 -0
  447. package/template/docs/architecture/speech-variants.md +45 -0
  448. package/template/docs/platform/agent-tools.md +16 -0
  449. package/template/docs/platform/document-ai-runtime.md +199 -17
  450. package/template/docs/platform/module-configuration.md +5 -0
  451. package/template/docs/platform/speech-ai-runtime.md +34 -5
  452. package/template/docs/platform/vision-ai-runtime.md +46 -1
  453. package/template/package.json +4 -1
  454. package/template/packages/ai-client/package.json +1 -1
  455. package/template/packages/ai-client/src/agent/client/client.ts +3 -0
  456. package/template/packages/ai-client/src/agent/client/index.ts +1 -0
  457. package/template/packages/ai-client/src/agent/client/screenshot.test.ts +40 -0
  458. package/template/packages/ai-client/src/agent/client/screenshot.ts +146 -0
  459. package/template/packages/ai-client/src/agent/client/types.ts +2 -0
  460. package/template/packages/ai-client/src/agent/contracts/runs.ts +1 -0
  461. package/template/packages/ai-client/src/embedding/client.test.ts +52 -0
  462. package/template/packages/ai-client/src/embedding/client.ts +69 -0
  463. package/template/packages/ai-client/src/embedding/contracts.ts +47 -0
  464. package/template/packages/ai-client/src/embedding/index.ts +1 -0
  465. package/template/packages/ai-client/src/embedding/run.ts +130 -0
  466. package/template/packages/ai-client/src/speech/client.test.ts +26 -0
  467. package/template/packages/ai-client/src/speech/client.ts +25 -1
  468. package/template/packages/ai-client/src/speech/contracts.ts +19 -0
  469. package/template/packages/config/package.json +2 -2
  470. package/template/packages/database/drizzle/0048_illegal_magneto.sql +11 -0
  471. package/template/packages/database/drizzle/0049_right_lenny_balinger.sql +79 -0
  472. package/template/packages/database/drizzle/0050_greedy_sister_grimm.sql +92 -0
  473. package/template/packages/database/drizzle/0051_lame_shockwave.sql +19 -0
  474. package/template/packages/database/drizzle/0052_tiresome_komodo.sql +1 -0
  475. package/template/packages/database/drizzle/0053_calm_victor_mancha.sql +1 -0
  476. package/template/packages/database/drizzle/0054_tough_thanos.sql +29 -0
  477. package/template/packages/database/drizzle/meta/0048_snapshot.json +8852 -0
  478. package/template/packages/database/drizzle/meta/0049_snapshot.json +9410 -0
  479. package/template/packages/database/drizzle/meta/0050_snapshot.json +10115 -0
  480. package/template/packages/database/drizzle/meta/0051_snapshot.json +10257 -0
  481. package/template/packages/database/drizzle/meta/0052_snapshot.json +10263 -0
  482. package/template/packages/database/drizzle/meta/0053_snapshot.json +10270 -0
  483. package/template/packages/database/drizzle/meta/0054_snapshot.json +10468 -0
  484. package/template/packages/database/drizzle/meta/_journal.json +49 -0
  485. package/template/packages/database/package.json +2 -2
  486. package/template/packages/database/src/agent-runtime-schema.test.ts +15 -0
  487. package/template/packages/database/src/ai-output-artifacts.test.ts +57 -0
  488. package/template/packages/database/src/schema/agent-runtime.ts +43 -0
  489. package/template/packages/database/src/schema/ai-output-artifacts.ts +182 -0
  490. package/template/packages/database/src/schema/embedding-runtime.ts +62 -0
  491. package/template/packages/database/src/schema/file-storage.ts +18 -0
  492. package/template/packages/database/src/schema/index.ts +3 -0
  493. package/template/packages/database/src/schema/report-staging.ts +212 -0
  494. package/template/packages/database/src/schema.test.ts +19 -0
  495. package/template/packages/jobs/package.json +2 -2
  496. package/template/packages/modules/index.ts +2 -0
  497. package/template/packages/modules/package.json +1 -1
  498. package/template/packages/modules/src/ai-operation-composition.test.ts +37 -0
  499. package/template/packages/modules/src/ai-operation-composition.ts +4 -0
  500. package/template/packages/modules/src/ai-operation-readiness-contract.test.ts +38 -0
  501. package/template/packages/modules/src/ai-operation-readiness-contract.ts +34 -0
  502. package/template/packages/modules/src/ai-screenshot-context.test.ts +72 -0
  503. package/template/packages/modules/src/ai-screenshot-context.ts +50 -0
  504. package/template/packages/modules/src/capability-audit-validation.ts +20 -0
  505. package/template/packages/modules/src/capability-guard-validation.ts +41 -0
  506. package/template/packages/modules/src/composition.ts +11 -0
  507. package/template/packages/modules/src/manifest.ts +48 -0
  508. package/template/packages/modules/src/secret-composition.test.ts +308 -0
  509. package/template/packages/modules/src/secret-composition.ts +176 -0
  510. package/template/packages/modules/src/system-api-control-plane.ts +17 -1
  511. package/template/packages/modules/src/system-module-catalog.test.ts +52 -0
  512. package/template/packages/modules/src/system-module-catalog.ts +1 -1
  513. package/template/packages/server-sdk/contracts/ai-runtime-readiness/v1/document-python-parity.json +12 -0
  514. package/template/packages/server-sdk/contracts/ai-runtime-readiness/v1/document.json +70 -0
  515. package/template/packages/server-sdk/contracts/ai-runtime-readiness/v1/embedding.json +68 -0
  516. package/template/packages/server-sdk/contracts/ai-runtime-readiness/v1/speech.json +80 -0
  517. package/template/packages/server-sdk/contracts/ai-runtime-readiness/v1/vlm.json +70 -0
  518. package/template/packages/server-sdk/contracts/document-runtime/v1/fingerprint-fixture.json +101 -0
  519. package/template/packages/server-sdk/index.ts +109 -0
  520. package/template/packages/server-sdk/package.json +23 -4
  521. package/template/packages/server-sdk/src/ai-runtime-readiness-capture.ts +168 -0
  522. package/template/packages/server-sdk/src/ai-runtime-readiness-digest.ts +49 -0
  523. package/template/packages/server-sdk/src/ai-runtime-readiness-identity.ts +16 -0
  524. package/template/packages/server-sdk/src/ai-runtime-readiness-keys.ts +23 -0
  525. package/template/packages/server-sdk/src/ai-runtime-readiness-limits.ts +141 -0
  526. package/template/packages/server-sdk/src/ai-runtime-readiness-projection.ts +326 -0
  527. package/template/packages/server-sdk/src/ai-runtime-readiness-requirement.ts +31 -0
  528. package/template/packages/server-sdk/src/ai-runtime-readiness-time.ts +16 -0
  529. package/template/packages/server-sdk/src/ai-runtime-readiness-trust.ts +84 -0
  530. package/template/packages/server-sdk/src/ai-runtime-readiness-validation-values.ts +147 -0
  531. package/template/packages/server-sdk/src/ai-runtime-readiness-validation.ts +299 -0
  532. package/template/packages/server-sdk/src/ai-runtime-readiness-values.ts +42 -0
  533. package/template/packages/server-sdk/src/ai-runtime-readiness.adversarial-input.contract.test.ts +146 -0
  534. package/template/packages/server-sdk/src/ai-runtime-readiness.contract-support.ts +139 -0
  535. package/template/packages/server-sdk/src/ai-runtime-readiness.contract.test.ts +314 -0
  536. package/template/packages/server-sdk/src/ai-runtime-readiness.digest-safety.contract.test.ts +131 -0
  537. package/template/packages/server-sdk/src/ai-runtime-readiness.fail-closed.contract.test.ts +215 -0
  538. package/template/packages/server-sdk/src/ai-runtime-readiness.identity.contract.test.ts +138 -0
  539. package/template/packages/server-sdk/src/ai-runtime-readiness.input-safety.contract.test.ts +314 -0
  540. package/template/packages/server-sdk/src/ai-runtime-readiness.public-api.test.ts +18 -0
  541. package/template/packages/server-sdk/src/ai-runtime-readiness.python-parity.contract.test.ts +160 -0
  542. package/template/packages/server-sdk/src/ai-runtime-readiness.trust.contract.test.ts +135 -0
  543. package/template/packages/server-sdk/src/ai-runtime-readiness.ts +198 -0
  544. package/template/packages/server-sdk/src/ai-screenshot-intake-port.ts +58 -0
  545. package/template/packages/server-sdk/src/data-governance-registration.ts +1 -3
  546. package/template/packages/server-sdk/src/durable-handler.ts +12 -0
  547. package/template/packages/server-sdk/src/module-adapter.test.ts +10 -0
  548. package/template/packages/server-sdk/src/module-adapter.ts +3 -0
  549. package/template/packages/server-sdk/src/module-host.ts +8 -0
  550. package/template/packages/server-sdk/src/report-staging-context-compatibility.test.ts +25 -0
  551. package/template/packages/server-sdk/src/report-staging-port.ts +190 -0
  552. package/template/packages/server-sdk/src/request-context.ts +27 -1
  553. package/template/packages/server-sdk/src/route-definition.ts +6 -0
  554. package/template/packages/server-sdk/src/secret-binding.test.ts +66 -0
  555. package/template/packages/server-sdk/src/secret-binding.ts +54 -0
  556. package/template/packages/server-sdk/src/secret-context-compatibility.test.ts +77 -0
  557. package/template/packages/server-sdk/src/secret-port.ts +80 -0
  558. package/template/packages/server-sdk/src/storage-port.ts +129 -9
  559. package/template/packages/server-sdk/src/storage-v052-source-compatibility.test.ts +61 -0
  560. package/template/packages/shared/index.ts +5 -0
  561. package/template/packages/shared/package.json +4 -1
  562. package/template/packages/shared/src/ai-operation-readiness.test.ts +75 -0
  563. package/template/packages/shared/src/ai-operation-readiness.ts +170 -0
  564. package/template/packages/shared/src/license-catalog.ts +14 -9
  565. package/template/packages/shared/src/screenshot-context-digest.test.ts +46 -0
  566. package/template/packages/shared/src/screenshot-context-digest.ts +72 -0
  567. package/template/packages/shared/src/stable-key.ts +26 -0
  568. package/template/packages/shared/tsconfig.json +16 -0
  569. package/template/packages/storage/index.ts +2 -0
  570. package/template/packages/storage/package.json +1 -1
  571. package/template/packages/storage/src/in-memory-upload-repository.ts +105 -2
  572. package/template/packages/storage/src/local-file-blob-store.test.ts +58 -0
  573. package/template/packages/storage/src/local-file-blob-store.ts +5 -71
  574. package/template/packages/storage/src/local-file-blob-writer.ts +96 -0
  575. package/template/packages/storage/src/upload-abort-recovery.test.ts +234 -0
  576. package/template/packages/storage/src/upload-abort.ts +130 -0
  577. package/template/packages/storage/src/upload-cleanup-race.test.ts +207 -0
  578. package/template/packages/storage/src/upload-cleanup.ts +85 -0
  579. package/template/packages/storage/src/upload-completion.ts +52 -0
  580. package/template/packages/storage/src/upload-purge.test.ts +163 -0
  581. package/template/packages/storage/src/upload-purge.ts +261 -0
  582. package/template/packages/storage/src/upload-repository-v052-compatibility.test.ts +31 -0
  583. package/template/packages/storage/src/upload-repository.ts +61 -0
  584. package/template/packages/storage/src/upload-service-recovery.test.ts +296 -0
  585. package/template/packages/storage/src/upload-service.ts +138 -150
  586. package/template/packages/storage/src/upload-streams.ts +126 -30
  587. package/template/packages/storage/src/upload-types.ts +13 -0
  588. package/template/packages/storage/src/upload-validation.ts +127 -0
  589. package/template/scripts/provision-speech-readiness.ts +147 -0
package/dist/cli.js CHANGED
@@ -34,8 +34,8 @@ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports,
34
34
  var __require = import.meta.require;
35
35
 
36
36
  // ../../node_modules/.bun/cli-width@4.1.0/node_modules/cli-width/index.js
37
- var require_cli_width = __commonJS((exports, module3) => {
38
- module3.exports = cliWidth;
37
+ var require_cli_width = __commonJS((exports, module2) => {
38
+ module2.exports = cliWidth;
39
39
  function normalizeOpts(options) {
40
40
  const defaultOpts = {
41
41
  defaultWidth: 0,
@@ -74,7 +74,7 @@ var require_cli_width = __commonJS((exports, module3) => {
74
74
  });
75
75
 
76
76
  // ../../node_modules/.bun/mute-stream@3.0.0/node_modules/mute-stream/lib/index.js
77
- var require_lib = __commonJS((exports, module3) => {
77
+ var require_lib = __commonJS((exports, module2) => {
78
78
  var Stream = __require("stream");
79
79
 
80
80
  class MuteStream extends Stream {
@@ -190,7 +190,7 @@ var require_lib = __commonJS((exports, module3) => {
190
190
  return this.#proxy("close", ...args);
191
191
  }
192
192
  }
193
- module3.exports = MuteStream;
193
+ module2.exports = MuteStream;
194
194
  });
195
195
 
196
196
  // src/arguments.ts
@@ -239,29 +239,89 @@ function validateModuleDistributionCatalog(manifests) {
239
239
  return manifests;
240
240
  }
241
241
 
242
+ // src/optional-module-base.ts
243
+ function optionalModule(name, label, description, dependencies) {
244
+ const selection = "optional";
245
+ return {
246
+ name,
247
+ version: "0.1.0",
248
+ windyRange: "^0.5.0",
249
+ label,
250
+ description,
251
+ selection,
252
+ runtimeActivation: "toggle",
253
+ deploymentInstall: "project-composition-required",
254
+ dependencies,
255
+ conflicts: [],
256
+ runtimePackage: null,
257
+ packages: [],
258
+ registryDependencies: [],
259
+ fileRoots: [],
260
+ documentation: [],
261
+ schemaFiles: [],
262
+ migrationRoots: [],
263
+ databaseTables: [],
264
+ databaseLineageOwner: "platform",
265
+ transientDatabaseTables: [],
266
+ databaseStatementTokens: [],
267
+ uninstallPolicy: "retain-data",
268
+ installRecipe: `module-${name}-install`,
269
+ updateRecipes: [`module-${name}-update-0.1.0`],
270
+ uninstallRecipe: `module-${name}-uninstall`
271
+ };
272
+ }
273
+
274
+ // src/optional-module-storage.ts
275
+ var storageOptionalModule = {
276
+ ...optionalModule("system.storage", "\u6587\u4EF6\u5B58\u50A8", "\u4E0A\u4F20\u3001\u4E0B\u8F7D\u548C\u5BF9\u8C61\u751F\u547D\u5468\u671F\u3002", ["system", "system.settings", "system.scheduler"]),
277
+ runtimeActivation: "physical-only",
278
+ registryDependencies: [
279
+ {
280
+ sourceName: "unicode-case-folding",
281
+ name: "unicode-case-folding",
282
+ version: "1.1.1"
283
+ }
284
+ ],
285
+ fileRoots: [
286
+ "apps/server/src/storage",
287
+ "apps/server/src/report-staging",
288
+ "apps/server/src/module-host/durable-storage-filesystem-restart.test.ts",
289
+ "apps/server/src/module-host/durable-storage-write.test.ts",
290
+ "apps/server/src/module-host/report-staging-port.ts",
291
+ "apps/server/src/module-host/route-installer.test.ts",
292
+ "apps/server/src/module-host/route-installer.test-fixture.ts",
293
+ "apps/server/src/module-host/storage-authorization-binding.test.ts",
294
+ "apps/server/src/module-host/storage-port.test.ts",
295
+ "apps/server/src/module-host/storage-restart-fixture.test-support.ts",
296
+ "apps/server/src/module-host/storage-restart-postgres.integration.test.ts",
297
+ "apps/server/src/module-host/storage-scope-drift-http.test.ts",
298
+ "apps/server/src/module-host/storage-stream-route.test.ts"
299
+ ],
300
+ documentation: [
301
+ "docs/architecture/object-storage.md",
302
+ "docs/architecture/report-staging.md"
303
+ ],
304
+ schemaFiles: [
305
+ "packages/database/src/schema/file-storage.ts",
306
+ "packages/database/src/schema/report-staging.ts"
307
+ ],
308
+ databaseTables: [
309
+ "file_upload_sessions",
310
+ "file_upload_parts",
311
+ "file_metadata",
312
+ "report_staging_groups",
313
+ "report_staging_sources",
314
+ "report_staging_entries",
315
+ "report_staging_read_leases",
316
+ "report_staging_claims"
317
+ ]
318
+ };
319
+
242
320
  // src/optional-module-distribution.ts
243
321
  var optionalModuleManifests = [
322
+ storageOptionalModule,
244
323
  {
245
- ...module("system.storage", "\u6587\u4EF6\u5B58\u50A8", "\u4E0A\u4F20\u3001\u4E0B\u8F7D\u548C\u5BF9\u8C61\u751F\u547D\u5468\u671F\u3002", [
246
- "system",
247
- "system.settings"
248
- ]),
249
- runtimeActivation: "physical-only",
250
- fileRoots: [
251
- "apps/server/src/storage",
252
- "apps/server/src/module-host/route-installer.test.ts",
253
- "apps/server/src/module-host/storage-port.test.ts"
254
- ],
255
- documentation: ["docs/architecture/object-storage.md"],
256
- schemaFiles: ["packages/database/src/schema/file-storage.ts"],
257
- databaseTables: [
258
- "file_upload_sessions",
259
- "file_upload_parts",
260
- "file_metadata"
261
- ]
262
- },
263
- {
264
- ...module("system.agent", "Agent Tool", "\u53D7\u63A7 Agent \u5DE5\u5177\u5BBF\u4E3B\u3002", [
324
+ ...optionalModule("system.agent", "Agent Tool", "\u53D7\u63A7 Agent \u5DE5\u5177\u5BBF\u4E3B\u3002", [
265
325
  "system",
266
326
  "system.audit",
267
327
  "system.storage",
@@ -287,7 +347,12 @@ var optionalModuleManifests = [
287
347
  "apps/embedding-server",
288
348
  "apps/server/src/agent",
289
349
  "apps/server/src/ai-runtime-report",
350
+ "apps/server/src/ai-runtime-readiness",
351
+ "apps/server/src/app/ai-screenshot-intake-binding.ts",
352
+ "apps/server/src/app/document-output-artifact-bindings.ts",
353
+ "apps/server/src/app/speech-output-artifact-bindings.ts",
290
354
  "apps/server/src/ai-artifact",
355
+ "apps/server/src/ai-output-artifact",
291
356
  "apps/server/src/document",
292
357
  "apps/server/src/speech",
293
358
  "apps/server/src/embedding",
@@ -298,6 +363,7 @@ var optionalModuleManifests = [
298
363
  "apps/server/src/module-host/ai-operation-port.test.ts",
299
364
  "apps/server/src/module-host/tool-handlers.ts",
300
365
  "apps/server/src/module-host/tool-handlers.test.ts",
366
+ "apps/server/src/module-host/module-secret-tool-boundary.test.ts",
301
367
  "apps/web/src/pages/system/AiRuntimePage.vue",
302
368
  "apps/web/src/pages/system/ai-runtime-presenter.ts",
303
369
  "apps/web/src/pages/system/ai-runtime-presenter.webtest.ts",
@@ -308,9 +374,13 @@ var optionalModuleManifests = [
308
374
  "apps/web/src/services/ai-runtime-api.webtest.ts",
309
375
  "docker-compose.agent-debug.yml",
310
376
  "scripts/dev-adk-web.ts",
377
+ "scripts/provision-speech-readiness.ts",
311
378
  "packages/modules/src/system-agent-tools.ts",
312
379
  "packages/database/src/agent-runtime-schema.test.ts",
313
- "packages/shared/src/ai-runtime-report.ts"
380
+ "packages/database/src/ai-output-artifacts.test.ts",
381
+ "packages/shared/src/ai-runtime-report.ts",
382
+ "packages/shared/src/screenshot-context-digest.ts",
383
+ "packages/shared/src/screenshot-context-digest.test.ts"
314
384
  ],
315
385
  documentation: [
316
386
  "docs/architecture/ai-runtime.md",
@@ -328,22 +398,27 @@ var optionalModuleManifests = [
328
398
  "docs/platform/speech-ai-runtime.md",
329
399
  "docs/platform/embedding-ai-runtime.md"
330
400
  ],
331
- schemaFiles: ["packages/database/src/schema/agent-runtime.ts"],
401
+ schemaFiles: [
402
+ "packages/database/src/schema/agent-runtime.ts",
403
+ "packages/database/src/schema/embedding-runtime.ts",
404
+ "packages/database/src/schema/ai-output-artifacts.ts"
405
+ ],
332
406
  databaseTables: [
333
407
  "agent_operation_releases",
334
408
  "agent_runtime_runs",
335
409
  "agent_runtime_events",
336
410
  "agent_evaluation_results",
337
411
  "agent_run_bindings",
412
+ "agent_screenshot_intakes",
338
413
  "agent_runtime_report_runs",
339
- "agent_runtime_report_attempts"
414
+ "agent_runtime_report_attempts",
415
+ "embedding_run_bindings",
416
+ "ai_output_artifact_scopes",
417
+ "ai_output_artifacts"
340
418
  ]
341
419
  },
342
420
  {
343
- ...module("system.scheduler", "\u4EFB\u52A1\u8C03\u5EA6", "\u4EFB\u52A1\u3001\u91CD\u8BD5\u3001\u5386\u53F2\u548C\u6062\u590D\u3002", [
344
- "system",
345
- "system.audit"
346
- ]),
421
+ ...optionalModule("system.scheduler", "\u4EFB\u52A1\u8C03\u5EA6", "\u4EFB\u52A1\u3001\u91CD\u8BD5\u3001\u5386\u53F2\u548C\u6062\u590D\u3002", ["system", "system.audit"]),
347
422
  fileRoots: [
348
423
  "apps/server/src/scheduler",
349
424
  "apps/server/src/jobs",
@@ -352,6 +427,7 @@ var optionalModuleManifests = [
352
427
  "apps/server/src/module-host/durable-context.test.ts",
353
428
  "apps/server/src/module-host/durable-context-guard.test.ts",
354
429
  "apps/server/src/module-host/durable-context-unavailable.test.ts",
430
+ "apps/server/src/module-host/module-secret-durable.test.ts",
355
431
  "apps/server/src/module-host/job-port.test.ts",
356
432
  "apps/server/src/module-host/task-definitions.ts",
357
433
  "packages/database/src/schema-durable-recovery.test.ts",
@@ -386,7 +462,7 @@ var optionalModuleManifests = [
386
462
  ]
387
463
  },
388
464
  {
389
- ...module("system.notification", "\u7AD9\u5185\u901A\u77E5", "\u901A\u77E5\u5B9A\u5411\u4E0E\u5B9A\u65F6\u53D1\u5E03\u3001\u7528\u6237\u504F\u597D\u3001\u5916\u90E8\u6E20\u9053\u6295\u9012\u3001\u4FEE\u6539\u5386\u53F2\u3001\u9605\u8BFB\u3001\u6536\u85CF\u548C\u5F52\u6863\u3002", ["system", "system.identity", "system.scheduler"]),
465
+ ...optionalModule("system.notification", "\u7AD9\u5185\u901A\u77E5", "\u901A\u77E5\u5B9A\u5411\u4E0E\u5B9A\u65F6\u53D1\u5E03\u3001\u7528\u6237\u504F\u597D\u3001\u5916\u90E8\u6E20\u9053\u6295\u9012\u3001\u4FEE\u6539\u5386\u53F2\u3001\u9605\u8BFB\u3001\u6536\u85CF\u548C\u5F52\u6863\u3002", ["system", "system.identity", "system.scheduler"]),
390
466
  registryDependencies: [
391
467
  {
392
468
  sourceName: "nodemailer",
@@ -431,12 +507,7 @@ var optionalModuleManifests = [
431
507
  ]
432
508
  },
433
509
  {
434
- ...module("system.workflow", "\u5BA1\u6279\u5DE5\u4F5C\u6D41", "\u5BA1\u6279\u3001\u8F6C\u4EA4\u3001\u8D85\u65F6\u548C\u8865\u507F\u3002", [
435
- "system",
436
- "system.identity",
437
- "system.notification",
438
- "system.scheduler"
439
- ]),
510
+ ...optionalModule("system.workflow", "\u5BA1\u6279\u5DE5\u4F5C\u6D41", "\u5BA1\u6279\u3001\u8F6C\u4EA4\u3001\u8D85\u65F6\u548C\u8865\u507F\u3002", ["system", "system.identity", "system.notification", "system.scheduler"]),
440
511
  fileRoots: [
441
512
  "apps/server/src/workflow",
442
513
  "packages/database/src/schema-workflow-notification.test.ts"
@@ -446,11 +517,7 @@ var optionalModuleManifests = [
446
517
  databaseTables: ["workflow_work_items", "workflow_transitions"]
447
518
  },
448
519
  {
449
- ...module("system.bulk-data", "\u6279\u91CF\u6570\u636E", "\u6279\u91CF\u5BFC\u5165\u5BFC\u51FA\u4E0E\u7ED3\u679C\u7559\u5B58\u3002", [
450
- "system",
451
- "system.storage",
452
- "system.scheduler"
453
- ]),
520
+ ...optionalModule("system.bulk-data", "\u6279\u91CF\u6570\u636E", "\u6279\u91CF\u5BFC\u5165\u5BFC\u51FA\u4E0E\u7ED3\u679C\u7559\u5B58\u3002", ["system", "system.storage", "system.scheduler"]),
454
521
  fileRoots: [
455
522
  "apps/server/src/bulk-data",
456
523
  "apps/server/src/jobs/legacy-adapter.integration.test.ts",
@@ -465,9 +532,7 @@ var optionalModuleManifests = [
465
532
  databaseTables: ["bulk_data_jobs", "bulk_data_artifacts"]
466
533
  },
467
534
  {
468
- ...module("system.search", "\u5E73\u53F0\u641C\u7D22", "\u6743\u9650\u611F\u77E5\u641C\u7D22\u4E0E Provider \u805A\u5408\u3002", [
469
- "system"
470
- ]),
535
+ ...optionalModule("system.search", "\u5E73\u53F0\u641C\u7D22", "\u6743\u9650\u611F\u77E5\u641C\u7D22\u4E0E Provider \u805A\u5408\u3002", ["system"]),
471
536
  fileRoots: [
472
537
  "apps/server/src/search",
473
538
  "apps/server/src/module-host/search-providers.ts",
@@ -480,7 +545,7 @@ var optionalModuleManifests = [
480
545
  documentation: ["docs/architecture/search-provider-protocol.md"]
481
546
  },
482
547
  {
483
- ...module("system.data-governance", "\u6570\u636E\u6CBB\u7406", "\u654F\u611F\u5B57\u6BB5\u3001\u660E\u6587\u8BBF\u95EE\u548C\u6CBB\u7406\u5BFC\u51FA\u3002", [
548
+ ...optionalModule("system.data-governance", "\u6570\u636E\u6CBB\u7406", "\u654F\u611F\u5B57\u6BB5\u3001\u660E\u6587\u8BBF\u95EE\u548C\u6CBB\u7406\u5BFC\u51FA\u3002", [
484
549
  "system",
485
550
  "system.identity",
486
551
  "system.audit",
@@ -506,7 +571,7 @@ var optionalModuleManifests = [
506
571
  databaseTables: ["governed_export_requests"]
507
572
  },
508
573
  {
509
- ...module("work-order", "\u793A\u4F8B\u5DE5\u5355", "\u53EF\u66FF\u6362\u7684\u4E1A\u52A1\u6A21\u5757\u63A5\u5165\u793A\u4F8B\u3002", [
574
+ ...optionalModule("work-order", "\u793A\u4F8B\u5DE5\u5355", "\u53EF\u66FF\u6362\u7684\u4E1A\u52A1\u6A21\u5757\u63A5\u5165\u793A\u4F8B\u3002", [
510
575
  "system",
511
576
  "system.identity",
512
577
  "system.search",
@@ -532,36 +597,6 @@ var optionalModuleManifests = [
532
597
  databaseLineageOwner: "module"
533
598
  }
534
599
  ];
535
- function module(name, label, description, dependencies) {
536
- const selection = "optional";
537
- return {
538
- name,
539
- version: "0.1.0",
540
- windyRange: "^0.5.0",
541
- label,
542
- description,
543
- selection,
544
- runtimeActivation: "toggle",
545
- deploymentInstall: "project-composition-required",
546
- dependencies,
547
- conflicts: [],
548
- runtimePackage: null,
549
- packages: [],
550
- registryDependencies: [],
551
- fileRoots: [],
552
- documentation: [],
553
- schemaFiles: [],
554
- migrationRoots: [],
555
- databaseTables: [],
556
- databaseLineageOwner: "platform",
557
- transientDatabaseTables: [],
558
- databaseStatementTokens: [],
559
- uninstallPolicy: "retain-data",
560
- installRecipe: `module-${name}-install`,
561
- updateRecipes: [`module-${name}-update-0.1.0`],
562
- uninstallRecipe: `module-${name}-uninstall`
563
- };
564
- }
565
600
 
566
601
  // src/module-distribution.ts
567
602
  var requiredModuleNames = ["system", "system.identity"];
@@ -572,10 +607,10 @@ var recommendedModuleNames = [
572
607
  "system.operations"
573
608
  ];
574
609
  var platformModules = [
575
- module2("system", "\u7CFB\u7EDF\u6838\u5FC3", "Admin \u51C6\u5165\u3001Feature \u4E0E\u6570\u636E\u5E93\u57FA\u7EBF\u3002", "required"),
576
- module2("system.identity", "\u8EAB\u4EFD\u4E0E\u6743\u9650", "\u8BA4\u8BC1\u3001\u7528\u6237\u3001\u89D2\u8272\u3001\u7EC4\u7EC7\u548C\u6570\u636E\u8303\u56F4\u3002", "required", ["system"]),
610
+ module("system", "\u7CFB\u7EDF\u6838\u5FC3", "Admin \u51C6\u5165\u3001Feature \u4E0E\u6570\u636E\u5E93\u57FA\u7EBF\u3002", "required"),
611
+ module("system.identity", "\u8EAB\u4EFD\u4E0E\u6743\u9650", "\u8BA4\u8BC1\u3001\u7528\u6237\u3001\u89D2\u8272\u3001\u7EC4\u7EC7\u548C\u6570\u636E\u8303\u56F4\u3002", "required", ["system"]),
577
612
  {
578
- ...module2("system.settings", "\u5E73\u53F0\u8BBE\u7F6E", "\u54C1\u724C\u3001Logo \u4E0E\u6C34\u5370\u3002", "recommended", ["system"]),
613
+ ...module("system.settings", "\u5E73\u53F0\u8BBE\u7F6E", "\u54C1\u724C\u3001Logo \u4E0E\u6C34\u5370\u3002", "recommended", ["system"]),
579
614
  runtimeActivation: "physical-only",
580
615
  fileRoots: [
581
616
  "apps/server/src/settings",
@@ -598,7 +633,7 @@ var platformModules = [
598
633
  ]
599
634
  },
600
635
  {
601
- ...module2("system.configuration", "\u914D\u7F6E\u7248\u672C", "\u7C7B\u578B\u5316\u914D\u7F6E\u3001\u5E94\u7528\u548C\u56DE\u6EDA\u3002", "recommended", ["system"]),
636
+ ...module("system.configuration", "\u914D\u7F6E\u7248\u672C", "\u7C7B\u578B\u5316\u914D\u7F6E\u3001\u5E94\u7528\u548C\u56DE\u6EDA\u3002", "recommended", ["system"]),
602
637
  fileRoots: [
603
638
  "apps/server/src/configuration",
604
639
  "apps/web/src/pages/configuration",
@@ -613,7 +648,7 @@ var platformModules = [
613
648
  ]
614
649
  },
615
650
  {
616
- ...module2("system.license", "\u79BB\u7EBF License", "\u79BB\u7EBF\u9A8C\u7B7E\u3001\u5B89\u88C5\u548C\u9650\u5236\u6001\u3002", "optional", ["system"]),
651
+ ...module("system.license", "\u79BB\u7EBF License", "\u79BB\u7EBF\u9A8C\u7B7E\u3001\u5B89\u88C5\u548C\u9650\u5236\u6001\u3002", "optional", ["system"]),
617
652
  registryDependencies: [
618
653
  {
619
654
  sourceName: "@southwind-ai/license",
@@ -665,7 +700,7 @@ var platformModules = [
665
700
  ]
666
701
  },
667
702
  {
668
- ...module2("system.audit", "\u5BA1\u8BA1\u65E5\u5FD7", "\u5BA1\u8BA1\u67E5\u8BE2\u3001\u53EF\u9760\u5199\u5165\u548C\u6062\u590D\u3002", "recommended", ["system"]),
703
+ ...module("system.audit", "\u5BA1\u8BA1\u65E5\u5FD7", "\u5BA1\u8BA1\u67E5\u8BE2\u3001\u53EF\u9760\u5199\u5165\u548C\u6062\u590D\u3002", "recommended", ["system"]),
669
704
  fileRoots: [
670
705
  "apps/server/src/audit/drizzle-log-store.ts",
671
706
  "apps/server/src/audit/recovery-queue.ts",
@@ -689,7 +724,7 @@ var platformModules = [
689
724
  databaseStatementTokens: ["idx_audit_logs_"]
690
725
  },
691
726
  {
692
- ...module2("system.operations", "\u8FD0\u7EF4\u76D1\u63A7", "\u670D\u52A1\u3001\u6570\u636E\u5E93\u3001\u7F13\u5B58\u3001\u78C1\u76D8\u548C\u4F1A\u8BDD\u76D1\u63A7\u3002", "recommended", ["system", "system.configuration"]),
727
+ ...module("system.operations", "\u8FD0\u7EF4\u76D1\u63A7", "\u670D\u52A1\u3001\u6570\u636E\u5E93\u3001\u7F13\u5B58\u3001\u78C1\u76D8\u548C\u4F1A\u8BDD\u76D1\u63A7\u3002", "recommended", ["system", "system.configuration"]),
693
728
  fileRoots: [
694
729
  "apps/server/src/system/operation-monitoring.ts",
695
730
  "apps/server/src/system/operation-monitoring.test.ts",
@@ -765,7 +800,7 @@ function selectedModuleManifests(names) {
765
800
  }
766
801
  return moduleDistributionCatalog.filter(({ name }) => selected.has(name));
767
802
  }
768
- function module2(name, label, description, selection, dependencies = []) {
803
+ function module(name, label, description, selection, dependencies = []) {
769
804
  return {
770
805
  name,
771
806
  version: "0.1.0",
@@ -912,9 +947,10 @@ class CommandExecutionError extends Error {
912
947
  this.name = "CommandExecutionError";
913
948
  }
914
949
  }
915
- async function runCommand(command, args, cwd) {
950
+ async function runCommand(command, args, cwd, options = {}) {
916
951
  const child = Bun.spawn([command, ...args], {
917
952
  cwd,
953
+ env: options.env ?? process.env,
918
954
  stderr: "inherit",
919
955
  stdin: "inherit",
920
956
  stdout: "inherit"
@@ -1059,7 +1095,9 @@ var managedSecretKeys = [
1059
1095
  "AGENT_SERVER_INTERNAL_TOKEN",
1060
1096
  "ADK_DEBUG_PLATFORM_TOKEN",
1061
1097
  "AGENT_RUN_ENCRYPTION_SECRET",
1062
- "AI_ARTIFACT_ENCRYPTION_SECRET"
1098
+ "AI_ARTIFACT_ENCRYPTION_SECRET",
1099
+ "EMBEDDING_RUN_ENCRYPTION_SECRET",
1100
+ "AI_OUTPUT_ARTIFACT_REFERENCE_SECRET"
1063
1101
  ];
1064
1102
  async function initializeLocalEnvironment(projectRoot, generateSecret = defaultSecret) {
1065
1103
  const target = join(projectRoot, ".env");
@@ -1083,6 +1121,12 @@ async function initializeLocalEnvironment(projectRoot, generateSecret = defaultS
1083
1121
  if (/^AI_ARTIFACT_ENCRYPTION_SECRET=[ \t\r]*$/m.test(content)) {
1084
1122
  content = setEmptyVariable(content, "AI_ARTIFACT_ENCRYPTION_SECRET", generateSecret());
1085
1123
  }
1124
+ if (/^EMBEDDING_RUN_ENCRYPTION_SECRET=[ \t\r]*$/m.test(content)) {
1125
+ content = setEmptyVariable(content, "EMBEDDING_RUN_ENCRYPTION_SECRET", generateSecret());
1126
+ }
1127
+ if (/^AI_OUTPUT_ARTIFACT_REFERENCE_SECRET=[ \t\r]*$/m.test(content)) {
1128
+ content = setEmptyVariable(content, "AI_OUTPUT_ARTIFACT_REFERENCE_SECRET", generateSecret());
1129
+ }
1086
1130
  let handle;
1087
1131
  try {
1088
1132
  handle = await open(target, "wx", 384);
@@ -2584,8 +2628,9 @@ function collapseRemovalRoots(paths) {
2584
2628
  }
2585
2629
  async function stripModuleBlocks(root, selected) {
2586
2630
  for (const path of await collectFiles2(root)) {
2587
- if (!textExtensions.has(extname(path)))
2631
+ if (basename3(path) !== "Dockerfile" && !textExtensions.has(extname(path))) {
2588
2632
  continue;
2633
+ }
2589
2634
  const source = await readFile6(path, "utf8");
2590
2635
  if (!source.includes("@windy-module"))
2591
2636
  continue;
@@ -2762,6 +2807,31 @@ Skill \u4ECD\u53EF\u7528\u4E8E\u666E\u901A\u4E1A\u52A1\u6A21\u5757\u5F00\u53D1\u
2762
2807
  `;
2763
2808
  }
2764
2809
 
2810
+ // src/runtime-profile-opensearch.ts
2811
+ var openSearchComposeService = ` opensearch:
2812
+ profiles: ["search"]
2813
+ image: opensearchproject/opensearch:2.19.3
2814
+ environment:
2815
+ discovery.type: single-node
2816
+ DISABLE_INSTALL_DEMO_CONFIG: "true"
2817
+ DISABLE_SECURITY_PLUGIN: "true"
2818
+ OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m"
2819
+ ports:
2820
+ - "127.0.0.1:19200:9200"
2821
+ volumes:
2822
+ - opensearch-data:/usr/share/opensearch/data
2823
+ healthcheck:
2824
+ test:
2825
+ [
2826
+ "CMD-SHELL",
2827
+ "curl -fsS http://127.0.0.1:9200/_cluster/health?wait_for_status=yellow",
2828
+ ]
2829
+ interval: 10s
2830
+ timeout: 5s
2831
+ retries: 12
2832
+
2833
+ `;
2834
+
2765
2835
  // src/runtime-profile-files.ts
2766
2836
  var starterComposeBase = `services:
2767
2837
  postgres:
@@ -2804,6 +2874,7 @@ var starterComposeBase = `services:
2804
2874
  DATABASE_URL: postgresql://windy:\${POSTGRES_PASSWORD}@postgres:5432/windy
2805
2875
  WINDY_BOOTSTRAP_ADMIN_PASSWORD: \${WINDY_BOOTSTRAP_ADMIN_PASSWORD:?\u8BF7\u5728 .env \u4E2D\u8BBE\u7F6E\u7BA1\u7406\u5458\u521D\u59CB\u5BC6\u7801}
2806
2876
  WINDY_AUDIT_QUEUE_FILE: /app/data/audit/recovery-queue.json
2877
+ __STORAGE_SERVER_ENV__
2807
2878
  WINDY_CONTAINERIZED: "1"
2808
2879
  BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD: "true"
2809
2880
  WINDY_SYSTEM_USAGE_PATHS: /app/data/audit
@@ -2815,6 +2886,9 @@ __TOOL_SANDBOX_SERVER_ENV__
2815
2886
  AI_ARTIFACT_URL: http://server:9747/api/internal/ai/artifacts
2816
2887
  AI_ARTIFACT_ENCRYPTION_SECRET: \${AI_ARTIFACT_ENCRYPTION_SECRET:-}
2817
2888
  DOCUMENT_SERVER_URL: \${DOCUMENT_SERVER_URL:-}
2889
+ AI_OUTPUT_ARTIFACT_REFERENCE_SECRET: \${AI_OUTPUT_ARTIFACT_REFERENCE_SECRET:-}
2890
+ DOCUMENT_OUTPUT_ARTIFACT_SINK_IDENTITY: \${DOCUMENT_OUTPUT_ARTIFACT_SINK_IDENTITY:-}
2891
+ DOCUMENT_OUTPUT_ARTIFACT_SINK_RELEASE_DIGEST: \${DOCUMENT_OUTPUT_ARTIFACT_SINK_RELEASE_DIGEST:-}
2818
2892
  SPEECH_SERVER_URL: \${SPEECH_SERVER_URL:-}
2819
2893
  EMBEDDING_SERVER_URL: \${EMBEDDING_SERVER_URL:-}
2820
2894
  __OPENSEARCH_SERVER_ENV__
@@ -2824,6 +2898,7 @@ __OPENSEARCH_SERVER_ENV__
2824
2898
  - ./apps/server:/app/apps/server
2825
2899
  - ./packages:/app/packages
2826
2900
  - server-audit-data:/app/data/audit
2901
+ __STORAGE_SERVER_VOLUME__
2827
2902
  __TOOL_SANDBOX_SERVER_VOLUME__
2828
2903
  depends_on:
2829
2904
  migrate:
@@ -2864,29 +2939,6 @@ volumes:
2864
2939
  postgres-data:
2865
2940
  server-audit-data:
2866
2941
  __OPTIONAL_VOLUMES__
2867
- `;
2868
- var openSearchComposeService = ` opensearch:
2869
- profiles: ["search"]
2870
- image: opensearchproject/opensearch:2.19.3
2871
- environment:
2872
- discovery.type: single-node
2873
- DISABLE_INSTALL_DEMO_CONFIG: "true"
2874
- DISABLE_SECURITY_PLUGIN: "true"
2875
- OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m"
2876
- ports:
2877
- - "127.0.0.1:19200:9200"
2878
- volumes:
2879
- - opensearch-data:/usr/share/opensearch/data
2880
- healthcheck:
2881
- test:
2882
- [
2883
- "CMD-SHELL",
2884
- "curl -fsS http://127.0.0.1:9200/_cluster/health?wait_for_status=yellow",
2885
- ]
2886
- interval: 10s
2887
- timeout: 5s
2888
- retries: 12
2889
-
2890
2942
  `;
2891
2943
  var agentComposeService = ` tool-sandbox-init:
2892
2944
  profiles: ["agent"]
@@ -2955,8 +3007,17 @@ var agentComposeService = ` tool-sandbox-init:
2955
3007
  AI_PROVIDER_CONNECT_TIMEOUT_MS: \${AI_PROVIDER_CONNECT_TIMEOUT_MS:-5000}
2956
3008
  AI_PROVIDER_REQUEST_TIMEOUT_MS: \${AI_PROVIDER_REQUEST_TIMEOUT_MS:-60000}
2957
3009
  AI_PROVIDER_MAX_RESPONSE_BYTES: \${AI_PROVIDER_MAX_RESPONSE_BYTES:-2097152}
3010
+ AI_PROVIDER_MAX_DURATION_SECONDS: \${AI_PROVIDER_MAX_DURATION_SECONDS:-300}
3011
+ AI_PROVIDER_MAX_INPUT_BYTES: \${AI_PROVIDER_MAX_INPUT_BYTES:-67108864}
3012
+ AI_PROVIDER_MAX_ARTIFACTS: \${AI_PROVIDER_MAX_ARTIFACTS:-16}
3013
+ AI_PROVIDER_MAX_PIXELS_PER_ARTIFACT: \${AI_PROVIDER_MAX_PIXELS_PER_ARTIFACT:-100000000}
2958
3014
  AI_PROVIDER_CAPABILITIES: \${AI_PROVIDER_CAPABILITIES:-text-generation}
2959
3015
  AI_PROVIDER_INPUT_MODALITIES: \${AI_PROVIDER_INPUT_MODALITIES:-text}
3016
+ AI_PROVIDER_DEPLOYMENT_IDENTITY: \${AI_PROVIDER_DEPLOYMENT_IDENTITY:-}
3017
+ AI_PROVIDER_RELEASE_DIGEST: \${AI_PROVIDER_RELEASE_DIGEST:-}
3018
+ AI_PROVIDER_READINESS_TTL_SECONDS: \${AI_PROVIDER_READINESS_TTL_SECONDS:-60}
3019
+ AI_PROVIDER_MAX_CONCURRENT_RUNS: \${AI_PROVIDER_MAX_CONCURRENT_RUNS:-1}
3020
+ AI_PROVIDER_MAX_QUEUE_DEPTH: \${AI_PROVIDER_MAX_QUEUE_DEPTH:-0}
2960
3021
  volumes:
2961
3022
  - agent-run-data:/app/data/agent
2962
3023
  depends_on:
@@ -2974,9 +3035,13 @@ var agentComposeService = ` tool-sandbox-init:
2974
3035
  DOCUMENT_SERVER_INTERNAL_TOKEN: \${AGENT_SERVER_INTERNAL_TOKEN:-}
2975
3036
  DOCUMENT_RUN_STORE_PATH: /app/data/document/runs.sqlite3
2976
3037
  DOCUMENT_ARTIFACT_URL: \${DOCUMENT_ARTIFACT_URL:-http://server:9747/api/internal/ai/artifacts}
3038
+ DOCUMENT_OUTPUT_ARTIFACT_URL: \${DOCUMENT_OUTPUT_ARTIFACT_URL:-http://server:9747/api/internal/ai/output-artifacts}
2977
3039
  DOCUMENT_ADAPTER_URL: \${DOCUMENT_ADAPTER_URL:-}
2978
3040
  DOCUMENT_ADAPTER_TOKEN: \${DOCUMENT_ADAPTER_TOKEN:-}
2979
3041
  DOCUMENT_DEPLOYMENT_KEY: \${DOCUMENT_DEPLOYMENT_KEY:-}
3042
+ DOCUMENT_DEPLOYMENT_IDENTITY: \${DOCUMENT_DEPLOYMENT_IDENTITY:-}
3043
+ DOCUMENT_RELEASE_DIGEST: \${DOCUMENT_RELEASE_DIGEST:-}
3044
+ DOCUMENT_OFFERS_DIGEST: \${DOCUMENT_OFFERS_DIGEST:-}
2980
3045
  DOCUMENT_ADAPTER_CAPABILITIES: \${DOCUMENT_ADAPTER_CAPABILITIES:-document.ocr,document.layout,document.table}
2981
3046
  DOCUMENT_MAX_UNITS: \${DOCUMENT_MAX_UNITS:-500}
2982
3047
  volumes:
@@ -2994,12 +3059,23 @@ var agentComposeService = ` tool-sandbox-init:
2994
3059
  SPEECH_SERVER_INTERNAL_TOKEN: \${AGENT_SERVER_INTERNAL_TOKEN:-}
2995
3060
  SPEECH_RUN_STORE_PATH: /app/data/speech/runs.sqlite3
2996
3061
  SPEECH_ARTIFACT_URL: \${SPEECH_ARTIFACT_URL:-http://server:9747/api/internal/ai/artifacts}
3062
+ SPEECH_OUTPUT_ARTIFACT_URL: \${SPEECH_OUTPUT_ARTIFACT_URL:-http://server:9747/api/internal/ai/output-artifacts}
2997
3063
  SPEECH_ADAPTER_URL: \${SPEECH_ADAPTER_URL:-}
2998
3064
  SPEECH_ADAPTER_TOKEN: \${SPEECH_ADAPTER_TOKEN:-}
2999
3065
  SPEECH_DEPLOYMENT_KEY: \${SPEECH_DEPLOYMENT_KEY:-}
3000
- SPEECH_ADAPTER_CAPABILITIES: \${SPEECH_ADAPTER_CAPABILITIES:-speech.transcribe.batch,speech.normalize,speech.vad,speech.timestamps}
3066
+ SPEECH_DEPLOYMENT_IDENTITY: \${SPEECH_DEPLOYMENT_IDENTITY:-}
3067
+ SPEECH_RELEASE_DIGEST: \${SPEECH_RELEASE_DIGEST:-}
3068
+ SPEECH_OFFERS_DIGEST: \${SPEECH_OFFERS_DIGEST:-}
3069
+ SPEECH_ADAPTER_CAPABILITIES: \${SPEECH_ADAPTER_CAPABILITIES:-speech.transcribe.batch,speech.translate,speech.vad,speech.timestamps}
3001
3070
  SPEECH_MAX_UNITS: \${SPEECH_MAX_UNITS:-100000}
3002
3071
  SPEECH_MAX_MEDIA_DURATION_SECONDS: \${SPEECH_MAX_MEDIA_DURATION_SECONDS:-86400}
3072
+ SPEECH_MAX_INPUT_ARTIFACT_BYTES: \${SPEECH_MAX_INPUT_ARTIFACT_BYTES:-2147483648}
3073
+ SPEECH_MAX_INLINE_OUTPUT_BYTES: \${SPEECH_MAX_INLINE_OUTPUT_BYTES:-67108864}
3074
+ SPEECH_MAX_OUTPUT_ARTIFACT_BYTES: \${SPEECH_MAX_OUTPUT_ARTIFACT_BYTES:-536870912}
3075
+ SPEECH_MAX_CONCURRENT_RUNS: \${SPEECH_MAX_CONCURRENT_RUNS:-1}
3076
+ SPEECH_MAX_QUEUE_DEPTH: \${SPEECH_MAX_QUEUE_DEPTH:-0}
3077
+ SPEECH_READINESS_TIMEOUT_SECONDS: \${SPEECH_READINESS_TIMEOUT_SECONDS:-5}
3078
+ SPEECH_READINESS_TTL_SECONDS: \${SPEECH_READINESS_TTL_SECONDS:-60}
3003
3079
  volumes:
3004
3080
  - speech-run-data:/app/data/speech
3005
3081
  depends_on:
@@ -3014,9 +3090,13 @@ var agentComposeService = ` tool-sandbox-init:
3014
3090
  environment:
3015
3091
  EMBEDDING_SERVER_INTERNAL_TOKEN: \${AGENT_SERVER_INTERNAL_TOKEN:-}
3016
3092
  EMBEDDING_ARTIFACT_URL: \${EMBEDDING_ARTIFACT_URL:-http://server:9747/api/internal/ai/artifacts}
3093
+ EMBEDDING_RUN_ARTIFACT_URL: \${EMBEDDING_RUN_ARTIFACT_URL:-http://server:9747/api/internal/embeddings/runs}
3017
3094
  EMBEDDING_ADAPTER_URL: \${EMBEDDING_ADAPTER_URL:-}
3018
3095
  EMBEDDING_ADAPTER_TOKEN: \${EMBEDDING_ADAPTER_TOKEN:-}
3019
3096
  EMBEDDING_DEPLOYMENT_KEY: \${EMBEDDING_DEPLOYMENT_KEY:-}
3097
+ EMBEDDING_DEPLOYMENT_IDENTITY: \${EMBEDDING_DEPLOYMENT_IDENTITY:-}
3098
+ EMBEDDING_RELEASE_DIGEST: \${EMBEDDING_RELEASE_DIGEST:-}
3099
+ EMBEDDING_OFFERS_DIGEST: \${EMBEDDING_OFFERS_DIGEST:-}
3020
3100
  EMBEDDING_DEPLOYMENT_ALIAS: \${EMBEDDING_DEPLOYMENT_ALIAS:-}
3021
3101
  EMBEDDING_MODEL: \${EMBEDDING_MODEL:-}
3022
3102
  EMBEDDING_MODEL_VERSION: \${EMBEDDING_MODEL_VERSION:-}
@@ -3024,15 +3104,28 @@ var agentComposeService = ` tool-sandbox-init:
3024
3104
  EMBEDDING_NORMALIZED: \${EMBEDDING_NORMALIZED:-true}
3025
3105
  EMBEDDING_CAPABILITIES: \${EMBEDDING_CAPABILITIES:-embedding.text}
3026
3106
  EMBEDDING_MAX_UNITS: \${EMBEDDING_MAX_UNITS:-256}
3107
+ EMBEDDING_MAX_DURATION_SECONDS: \${EMBEDDING_MAX_DURATION_SECONDS:-600}
3108
+ EMBEDDING_MAX_INPUT_BYTES: \${EMBEDDING_MAX_INPUT_BYTES:-268435456}
3109
+ EMBEDDING_MAX_OUTPUT_BYTES: \${EMBEDDING_MAX_OUTPUT_BYTES:-268435456}
3110
+ EMBEDDING_MAX_ARTIFACTS: \${EMBEDDING_MAX_ARTIFACTS:-16}
3111
+ EMBEDDING_MAX_PIXELS_PER_ARTIFACT: \${EMBEDDING_MAX_PIXELS_PER_ARTIFACT:-100000000}
3112
+ EMBEDDING_RUN_ENCRYPTION_SECRET: \${EMBEDDING_RUN_ENCRYPTION_SECRET:-}
3113
+ EMBEDDING_MAX_CONCURRENT_RUNS: \${EMBEDDING_MAX_CONCURRENT_RUNS:-1}
3114
+ EMBEDDING_MAX_QUEUE_DEPTH: \${EMBEDDING_MAX_QUEUE_DEPTH:-0}
3115
+ EMBEDDING_READINESS_TIMEOUT_SECONDS: \${EMBEDDING_READINESS_TIMEOUT_SECONDS:-5}
3116
+ EMBEDDING_READINESS_TTL_SECONDS: \${EMBEDDING_READINESS_TTL_SECONDS:-60}
3117
+ EMBEDDING_RUN_TERMINAL_TTL_SECONDS: \${EMBEDDING_RUN_TERMINAL_TTL_SECONDS:-604800}
3118
+ volumes:
3119
+ - embedding-run-data:/app/data/embedding
3027
3120
  depends_on:
3028
3121
  server:
3029
3122
  condition: service_started
3030
3123
 
3031
3124
  `;
3032
- function starterComposeFor(includeAgent, includeSearch = true) {
3125
+ function starterComposeFor(includeAgent, includeSearch = true, includeStorage = true) {
3033
3126
  return starterComposeBase.replace(` web:
3034
3127
  `, `${includeAgent ? agentComposeService : ""} web:
3035
- `).replace("__TOOL_SANDBOX_SERVER_ENV__", includeAgent ? " TOOL_SANDBOX_SOCKET: /run/windy-tool-sandbox/worker.sock" : "").replace("__TOOL_SANDBOX_SERVER_VOLUME__", includeAgent ? " - tool-sandbox-ipc:/run/windy-tool-sandbox" : "").replace("__OPENSEARCH_SERVER_ENV__", includeSearch ? ` OPENSEARCH_URL: \${OPENSEARCH_URL:-}
3128
+ `).replace("__TOOL_SANDBOX_SERVER_ENV__", includeAgent ? " TOOL_SANDBOX_SOCKET: /run/windy-tool-sandbox/worker.sock" : "").replace("__TOOL_SANDBOX_SERVER_VOLUME__", includeAgent ? " - tool-sandbox-ipc:/run/windy-tool-sandbox" : "").replace("__STORAGE_SERVER_ENV__", includeStorage ? " WINDY_STORAGE_ROOT: /app/data/storage" : "").replace("__STORAGE_SERVER_VOLUME__", includeStorage ? " - server-storage-data:/app/data/storage" : "").replace("__OPENSEARCH_SERVER_ENV__", includeSearch ? ` OPENSEARCH_URL: \${OPENSEARCH_URL:-}
3036
3129
  OPENSEARCH_USERNAME: \${OPENSEARCH_USERNAME:-}
3037
3130
  OPENSEARCH_PASSWORD: \${OPENSEARCH_PASSWORD:-}
3038
3131
  OPENSEARCH_WORK_ORDER_INDEX: \${OPENSEARCH_WORK_ORDER_INDEX:-windy-work-orders-v1}` : "").replace("__OPENSEARCH_SERVICE__", includeSearch ? openSearchComposeService : "").replace("__OPTIONAL_VOLUMES__", [
@@ -3040,16 +3133,23 @@ function starterComposeFor(includeAgent, includeSearch = true) {
3040
3133
  includeAgent ? " tool-sandbox-ipc:" : "",
3041
3134
  includeAgent ? " document-run-data:" : "",
3042
3135
  includeAgent ? " speech-run-data:" : "",
3043
- includeSearch ? " opensearch-data:" : ""
3136
+ includeAgent ? " embedding-run-data:" : "",
3137
+ includeSearch ? " opensearch-data:" : "",
3138
+ includeStorage ? " server-storage-data:" : ""
3044
3139
  ].filter(Boolean).join(`
3045
3140
  `));
3046
3141
  }
3047
3142
  var starterCompose = starterComposeFor(true);
3048
3143
  // src/runtime-environment-example.ts
3049
- function environmentExample(includeExample, includeAgent = true, includeSearch = true) {
3144
+ function environmentExample(includeExample, includeAgent = true, includeSearch = true, includeStorage = true) {
3050
3145
  return `# \u590D\u5236\u4E3A .env \u540E\u586B\u5199\u3002\u4E0D\u8981\u63D0\u4EA4\u771F\u5B9E\u5BC6\u7801\u3002
3051
3146
  POSTGRES_PASSWORD=
3052
3147
  WINDY_BOOTSTRAP_ADMIN_PASSWORD=
3148
+ ${includeStorage ? `
3149
+ # Compose \u9ED8\u8BA4\u628A Storage \u4E0E\u62A5\u544A\u6682\u5B58\u6301\u4E45\u5316\u5230 /app/data/storage\u3002
3150
+ # \u5982\u9700\u72EC\u7ACB\u6302\u8F7D\u62A5\u544A\u6682\u5B58\u76EE\u5F55\uFF0C\u8BF7\u540C\u65F6\u4FEE\u6539 Compose volume\u3002
3151
+ # WINDY_REPORT_STAGING_ROOT=/app/data/storage/report-staging
3152
+ ` : ""}
3053
3153
  ${includeAgent ? `
3054
3154
  # Agent profile \u4EC5\u7531\u670D\u52A1\u7AEF Agent Runtime \u8BFB\u53D6\uFF1B\u4E0D\u8981\u4F7F\u7528 VITE_ \u524D\u7F00\u3002
3055
3155
  # ADK Web \u901A\u8FC7 canonical Run API \u8C03\u8BD5\u9879\u76EE\u9009\u62E9\u7684\u771F\u5B9E\u6587\u672C Operation\uFF1B\u8C03\u8BD5 Token
@@ -3066,24 +3166,46 @@ OTEL_EXPORTER_OTLP_HEADERS=
3066
3166
  AI_ARTIFACT_ENCRYPTION_SECRET=
3067
3167
  DOCUMENT_SERVER_URL=
3068
3168
  DOCUMENT_ARTIFACT_URL=
3169
+ DOCUMENT_OUTPUT_ARTIFACT_URL=
3069
3170
  DOCUMENT_ADAPTER_URL=
3070
3171
  DOCUMENT_ADAPTER_TOKEN=
3071
3172
  DOCUMENT_DEPLOYMENT_KEY=
3173
+ DOCUMENT_DEPLOYMENT_IDENTITY=
3174
+ DOCUMENT_RELEASE_DIGEST=
3175
+ DOCUMENT_OFFERS_DIGEST=
3176
+ AI_OUTPUT_ARTIFACT_REFERENCE_SECRET=
3177
+ DOCUMENT_OUTPUT_ARTIFACT_SINK_IDENTITY=
3178
+ DOCUMENT_OUTPUT_ARTIFACT_SINK_RELEASE_DIGEST=
3072
3179
  # DOCUMENT_ADAPTER_CAPABILITIES=document.ocr,document.layout,document.table
3073
3180
  # DOCUMENT_MAX_UNITS=500
3074
3181
  SPEECH_SERVER_URL=
3075
3182
  SPEECH_ARTIFACT_URL=
3183
+ SPEECH_OUTPUT_ARTIFACT_URL=
3076
3184
  SPEECH_ADAPTER_URL=
3077
3185
  SPEECH_ADAPTER_TOKEN=
3078
3186
  SPEECH_DEPLOYMENT_KEY=
3079
- # SPEECH_ADAPTER_CAPABILITIES=speech.transcribe.batch,speech.normalize,speech.vad,speech.timestamps
3187
+ SPEECH_DEPLOYMENT_IDENTITY=
3188
+ SPEECH_RELEASE_DIGEST=
3189
+ SPEECH_OFFERS_DIGEST=
3190
+ # SPEECH_ADAPTER_CAPABILITIES=speech.transcribe.batch,speech.translate,speech.vad,speech.timestamps
3080
3191
  # SPEECH_MAX_UNITS=100000
3081
3192
  # SPEECH_MAX_MEDIA_DURATION_SECONDS=86400
3193
+ # SPEECH_MAX_INPUT_ARTIFACT_BYTES=2147483648
3194
+ # SPEECH_MAX_INLINE_OUTPUT_BYTES=67108864
3195
+ # SPEECH_MAX_OUTPUT_ARTIFACT_BYTES=536870912
3196
+ # SPEECH_MAX_CONCURRENT_RUNS=1
3197
+ # SPEECH_MAX_QUEUE_DEPTH=0
3198
+ # SPEECH_READINESS_TIMEOUT_SECONDS=5
3199
+ # SPEECH_READINESS_TTL_SECONDS=60
3082
3200
  EMBEDDING_SERVER_URL=
3083
3201
  EMBEDDING_ARTIFACT_URL=
3202
+ EMBEDDING_RUN_ARTIFACT_URL=
3084
3203
  EMBEDDING_ADAPTER_URL=
3085
3204
  EMBEDDING_ADAPTER_TOKEN=
3086
3205
  EMBEDDING_DEPLOYMENT_KEY=
3206
+ EMBEDDING_DEPLOYMENT_IDENTITY=
3207
+ EMBEDDING_RELEASE_DIGEST=
3208
+ EMBEDDING_OFFERS_DIGEST=
3087
3209
  EMBEDDING_DEPLOYMENT_ALIAS=
3088
3210
  EMBEDDING_MODEL=
3089
3211
  EMBEDDING_MODEL_VERSION=
@@ -3091,6 +3213,17 @@ EMBEDDING_DIMENSIONS=
3091
3213
  # EMBEDDING_NORMALIZED=true
3092
3214
  # EMBEDDING_CAPABILITIES=embedding.text,embedding.image
3093
3215
  # EMBEDDING_MAX_UNITS=256
3216
+ # EMBEDDING_MAX_DURATION_SECONDS=600
3217
+ # EMBEDDING_MAX_INPUT_BYTES=268435456
3218
+ # EMBEDDING_MAX_OUTPUT_BYTES=268435456
3219
+ # EMBEDDING_MAX_ARTIFACTS=16
3220
+ # EMBEDDING_MAX_PIXELS_PER_ARTIFACT=100000000
3221
+ EMBEDDING_RUN_ENCRYPTION_SECRET=
3222
+ # EMBEDDING_MAX_CONCURRENT_RUNS=1
3223
+ # EMBEDDING_MAX_QUEUE_DEPTH=0
3224
+ # EMBEDDING_READINESS_TIMEOUT_SECONDS=5
3225
+ # EMBEDDING_READINESS_TTL_SECONDS=60
3226
+ # EMBEDDING_RUN_TERMINAL_TTL_SECONDS=604800
3094
3227
  QWEN_API_URL=
3095
3228
  QWEN_API_KEY=
3096
3229
  QWEN_MODEL=
@@ -3098,10 +3231,19 @@ AI_PROVIDER_HTTPS_HOST_ALLOWLIST=
3098
3231
  # VLM Deployment \u793A\u4F8B\uFF1Atext-generation,vision\uFF1B\u8F93\u5165\u6A21\u6001\uFF1Atext,image
3099
3232
  # AI_PROVIDER_CAPABILITIES=text-generation
3100
3233
  # AI_PROVIDER_INPUT_MODALITIES=text
3234
+ # AI_PROVIDER_DEPLOYMENT_IDENTITY=
3235
+ # AI_PROVIDER_RELEASE_DIGEST=
3236
+ # AI_PROVIDER_READINESS_TTL_SECONDS=60
3237
+ # AI_PROVIDER_MAX_CONCURRENT_RUNS=1
3238
+ # AI_PROVIDER_MAX_QUEUE_DEPTH=0
3101
3239
  # AI_PROVIDER_AUDIT_RETENTION_DAYS=90
3102
3240
  # AI_PROVIDER_CONNECT_TIMEOUT_MS=5000
3103
3241
  # AI_PROVIDER_REQUEST_TIMEOUT_MS=60000
3104
3242
  # AI_PROVIDER_MAX_RESPONSE_BYTES=2097152
3243
+ # AI_PROVIDER_MAX_DURATION_SECONDS=300
3244
+ # AI_PROVIDER_MAX_INPUT_BYTES=67108864
3245
+ # AI_PROVIDER_MAX_ARTIFACTS=16
3246
+ # AI_PROVIDER_MAX_PIXELS_PER_ARTIFACT=100000000
3105
3247
  ` : ""}
3106
3248
 
3107
3249
  ${includeSearch ? `# OpenSearch profile \u9ED8\u8BA4\u4E0D\u542F\u52A8\uFF1Bbun run dev:search \u4F1A\u53EA\u5411 Server \u6CE8\u5165\u5BB9\u5668\u5185\u5730\u5740\u3002
@@ -3120,8 +3262,8 @@ OPENSEARCH_PASSWORD=
3120
3262
  ` : ""}
3121
3263
  `;
3122
3264
  }
3123
- // src/project-files.ts
3124
- function starterDocsReadme(includeOfflineLicense = true, includeAgent = true, includeOperations = true) {
3265
+ // src/starter-docs-readme.ts
3266
+ function starterDocsReadme(includeOfflineLicense = true, includeAgent = true, includeOperations = true, includeStorage = true) {
3125
3267
  return `# Windy Starter \u6587\u6863
3126
3268
 
3127
3269
  \u672C\u76EE\u5F55\u53EA\u5305\u542B\u5BA2\u6237\u8FD0\u884C\u9879\u76EE\u9700\u8981\u7684\u5E73\u53F0\u67B6\u6784\u3001\u5F00\u53D1\u63A5\u5165\u548C\u8FD0\u7EF4\u53EF\u89C2\u6D4B\u6027\u6587\u6863\u3002
@@ -3129,17 +3271,20 @@ License \u7B7E\u53D1\u4E2D\u5FC3\u3001\u72EC\u7ACB\u7B7E\u540D\u670D\u52A1\u3001
3129
3271
  \u89C4\u5212\u5C5E\u4E8E\u8F6F\u4EF6\u4F9B\u5E94\u65B9\u63A7\u5236\u9762\uFF0C\u4E0D\u8FDB\u5165\u5BA2\u6237 Starter\u3002
3130
3272
 
3131
3273
  - \u67B6\u6784\uFF1A\u4ECE [Module Manifest \u7EC4\u5408](./architecture/module-manifest-composition.md) \u5F00\u59CB\u3002
3274
+ - \u5916\u90E8\u51ED\u636E\uFF1A[\u6A21\u5757 Secret \u89E3\u6790 Port](./architecture/module-secret-resolution.md)\u3002
3132
3275
  - \u6570\u636E\u5E93\uFF1A\u4E1A\u52A1\u8868\u4F7F\u7528 [Migration Bundle \u4E0E\u72EC\u7ACB Drizzle lineage](./architecture/migration-bundle.md)\u3002
3133
3276
  - \u5E73\u53F0\u5F00\u53D1\uFF1A\u4ECE [\u7CFB\u7EDF CRUD API](./platform/system-crud-api.md) \u548C [CRUD \u751F\u6210\u5668](./development/crud-generator.md) \u5F00\u59CB\u3002
3134
3277
  - Web \u4E1A\u52A1\u9875\u9762\uFF1A[project-owned \u4E1A\u52A1 Web \u8DEF\u7531](./development/business-web-routes.md)\u3002
3135
3278
  - \u90E8\u7F72\u671F\u6A21\u5757\u7BA1\u7406\uFF1A[\u6A21\u5757\u751F\u547D\u5468\u671F](./development/module-lifecycle.md)\u3002
3136
3279
  - \u4E1A\u52A1\u6A21\u5757\u5F00\u53D1\uFF1A[windy-business-module Skill](../.agents/skills/windy-business-module/SKILL.md)\u3002
3280
+ ${includeStorage ? "- \u5927\u62A5\u544A\u5BFC\u5165\uFF1A[\u53D7\u6CBB\u7406\u7684\u5927\u62A5\u544A\u6682\u5B58](./architecture/report-staging.md)\u3002" : ""}
3137
3281
  ${includeOfflineLicense ? "- License \u6D88\u8D39\u7AEF\uFF1A[\u79BB\u7EBF\u6FC0\u6D3B\u4E0E\u5B89\u88C5\u534F\u8BAE](./license/license-offline-activation-code.md)\uFF1B\u8FD0\u884C\u65F6\u80FD\u529B\u7531 npm \u4F9D\u8D56 `@southwind-ai/license` \u63D0\u4F9B\u3002" : ""}
3138
3282
  - \u8FD0\u7EF4\uFF1A[\u53EF\u89C2\u6D4B\u6027](./operations/observability.md)${includeOperations ? " \u4E0E [\u8FD0\u7EF4\u603B\u89C8](./platform/operations-overview.md)" : ""}\u3002
3139
3283
  ${includeAgent ? "- Agent\u3001\u591A\u6A21\u6001 Runtime \u4E0E MCP\uFF1A[Agent Runtime \u63A5\u5165](./platform/agent-runtime.md)\u3001[Document AI Runtime](./platform/document-ai-runtime.md)\u3001[Speech AI Runtime](./platform/speech-ai-runtime.md)\u3001[\u53D7\u63A7\u5DE5\u5177](./platform/agent-tools.md)\u4E0E[MCP \u4E1A\u52A1\u80FD\u529B](./architecture/mcp-business-capabilities.md)\u3002" : ""}
3140
3284
  - \u517C\u5BB9\uFF1A[RuoYi-Vue Adapter](./adapters/ruoyi-vue-compatibility.md)\u3002
3141
3285
  `;
3142
3286
  }
3287
+ // src/project-files.ts
3143
3288
  function starterReadme(projectName, includeExample = true, includeOxc = true, projectLicense = "UNLICENSED", selectedModules = []) {
3144
3289
  const selected = new Set(selectedModules);
3145
3290
  const includeAgent = selected.has("system.agent");
@@ -3438,6 +3583,8 @@ function createStarterPackage(source, projectName, includeOxc = true, projectLic
3438
3583
  } : {},
3439
3584
  ...selectedModules.includes("system.agent") ? {
3440
3585
  "dev:agent": "docker compose --profile agent up --build",
3586
+ "dev:speech": "PLATFORM_ENABLE_AI=true SPEECH_SERVER_URL=http://speech-server:8091 docker compose --profile agent --profile speech up --build",
3587
+ "speech:pins": "bun run scripts/provision-speech-readiness.ts",
3441
3588
  "dev:adk-web": "bun run scripts/dev-adk-web.ts"
3442
3589
  } : {},
3443
3590
  ...generatorVersion ? { windy: "create-windy" } : {},
@@ -3452,6 +3599,7 @@ function createStarterPackage(source, projectName, includeOxc = true, projectLic
3452
3599
  "bun run --cwd apps/server typecheck",
3453
3600
  "bun run --cwd packages/ai-client typecheck",
3454
3601
  "bun run --cwd packages/jobs typecheck",
3602
+ "bun run --cwd packages/shared typecheck",
3455
3603
  "bun run --cwd packages/server-sdk typecheck",
3456
3604
  "bun run --cwd packages/storage typecheck",
3457
3605
  "bun run --cwd packages/database typecheck",
@@ -3488,7 +3636,8 @@ var templateRootFiles = [
3488
3636
  "package.json",
3489
3637
  "scripts/notification-postgres-regression.ts",
3490
3638
  "scripts/lib/postgres-regression.ts",
3491
- "scripts/dev-adk-web.ts"
3639
+ "scripts/dev-adk-web.ts",
3640
+ "scripts/provision-speech-readiness.ts"
3492
3641
  ];
3493
3642
  var templateDirectories = [
3494
3643
  ".agents/skills/windy-business-module",
@@ -3515,6 +3664,7 @@ var templateDocumentationFiles = [
3515
3664
  "docs/architecture/admin-surface-boundary.md",
3516
3665
  "docs/architecture/ai-egress.md",
3517
3666
  "docs/architecture/ai-runtime.md",
3667
+ "docs/architecture/ai-runtime-readiness.md",
3518
3668
  "docs/architecture/data-scope-query-enforcement.md",
3519
3669
  "docs/architecture/durable-jobs.md",
3520
3670
  "docs/architecture/foundation-infrastructure.md",
@@ -3523,8 +3673,11 @@ var templateDocumentationFiles = [
3523
3673
  "docs/architecture/migration-bundle.md",
3524
3674
  "docs/architecture/module-host.md",
3525
3675
  "docs/architecture/module-manifest-composition.md",
3676
+ "docs/architecture/module-secret-resolution.md",
3526
3677
  "docs/architecture/object-storage.md",
3678
+ "docs/architecture/report-staging.md",
3527
3679
  "docs/architecture/search-provider-protocol.md",
3680
+ "docs/architecture/speech-variants.md",
3528
3681
  "docs/architecture/server-module-interface.md",
3529
3682
  "docs/architecture/web-access-snapshot-resilience.md",
3530
3683
  "docs/development/business-web-routes.md",
@@ -3674,8 +3827,8 @@ function isGenerationProvenance(value) {
3674
3827
  function isModuleVersion(value) {
3675
3828
  if (!value || typeof value !== "object")
3676
3829
  return false;
3677
- const module3 = value;
3678
- return typeof module3.name === "string" && module3.name.length > 0 && typeof module3.version === "string" && module3.version.length > 0;
3830
+ const module2 = value;
3831
+ return typeof module2.name === "string" && module2.name.length > 0 && typeof module2.version === "string" && module2.version.length > 0;
3679
3832
  }
3680
3833
 
3681
3834
  // src/registry-dependencies.ts
@@ -3876,10 +4029,10 @@ async function generateProject(input) {
3876
4029
  const packageJson = JSON.parse(await readFile10(packagePath, "utf8"));
3877
4030
  await writeFile9(packagePath, `${JSON.stringify(createStarterPackage(packageJson, input.projectName, includeOxc, projectLicense, selectedModules, templateMetadata.generatorVersion), null, 2)}
3878
4031
  `);
3879
- await writeFile9(join11(input.targetDirectory, "docker-compose.yml"), starterComposeFor(selectedModules.includes("system.agent"), selectedModules.includes("system.search")));
3880
- await writeFile9(join11(input.targetDirectory, ".env.example"), environmentExample(includeExample, selectedModules.includes("system.agent"), selectedModules.includes("system.search")));
4032
+ await writeFile9(join11(input.targetDirectory, "docker-compose.yml"), starterComposeFor(selectedModules.includes("system.agent"), selectedModules.includes("system.search"), selectedModules.includes("system.storage")));
4033
+ await writeFile9(join11(input.targetDirectory, ".env.example"), environmentExample(includeExample, selectedModules.includes("system.agent"), selectedModules.includes("system.search"), selectedModules.includes("system.storage")));
3881
4034
  await writeFile9(join11(input.targetDirectory, "README.md"), starterReadme(input.projectName, includeExample, includeOxc, projectLicense, selectedModules));
3882
- await writeFile9(join11(input.targetDirectory, "docs/README.md"), starterDocsReadme(selectedModules.includes("system.license"), selectedModules.includes("system.agent"), selectedModules.includes("system.operations")));
4035
+ await writeFile9(join11(input.targetDirectory, "docs/README.md"), starterDocsReadme(selectedModules.includes("system.license"), selectedModules.includes("system.agent"), selectedModules.includes("system.operations"), selectedModules.includes("system.storage")));
3883
4036
  await reflectCodeQualityChoice(input.targetDirectory, includeOxc);
3884
4037
  await applyWindyBaseLicense(input.targetDirectory);
3885
4038
  await applyProjectLicense(input.targetDirectory, projectLicense, input.licenseHolder);
@@ -7589,6 +7742,16 @@ var recipes = [
7589
7742
  id: "starter-0.5.1-to-0.5.2",
7590
7743
  from: "0.5.1",
7591
7744
  to: "0.5.2"
7745
+ },
7746
+ {
7747
+ id: "starter-0.5.2-to-0.6.0",
7748
+ from: "0.5.2",
7749
+ to: "0.6.0"
7750
+ },
7751
+ {
7752
+ id: "starter-0.6.0-to-0.6.1",
7753
+ from: "0.6.0",
7754
+ to: "0.6.1"
7592
7755
  }
7593
7756
  ];
7594
7757
  function resolveRecipeChain(sourceVersion, targetVersion) {
@@ -8640,7 +8803,7 @@ async function mergeTextFile(base, ours, theirs) {
8640
8803
  }
8641
8804
  return { content: new TextEncoder().encode(result2.stdout) };
8642
8805
  }
8643
- if (result2.code === 1) {
8806
+ if (result2.code > 0 && result2.code <= 127) {
8644
8807
  const resolved = resolveConservativeConflicts(result2.stdout);
8645
8808
  return resolved ? { content: new TextEncoder().encode(resolved) } : { conflict: "\u4E09\u65B9\u5408\u5E76\u5B58\u5728\u91CD\u53E0\u4FEE\u6539" };
8646
8809
  }
@@ -8823,6 +8986,11 @@ function mergeValue(base, ours, theirs, path2, conflicts) {
8823
8986
  if (files)
8824
8987
  return files;
8825
8988
  }
8989
+ if (path2.startsWith("package.json.scripts.")) {
8990
+ const script = mergeConjunctionScript(base, ours, theirs);
8991
+ if (script !== undefined)
8992
+ return script;
8993
+ }
8826
8994
  if (isObject(base) && isObject(ours) && isObject(theirs)) {
8827
8995
  const output = {};
8828
8996
  const keys = new Set([
@@ -8849,6 +9017,52 @@ function mergeAppendOnlyStringSet(base, ours, theirs) {
8849
9017
  }
8850
9018
  return [...new Set([...ours, ...theirs])].sort();
8851
9019
  }
9020
+ function mergeConjunctionScript(base, ours, theirs) {
9021
+ if (typeof base !== "string" || typeof ours !== "string" || typeof theirs !== "string") {
9022
+ return;
9023
+ }
9024
+ const baseCommands = conjunctionCommands(base);
9025
+ const oursCommands = conjunctionCommands(ours);
9026
+ const theirsCommands = conjunctionCommands(theirs);
9027
+ if (!baseCommands || !oursCommands || !theirsCommands || !unique(baseCommands) || !unique(oursCommands) || !unique(theirsCommands)) {
9028
+ return;
9029
+ }
9030
+ const oursGaps = additionsByBaseGap(baseCommands, oursCommands);
9031
+ const theirsGaps = additionsByBaseGap(baseCommands, theirsCommands);
9032
+ if (!oursGaps || !theirsGaps)
9033
+ return;
9034
+ const merged = [];
9035
+ for (let gap = 0;gap <= baseCommands.length; gap += 1) {
9036
+ const oursAdded = oursGaps[gap] ?? [];
9037
+ const theirsAdded = theirsGaps[gap] ?? [];
9038
+ if (oursAdded.length && theirsAdded.length && !equal(oursAdded, theirsAdded)) {
9039
+ return;
9040
+ }
9041
+ merged.push(...oursAdded.length ? oursAdded : theirsAdded);
9042
+ if (gap < baseCommands.length)
9043
+ merged.push(baseCommands[gap] ?? "");
9044
+ }
9045
+ return merged.join(" && ");
9046
+ }
9047
+ function conjunctionCommands(value) {
9048
+ const commands = value.split(" && ");
9049
+ return commands.length && commands.every((command) => command.length > 0) && commands.join(" && ") === value ? commands : undefined;
9050
+ }
9051
+ function additionsByBaseGap(base, branch) {
9052
+ const gaps = Array.from({ length: base.length + 1 }, () => []);
9053
+ let baseIndex = 0;
9054
+ for (const command of branch) {
9055
+ if (command === base[baseIndex]) {
9056
+ baseIndex += 1;
9057
+ } else {
9058
+ gaps[baseIndex]?.push(command);
9059
+ }
9060
+ }
9061
+ return baseIndex === base.length ? gaps : undefined;
9062
+ }
9063
+ function unique(values) {
9064
+ return new Set(values).size === values.length;
9065
+ }
8852
9066
  function isStringArray(value) {
8853
9067
  return Array.isArray(value) && value.every((item) => typeof item === "string");
8854
9068
  }
@@ -9156,7 +9370,7 @@ var oxcManagedPaths = new Set([
9156
9370
  ".oxlintrc.json",
9157
9371
  ".husky/pre-commit"
9158
9372
  ]);
9159
- async function createUpdatePlan(request, artifacts) {
9373
+ async function createUpdatePlan(request, artifacts, dependencies = {}) {
9160
9374
  await assertProjectReadyForUpdate(request.projectDirectory);
9161
9375
  const manifestPath = join25(request.projectDirectory, ".windy/files.json");
9162
9376
  const expectedManifestHash = hashContent(await readFile21(manifestPath));
@@ -9169,7 +9383,7 @@ async function createUpdatePlan(request, artifacts) {
9169
9383
  if (targetVersion !== targetProvenance.generatorVersion) {
9170
9384
  throw new Error(`\u5F53\u524D CLI \u53EA\u80FD\u66F4\u65B0\u5230 ${targetProvenance.generatorVersion}\uFF0C\u8BF7\u8FD0\u884C create-windy@${targetVersion}`);
9171
9385
  }
9172
- const versionRecipes = resolveRecipeChain(provenance.windyVersion, targetVersion);
9386
+ const versionRecipes = (dependencies.resolveVersionRecipes ?? resolveRecipeChain)(provenance.windyVersion, targetVersion);
9173
9387
  const moduleRecipes = resolveModuleRecipeIds(request);
9174
9388
  const recipes2 = [...versionRecipes.map(({ id }) => id), ...moduleRecipes];
9175
9389
  const [rawSourceManifest, rawTargetManifest] = await Promise.all([
@@ -10364,7 +10578,7 @@ async function runUpdate(args, projectDirectory) {
10364
10578
  console.log(recipes2.length ? `\u53EF\u66F4\u65B0\uFF1A${current.windyVersion} \u2192 ${target}\uFF08${recipes2.length} \u4E2A\u8FDE\u7EED recipe\uFF09` : `\u5DF2\u662F\u5F53\u524D CLI \u652F\u6301\u7684\u6700\u65B0\u7248\u672C ${current.windyVersion}`);
10365
10579
  return;
10366
10580
  }
10367
- if (!recipes2.length) {
10581
+ if (!recipes2.length && current.templateCommit === template.templateCommit) {
10368
10582
  console.log(`\u9879\u76EE\u5DF2\u7ECF\u662F ${target}\uFF0C\u65E0\u9700\u66F4\u65B0`);
10369
10583
  return;
10370
10584
  }
@@ -10554,8 +10768,8 @@ function isPlatform(value) {
10554
10768
  function isModule(value) {
10555
10769
  if (!value || typeof value !== "object")
10556
10770
  return false;
10557
- const module3 = value;
10558
- return typeof module3.key === "string" && /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/.test(module3.key) && isStringList(module3.schema) && typeof module3.out === "string" && isStringList(module3.legacyPlatformTables) && module3.legacyPlatformTables.every(isTableName);
10771
+ const module2 = value;
10772
+ return typeof module2.key === "string" && /^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$/.test(module2.key) && isStringList(module2.schema) && typeof module2.out === "string" && isStringList(module2.legacyPlatformTables) && module2.legacyPlatformTables.every(isTableName);
10559
10773
  }
10560
10774
  function isStringList(value) {
10561
10775
  return Array.isArray(value) && value.length > 0 && value.every((item) => typeof item === "string" && item.length > 0);
@@ -10572,10 +10786,10 @@ function validatePaths(projectDirectory, config) {
10572
10786
  resolveProjectPath(projectDirectory, path2);
10573
10787
  }
10574
10788
  const platformOut = resolveProjectPath(projectDirectory, config.platform.out);
10575
- for (const module3 of config.modules) {
10576
- const moduleOut = resolveProjectPath(projectDirectory, module3.out);
10789
+ for (const module2 of config.modules) {
10790
+ const moduleOut = resolveProjectPath(projectDirectory, module2.out);
10577
10791
  if (moduleOut === platformOut || moduleOut.startsWith(`${platformOut}/`) || platformOut.startsWith(`${moduleOut}/`)) {
10578
- throw new Error(`${module3.key} \u7684 lineage \u8F93\u51FA\u4E0D\u80FD\u4E0E\u5E73\u53F0\u76EE\u5F55\u91CD\u53E0`);
10792
+ throw new Error(`${module2.key} \u7684 lineage \u8F93\u51FA\u4E0D\u80FD\u4E0E\u5E73\u53F0\u76EE\u5F55\u91CD\u53E0`);
10579
10793
  }
10580
10794
  }
10581
10795
  }
@@ -10583,14 +10797,14 @@ function validateUniqueness(config) {
10583
10797
  const keys = new Set;
10584
10798
  const outputs = new Set;
10585
10799
  const tables = new Set;
10586
- for (const module3 of config.modules) {
10587
- if (keys.has(module3.key))
10588
- throw new Error(`Module key \u91CD\u590D\uFF1A${module3.key}`);
10589
- if (outputs.has(module3.out))
10590
- throw new Error(`Module lineage \u8F93\u51FA\u91CD\u590D\uFF1A${module3.out}`);
10591
- keys.add(module3.key);
10592
- outputs.add(module3.out);
10593
- for (const table of module3.legacyPlatformTables) {
10800
+ for (const module2 of config.modules) {
10801
+ if (keys.has(module2.key))
10802
+ throw new Error(`Module key \u91CD\u590D\uFF1A${module2.key}`);
10803
+ if (outputs.has(module2.out))
10804
+ throw new Error(`Module lineage \u8F93\u51FA\u91CD\u590D\uFF1A${module2.out}`);
10805
+ keys.add(module2.key);
10806
+ outputs.add(module2.out);
10807
+ for (const table of module2.legacyPlatformTables) {
10594
10808
  if (tables.has(table))
10595
10809
  throw new Error(`\u65E7\u5E73\u53F0\u8868\u91CD\u590D\u58F0\u660E\uFF1A${table}`);
10596
10810
  tables.add(table);
@@ -10646,27 +10860,27 @@ async function handoffModuleSchemaLineages(options) {
10646
10860
  }
10647
10861
  return {
10648
10862
  moduleCount: config.modules.length,
10649
- tableCount: config.modules.reduce((total, module3) => total + module3.legacyPlatformTables.length, 0)
10863
+ tableCount: config.modules.reduce((total, module2) => total + module2.legacyPlatformTables.length, 0)
10650
10864
  };
10651
10865
  }
10652
10866
  async function stageModuleLineages(project, temporaryRoot, config, execute) {
10653
10867
  const outputs = [];
10654
- for (const [index, module3] of config.modules.entries()) {
10868
+ for (const [index, module2] of config.modules.entries()) {
10655
10869
  const output = join28(temporaryRoot, `module-${index}`);
10656
10870
  await mkdir9(output, { recursive: true });
10657
10871
  const generatedConfig = join28(temporaryRoot, `module-${index}.config.ts`);
10658
- await writeDrizzleConfig(generatedConfig, project, module3.schema, relative6(temporaryRoot, output));
10872
+ await writeDrizzleConfig(generatedConfig, project, module2.schema, relative6(temporaryRoot, output));
10659
10873
  await execute(generatedConfig, temporaryRoot);
10660
10874
  const sqlFiles = await listSqlFiles(output);
10661
10875
  if (sqlFiles.length !== 1) {
10662
- throw new Error(`${module3.key} baseline \u5FC5\u987B\u6070\u597D\u751F\u6210\u4E00\u4E2A migration`);
10876
+ throw new Error(`${module2.key} baseline \u5FC5\u987B\u6070\u597D\u751F\u6210\u4E00\u4E2A migration`);
10663
10877
  }
10664
10878
  await writeFile14(join28(output, sqlFiles[0]), metadataOnlySql("module"));
10665
10879
  await writeFile14(join28(output, "lineage.json"), `${JSON.stringify({
10666
10880
  schemaVersion: 1,
10667
- moduleKey: module3.key,
10668
- schema: module3.schema,
10669
- legacyPlatformTables: module3.legacyPlatformTables,
10881
+ moduleKey: module2.key,
10882
+ schema: module2.schema,
10883
+ legacyPlatformTables: module2.legacyPlatformTables,
10670
10884
  productionExecutor: "module-migration-bundle"
10671
10885
  }, null, 2)}
10672
10886
  `);
@@ -10699,10 +10913,10 @@ async function installStagedLineages(project, temporaryRoot, config, stagedModul
10699
10913
  await rename2(platform, backup);
10700
10914
  try {
10701
10915
  await rename2(stagedPlatform, platform);
10702
- for (const [index, module3] of config.modules.entries()) {
10703
- const output = resolveProjectPath(project, module3.out);
10916
+ for (const [index, module2] of config.modules.entries()) {
10917
+ const output = resolveProjectPath(project, module2.out);
10704
10918
  if (await exists(output)) {
10705
- throw new Error(`${module3.key} lineage \u8F93\u51FA\u5DF2\u5B58\u5728\uFF0C\u7981\u6B62\u8986\u76D6`);
10919
+ throw new Error(`${module2.key} lineage \u8F93\u51FA\u5DF2\u5B58\u5728\uFF0C\u7981\u6B62\u8986\u76D6`);
10706
10920
  }
10707
10921
  await mkdir9(dirname9(output), { recursive: true });
10708
10922
  await rename2(stagedModules[index], output);
@@ -10734,9 +10948,9 @@ async function validateSchemaSources(project, config) {
10734
10948
  ]) {
10735
10949
  await access3(resolveProjectPath(project, schema));
10736
10950
  }
10737
- for (const module3 of config.modules) {
10738
- if (await exists(resolveProjectPath(project, module3.out))) {
10739
- throw new Error(`${module3.key} lineage \u8F93\u51FA\u5DF2\u5B58\u5728\uFF0C\u7981\u6B62\u8986\u76D6`);
10951
+ for (const module2 of config.modules) {
10952
+ if (await exists(resolveProjectPath(project, module2.out))) {
10953
+ throw new Error(`${module2.key} lineage \u8F93\u51FA\u5DF2\u5B58\u5728\uFF0C\u7981\u6B62\u8986\u76D6`);
10740
10954
  }
10741
10955
  }
10742
10956
  }