create-windy 0.6.11 → 0.6.14

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 (546) hide show
  1. package/dist/cli.js +580 -269
  2. package/package.json +1 -1
  3. package/template/.agents/skills/windy-business-module/SKILL.md +98 -70
  4. package/template/.windy-template.json +3 -3
  5. package/template/AGENTS.md +3 -6
  6. package/template/apps/agent-server/Dockerfile +2 -3
  7. package/template/apps/agent-server/README.md +38 -54
  8. package/template/apps/agent-server/pyproject.toml +0 -1
  9. package/template/apps/agent-server/src/southwind_agent_server/app.py +4 -2
  10. package/template/apps/agent-server/src/southwind_agent_server/attempt_context.py +191 -0
  11. package/template/apps/agent-server/src/southwind_agent_server/attempt_context_projection.py +203 -0
  12. package/template/apps/agent-server/src/southwind_agent_server/client_completion_contracts.py +61 -0
  13. package/template/apps/agent-server/src/southwind_agent_server/client_completion_governance.py +82 -0
  14. package/template/apps/agent-server/src/southwind_agent_server/client_completion_routes.py +121 -0
  15. package/template/apps/agent-server/src/southwind_agent_server/client_completion_runtime.py +158 -0
  16. package/template/apps/agent-server/src/southwind_agent_server/context_message_digest.py +24 -0
  17. package/template/apps/agent-server/src/southwind_agent_server/context_version_contracts.py +71 -0
  18. package/template/apps/agent-server/src/southwind_agent_server/context_version_port.py +307 -0
  19. package/template/apps/agent-server/src/southwind_agent_server/contracts.py +39 -0
  20. package/template/apps/agent-server/src/southwind_agent_server/deterministic.py +2 -0
  21. package/template/apps/agent-server/src/southwind_agent_server/engine.py +9 -1
  22. package/template/apps/agent-server/src/southwind_agent_server/engine_identity.py +2 -0
  23. package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +15 -0
  24. package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +37 -3
  25. package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +46 -26
  26. package/template/apps/agent-server/src/southwind_agent_server/openai_engine_validation.py +32 -0
  27. package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +7 -0
  28. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_insert.py +5 -2
  29. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_queries.py +1 -0
  30. package/template/apps/agent-server/src/southwind_agent_server/postgres_report_store.py +6 -1
  31. package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +3 -2
  32. package/template/apps/agent-server/src/southwind_agent_server/postgres_store_backend.py +1 -0
  33. package/template/apps/agent-server/src/southwind_agent_server/provider_governance.py +21 -0
  34. package/template/apps/agent-server/src/southwind_agent_server/report_lifecycle.py +2 -1
  35. package/template/apps/agent-server/src/southwind_agent_server/report_presenter.py +1 -0
  36. package/template/apps/agent-server/src/southwind_agent_server/report_routes.py +7 -1
  37. package/template/apps/agent-server/src/southwind_agent_server/report_store.py +10 -56
  38. package/template/apps/agent-server/src/southwind_agent_server/report_store_protocol.py +75 -0
  39. package/template/apps/agent-server/src/southwind_agent_server/report_types.py +9 -2
  40. package/template/apps/agent-server/src/southwind_agent_server/runtime_budget.py +74 -0
  41. package/template/apps/agent-server/src/southwind_agent_server/runtime_factory.py +11 -3
  42. package/template/apps/agent-server/src/southwind_agent_server/service.py +41 -65
  43. package/template/apps/agent-server/src/southwind_agent_server/service_control.py +64 -0
  44. package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +3 -0
  45. package/template/apps/agent-server/src/southwind_agent_server/sqlite_errors.py +2 -0
  46. package/template/apps/agent-server/src/southwind_agent_server/sqlite_schema.py +9 -1
  47. package/template/apps/agent-server/src/southwind_agent_server/sqlite_store.py +6 -5
  48. package/template/apps/agent-server/src/southwind_agent_server/store.py +2 -0
  49. package/template/apps/agent-server/src/southwind_agent_server/trajectory.py +137 -0
  50. package/template/apps/agent-server/src/southwind_agent_server/unavailable_engine.py +58 -0
  51. package/template/apps/agent-server/tests/test_api.py +30 -11
  52. package/template/apps/agent-server/tests/test_client_completion.py +230 -0
  53. package/template/apps/agent-server/tests/test_provider_attempt_reporting.py +12 -24
  54. package/template/apps/agent-server/tests/test_report_resilience.py +2 -0
  55. package/template/apps/agent-server/tests/test_report_routes.py +58 -1
  56. package/template/apps/agent-server/tests/test_report_summary_parity.py +1 -0
  57. package/template/apps/agent-server/tests/test_run_capacity.py +2 -0
  58. package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +18 -3
  59. package/template/apps/agent-server/tests/test_trajectory.py +91 -0
  60. package/template/apps/agent-server/uv.lock +0 -259
  61. package/template/apps/server/Dockerfile +9 -4
  62. package/template/apps/server/src/agent/actor-projection-audit.ts +6 -0
  63. package/template/apps/server/src/agent/agent-run-delegation-policy.ts +115 -0
  64. package/template/apps/server/src/agent/agent-session-bootstrap.ts +23 -0
  65. package/template/apps/server/src/agent/{debug-session-facade-provider-failure.test.ts → agent-session-facade-provider-failure.test.ts} +24 -33
  66. package/template/apps/server/src/agent/{debug-session-facade.test.ts → agent-session-facade.test.ts} +34 -45
  67. package/template/apps/server/src/agent/{debug-session-facade.ts → agent-session-facade.ts} +50 -57
  68. package/template/apps/server/src/agent/{debug-session-id.test.ts → agent-session-id.test.ts} +5 -5
  69. package/template/apps/server/src/agent/{debug-session-id.ts → agent-session-id.ts} +7 -7
  70. package/template/apps/server/src/agent/{debug-session-provider-reader.ts → agent-session-provider-reader.ts} +18 -15
  71. package/template/apps/server/src/agent/{debug-session-routes.test.ts → agent-session-routes.test.ts} +16 -16
  72. package/template/apps/server/src/agent/{debug-session-routes.ts → agent-session-routes.ts} +12 -12
  73. package/template/apps/server/src/agent/{debug-session-validation.ts → agent-session-validation.ts} +13 -11
  74. package/template/apps/server/src/agent/client-session/authorization.ts +47 -0
  75. package/template/apps/server/src/agent/client-session/bootstrap.ts +96 -0
  76. package/template/apps/server/src/agent/client-session/capabilities.ts +19 -0
  77. package/template/apps/server/src/agent/client-session/completion.ts +299 -0
  78. package/template/apps/server/src/agent/client-session/contracts.ts +136 -0
  79. package/template/apps/server/src/agent/client-session/digest.ts +39 -0
  80. package/template/apps/server/src/agent/client-session/drizzle-repository.integration.test.ts +170 -0
  81. package/template/apps/server/src/agent/client-session/drizzle-repository.ts +345 -0
  82. package/template/apps/server/src/agent/client-session/errors.ts +28 -0
  83. package/template/apps/server/src/agent/client-session/fixtures/page-agent-1.12.2-request.json +52 -0
  84. package/template/apps/server/src/agent/client-session/host-auth.test.ts +144 -0
  85. package/template/apps/server/src/agent/client-session/host-auth.ts +110 -0
  86. package/template/apps/server/src/agent/client-session/manifest-admission.ts +240 -0
  87. package/template/apps/server/src/agent/client-session/openai-stream.ts +123 -0
  88. package/template/apps/server/src/agent/client-session/presentation.ts +46 -0
  89. package/template/apps/server/src/agent/client-session/remote-provider.test.ts +144 -0
  90. package/template/apps/server/src/agent/client-session/remote-provider.ts +216 -0
  91. package/template/apps/server/src/agent/client-session/repository.ts +225 -0
  92. package/template/apps/server/src/agent/client-session/request.test.ts +69 -0
  93. package/template/apps/server/src/agent/client-session/request.ts +289 -0
  94. package/template/apps/server/src/agent/client-session/revocation.ts +23 -0
  95. package/template/apps/server/src/agent/client-session/routes.ts +315 -0
  96. package/template/apps/server/src/agent/client-session/runtime-audit.ts +42 -0
  97. package/template/apps/server/src/agent/client-session/service.test-support.ts +226 -0
  98. package/template/apps/server/src/agent/client-session/service.test.ts +268 -0
  99. package/template/apps/server/src/agent/client-session/service.ts +346 -0
  100. package/template/apps/server/src/agent/context-memory/attempt-context-contracts.ts +60 -0
  101. package/template/apps/server/src/agent/context-memory/authoritative-source-registry.ts +127 -0
  102. package/template/apps/server/src/agent/context-memory/context-builder.test.ts +160 -0
  103. package/template/apps/server/src/agent/context-memory/context-builder.ts +184 -0
  104. package/template/apps/server/src/agent/context-memory/contracts.ts +284 -0
  105. package/template/apps/server/src/agent/context-memory/digest.ts +22 -0
  106. package/template/apps/server/src/agent/context-memory/memory-authorization.ts +82 -0
  107. package/template/apps/server/src/agent/context-memory/memory-content.ts +69 -0
  108. package/template/apps/server/src/agent/context-memory/memory-object-registry.ts +87 -0
  109. package/template/apps/server/src/agent/context-memory/memory-projector-contracts.ts +121 -0
  110. package/template/apps/server/src/agent/context-memory/memory-projector-validation.ts +155 -0
  111. package/template/apps/server/src/agent/context-memory/memory-projector.test.ts +19 -0
  112. package/template/apps/server/src/agent/context-memory/memory-projector.ts +259 -0
  113. package/template/apps/server/src/agent/context-memory/memory-retrieval-policy.ts +195 -0
  114. package/template/apps/server/src/agent/context-memory/memory-retriever.test.ts +339 -0
  115. package/template/apps/server/src/agent/context-memory/memory-retriever.ts +184 -0
  116. package/template/apps/server/src/agent/context-memory/search-provider-port.test.ts +62 -0
  117. package/template/apps/server/src/agent/context-memory/search-provider-port.ts +75 -0
  118. package/template/apps/server/src/agent/context-memory/working-context-expiry.ts +95 -0
  119. package/template/apps/server/src/agent/context-message-recovery.ts +23 -0
  120. package/template/apps/server/src/agent/context-version-routes.ts +241 -0
  121. package/template/apps/server/src/agent/context-version-runtime.ts +332 -0
  122. package/template/apps/server/src/agent/context-version-support.ts +93 -0
  123. package/template/apps/server/src/agent/context-version-validation.ts +118 -0
  124. package/template/apps/server/src/agent/drizzle-run-binding-repository.ts +11 -0
  125. package/template/apps/server/src/agent/idempotency-key.ts +9 -1
  126. package/template/apps/server/src/agent/memory-runtime-adapters.ts +266 -0
  127. package/template/apps/server/src/agent/memory-scope-binding.ts +14 -0
  128. package/template/apps/server/src/agent/module-ai-port-factory.ts +41 -0
  129. package/template/apps/server/src/agent/provider-input-governance.ts +19 -0
  130. package/template/apps/server/src/agent/remote-runtime-response.ts +162 -0
  131. package/template/apps/server/src/agent/remote-runtime.ts +53 -153
  132. package/template/apps/server/src/agent/run-audit.ts +2 -2
  133. package/template/apps/server/src/agent/run-authorization.test.ts +27 -0
  134. package/template/apps/server/src/agent/run-authorization.ts +60 -1
  135. package/template/apps/server/src/agent/run-binding-repository.ts +9 -0
  136. package/template/apps/server/src/agent/run-browser-authorization.ts +79 -0
  137. package/template/apps/server/src/agent/run-contracts.ts +23 -0
  138. package/template/apps/server/src/agent/run-facade.ts +139 -139
  139. package/template/apps/server/src/agent/run-failure-cleanup.ts +58 -0
  140. package/template/apps/server/src/agent/run-operation-policy.ts +20 -0
  141. package/template/apps/server/src/agent/run-route-input.ts +19 -1
  142. package/template/apps/server/src/agent/run-routes.ts +133 -5
  143. package/template/apps/server/src/agent/run-runtime-request.ts +89 -0
  144. package/template/apps/server/src/agent/run-session-authorization.ts +95 -0
  145. package/template/apps/server/src/agent/run-start-preparation.ts +71 -0
  146. package/template/apps/server/src/agent/runtime-bootstrap-input.ts +42 -0
  147. package/template/apps/server/src/agent/runtime-bootstrap-report.test.ts +53 -1
  148. package/template/apps/server/src/agent/runtime-bootstrap.ts +114 -111
  149. package/template/apps/server/src/agent/runtime-tool-composition.ts +38 -0
  150. package/template/apps/server/src/agent/session-context-source-support.ts +38 -0
  151. package/template/apps/server/src/agent/session-context-source.ts +346 -0
  152. package/template/apps/server/src/agent/session-invalidation/contracts.ts +217 -0
  153. package/template/apps/server/src/agent/session-invalidation/dispatcher.contract.test.ts +333 -0
  154. package/template/apps/server/src/agent/session-invalidation/dispatcher.ts +205 -0
  155. package/template/apps/server/src/agent/session-invalidation/module-authoritative-producer.test.ts +127 -0
  156. package/template/apps/server/src/agent/session-invalidation/module-authoritative-producer.ts +202 -0
  157. package/template/apps/server/src/agent/session-invalidation/read-guard.ts +39 -0
  158. package/template/apps/server/src/agent/session-invalidation/runtime.ts +69 -0
  159. package/template/apps/server/src/agent/session-invalidation/test-envelopes.ts +24 -0
  160. package/template/apps/server/src/agent/session-invalidation/worker.contract.test.ts +135 -0
  161. package/template/apps/server/src/agent/session-invalidation/worker.ts +76 -0
  162. package/template/apps/server/src/agent/session-log/checkpoint-digest.ts +36 -0
  163. package/template/apps/server/src/agent/session-log/domain.ts +123 -0
  164. package/template/apps/server/src/agent/session-log/events.ts +229 -0
  165. package/template/apps/server/src/agent/session-log/history.ts +143 -0
  166. package/template/apps/server/src/agent/session-log/in-memory-repository.ts +340 -0
  167. package/template/apps/server/src/agent/session-log/lifecycle.ts +67 -0
  168. package/template/apps/server/src/agent/session-log/replay-policy.ts +76 -0
  169. package/template/apps/server/src/agent/session-log/repository.ts +103 -0
  170. package/template/apps/server/src/agent/session-log/service.ts +349 -0
  171. package/template/apps/server/src/agent/session-log/session-log.test.ts +282 -0
  172. package/template/apps/server/src/agent/session-persistence/drizzle-context-memory.ts +348 -0
  173. package/template/apps/server/src/agent/session-persistence/drizzle-governed-context.ts +328 -0
  174. package/template/apps/server/src/agent/session-persistence/drizzle-invalidation-outbox.ts +260 -0
  175. package/template/apps/server/src/agent/session-persistence/drizzle-memory-projection-deletion.ts +56 -0
  176. package/template/apps/server/src/agent/session-persistence/drizzle-run-projection-receipt.ts +80 -0
  177. package/template/apps/server/src/agent/session-persistence/drizzle-session-fork.ts +147 -0
  178. package/template/apps/server/src/agent/session-persistence/drizzle-session-list.ts +24 -0
  179. package/template/apps/server/src/agent/session-persistence/drizzle-session-mapping.ts +154 -0
  180. package/template/apps/server/src/agent/session-persistence/drizzle-session-mutations.ts +64 -0
  181. package/template/apps/server/src/agent/session-persistence/drizzle-session-repository.ts +335 -0
  182. package/template/apps/server/src/agent/session-persistence/invalidation-projections.ts +229 -0
  183. package/template/apps/server/src/agent/session-persistence/payload-codec.ts +90 -0
  184. package/template/apps/server/src/agent/session-projection-access.ts +155 -0
  185. package/template/apps/server/src/agent/session-projection-bootstrap.ts +87 -0
  186. package/template/apps/server/src/agent/session-projection-errors.ts +22 -0
  187. package/template/apps/server/src/agent/session-projection-facade.ts +349 -0
  188. package/template/apps/server/src/agent/session-projection-routes.ts +215 -0
  189. package/template/apps/server/src/agent/session-projection-view.ts +137 -0
  190. package/template/apps/server/src/agent/session-result-memory.ts +228 -0
  191. package/template/apps/server/src/agent/session-run-lifecycle.ts +85 -0
  192. package/template/apps/server/src/agent/session-run-link-contracts.ts +56 -0
  193. package/template/apps/server/src/agent/session-run-link.ts +343 -0
  194. package/template/apps/server/src/agent/session-run-recovery.ts +16 -0
  195. package/template/apps/server/src/agent/session-runtime-composition.ts +265 -0
  196. package/template/apps/server/src/agent/session-source-chain-authorizer.ts +141 -0
  197. package/template/apps/server/src/agent/session-terminal-reconciler.ts +100 -0
  198. package/template/apps/server/src/agent/session-turn-state.ts +49 -0
  199. package/template/apps/server/src/agent/tool-audit.ts +3 -3
  200. package/template/apps/server/src/agent/tool-execution-receipt.ts +13 -0
  201. package/template/apps/server/src/agent/tool-host.ts +41 -4
  202. package/template/apps/server/src/agent/tool-registry-composition.ts +52 -0
  203. package/template/apps/server/src/agent/tool-registry.test.ts +5 -5
  204. package/template/apps/server/src/agent/tool-registry.ts +53 -59
  205. package/template/apps/server/src/agent/unavailable-routes.ts +49 -5
  206. package/template/apps/server/src/agent/workflow-durable-runtime-input.ts +32 -0
  207. package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +59 -0
  208. package/template/apps/server/src/agent-workflow/adapter-dispatch.ts +148 -0
  209. package/template/apps/server/src/agent-workflow/approval-node-adapter.ts +77 -0
  210. package/template/apps/server/src/agent-workflow/artifact-access-error.ts +9 -0
  211. package/template/apps/server/src/agent-workflow/artifact-node-adapter.ts +67 -0
  212. package/template/apps/server/src/agent-workflow/artifact-policy.ts +71 -0
  213. package/template/apps/server/src/agent-workflow/artifact-source-authorization.ts +85 -0
  214. package/template/apps/server/src/agent-workflow/authorization.ts +238 -0
  215. package/template/apps/server/src/agent-workflow/budget-ledger.ts +118 -0
  216. package/template/apps/server/src/agent-workflow/budget-validation.ts +305 -0
  217. package/template/apps/server/src/agent-workflow/canonical-agent-run-binding.ts +17 -0
  218. package/template/apps/server/src/agent-workflow/canonical-agent-run-evidence.ts +142 -0
  219. package/template/apps/server/src/agent-workflow/canonical-agent-run-port.ts +304 -0
  220. package/template/apps/server/src/agent-workflow/canonical-agent-run-remote.ts +64 -0
  221. package/template/apps/server/src/agent-workflow/canonical-json.ts +16 -0
  222. package/template/apps/server/src/agent-workflow/command-drive.ts +195 -0
  223. package/template/apps/server/src/agent-workflow/command-error.ts +9 -0
  224. package/template/apps/server/src/agent-workflow/command-facade.ts +290 -0
  225. package/template/apps/server/src/agent-workflow/command-input.ts +133 -0
  226. package/template/apps/server/src/agent-workflow/condition-node-adapter.ts +69 -0
  227. package/template/apps/server/src/agent-workflow/definition-budget-validation.ts +41 -0
  228. package/template/apps/server/src/agent-workflow/definition-node-validation.ts +197 -0
  229. package/template/apps/server/src/agent-workflow/definition-validation.ts +198 -0
  230. package/template/apps/server/src/agent-workflow/delegated-tool-authorization.ts +15 -0
  231. package/template/apps/server/src/agent-workflow/delegation-child-delivery.ts +129 -0
  232. package/template/apps/server/src/agent-workflow/delegation-execution-authorization.ts +218 -0
  233. package/template/apps/server/src/agent-workflow/delegation-policy-validation.ts +253 -0
  234. package/template/apps/server/src/agent-workflow/delegation-policy.ts +179 -0
  235. package/template/apps/server/src/agent-workflow/drizzle-artifact-port.ts +211 -0
  236. package/template/apps/server/src/agent-workflow/drizzle-artifact-support.ts +152 -0
  237. package/template/apps/server/src/agent-workflow/drizzle-budget-ledger-settlement.ts +271 -0
  238. package/template/apps/server/src/agent-workflow/drizzle-budget-ledger-support.ts +226 -0
  239. package/template/apps/server/src/agent-workflow/drizzle-budget-ledger.ts +189 -0
  240. package/template/apps/server/src/agent-workflow/drizzle-cancellation-reconcile.ts +177 -0
  241. package/template/apps/server/src/agent-workflow/drizzle-delegated-tool-authorization.ts +155 -0
  242. package/template/apps/server/src/agent-workflow/drizzle-delegation-completion.ts +84 -0
  243. package/template/apps/server/src/agent-workflow/drizzle-delegation-lifecycle.ts +139 -0
  244. package/template/apps/server/src/agent-workflow/drizzle-delegation-port.ts +288 -0
  245. package/template/apps/server/src/agent-workflow/drizzle-effect-command-fence.ts +333 -0
  246. package/template/apps/server/src/agent-workflow/drizzle-evaluation-repository.ts +214 -0
  247. package/template/apps/server/src/agent-workflow/drizzle-event-validation.ts +43 -0
  248. package/template/apps/server/src/agent-workflow/drizzle-recovery-admission.ts +115 -0
  249. package/template/apps/server/src/agent-workflow/drizzle-repository-lineage.ts +103 -0
  250. package/template/apps/server/src/agent-workflow/drizzle-repository-mappers.ts +317 -0
  251. package/template/apps/server/src/agent-workflow/drizzle-repository-write.ts +311 -0
  252. package/template/apps/server/src/agent-workflow/drizzle-repository.ts +285 -0
  253. package/template/apps/server/src/agent-workflow/drizzle-side-effect-repository.ts +83 -0
  254. package/template/apps/server/src/agent-workflow/drizzle-write-support.ts +101 -0
  255. package/template/apps/server/src/agent-workflow/durable-continuation-authorization.ts +109 -0
  256. package/template/apps/server/src/agent-workflow/durable-continuation-driver.ts +97 -0
  257. package/template/apps/server/src/agent-workflow/durable-continuation-runtime.ts +173 -0
  258. package/template/apps/server/src/agent-workflow/durable-job-node-adapter.ts +106 -0
  259. package/template/apps/server/src/agent-workflow/effect-command-fence.ts +250 -0
  260. package/template/apps/server/src/agent-workflow/evaluation-evidence-coordinates.ts +225 -0
  261. package/template/apps/server/src/agent-workflow/evaluation-evidence-metrics.ts +280 -0
  262. package/template/apps/server/src/agent-workflow/evaluation-evidence-reader.ts +326 -0
  263. package/template/apps/server/src/agent-workflow/evaluation-metrics-validation.ts +85 -0
  264. package/template/apps/server/src/agent-workflow/evaluation-projection.ts +70 -0
  265. package/template/apps/server/src/agent-workflow/evaluation-repository.ts +134 -0
  266. package/template/apps/server/src/agent-workflow/evaluation-service.ts +292 -0
  267. package/template/apps/server/src/agent-workflow/evaluation-tool-registration.ts +95 -0
  268. package/template/apps/server/src/agent-workflow/evaluation-validation.ts +331 -0
  269. package/template/apps/server/src/agent-workflow/event-validation.ts +277 -0
  270. package/template/apps/server/src/agent-workflow/governed-tool-schema.ts +55 -0
  271. package/template/apps/server/src/agent-workflow/in-memory-evaluation-repository.ts +123 -0
  272. package/template/apps/server/src/agent-workflow/in-memory-mutation-validation.ts +154 -0
  273. package/template/apps/server/src/agent-workflow/in-memory-repository-support.ts +277 -0
  274. package/template/apps/server/src/agent-workflow/in-memory-repository.ts +339 -0
  275. package/template/apps/server/src/agent-workflow/in-memory-side-effect-store.ts +78 -0
  276. package/template/apps/server/src/agent-workflow/input-receipt.ts +55 -0
  277. package/template/apps/server/src/agent-workflow/model-node-adapter.ts +86 -0
  278. package/template/apps/server/src/agent-workflow/model-pricing-catalog.ts +215 -0
  279. package/template/apps/server/src/agent-workflow/node-adapter-factory.ts +83 -0
  280. package/template/apps/server/src/agent-workflow/node-adapters.ts +50 -0
  281. package/template/apps/server/src/agent-workflow/node-execution-ports.ts +185 -0
  282. package/template/apps/server/src/agent-workflow/node-input-receipt-port.ts +42 -0
  283. package/template/apps/server/src/agent-workflow/node-result-receipt.ts +50 -0
  284. package/template/apps/server/src/agent-workflow/platform-node-adapter-support.ts +185 -0
  285. package/template/apps/server/src/agent-workflow/platform-node-adapters.ts +256 -0
  286. package/template/apps/server/src/agent-workflow/platform-node-approval.ts +146 -0
  287. package/template/apps/server/src/agent-workflow/platform-node-direct-adapters.ts +65 -0
  288. package/template/apps/server/src/agent-workflow/production-delegation-scope.ts +58 -0
  289. package/template/apps/server/src/agent-workflow/production-node-policies.ts +62 -0
  290. package/template/apps/server/src/agent-workflow/query-service.ts +198 -0
  291. package/template/apps/server/src/agent-workflow/release.ts +96 -0
  292. package/template/apps/server/src/agent-workflow/repository.ts +157 -0
  293. package/template/apps/server/src/agent-workflow/routes.ts +307 -0
  294. package/template/apps/server/src/agent-workflow/runtime-composition.ts +308 -0
  295. package/template/apps/server/src/agent-workflow/scheduler-cancellation-reconcile.ts +253 -0
  296. package/template/apps/server/src/agent-workflow/scheduler-cancellation-support.ts +145 -0
  297. package/template/apps/server/src/agent-workflow/scheduler-cancellation.ts +2 -0
  298. package/template/apps/server/src/agent-workflow/scheduler-context.ts +85 -0
  299. package/template/apps/server/src/agent-workflow/scheduler-deadline.ts +65 -0
  300. package/template/apps/server/src/agent-workflow/scheduler-effect-result.ts +205 -0
  301. package/template/apps/server/src/agent-workflow/scheduler-execution-convergence.ts +174 -0
  302. package/template/apps/server/src/agent-workflow/scheduler-execution.ts +211 -0
  303. package/template/apps/server/src/agent-workflow/scheduler-failure.ts +102 -0
  304. package/template/apps/server/src/agent-workflow/scheduler-join-cancellation.ts +282 -0
  305. package/template/apps/server/src/agent-workflow/scheduler-mutation-queue.ts +13 -0
  306. package/template/apps/server/src/agent-workflow/scheduler-node-timeout.ts +139 -0
  307. package/template/apps/server/src/agent-workflow/scheduler-parallel-dispatch.ts +99 -0
  308. package/template/apps/server/src/agent-workflow/scheduler-recovery-activation.ts +63 -0
  309. package/template/apps/server/src/agent-workflow/scheduler-recovery-budget.ts +41 -0
  310. package/template/apps/server/src/agent-workflow/scheduler-recovery-effect.ts +331 -0
  311. package/template/apps/server/src/agent-workflow/scheduler-recovery-event-time.ts +26 -0
  312. package/template/apps/server/src/agent-workflow/scheduler-recovery-failed-policy.ts +129 -0
  313. package/template/apps/server/src/agent-workflow/scheduler-recovery-node.ts +208 -0
  314. package/template/apps/server/src/agent-workflow/scheduler-recovery-policy-convergence.ts +140 -0
  315. package/template/apps/server/src/agent-workflow/scheduler-reservation-convergence.ts +40 -0
  316. package/template/apps/server/src/agent-workflow/scheduler-side-effect-execution.ts +249 -0
  317. package/template/apps/server/src/agent-workflow/scheduler-support.ts +235 -0
  318. package/template/apps/server/src/agent-workflow/scheduler-workflow-cancellation.ts +296 -0
  319. package/template/apps/server/src/agent-workflow/scheduler.ts +289 -0
  320. package/template/apps/server/src/agent-workflow/service-completion.ts +102 -0
  321. package/template/apps/server/src/agent-workflow/service-mutation-identity.ts +94 -0
  322. package/template/apps/server/src/agent-workflow/service-node-admission.ts +36 -0
  323. package/template/apps/server/src/agent-workflow/service-node-run-update.ts +55 -0
  324. package/template/apps/server/src/agent-workflow/service-recovery-events.ts +38 -0
  325. package/template/apps/server/src/agent-workflow/service-recovery.ts +264 -0
  326. package/template/apps/server/src/agent-workflow/service-retry.ts +86 -0
  327. package/template/apps/server/src/agent-workflow/service-run-command.ts +131 -0
  328. package/template/apps/server/src/agent-workflow/service-state-error.ts +21 -0
  329. package/template/apps/server/src/agent-workflow/service-state-invariants.ts +44 -0
  330. package/template/apps/server/src/agent-workflow/service-support.ts +152 -0
  331. package/template/apps/server/src/agent-workflow/service.ts +307 -0
  332. package/template/apps/server/src/agent-workflow/side-effect-state.ts +226 -0
  333. package/template/apps/server/src/agent-workflow/state-machine.ts +321 -0
  334. package/template/apps/server/src/agent-workflow/subagent-node-adapter.ts +229 -0
  335. package/template/apps/server/src/agent-workflow/tool-node-adapter.ts +259 -0
  336. package/template/apps/server/src/agent-workflow/usage.ts +149 -0
  337. package/template/apps/server/src/agent-workflow/wait-signal-service.ts +147 -0
  338. package/template/apps/server/src/agent-workflow/workflow-artifact-token.ts +109 -0
  339. package/template/apps/server/src/agent-workflow/workflow-value-validation.ts +101 -0
  340. package/template/apps/server/src/agent-workflow/workspace-policy.ts +109 -0
  341. package/template/apps/server/src/ai-runtime-report/remote-parser.ts +41 -0
  342. package/template/apps/server/src/ai-runtime-report/service.test.ts +2 -0
  343. package/template/apps/server/src/app/agent-runtime-composition.ts +38 -0
  344. package/template/apps/server/src/app/client-agent-host-auth-binding.ts +10 -0
  345. package/template/apps/server/src/auth/actor-resolver.test.ts +33 -0
  346. package/template/apps/server/src/auth/actor-resolver.ts +6 -1
  347. package/template/apps/server/src/auth/composition.ts +36 -0
  348. package/template/apps/server/src/auth/routes.test-support.ts +2 -0
  349. package/template/apps/server/src/auth/routes.test.ts +18 -0
  350. package/template/apps/server/src/auth/runtime.ts +2 -0
  351. package/template/apps/server/src/auth/service-options.ts +16 -0
  352. package/template/apps/server/src/auth/service.ts +7 -12
  353. package/template/apps/server/src/index.ts +35 -37
  354. package/template/apps/server/src/license/pairing-service.test.ts +1 -1
  355. package/template/apps/server/src/module-host/agent-session-memory-port.ts +91 -0
  356. package/template/apps/server/src/module-host/{debug-session-provider-registration.test.ts → agent-session-provider-registration.test.ts} +42 -17
  357. package/template/apps/server/src/module-host/{debug-session-provider-registration.ts → agent-session-provider-registration.ts} +18 -18
  358. package/template/apps/server/src/module-host/agent-source-invalidation-port.ts +53 -0
  359. package/template/apps/server/src/module-host/http-runtime.ts +14 -0
  360. package/template/apps/server/src/module-host/initialize-contracts.ts +4 -5
  361. package/template/apps/server/src/module-host/initialize.ts +4 -4
  362. package/template/apps/server/src/module-host/request-context.test.ts +5 -5
  363. package/template/apps/server/src/module-host/request-context.ts +8 -0
  364. package/template/apps/server/src/module-host/route-install-context.ts +65 -0
  365. package/template/apps/server/src/module-host/route-installer.ts +11 -56
  366. package/template/apps/server/src/module-host/scoped-host.ts +17 -12
  367. package/template/apps/server/src/module-host/storage-authorization-binding.test.ts +3 -3
  368. package/template/apps/server/src/module-host.ts +3 -5
  369. package/template/apps/server/src/runtime.ts +3 -36
  370. package/template/apps/server/src/storage/routes-stream-cancellation.test.ts +19 -0
  371. package/template/apps/server/src/storage/routes.ts +3 -1
  372. package/template/apps/server/src/system/actor.ts +15 -2
  373. package/template/apps/server/src/system/authorization-invalidation-bridge.ts +30 -0
  374. package/template/apps/server/src/system/authorization-invalidation-composition.ts +36 -0
  375. package/template/apps/server/src/system/drizzle-system.ts +8 -1
  376. package/template/apps/server/src/system/identity-route-config.ts +9 -1
  377. package/template/apps/server/src/system/routes.ts +3 -0
  378. package/template/apps/server/src/system/seed.ts +3 -0
  379. package/template/apps/server/src/system/user-account-policy.ts +91 -0
  380. package/template/apps/web/package.json +1 -0
  381. package/template/apps/web/src/layout/AppSidebar.vue +2 -0
  382. package/template/apps/web/src/pages/system/AgentSessionPage.vue +73 -0
  383. package/template/apps/web/src/pages/system/AgentSessionPage.webtest.ts +66 -0
  384. package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +69 -0
  385. package/template/apps/web/src/pages/system/components/agent-session/AgentSessionDetail.vue +114 -0
  386. package/template/apps/web/src/pages/system/components/agent-session/AgentSessionList.vue +84 -0
  387. package/template/apps/web/src/pages/system/components/agent-session/ContextVersionPanel.vue +119 -0
  388. package/template/apps/web/src/pages/system/components/agent-session/ContextVersionPanel.webtest.ts +46 -0
  389. package/template/apps/web/src/pages/system/components/agent-session/MemoryProjectionPanel.vue +163 -0
  390. package/template/apps/web/src/pages/system/components/agent-session/MemoryProjectionPanel.webtest.ts +62 -0
  391. package/template/apps/web/src/pages/system/components/agent-session/SessionTimeline.vue +71 -0
  392. package/template/apps/web/src/pages/system/components/agent-session/SessionTimeline.webtest.ts +34 -0
  393. package/template/apps/web/src/pages/system/components/agent-session/agent-session-presenter.ts +56 -0
  394. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowNodeCard.vue +39 -0
  395. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowNodeDetail.vue +172 -0
  396. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunDetail.vue +151 -0
  397. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunGraph.vue +96 -0
  398. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunList.vue +100 -0
  399. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunSummary.vue +148 -0
  400. package/template/apps/web/src/pages/system/components/agent-workflow/agent-workflow-presenter.ts +74 -0
  401. package/template/apps/web/src/pages/system/components/agent-workflow/workflow-graph-layout.ts +108 -0
  402. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunDetailDialog.vue +9 -0
  403. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunDetailDialog.webtest.ts +22 -0
  404. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunTable.webtest.ts +2 -0
  405. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeTrajectory.vue +118 -0
  406. package/template/apps/web/src/pages/system/composables/useAgentSessions.ts +209 -0
  407. package/template/apps/web/src/pages/system/composables/useAgentSessions.webtest.ts +138 -0
  408. package/template/apps/web/src/pages/system/composables/useAgentWorkflowRuns.ts +173 -0
  409. package/template/apps/web/src/router/index.ts +4 -0
  410. package/template/apps/web/src/router/platform-admin-route-bindings.ts +6 -0
  411. package/template/apps/web/src/services/agent-session-api.ts +159 -0
  412. package/template/apps/web/src/services/agent-session-api.webtest.ts +65 -0
  413. package/template/apps/web/src/services/agent-workflow-api.ts +181 -0
  414. package/template/apps/web/src/services/ai-runtime-api.ts +4 -0
  415. package/template/docker-compose.yml +11 -8
  416. package/template/docs/adr/0003-agent-session-event-source.md +3 -0
  417. package/template/docs/architecture/agent-harness.md +464 -0
  418. package/template/docs/architecture/agent-workflow.md +99 -0
  419. package/template/docs/architecture/ai-runtime.md +55 -47
  420. package/template/docs/architecture/module-host.md +4 -3
  421. package/template/docs/operations/adk-retirement.md +98 -0
  422. package/template/docs/operations/agent-session-memory.md +162 -0
  423. package/template/docs/operations/agent-session-troubleshooting.md +196 -0
  424. package/template/docs/operations/agent-workflow-recovery.md +74 -0
  425. package/template/docs/operations/incremental-delivery.md +1 -1
  426. package/template/docs/platform/agent-production-store.md +82 -0
  427. package/template/docs/platform/agent-run-reattachment.md +52 -0
  428. package/template/docs/platform/agent-runtime-observability.md +4 -3
  429. package/template/docs/platform/agent-runtime.md +116 -281
  430. package/template/docs/platform/agent-tool-approval.md +61 -0
  431. package/template/docs/platform/background-ai-operations.md +50 -0
  432. package/template/docs/platform/client-agent-session.md +173 -0
  433. package/template/docs/platform/embedding-ai-runtime.md +94 -0
  434. package/template/docs/platform/platform-authentication.md +5 -8
  435. package/template/package.json +0 -1
  436. package/template/packages/ai-client/index.ts +1 -0
  437. package/template/packages/ai-client/package.json +2 -1
  438. package/template/packages/ai-client/src/agent/client/client.ts +15 -2
  439. package/template/packages/ai-client/src/agent/client/run-protocol.test.ts +39 -25
  440. package/template/packages/ai-client/src/agent/client/types.ts +4 -0
  441. package/template/packages/ai-client/src/agent/contracts/contracts.test.ts +49 -7
  442. package/template/packages/ai-client/src/agent/contracts/events.ts +61 -0
  443. package/template/packages/ai-client/src/agent/contracts/runs.ts +1 -0
  444. package/template/packages/ai-client/src/client-agent/contracts.ts +131 -0
  445. package/template/packages/ai-client/src/client-agent/http.test.ts +60 -0
  446. package/template/packages/ai-client/src/client-agent/http.ts +66 -0
  447. package/template/packages/ai-client/src/client-agent/index.ts +3 -0
  448. package/template/packages/ai-client/src/client-agent/validation.test.ts +57 -0
  449. package/template/packages/ai-client/src/client-agent/validation.ts +152 -0
  450. package/template/packages/config/index.test.ts +18 -0
  451. package/template/packages/config/package.json +1 -1
  452. package/template/packages/config/src/platform-validation.ts +8 -0
  453. package/template/packages/config/src/platform.ts +22 -9
  454. package/template/packages/database/drizzle/0055_square_yellowjacket.sql +47 -0
  455. package/template/packages/database/drizzle/0056_tricky_living_mummy.sql +2 -0
  456. package/template/packages/database/drizzle/0057_mature_doomsday.sql +4 -0
  457. package/template/packages/database/drizzle/0058_agent_session_memory.sql +159 -0
  458. package/template/packages/database/drizzle/0059_agent_source_module_key.sql +16 -0
  459. package/template/packages/database/drizzle/0060_slimy_rocket_raccoon.sql +43 -0
  460. package/template/packages/database/drizzle/0061_agent_workflow.sql +303 -0
  461. package/template/packages/database/drizzle/meta/0055_snapshot.json +11071 -0
  462. package/template/packages/database/drizzle/meta/0056_snapshot.json +11098 -0
  463. package/template/packages/database/drizzle/meta/0057_snapshot.json +10878 -0
  464. package/template/packages/database/drizzle/meta/0058_snapshot.json +12294 -0
  465. package/template/packages/database/drizzle/meta/0059_snapshot.json +12344 -0
  466. package/template/packages/database/drizzle/meta/0060_snapshot.json +12326 -0
  467. package/template/packages/database/drizzle/meta/0061_snapshot.json +14395 -0
  468. package/template/packages/database/drizzle/meta/_journal.json +49 -0
  469. package/template/packages/database/package.json +1 -1
  470. package/template/packages/database/src/agent-runtime-schema.test.ts +26 -0
  471. package/template/packages/database/src/schema/agent-context-message.ts +38 -0
  472. package/template/packages/database/src/schema/agent-runtime.ts +7 -0
  473. package/template/packages/database/src/schema/agent-session-receipt.ts +36 -0
  474. package/template/packages/database/src/schema/agent-session.ts +344 -0
  475. package/template/packages/database/src/schema/agent-workflow-delegation.ts +126 -0
  476. package/template/packages/database/src/schema/agent-workflow-effects.ts +213 -0
  477. package/template/packages/database/src/schema/agent-workflow-evaluation.ts +67 -0
  478. package/template/packages/database/src/schema/agent-workflow.ts +270 -0
  479. package/template/packages/database/src/schema/client-agent.ts +95 -0
  480. package/template/packages/database/src/schema/index.ts +8 -0
  481. package/template/packages/jobs/package.json +1 -1
  482. package/template/packages/modules/index.ts +2 -0
  483. package/template/packages/modules/package.json +1 -1
  484. package/template/packages/modules/src/ai-client-execution-composition.test.ts +98 -0
  485. package/template/packages/modules/src/ai-client-execution-policy.ts +54 -0
  486. package/template/packages/modules/src/ai-operation-composition.ts +2 -0
  487. package/template/packages/modules/src/manifest.ts +15 -0
  488. package/template/packages/modules/src/system-admin-routes.ts +16 -0
  489. package/template/packages/modules/src/system-admin-ui-catalog.ts +4 -1
  490. package/template/packages/modules/src/system-agent-audit-actions.ts +26 -0
  491. package/template/packages/modules/src/system-ai-api-bindings.ts +262 -0
  492. package/template/packages/modules/src/system-api-control-plane.ts +4 -78
  493. package/template/packages/modules/src/system-audit-actions.ts +113 -0
  494. package/template/packages/modules/src/system-features.ts +17 -0
  495. package/template/packages/modules/src/system-module-catalog.ts +21 -11
  496. package/template/packages/modules/src/system-modules.ts +22 -0
  497. package/template/packages/modules/src/system-permissions.ts +8 -0
  498. package/template/packages/server-sdk/index.ts +43 -0
  499. package/template/packages/server-sdk/package.json +5 -1
  500. package/template/packages/server-sdk/src/agent-session-memory-port.ts +64 -0
  501. package/template/packages/server-sdk/src/agent-session-provider.ts +63 -0
  502. package/template/packages/server-sdk/src/agent-source-invalidation-port.ts +54 -0
  503. package/template/packages/server-sdk/src/ai-operation-registration.ts +2 -0
  504. package/template/packages/server-sdk/src/client-agent-session.ts +95 -0
  505. package/template/packages/server-sdk/src/debug-session-provider.ts +14 -63
  506. package/template/packages/server-sdk/src/module-host.ts +7 -3
  507. package/template/packages/server-sdk/src/request-context.ts +6 -0
  508. package/template/packages/shared/index.ts +3 -0
  509. package/template/packages/shared/package.json +1 -1
  510. package/template/packages/shared/src/agent-workflow-definition.ts +113 -0
  511. package/template/packages/shared/src/agent-workflow-delegation.ts +123 -0
  512. package/template/packages/shared/src/agent-workflow-evaluation.ts +159 -0
  513. package/template/packages/shared/src/agent-workflow-events.ts +99 -0
  514. package/template/packages/shared/src/agent-workflow-run.ts +259 -0
  515. package/template/packages/shared/src/agent-workflow.ts +3 -0
  516. package/template/packages/shared/src/ai-runtime-report.ts +25 -0
  517. package/template/packages/shared/src/rbac.ts +24 -0
  518. package/template/packages/storage/package.json +1 -1
  519. package/template/packages/storage/src/upload-streams.test.ts +31 -0
  520. package/template/packages/storage/src/upload-streams.ts +20 -6
  521. package/template/apps/agent-server/adk_web_agents/__init__.py +0 -1
  522. package/template/apps/agent-server/adk_web_agents/canonical_debug/__init__.py +0 -1
  523. package/template/apps/agent-server/adk_web_agents/canonical_debug/agent.py +0 -145
  524. package/template/apps/agent-server/adk_web_agents/safe_debug/__init__.py +0 -3
  525. package/template/apps/agent-server/adk_web_agents/safe_debug/agent.py +0 -40
  526. package/template/apps/agent-server/adk_web_agents/services.py +0 -25
  527. package/template/apps/agent-server/project/adk-web-debug.json +0 -4
  528. package/template/apps/agent-server/src/southwind_agent_server/adk_adapter.py +0 -333
  529. package/template/apps/agent-server/src/southwind_agent_server/adk_debug.py +0 -348
  530. package/template/apps/agent-server/src/southwind_agent_server/adk_debug_sessions.py +0 -325
  531. package/template/apps/agent-server/src/southwind_agent_server/adk_failure.py +0 -13
  532. package/template/apps/agent-server/src/southwind_agent_server/adk_model.py +0 -304
  533. package/template/apps/agent-server/src/southwind_agent_server/adk_tools.py +0 -143
  534. package/template/apps/agent-server/tests/test_adk_adapter.py +0 -307
  535. package/template/apps/agent-server/tests/test_adk_debug_result_polling.py +0 -139
  536. package/template/apps/agent-server/tests/test_adk_debug_sessions.py +0 -215
  537. package/template/apps/agent-server/tests/test_adk_web_agent.py +0 -12
  538. package/template/apps/agent-server/tests/test_adk_web_canonical_debug.py +0 -282
  539. package/template/apps/server/src/agent/run-debug-authorization.ts +0 -27
  540. package/template/apps/server/src/agent/run-facade-adk-debug.test.ts +0 -95
  541. package/template/apps/server/src/runtime-adk-debug.test.ts +0 -270
  542. package/template/apps/server/src/runtime-adk-debug.ts +0 -164
  543. package/template/apps/server/src/runtime-request-actor.test.ts +0 -55
  544. package/template/apps/server/src/runtime-request-actor.ts +0 -22
  545. package/template/docker-compose.agent-debug.yml +0 -58
  546. package/template/scripts/dev-adk-web.ts +0 -107
@@ -0,0 +1,464 @@
1
+ # Windy Agent Harness:移除 ADK 与可插拔演进方案
2
+
3
+ 状态:AH-0 仓库实现完成,候选集中验证与发布证据待执行
4
+
5
+ 更新时间:2026-08-27
6
+
7
+ ## 1. 决策摘要
8
+
9
+ Windy 不再把 Google ADK 作为 Agent Runtime 的默认或可选内置实现。现有生产 Run 改由
10
+ Windy 自有的 OpenAI-compatible Loop 执行;完成兼容迁移后,删除 `google-adk`、ADK
11
+ Adapter、ADK Web、专用调试身份和 Starter 生成物。保留稳定的 `AgentEngineAdapter`、
12
+ canonical Run/Event、Provider 与 Tool Host 接缝,未来可以接入其它 Loop,但平台基线不再
13
+ 携带 ADK。
14
+
15
+ 长期 Session、Memory、Workflow、多 Agent 和可视化仍是明确需求。它们建立在 Windy 自有、
16
+ 可持久化和受治理的 Harness 契约上,不再借用 ADK Session、Event 或 Web UI 作为事实源。
17
+
18
+ 以下能力明确不进入本路线:
19
+
20
+ - Gemini Live 双向音视频;
21
+ - Google Cloud Agent Runtime、Vertex AI Agent Engine 及其部署生态;
22
+ - 生产 ADK Web 或 ADK 专属协议兼容层;
23
+ - 为迁移保留一个无人使用的 ADK sidecar 或第二套 Session Store。
24
+
25
+ ## 2. 为什么现在移除
26
+
27
+ 迁移前的 Windy 只使用 ADK 的 `Runner`、单个 `LlmAgent`、每 Run 新建的
28
+ `InMemorySessionService` 和 `Event`。Provider 请求、数据出网治理、Tool 执行、审批、用量、
29
+ 错误、取消、持久化与 SSE 都由 Windy 自己实现,再通过 Model/Tool/Event Bridge 转入转出
30
+ ADK。ADK 因而没有成为事实源,只在 Windy 已有模型循环外再增加一层语义转换。
31
+
32
+ 仓库已经存在 `OpenAiCompatibleEngineAdapter`,覆盖模型轮次、Tool Call、审批等待、取消、
33
+ Usage、结构化输出和输出上限。迁移的主要工作不是重写 Agent,而是冻结两套 Engine 的行为
34
+ 差异、补足直接 Engine 的契约测试,并安全删除 ADK 专属入口。
35
+
36
+ 移除后的直接收益:
37
+
38
+ - 降低 Python 依赖、镜像、SBOM、离线 wheel 和漏洞审查范围;
39
+ - 避免 ADK Event 与 Windy canonical Event、ADK Session 与 Windy Store 双重语义;
40
+ - Provider、Tool、审批、Session 和 Workflow 的版本演进只维护一套契约;
41
+ - 调试和轨迹查看回到 Windy 主 Web,不再要求开发者打开独立网站;
42
+ - 模型与部署继续保持 OpenAI-compatible,不绑定 Google 运行时。
43
+
44
+ ## 3. Harness 定义与插件原则
45
+
46
+ Windy 采用 `Agent = Model + Harness` 的理解:模型负责推理,Harness 提供环境理解、上下文、
47
+ 工具、执行、状态、恢复、约束和观察能力。DeepSeek Harness 的“一切皆插件”可作为设计参考,
48
+ 但其当前仍是 developer preview;Windy 不直接依赖或复制其 Cordis 内核。
49
+
50
+ ### 3.1 不可替换的治理内核
51
+
52
+ 以下能力必须保持在 Windy 核心,不能由普通插件替换或绕过:
53
+
54
+ - Actor、Tenant、RBAC、Data Scope、Feature、License 与审批决策;
55
+ - Manifest 组合、Schema 校验、稳定 Key、版本与依赖闭包;
56
+ - canonical Session/Run/Turn/Step/Event 身份与追加顺序;
57
+ - Execution Grant、Provider Data Policy、Tool Network Policy 和 Secret 边界;
58
+ - Audit、幂等、租约、取消、留存、删除传播和安全失败语义;
59
+ - 插件装配校验、健康状态、超时、资源预算和 fail-closed 行为。
60
+
61
+ ### 3.2 可替换的能力插件
62
+
63
+ 插件不是任意进程内代码注入,而是通过类型化 Registry 装配的受治理实现。优先复用已有
64
+ Module Host 与 Manifest,不再创建平行的通用插件容器。
65
+
66
+ | 插件能力 | 责任 | 首个实现 |
67
+ | -------------------------- | -------------------------------------------- | ------------------------------------------ |
68
+ | Model Provider | 模型协议、流式响应、Usage | OpenAI-compatible Provider |
69
+ | Agent Loop | Turn/Tool 循环与停止条件 | Windy Direct Loop |
70
+ | Tool Provider | 业务能力与副作用 | 现有 Manifest Tool Registry/Host |
71
+ | Context Source | 指令、最近事件、Skill、Artifact 摘要 | Windy Context Builder |
72
+ | Session Store | 追加 Event、恢复、fork/replay | PostgreSQL Event Store |
73
+ | Memory Projector/Retriever | 从事件派生记忆并按权限检索 | 结构化投影 + 现有 Search/Embedding Adapter |
74
+ | Workflow Node | LLM、Tool、审批、等待、分支、子 Agent 等节点 | Windy 内置节点 + 模块扩展节点 |
75
+ | Execution Runtime | Workspace、Shell、Python/Node | 隔离执行 Adapter |
76
+ | Client Agent | 页面等宿主本地循环 | PageAgent Adapter |
77
+ | UI Projection | 聊天、Trajectory、Workflow 图 | Windy Web 投影 |
78
+
79
+ 插件只能声明能力,不能自行授予权限、解析平台 Secret、直连 Repository 或改变 canonical
80
+ Event。依赖缺失、Key 重复、版本不兼容或策略未声明时,Composition 必须在启动前失败。
81
+
82
+ ### 3.3 开源复用而非复制核心实现
83
+
84
+ - 页面理解、页面 Tool Call 和 DOM 节点操作使用 PageAgent;Windy 只实现 Client Session、
85
+ 安全 Adapter、业务 Tool 与结果投影,不重写 PageAgent Loop。
86
+ - Workflow 画布优先评估成熟 Vue 3 节点编辑器,例如 Vue Flow;V1 只需要只读预览时可使用
87
+ 已有图可视化依赖。Windy 不自研缩放、拖拽、连线、MiniMap 和布局引擎。
88
+ - 持久任务复用现有 Durable Job;人工批准复用 `system.workflow` 的最小审批原语。二者是
89
+ Workflow Node 的 Adapter,不再各自创建新的 Job/Approval 状态机。
90
+ - Memory 检索复用 SearchProvider、Embedding Runtime 和数据库 Adapter;不在 Agent 模块内
91
+ 自研向量数据库。
92
+ - 引入任何新框架前记录许可证、活跃度、安全、离线交付、升级与退出成本。框架只能位于
93
+ Adapter 后方,不能成为业务 Manifest 或 canonical 数据格式。
94
+
95
+ ## 4. 目标运行架构
96
+
97
+ ```mermaid
98
+ flowchart LR
99
+ UI["Windy Web / Client"] --> API["Canonical Agent API"]
100
+ API --> Guard["Identity / RBAC / Scope / License"]
101
+ Guard --> Harness["Agent Harness Core"]
102
+ Harness --> Session["Session Event Store"]
103
+ Harness --> Context["Context Builder"]
104
+ Harness --> Loop["Agent Loop Plugin"]
105
+ Loop --> Model["Model Provider Plugin"]
106
+ Loop --> Tools["Governed Tool Host"]
107
+ Loop --> Workflow["Workflow Runtime"]
108
+ Workflow --> Jobs["Durable Job"]
109
+ Workflow --> Approval["Approval Work Item"]
110
+ Workflow --> Children["Child Agent"]
111
+ Harness --> Memory["Memory Projection / Retrieval"]
112
+ Session --> Projection["Chat / Trajectory / Workflow Projection"]
113
+ Projection --> UI
114
+ ```
115
+
116
+ 外部 HTTP/SSE 客户端只依赖 canonical API。Engine、Provider、Workflow 或 UI 插件更换不得
117
+ 改变既有 Run 创建、cursor 重放、取消、唯一终态和 Tool 授权语义。
118
+
119
+ ## 5. ADK 移除迁移
120
+
121
+ ### 5.1 阶段 A:冻结兼容基线
122
+
123
+ 先把当前 ADK Engine 的外部可观察行为固化为共享 Contract Suite。至少覆盖:
124
+
125
+ - 无 Tool、单 Tool、多 Tool 和多轮 Tool;
126
+ - Tool allowlist、参数拒绝、审批 pending/approved/rejected;
127
+ - 文本 delta、结构化输出、Citation/Source、Vision Artifact;
128
+ - Provider Data Policy、请求大小、输出上限和最大模型轮次;
129
+ - Usage attempt、Provider report、readiness、capacity 与 deployment attestation;
130
+ - 用户取消、deadline timeout、Provider 失败、Tool 失败和进程任务取消;
131
+ - canonical Event 顺序、SSE cursor 重放、最终结果和错误码。
132
+
133
+ 测试只比较公共 Engine Signal 和 HTTP/Event 契约,不把 ADK 私有 Event 当快照。固定一组
134
+ 真实 OpenAI-compatible Provider 录制 fixture 与确定性 Tool Host fixture,作为切换门禁。
135
+
136
+ ### 5.2 阶段 B:直接 Engine 补齐并切换
137
+
138
+ `runtime_factory` 改为默认创建 `OpenAiCompatibleEngineAdapter`。未配置 Provider 时使用明确的
139
+ `UnavailableEngineAdapter` fail closed,不再利用“空 ADK Adapter”表达未配置状态。
140
+
141
+ 切换要求:
142
+
143
+ - 不修改 `POST /api/agent/runs`、SSE、结果、取消和健康检查的公共 DTO;
144
+ - 不修改 Manifest Operation/Tool 定义及 Execution Grant;
145
+ - 不改变 Tool Host 的二次授权、command receipt 和审批恢复;
146
+ - 新 Run 的 runtime attestation 使用新的稳定 Engine ID;历史 Run 的旧 ADK attestation
147
+ 保持可读,不回填、不伪造为直接 Engine;
148
+ - Client Agent Session、PageAgent 和其它宿主本地 Loop 继续走自己的受治理端点,不被服务端
149
+ Engine 切换改写;
150
+ - 暂不增加 `AI_ENGINE` 长期配置。迁移分支可有测试开关,发布基线只保留一个默认 Engine,
151
+ 避免形成永久双实现。
152
+
153
+ ### 5.3 阶段 C:删除生产 ADK Bridge
154
+
155
+ 直接 Engine 通过 Contract Suite 后删除:
156
+
157
+ - `adk_adapter.py`、`adk_model.py`、`adk_tools.py`、`adk_event_merge.py`、
158
+ `adk_failure.py` 及其专属测试;
159
+ - `google-adk` 和仅由它引入的传递依赖;
160
+ - ADK 类型、版本号与 deployment facts 文案;
161
+ - 只验证 ADK Runner 的测试,保留并迁移所有平台治理与回归场景。
162
+
163
+ 执行依赖裁剪后重新生成锁文件,构建联网和离线镜像,比较 wheel 清单、镜像体积、SBOM 和
164
+ 启动 readiness。不得手工删锁文件条目。
165
+
166
+ ### 5.4 阶段 D:用 Windy 主站替代 ADK Web
167
+
168
+ 在删除 ADK Web 前,先让开发者能从 Windy 主 Web 查看同一 canonical Run 的聊天结果和
169
+ Trajectory。V1 是只读投影,不要求完整 Workflow 编辑器:
170
+
171
+ - 使用当前登录身份,不创建 `service_adk_debug`;
172
+ - 复用正常 Run、Session、Audit 与权限,不签发第二种调试 Token;
173
+ - 展示 Turn、Model、Tool、Approval、Artifact、失败、取消和受控摘要;
174
+ - 不显示 chain-of-thought、Secret、原始未脱敏 Provider body 或完整 Tool 参数;
175
+ - 可从业务会话进入 Run,也可按有权限的 Run ID 打开;独立开发站点不再存在。
176
+
177
+ 随后删除 ADK Web agents、debug Session Service、Compose wrapper、启动脚本、专用路由、专用
178
+ 身份和 `ADK_DEBUG_*`/`WINDY_ADK_DEBUG_*` 配置。
179
+
180
+ 现有 `registerDebugSessionProviders()` 不应突然破坏下游模块。先提供与 ADK 无关的
181
+ `registerAgentSessionProviders()`,让主站投影消费同一 Provider;旧方法作为 deprecated alias
182
+ 保留一个兼容发布周期,但实现不再依赖 ADK。下一次明确的破坏性版本再移除旧名称。
183
+
184
+ ### 5.5 阶段 E:Starter 与下游升级
185
+
186
+ `create-windy` 停止为新项目生成 ADK 依赖、`dev:adk-web`、debug compose、debug JSON、Token
187
+ 说明和相关文档。升级 recipe 按 ownership 处理:
188
+
189
+ - 对内容未漂移的 windy-managed 文件执行删除或替换;
190
+ - 对客户修改过的 managed 文件 fail closed 并输出人工迁移说明;
191
+ - project-owned `apps/agent-server/project/adk-web-debug.json` 不自动删除,只报告为无效遗留,
192
+ 由项目所有者确认后移除;
193
+ - 普通 `.env` 中已有非空 ADK Token 不自动改写或删除;`windy doctor` 只提示它已弃用;
194
+ - 数据库不需要删除式 Migration。旧 Run、Event、Report、Audit 和业务会话继续可读;
195
+ - 生成矩阵覆盖未选 `system.agent`、选择 Agent、从上一公开版本升级和客户文件漂移四种情况。
196
+
197
+ 升级后的下游项目继续使用 `bun run dev:agent`。原 `dev:adk-web` 不静默指向另一项行为;命令
198
+ 应被移除,并在升级报告中给出主站 Trajectory 的替代入口。
199
+
200
+ ## 6. 长期 Session 与 Memory
201
+
202
+ ### 6.1 Session 是追加事实源
203
+
204
+ Session 使用稳定的 Session/Run/Turn/Step ID 和 append-only Event Log。聊天消息、摘要、
205
+ Trajectory 和 UI 都是投影,不各自保存互相漂移的“完整历史”。每次模型请求记录实际使用的
206
+ Context 来源、版本和 digest;进程重启后从持久事实恢复,而不是依赖进程内对象。
207
+
208
+ Session 必须支持:
209
+
210
+ - 多 Run/Turn、并发控制、steering、cancel、resume;
211
+ - checkpoint、只读 replay 和 fork;
212
+ - Schema 版本迁移与未知事件安全拒绝;
213
+ - Actor/Scope 变化后的重新授权;
214
+ - 删除、归档和 retention 向投影、索引与 Artifact 传播。
215
+
216
+ 副作用 Tool 默认不因 replay/fork 重做。重新执行必须显式选择策略,并继续通过当前授权、审批、
217
+ 幂等和 command receipt。
218
+
219
+ AH-1 的平台实现使用 `agent_sessions` 保存当前头指针和治理绑定,使用
220
+ `agent_session_events` 保存加密 Event payload、明文事件类型、sequence 与 digest。Event ID
221
+ 用于提交重试去重,Session `head_sequence` 用作 CAS;Checkpoint、Fork 与归档均与对应 Event
222
+ 在同一事务内提交。重启后只从 PostgreSQL 事实恢复,不从 Run Event、Client Agent Session、
223
+ 浏览器缓存或内存对象重建长期 Session。
224
+
225
+ 现有 Agent Run 启动请求可显式携带 `sessionId`。Server 在调用 Runtime 前按当前 Actor 与 Scope
226
+ 重新授权并追加 `turn.started`,Runtime 返回真实 Run ID 后追加 `run.linked`;启动失败追加受控
227
+ Turn 终态。Run 仍是一次执行,Session 仍是跨 Run 的事实容器,两者不得互换。
228
+
229
+ 业务 `prepare` 给出的单一 `caseId` 由 Host 规范化为 Memory Scope,并同时固化到 Run 授权绑定、
230
+ `turn.started` 与 Context Version。相同幂等坐标不能切换案件;Agent Server 的 prepare、commit、
231
+ abort 回调必须与绑定完全一致。V1 不接受隐式跨案合并,也没有跨案 grant 时,缺失案件坐标表示
232
+ 不得恢复或检索任何案件绑定内容。
233
+
234
+ 终态结果遵循“幂等投影、持久 Receipt、关闭 Turn”的顺序。`turn.completed` 不能先于
235
+ `Terminal Projection Receipt`;若进程在投影或关闭之间崩溃,Reconciler 同时扫描开放 Turn 与
236
+ closed-but-unprojected 状态,按固定 Run/terminal sequence/result digest 重建或拒绝坐标漂移。
237
+ Receipt 证明投影步骤完成,但不拥有对应 Memory;用户删除单项投影不会被 Receipt 反向恢复。
238
+ 失败、取消和 attach 都走同一持久 Run binding,纯 SSE `/events` 只做既有 Run read Guard,任何
239
+ 会写长期 Session 的终态路径才额外要求 `system.agent-session.manage`。
240
+
241
+ `ContextBuilder` 为每个 Model attempt 装配受治理来源,但只有数据出网治理完成后的 Provider
242
+ 实际输入才能形成不可变 Context Version。调用分成两阶段:prepare 在当前 Actor、Scope、Feature、
243
+ License 和对象授权下返回允许治理的来源;Agent Server 完成 DLP、Provider policy 和消息归一化后,
244
+ commit 持久化最终消息顺序、角色、来源关系、每条消息 digest、工具与输出 schema digest,以及实际
245
+ Provider request digest。commit 必须在 Provider 看到输入前成功;治理拒绝、prepare 过期、来源
246
+ 复核失败或持久化失败都不得留下 `active` 版本,也不得声称请求已经发送。
247
+
248
+ 恢复工作线时,Builder 读取此前已提交 Context Version 的白名单消息投影、已完成 Run 的最终结果、
249
+ Session Summary、可用 Memory、ArtifactRef 与 Tool receipt。它不读取或保存模型原始推理链、隐藏
250
+ Provider 字段、原始 Tool 参数或未经治理的二进制;二进制输入只保留 ArtifactRef。最终 Context
251
+ 必须包含 instructions、当前 user prompt、Artifact、历史 assistant/tool 结果和 Memory 等实际发送
252
+ 来源,不能只记录当前 `turn.started` 的引用元数据。
253
+
254
+ 历史消息只从相同 Memory Scope 的 active Context Version 恢复;案件坐标缺失或不同的版本一律
255
+ 排除。Context 同时持久化被消费 Memory 投影自身的 ID/version/sequence/digest 与其底层权威来源链;
256
+ 后续 Memory 的 TTL 或删除失效可以直接命中消费它的 Context,派生 Memory 也保留该直接依赖并沿
257
+ 来源链收敛。Memory-to-Memory 复核允许有界递归,但环、深度或坐标上限都会 fail closed。
258
+
259
+ 每个来源必须包含 moduleKey、kind、ID、version、sequence、模型可见投影 digest、核验时间、TTL
260
+ 和有效性;录入失败时 Model attempt fail closed。Agent Server 的 Provider 循环经内部认证端口回调
261
+ Server;普通未绑定长期 Session 的 Run 不调用该端口。平台只提供 module-authoritative Adapter
262
+ 注册 seam;当前 `system.agent` 来源由生产 Adapter 提供,业务来源必须由所属模块注册权威对象
263
+ Adapter,缺少 Adapter 或无法确认对象时稳定 fail closed,不能构造假的业务对象授权。
264
+
265
+ ### 6.2 Memory 是受治理投影
266
+
267
+ Memory 不等于把全部聊天和网页永久塞回 Prompt。V1 分为:
268
+
269
+ | 层级 | 内容 | 默认留存 |
270
+ | --------------- | -------------------------------------- | ------------------ |
271
+ | Working Context | 当前 Turn 临时材料 | Run/Turn 生命周期 |
272
+ | Session Summary | 可解释的会话压缩与待办 | 随 Session |
273
+ | User Preference | 展示和工作偏好,不含案件事实 | 用户可查看/删除 |
274
+ | Business Memory | 带来源、范围、置信与复核状态的业务事实 | 由业务模块策略决定 |
275
+
276
+ Memory Projector 只能从已授权 Event、Artifact 和业务事实生成结构化候选;业务 Memory 必须保留
277
+ 来源引用,不能把模型总结自动提升为领域真相。Retriever 每次按当前 Actor、Scope、Feature、
278
+ License、TTL 和对象授权查询。撤权、删除、归档或来源失效必须传播到搜索与 Context。
279
+
280
+ AH-1 将 Working Context、Session Summary、User Preference、Case Memory Candidate 与
281
+ Verified Fact Reference 建成互斥类型。候选只有 `pending`/`rejected`,不能原地变成 Verified Fact;
282
+ Verified Fact 只保存权威业务对象引用。Memory 检索在每次调用时重新检查 Feature、Permission、
283
+ License、Scope、TTL 与对象授权,跨案候选不会自动合并。
284
+
285
+ 五类 Memory 均通过生产 Projector 的显式 append 入口生成,不以“已有表结构”冒充闭环:Turn/Run
286
+ 结果可派生 Working Context,Session 事实边界可派生 Session Summary,用户确认可写 User
287
+ Preference,业务模块可提交 Case Memory Candidate,权威业务模块核验后可写 Verified Fact
288
+ Reference。每次长期 Session attempt 都调用 Retriever;只有当前 Actor、Scope、Feature、License、
289
+ TTL、复核状态和逐来源对象授权全部通过的投影才可进入 prepare。Case candidate 与 Verified Fact
290
+ 不是永久排除项,但缺少所属模块权威 Adapter 时必须拒绝。
291
+
292
+ 业务模块通过当前 `ModuleRequestContext.sessionMemory` 的 V1 端口触发 User Preference、Case
293
+ Memory Candidate 与 Verified Fact Reference;Host 固定当前模块的 `moduleKey` 并绑定当前请求
294
+ Actor/Scope。模块不能声明其它模块身份。Working Context 与 Session Summary 由 Context commit 和
295
+ Run 终态投影触发;若客户端只消费 SSE 后断开,下一次长期 Session prepare 会先读取持久
296
+ `run.linked`,向 Agent Runtime 复核终态、补投最终结果并关闭 Turn,再构建 Context。
297
+
298
+ Working Context 无论调用方是否指定过期时间,都被限制在 Run/Turn 生命周期内,当前上限为 24 小时;
299
+ 调用方只能缩短,不能延长,Host 配置超过 24 小时会在 Composition 阶段直接拒绝。过期 Worker 先以
300
+ 条件更新收敛投影,再在同一事务追加 `source-expired`
301
+ Outbox,使 Context、Memory、Search、Embedding 与 UI 复用既有五路失效传播。
302
+
303
+ Case Memory 的检索必须携带业务 `prepare` 显式给出的当前 `caseId`;Session 血缘不能充当当前案件。
304
+ Host 仍通过所属业务模块的权威对象 Adapter 复核来源、案件和当前 Actor/Scope。没有 `caseId`、没有
305
+ Adapter 或无法确认授权时,Case Memory Candidate 与 Verified Fact Reference 均被安全排除,不会
306
+ 跨案自动混合。
307
+
308
+ 业务来源生命周期通过 `ModuleRequestContext.sourceInvalidation` 发布 deleted、expired、superseded
309
+ 或 authorization-revoked。Host 固定 Module Key 和当前授权坐标;调用方只提供本模块对象及领域事件
310
+ 坐标。底层 Producer 可绑定业务事务的 append seam。用户、角色和数据范围变更在平台身份事务内
311
+ 追加撤权 Outbox;读取路径同时重新解析当前 Actor,因而异步投影尚未收敛时仍 fail closed。
312
+
313
+ 来源失效使用版本化 Outbox,一条因果事实拆成 Search、Embedding、Context、Memory 与 UI 五个独立
314
+ Delivery。权威来源生命周期或 Session 归档与 Outbox 写入同一数据库事务;各 Delivery 使用
315
+ Lease、重试和幂等 ID。Memory 投影自身删除只删除该 projection,不发布 `source-deleted`,也不
316
+ 影响同源其它投影。Context 以自身 `sessionId` 标识派生 Session;Memory 另存
317
+ `derivedFromSessionId` 与派生时覆盖的事实序列,其使用范围仍可独立为 session、user 或 case。
318
+ Session 归档发布 `session-derived` 范围,并按派生
319
+ 坐标收敛该 Session 产生的所有投影;不能只匹配 `scopeKind=session`,也不能冒充业务来源删除。
320
+
321
+ 生产 Composition Root 已装配 Context/Memory 失效 Adapter、共享 canonical Memory 投影的
322
+ Search/Embedding Adapter、UI Adapter 和 Outbox Worker 调度。读取路径仍逐来源调用权威对象
323
+ Guard 并 fail closed,不能等待异步索引收敛后才拒绝。若部署引入独立 Search/Embedding 索引,
324
+ 必须用真实索引删除 Adapter 替换共享投影 Adapter;队列未清空时不得声称传播完成。
325
+
326
+ 主站 `/admin/system/agent-sessions` 只展示白名单投影:Session 状态、公共 Run/Turn/Step 引用、
327
+ Context 来源坐标和受控 Memory 摘要。它不返回原始 Prompt、Tool 参数、Memory content/value/claim
328
+ 或模型原始推理链。
329
+
330
+ ## 7. Workflow 与多 Agent
331
+
332
+ ### 7.1 Workflow 事实模型
333
+
334
+ Agent Workflow 是版本化有向图,不扩展现有 `system.workflow` 审批状态机来承载。当前
335
+ `system.workflow` 只作为 Approval Node Adapter;Durable Job 作为等待、后台执行和恢复
336
+ Adapter。
337
+
338
+ 首批节点类型:
339
+
340
+ - `model`:一次受治理模型调用;
341
+ - `tool`:调用 Manifest Tool;
342
+ - `subagent`:创建受限子 Agent;
343
+ - `condition`:对类型化结果做确定性分支;
344
+ - `parallel` / `join`:有界并行与汇合;
345
+ - `approval`:创建并等待审批工作项;
346
+ - `job` / `wait`:提交 Durable Job 或等待外部事实;
347
+ - `artifact`:校验并封存输出;
348
+ - `final`:生成符合 Output Schema 的最终结果。
349
+
350
+ 定义以代码或 YAML/JSON Schema 为事实源,发布后形成不可变 Workflow Release。每个 Run 固定
351
+ Workflow、Prompt、Tool Schema、Route 与 Runtime 版本。模型不能生成未知节点、提升自己的 Tool
352
+ 集合或改写执行预算。
353
+
354
+ ### 7.2 预设优先,在线编排后置
355
+
356
+ 先交付由开发者审核的预设 Workflow,例如“检索证据 → 时间线/关系/资金并行分析 → 来源校验
357
+ → 人工复核 → 报告草稿”。业务模块只组合稳定 Tool/API,不把领域 Repository 暴露给 Agent。
358
+
359
+ 第一阶段在 Windy 主 Web 提供只读 Workflow 图与实时节点状态。第二阶段才提供可编辑画布、
360
+ Schema 校验、diff、试跑、审批、发布和回滚。画布使用成熟开源组件;UI layout 不是 Runtime
361
+ 事实,拖拽坐标变化不能产生新的业务 Release。
362
+
363
+ ### 7.3 多 Agent 是受限委派
364
+
365
+ 子 Agent 是带独立身份坐标、预算、Context、Tool allowlist、Workspace 和终态的 Session/Run,
366
+ 不是函数内递归调用。父 Agent 只能传递明确 Artifact/摘要并等待类型化结果;子 Agent 不继承父
367
+ Agent 的全部权限、Secret、网络或数据范围。父子关系写入 canonical Event,取消、deadline 和
368
+ 预算向下传播,失败由 Workflow 的显式策略处理。
369
+
370
+ AH-2 的完整事实模型、side-effect command fence、评测 identity 与只读 Vue Flow 边界见
371
+ [Agent Workflow、委派与评测](./agent-workflow.md)。该实现继续把审批和 Durable Job 保持为
372
+ Adapter,并以 fresh-deploy 0061 建立结构性 schema,不包含旧开发数据兼容 DML。
373
+
374
+ ## 8. 兼容、发布与回滚门槛
375
+
376
+ ### 8.1 不允许变化的公共行为
377
+
378
+ - Run、SSE、Result、Cancel、Health/Readiness 的 URL 和 DTO;
379
+ - Manifest Operation/Tool Schema、Feature/Permission/License 与审计动作;
380
+ - Execution Grant、Tool Host、审批、command receipt、ArtifactRef;
381
+ - Client Agent Session 与 PageAgent 的受治理模型端点;
382
+ - 历史 Run、Report、Usage、Audit 和 Citation 的读取能力。
383
+
384
+ ### 8.2 发布门禁
385
+
386
+ 每个阶段使用独立小提交。最终候选至少通过:
387
+
388
+ 1. Python ruff、mypy 和 Agent Server 单元/合约测试;
389
+ 2. TypeScript lint、typecheck 与受影响模块测试;
390
+ 3. Agent 生成矩阵、update recipe、pack consumer 和离线构建;
391
+ 4. ADK 与 Direct Contract Suite 行为对照;
392
+ 5. 真实 PostgreSQL 的 Run/Event/Report 兼容读取;
393
+ 6. OpenAI-compatible 文本、Tool、Vision、审批、取消和 Provider 失败集成;
394
+ 7. 现有利剑 PageAgent/Client Agent Session 消费验证;
395
+ 8. SBOM、镜像、无公网依赖启动和旧环境变量容忍检查。
396
+
397
+ ### 8.3 回滚
398
+
399
+ 切换发布前保留上一版本镜像与数据库备份。迁移只追加或保持 Schema,不删除历史事实,因此
400
+ 应用回滚不需要数据降级。若 Direct Engine 在候选阶段出现行为差异,回滚整个应用候选,不在
401
+ 生产环境用动态开关切回 ADK。ADK 文件和依赖只有在 Direct Engine 已通过全部门禁后才从下一
402
+ 候选删除。
403
+
404
+ AH-1 Session/Context/Memory 在本版本定义为 fresh-deploy baseline:不迁移、不读取旧开发期 Agent
405
+ 聊天历史或 AH-1 派生日志。首次验收从清空旧开发 Docker 容器及其数据卷后的空 PostgreSQL 启动,
406
+ 由 0058、0059、0060 顺序建立当前 schema;正式既有 Run 审计、Client Agent Session、Artifact、
407
+ 审批、上传和业务数据不属于这项开发期数据边界。
408
+
409
+ ## 9. 实施顺序
410
+
411
+ AH-0 已完成前五项的仓库实现:兼容 Contract、Direct 默认 Engine、Bridge/依赖删除、主站
412
+ Trajectory/Agent Session Provider,以及 create-windy 生成与升级 recipe。第 5 项中的下游利剑
413
+ 升级和所有候选/发布验证由发布流程执行,不属于本次仓库实现证据。
414
+
415
+ AH-1 已建立 Session Event Log、PostgreSQL Checkpoint/Replay/Fork、Context/Memory 契约、来源失效
416
+ Outbox、生产 ContextVersion 回调、失效 Worker 和主站只读投影。仓库装配不能替代真实
417
+ PostgreSQL/Provider、容器重启、并发 CAS、撤权传播和独立 Search/Embedding 索引评测。
418
+
419
+ 后续顺序保持为:
420
+
421
+ 1. 完成 AH-1 真实 Provider attempt、真实部署传播与恢复演练;
422
+ 2. 发布预设 Workflow、只读图和节点运行状态;
423
+ 3. 增加受限子 Agent 与 Harness 级评估;
424
+ 4. 有真实非开发人员编辑需求后,再接入成熟画布实现在线编排。
425
+
426
+ ADK 移除不等待长期 Session/Workflow 完成;但删除 ADK Web 前必须有主站 Run/Trajectory 的替代
427
+ 入口。Session、Memory、Workflow 和多 Agent 按上述顺序增量交付,不能以一次大重写替换现有
428
+ 可用 Run。
429
+
430
+ ### 9.1 建议提交切片
431
+
432
+ 当前 Windy 工作区若还有 Client Agent Session 或其它未提交实现,先把它们完成并独立提交;
433
+ 不要把 ADK 迁移混入同一 diff。随后按以下可单独回滚的切片执行:
434
+
435
+ 1. `test(agent): freeze engine compatibility contract`:只增加共享 fixture 与 Contract Suite;
436
+ 2. `feat(agent): make direct engine canonical`:补 unavailable Engine、切换工厂和 attestation;
437
+ 3. `refactor(agent): remove google adk runtime bridge`:删除生产 Bridge、依赖并刷新锁文件;
438
+ 4. `feat(agent): expose native run trajectory`:主站投影与通用 Session Provider;
439
+ 5. `refactor(agent): remove adk web debug surface`:删除专用身份、路由、Compose 和脚本;
440
+ 6. `feat(create-windy): migrate projects off adk`:生成矩阵、recipe、doctor 和 pack consumer;
441
+ 7. `docs(agent): make windy harness framework independent`:把现状文档、README 和 ADR 更新为
442
+ Direct Engine 与 Windy Session/Workflow 事实。
443
+
444
+ 每个切片先运行直接相关的静态检查和测试;最终合并候选运行 `bun run test:merge`,发布候选运行
445
+ `bun run release:verify`。Agent Server 至少运行:
446
+
447
+ ```bash
448
+ uv run --directory apps/agent-server ruff check .
449
+ uv run --directory apps/agent-server ruff format --check .
450
+ uv run --directory apps/agent-server mypy
451
+ uv run --directory apps/agent-server pytest
452
+ ```
453
+
454
+ 依赖删除后再运行一次联网构建和使用固定 wheel/镜像缓存的离线构建。最后执行全仓搜索;除迁移
455
+ 说明、Changelog 与历史兼容 fixture 外,不得再存在 `google-adk`、`google.adk`、ADK Web
456
+ Compose、`service_adk_debug` 或活跃 `ADK_DEBUG_*` 配置。
457
+
458
+ ## 10. 参考
459
+
460
+ - [DeepSeek Harness](https://deepseek.com/harness/en/):插件化 Harness 与追加 Session Log
461
+ 的设计参考;当前 developer preview,不作为 Windy 生产依赖。
462
+ - [DeepSeek Harness Architecture](https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/architecture.md)
463
+ - [Vue Flow](https://vueflow.dev/):Vue 3 Workflow 画布候选;采用前仍需完成依赖评估与固定版本。
464
+ - [PageAgent](https://github.com/alibaba/page-agent):页面理解与浏览器动作复用边界。
@@ -0,0 +1,99 @@
1
+ # Agent Workflow、委派与评测
2
+
3
+ ## 边界
4
+
5
+ AH-2 在 `system.agent` 内提供预设 Workflow 的发布、持久运行、恢复、受限委派和只读投影。
6
+ 它不把 `system.workflow` 审批状态机改造成图引擎:Approval Work Item 和 Durable Job 都只是
7
+ 类型化 Node Adapter。PageAgent 仍只通过 Client Agent Session 在浏览器宿主运行,不能嵌入
8
+ 服务端 Workflow Runtime。
9
+
10
+ `system.agent-workflow` Feature 依赖 `system.agent`,仅 Advanced License 可用;读取与管理分别
11
+ 要求 `system.agent-workflow.read`、`system.agent-workflow.manage`。API、菜单、路由和审计动作
12
+ 都引用这些 Manifest Key。每次创建、委派、恢复和 Artifact 打开还要重新执行 Actor、Scope、
13
+ Feature、Permission、License 与对象授权,客户端提交的授权摘要只能用于冲突检测,不能授予权限。
14
+
15
+ ## 事实模型与不变量
16
+
17
+ - Workflow Definition 是版本化有向图;节点只允许 `model`、`tool`、`subagent`、`condition`、
18
+ `parallel`、`join`、`approval`、`job`、`wait`、`artifact`、`final`。每个节点必须声明失败策略:
19
+ fail run、有限次数带 backoff 重试,或显式 skip。
20
+ - Immutable Release 固定规范化 Definition,以及 prompt、route、manifest、tool schema 和 runtime
21
+ 坐标。`releaseDigest` 由二者计算;Repository 只允许 insert,同 digest 重放返回原 Release,
22
+ 任何 identity 或 JSON 漂移都拒绝,禁止更新 `release_json`。
23
+ - Workflow Run 固定 Release、Actor、Scope、Budget,以及 authorization、tool、workspace、execution
24
+ policy digest。Run 与 Node Run 只允许共享契约声明的转换;终态必须同时写 `finishedAt`。
25
+ - Budget 使用预留账本控制 duration、模型尝试、Tool、子 Agent、并行度、token 和 cost。Usage
26
+ 明确区分 measured 与 unknown;存在对应上限而 Provider 未上报时 fail closed,不能把 unknown
27
+ 当作零。
28
+ - Cancellation 向未终结 Node 与子级传播;Recovery 不是重放整个 Run,而是在当前授权与剩余
29
+ Budget 下协调未决 command、receipt 和可恢复 Node。恢复次数、Run/Node version 与 Event sequence
30
+ 都使用 CAS。
31
+ - Side-effect command fence 在调用 Tool、Approval、Job、Subagent Adapter 前持久化 prepared
32
+ command。Adapter 用稳定 idempotency key 提交;返回后持久化外部 receipt。若进程在外部提交后
33
+ 崩溃,Recovery 先按同一 command coordinate 查询或协调 Adapter,再提交 Node 终态,绝不盲目
34
+ 重做副作用。
35
+ - condition 的选择、小型类型化结果、result digest 与 ArtifactRef 形成 Node result receipt,
36
+ 并与 Node 终态、canonical Event 在一个原子提交中落库。这样在选择分支后、调度后继前崩溃
37
+ 仍能从事实恢复。
38
+
39
+ `0061_agent_workflow.sql` 只为清空旧 Docker 容器和数据卷后的 fresh deploy 增加结构性 DDL。
40
+ 它不清理、搬迁或兼容旧 Agent 会话、聊天与开发日志。Run 下游 Node、Event、Delegation、Budget、
41
+ side-effect 与 Evaluation 使用 `RESTRICT` 或独立 retention,不允许删除 Run 顺带抹除审计与恢复
42
+ 事实。
43
+
44
+ ## 委派
45
+
46
+ Delegation 固定 `childAgentRunId`;父子 Workflow 因果 Event 使用独立的
47
+ `childWorkflowRunId`,两类坐标不能混用。子 Agent 的 capability、Tool allowlist、Budget、
48
+ Workspace、Scope 与 policy 都独立冻结。
49
+
50
+ 有效委派策略必须同时满足:
51
+
52
+ 1. Immutable Release 声明的 required Feature/Permission 原样继承,调用请求不能删除;
53
+ 2. 父级 ceiling 与当前 Host 授权都包含全部 required guards;
54
+ 3. Tool allowlist 是 Release、父级、当前 Host 与请求收窄集合的交集;
55
+ 4. Scope、Workspace、capability 和执行策略不比 Release 或父级更宽;
56
+ 5. Budget admission 在同一串行化边界内比较父级剩余量并预留;恢复时再次比较当前授权。
57
+
58
+ 父子只通过 canonical Parent/Child Event、受控摘要、Node result receipt 与 ArtifactRef 交付。
59
+ 不复制原始推理链、Provider body 或大对象。子 Agent 结果是待核验输出,不会自动成为业务事实;
60
+ 写 Tool 仍走现有审批、对象授权、幂等 command 和 receipt。
61
+
62
+ ## ArtifactRef
63
+
64
+ 持久 ArtifactRef 只保存稳定 coordinate:artifactId、hash、size、media type、retention policy、
65
+ source module/kind/id/version。`expiresAt`、authorization status、下载 URL、Bearer token 和其它
66
+ 短期引用不得成为持久业务事实。每次打开 Artifact 都以当前 Actor/Scope/Object 重新授权,并由
67
+ Storage Host 签发短期下载凭据。
68
+
69
+ ## 固定评测 contract
70
+
71
+ Evaluation 在完全相同的 case input、模型/部署配置、Tool schema/runtime policy/allowlist、Budget、
72
+ Scope、authorization、Workspace、execution policy、runtime 与 rubric 下,对比单 Agent 与多 Agent。
73
+ identityDigest 同时覆盖两臂 releaseDigest,以及各自 route、prompt、manifest 坐标;任一组合变化
74
+ 都会形成新评测。
75
+
76
+ 每个 arm 独立保存 status、nullable Run、metrics 和 evidence。`unavailable` 不伪造 Run;服务端在
77
+ 同一事务或一致快照中确认 Run 固定对应 Immutable Release。指标记录完成率、时延、成本、token、
78
+ 失败、人工接管、evidence quality、安全拒绝和恢复能力。Provider 未上报的 token/cost 必须为
79
+ unknown/null,并带 measurement/source/status,不能写零。只有真实 Provider、真实 Tool/Artifact/
80
+ receipt 与可复核 rubric evidence 才能形成结果;仓库契约、fixture 或本地空数据库不能冒充评测。
81
+
82
+ ## 只读图与第三方依赖边界
83
+
84
+ 主站使用 `@vue-flow/core` `1.48.2` 的 MIT 许可版本,仅呈现由 canonical Run/Node 投影生成的
85
+ 只读图。依赖锁定在 Bun lockfile 并随 Web 静态资源离线交付,不使用运行时 CDN。允许 pan、zoom、
86
+ fit view 与选择 Node;禁止连接、拖动、删除、在线编辑或把布局坐标回写业务事实,同时提供语义化
87
+ 节点列表作为键盘与读屏替代。
88
+
89
+ 采用前的最小评估结论是:该 Vue 3 组件仍有维护中的正式发布,许可证与当前分发兼容;图交互
90
+ 属于 UI Adapter,不进入 Workflow Definition、Release 或 Event。升级时检查 changelog、依赖漏洞
91
+ 与离线 bundle;若维护或安全条件不再满足,可替换单一图组件,列表投影与 Runtime 事实保持不变。
92
+ 没有真实编辑需求前不引入 Dagre/ELK、Minimap、Controls 或在线编辑器能力。
93
+
94
+ ## Composition 与 Adapter
95
+
96
+ Composition Root 为 Workflow Repository、Evaluation Repository、Approval Adapter、Durable Job
97
+ Adapter、Governed Tool Host 与 Subagent Adapter 各绑定一个实现。生产使用 PostgreSQL Repository;
98
+ 进程内 Repository 只用于受限开发或契约验证,不能作为可恢复运行事实源。未知 Node、缺失 Adapter、
99
+ 重复 Key、Release 漂移或未声明 Manifest guard 必须在启动或接收命令时 fail closed。