create-windy 0.6.12 → 0.6.15

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 (654) hide show
  1. package/dist/cli.js +785 -291
  2. package/package.json +1 -1
  3. package/template/.agents/skills/windy-business-module/SKILL.md +148 -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/attempt-authority.test.ts +162 -0
  75. package/template/apps/server/src/agent/client-session/attempt-authority.ts +191 -0
  76. package/template/apps/server/src/agent/client-session/authorization.ts +47 -0
  77. package/template/apps/server/src/agent/client-session/bootstrap.ts +112 -0
  78. package/template/apps/server/src/agent/client-session/capabilities.ts +19 -0
  79. package/template/apps/server/src/agent/client-session/completion.ts +350 -0
  80. package/template/apps/server/src/agent/client-session/contracts.ts +159 -0
  81. package/template/apps/server/src/agent/client-session/creation.ts +103 -0
  82. package/template/apps/server/src/agent/client-session/digest.ts +49 -0
  83. package/template/apps/server/src/agent/client-session/drizzle-records.ts +150 -0
  84. package/template/apps/server/src/agent/client-session/drizzle-repository.integration.test.ts +197 -0
  85. package/template/apps/server/src/agent/client-session/drizzle-repository.ts +236 -0
  86. package/template/apps/server/src/agent/client-session/errors.ts +28 -0
  87. package/template/apps/server/src/agent/client-session/finalization.ts +99 -0
  88. package/template/apps/server/src/agent/client-session/fixtures/page-agent-1.12.2-request.json +52 -0
  89. package/template/apps/server/src/agent/client-session/host-auth.test.ts +144 -0
  90. package/template/apps/server/src/agent/client-session/host-auth.ts +122 -0
  91. package/template/apps/server/src/agent/client-session/host-revocation-composition.test.ts +77 -0
  92. package/template/apps/server/src/agent/client-session/host-revocation-composition.ts +28 -0
  93. package/template/apps/server/src/agent/client-session/launch-authority.contract.test.ts +21 -0
  94. package/template/apps/server/src/agent/client-session/manifest-admission.ts +251 -0
  95. package/template/apps/server/src/agent/client-session/openai-stream.ts +123 -0
  96. package/template/apps/server/src/agent/client-session/presentation.ts +46 -0
  97. package/template/apps/server/src/agent/client-session/remote-provider.test.ts +144 -0
  98. package/template/apps/server/src/agent/client-session/remote-provider.ts +216 -0
  99. package/template/apps/server/src/agent/client-session/repository.ts +225 -0
  100. package/template/apps/server/src/agent/client-session/request.test.ts +69 -0
  101. package/template/apps/server/src/agent/client-session/request.ts +289 -0
  102. package/template/apps/server/src/agent/client-session/revocation.ts +23 -0
  103. package/template/apps/server/src/agent/client-session/routes.ts +315 -0
  104. package/template/apps/server/src/agent/client-session/runtime-audit.ts +42 -0
  105. package/template/apps/server/src/agent/client-session/service.test-support.ts +248 -0
  106. package/template/apps/server/src/agent/client-session/service.test.ts +268 -0
  107. package/template/apps/server/src/agent/client-session/service.ts +316 -0
  108. package/template/apps/server/src/agent/client-session/terminal-digest.test.ts +23 -0
  109. package/template/apps/server/src/agent/client-workflow-artifact/active-blob-references.ts +8 -0
  110. package/template/apps/server/src/agent/client-workflow-artifact/artifact-builder.ts +60 -0
  111. package/template/apps/server/src/agent/client-workflow-artifact/authority-current.ts +59 -0
  112. package/template/apps/server/src/agent/client-workflow-artifact/binding-registry.test.ts +189 -0
  113. package/template/apps/server/src/agent/client-workflow-artifact/binding-registry.ts +153 -0
  114. package/template/apps/server/src/agent/client-workflow-artifact/bootstrap.ts +77 -0
  115. package/template/apps/server/src/agent/client-workflow-artifact/cancellation.ts +47 -0
  116. package/template/apps/server/src/agent/client-workflow-artifact/completed-recovery.ts +31 -0
  117. package/template/apps/server/src/agent/client-workflow-artifact/contracts.ts +104 -0
  118. package/template/apps/server/src/agent/client-workflow-artifact/drizzle-locks.ts +30 -0
  119. package/template/apps/server/src/agent/client-workflow-artifact/drizzle-mapper.ts +138 -0
  120. package/template/apps/server/src/agent/client-workflow-artifact/drizzle-repository.ts +346 -0
  121. package/template/apps/server/src/agent/client-workflow-artifact/error.ts +21 -0
  122. package/template/apps/server/src/agent/client-workflow-artifact/handler.ts +167 -0
  123. package/template/apps/server/src/agent/client-workflow-artifact/host-revocation.ts +29 -0
  124. package/template/apps/server/src/agent/client-workflow-artifact/in-memory-repository.ts +232 -0
  125. package/template/apps/server/src/agent/client-workflow-artifact/job-port.ts +101 -0
  126. package/template/apps/server/src/agent/client-workflow-artifact/presentation.ts +41 -0
  127. package/template/apps/server/src/agent/client-workflow-artifact/recovery.contract.test.ts +253 -0
  128. package/template/apps/server/src/agent/client-workflow-artifact/release-binding.ts +85 -0
  129. package/template/apps/server/src/agent/client-workflow-artifact/repository.test.ts +204 -0
  130. package/template/apps/server/src/agent/client-workflow-artifact/repository.ts +97 -0
  131. package/template/apps/server/src/agent/client-workflow-artifact/routes-handler.contract.test.ts +201 -0
  132. package/template/apps/server/src/agent/client-workflow-artifact/routes.ts +161 -0
  133. package/template/apps/server/src/agent/client-workflow-artifact/runtime-composition.ts +101 -0
  134. package/template/apps/server/src/agent/client-workflow-artifact/scope-authority.ts +39 -0
  135. package/template/apps/server/src/agent/client-workflow-artifact/service-authorization.ts +117 -0
  136. package/template/apps/server/src/agent/client-workflow-artifact/service-support.ts +28 -0
  137. package/template/apps/server/src/agent/client-workflow-artifact/service.contract.test.ts +345 -0
  138. package/template/apps/server/src/agent/client-workflow-artifact/service.ts +350 -0
  139. package/template/apps/server/src/agent/client-workflow-artifact/session-boundary.ts +39 -0
  140. package/template/apps/server/src/agent/client-workflow-artifact/source-access.contract.test.ts +98 -0
  141. package/template/apps/server/src/agent/client-workflow-artifact/source-access.ts +80 -0
  142. package/template/apps/server/src/agent/client-workflow-artifact/takeover.ts +122 -0
  143. package/template/apps/server/src/agent/client-workflow-artifact/task-authority.contract.test.ts +97 -0
  144. package/template/apps/server/src/agent/client-workflow-artifact/task-authority.ts +147 -0
  145. package/template/apps/server/src/agent/client-workflow-artifact/terminal-authority.contract.test.ts +100 -0
  146. package/template/apps/server/src/agent/client-workflow-artifact/terminal-replay.ts +31 -0
  147. package/template/apps/server/src/agent/client-workflow-artifact/terminal-seal.ts +211 -0
  148. package/template/apps/server/src/agent/client-workflow-artifact/workflow-artifact.test-support.ts +173 -0
  149. package/template/apps/server/src/agent/client-workflow-artifact/workflow-loader.contract.test.ts +254 -0
  150. package/template/apps/server/src/agent/client-workflow-artifact/workflow-loader.ts +285 -0
  151. package/template/apps/server/src/agent/context-memory/attempt-context-contracts.ts +60 -0
  152. package/template/apps/server/src/agent/context-memory/authoritative-source-registry.ts +127 -0
  153. package/template/apps/server/src/agent/context-memory/context-builder.test.ts +160 -0
  154. package/template/apps/server/src/agent/context-memory/context-builder.ts +184 -0
  155. package/template/apps/server/src/agent/context-memory/contracts.ts +284 -0
  156. package/template/apps/server/src/agent/context-memory/digest.ts +22 -0
  157. package/template/apps/server/src/agent/context-memory/memory-authorization.ts +82 -0
  158. package/template/apps/server/src/agent/context-memory/memory-content.ts +69 -0
  159. package/template/apps/server/src/agent/context-memory/memory-object-registry.ts +87 -0
  160. package/template/apps/server/src/agent/context-memory/memory-projector-contracts.ts +121 -0
  161. package/template/apps/server/src/agent/context-memory/memory-projector-validation.ts +155 -0
  162. package/template/apps/server/src/agent/context-memory/memory-projector.test.ts +19 -0
  163. package/template/apps/server/src/agent/context-memory/memory-projector.ts +259 -0
  164. package/template/apps/server/src/agent/context-memory/memory-retrieval-policy.ts +195 -0
  165. package/template/apps/server/src/agent/context-memory/memory-retriever.test.ts +339 -0
  166. package/template/apps/server/src/agent/context-memory/memory-retriever.ts +184 -0
  167. package/template/apps/server/src/agent/context-memory/search-provider-port.test.ts +62 -0
  168. package/template/apps/server/src/agent/context-memory/search-provider-port.ts +75 -0
  169. package/template/apps/server/src/agent/context-memory/working-context-expiry.ts +95 -0
  170. package/template/apps/server/src/agent/context-message-recovery.ts +23 -0
  171. package/template/apps/server/src/agent/context-version-routes.ts +241 -0
  172. package/template/apps/server/src/agent/context-version-runtime.ts +332 -0
  173. package/template/apps/server/src/agent/context-version-support.ts +93 -0
  174. package/template/apps/server/src/agent/context-version-validation.ts +118 -0
  175. package/template/apps/server/src/agent/drizzle-run-binding-repository.ts +11 -0
  176. package/template/apps/server/src/agent/idempotency-key.ts +9 -1
  177. package/template/apps/server/src/agent/memory-runtime-adapters.ts +266 -0
  178. package/template/apps/server/src/agent/memory-scope-binding.ts +14 -0
  179. package/template/apps/server/src/agent/module-ai-port-factory.ts +41 -0
  180. package/template/apps/server/src/agent/provider-input-governance.ts +19 -0
  181. package/template/apps/server/src/agent/remote-runtime-response.ts +162 -0
  182. package/template/apps/server/src/agent/remote-runtime.ts +53 -153
  183. package/template/apps/server/src/agent/run-audit.ts +2 -2
  184. package/template/apps/server/src/agent/run-authorization.test.ts +27 -0
  185. package/template/apps/server/src/agent/run-authorization.ts +60 -1
  186. package/template/apps/server/src/agent/run-binding-repository.ts +9 -0
  187. package/template/apps/server/src/agent/run-browser-authorization.ts +79 -0
  188. package/template/apps/server/src/agent/run-contracts.ts +23 -0
  189. package/template/apps/server/src/agent/run-facade.test-support.ts +17 -4
  190. package/template/apps/server/src/agent/run-facade.test.ts +16 -0
  191. package/template/apps/server/src/agent/run-facade.ts +139 -139
  192. package/template/apps/server/src/agent/run-failure-cleanup.ts +58 -0
  193. package/template/apps/server/src/agent/run-operation-policy.ts +20 -0
  194. package/template/apps/server/src/agent/run-route-input.ts +19 -1
  195. package/template/apps/server/src/agent/run-routes.ts +133 -5
  196. package/template/apps/server/src/agent/run-runtime-request.ts +89 -0
  197. package/template/apps/server/src/agent/run-session-authorization.ts +97 -0
  198. package/template/apps/server/src/agent/run-start-preparation.ts +71 -0
  199. package/template/apps/server/src/agent/runtime-bootstrap-input.ts +46 -0
  200. package/template/apps/server/src/agent/runtime-bootstrap-report.test.ts +53 -1
  201. package/template/apps/server/src/agent/runtime-bootstrap.ts +115 -112
  202. package/template/apps/server/src/agent/runtime-public-ports.ts +40 -0
  203. package/template/apps/server/src/agent/runtime-tool-composition.ts +38 -0
  204. package/template/apps/server/src/agent/session-context-source-support.ts +38 -0
  205. package/template/apps/server/src/agent/session-context-source.ts +346 -0
  206. package/template/apps/server/src/agent/session-invalidation/contracts.ts +216 -0
  207. package/template/apps/server/src/agent/session-invalidation/dispatcher.contract.test.ts +333 -0
  208. package/template/apps/server/src/agent/session-invalidation/dispatcher.ts +205 -0
  209. package/template/apps/server/src/agent/session-invalidation/module-authoritative-producer.test.ts +127 -0
  210. package/template/apps/server/src/agent/session-invalidation/module-authoritative-producer.ts +202 -0
  211. package/template/apps/server/src/agent/session-invalidation/read-guard.ts +39 -0
  212. package/template/apps/server/src/agent/session-invalidation/runtime.ts +69 -0
  213. package/template/apps/server/src/agent/session-invalidation/test-envelopes.ts +24 -0
  214. package/template/apps/server/src/agent/session-invalidation/worker.contract.test.ts +135 -0
  215. package/template/apps/server/src/agent/session-invalidation/worker.ts +76 -0
  216. package/template/apps/server/src/agent/session-log/checkpoint-digest.ts +36 -0
  217. package/template/apps/server/src/agent/session-log/domain.ts +123 -0
  218. package/template/apps/server/src/agent/session-log/events.ts +229 -0
  219. package/template/apps/server/src/agent/session-log/history.ts +143 -0
  220. package/template/apps/server/src/agent/session-log/in-memory-repository.ts +340 -0
  221. package/template/apps/server/src/agent/session-log/lifecycle.ts +67 -0
  222. package/template/apps/server/src/agent/session-log/replay-policy.ts +76 -0
  223. package/template/apps/server/src/agent/session-log/repository.ts +103 -0
  224. package/template/apps/server/src/agent/session-log/service.ts +349 -0
  225. package/template/apps/server/src/agent/session-log/session-log.test.ts +282 -0
  226. package/template/apps/server/src/agent/session-persistence/drizzle-context-memory.ts +348 -0
  227. package/template/apps/server/src/agent/session-persistence/drizzle-governed-context.ts +328 -0
  228. package/template/apps/server/src/agent/session-persistence/drizzle-invalidation-outbox.ts +260 -0
  229. package/template/apps/server/src/agent/session-persistence/drizzle-memory-projection-deletion.ts +56 -0
  230. package/template/apps/server/src/agent/session-persistence/drizzle-run-projection-receipt.ts +80 -0
  231. package/template/apps/server/src/agent/session-persistence/drizzle-session-fork.ts +147 -0
  232. package/template/apps/server/src/agent/session-persistence/drizzle-session-list.ts +24 -0
  233. package/template/apps/server/src/agent/session-persistence/drizzle-session-mapping.ts +154 -0
  234. package/template/apps/server/src/agent/session-persistence/drizzle-session-mutations.ts +64 -0
  235. package/template/apps/server/src/agent/session-persistence/drizzle-session-repository.ts +335 -0
  236. package/template/apps/server/src/agent/session-persistence/invalidation-projections.ts +229 -0
  237. package/template/apps/server/src/agent/session-persistence/payload-codec.ts +90 -0
  238. package/template/apps/server/src/agent/session-projection-access.ts +167 -0
  239. package/template/apps/server/src/agent/session-projection-bootstrap.ts +87 -0
  240. package/template/apps/server/src/agent/session-projection-errors.ts +22 -0
  241. package/template/apps/server/src/agent/session-projection-facade.ts +349 -0
  242. package/template/apps/server/src/agent/session-projection-routes.ts +215 -0
  243. package/template/apps/server/src/agent/session-projection-view.ts +137 -0
  244. package/template/apps/server/src/agent/session-result-memory.ts +228 -0
  245. package/template/apps/server/src/agent/session-run-lifecycle.ts +85 -0
  246. package/template/apps/server/src/agent/session-run-link-contracts.ts +56 -0
  247. package/template/apps/server/src/agent/session-run-link.ts +343 -0
  248. package/template/apps/server/src/agent/session-run-recovery.ts +16 -0
  249. package/template/apps/server/src/agent/session-runtime-composition.ts +265 -0
  250. package/template/apps/server/src/agent/session-source-chain-authorizer.ts +141 -0
  251. package/template/apps/server/src/agent/session-terminal-reconciler.ts +100 -0
  252. package/template/apps/server/src/agent/session-turn-state.ts +49 -0
  253. package/template/apps/server/src/agent/tool-audit.ts +3 -3
  254. package/template/apps/server/src/agent/tool-execution-receipt.ts +13 -0
  255. package/template/apps/server/src/agent/tool-host.ts +41 -4
  256. package/template/apps/server/src/agent/tool-registry-composition.ts +52 -0
  257. package/template/apps/server/src/agent/tool-registry.test.ts +5 -5
  258. package/template/apps/server/src/agent/tool-registry.ts +53 -59
  259. package/template/apps/server/src/agent/unavailable-routes.ts +70 -5
  260. package/template/apps/server/src/agent/workflow-durable-runtime-input.ts +32 -0
  261. package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +61 -0
  262. package/template/apps/server/src/agent-workflow/adapter-dispatch.ts +148 -0
  263. package/template/apps/server/src/agent-workflow/approval-node-adapter.ts +77 -0
  264. package/template/apps/server/src/agent-workflow/artifact-access-error.ts +9 -0
  265. package/template/apps/server/src/agent-workflow/artifact-node-adapter.ts +67 -0
  266. package/template/apps/server/src/agent-workflow/artifact-policy.ts +71 -0
  267. package/template/apps/server/src/agent-workflow/artifact-source-authorization.ts +91 -0
  268. package/template/apps/server/src/agent-workflow/authorization.ts +238 -0
  269. package/template/apps/server/src/agent-workflow/budget-ledger.ts +118 -0
  270. package/template/apps/server/src/agent-workflow/budget-validation.ts +305 -0
  271. package/template/apps/server/src/agent-workflow/canonical-agent-run-binding.ts +17 -0
  272. package/template/apps/server/src/agent-workflow/canonical-agent-run-evidence.ts +142 -0
  273. package/template/apps/server/src/agent-workflow/canonical-agent-run-port.ts +304 -0
  274. package/template/apps/server/src/agent-workflow/canonical-agent-run-remote.ts +64 -0
  275. package/template/apps/server/src/agent-workflow/canonical-json.ts +16 -0
  276. package/template/apps/server/src/agent-workflow/command-drive.ts +195 -0
  277. package/template/apps/server/src/agent-workflow/command-error.ts +9 -0
  278. package/template/apps/server/src/agent-workflow/command-facade.ts +349 -0
  279. package/template/apps/server/src/agent-workflow/command-input.ts +133 -0
  280. package/template/apps/server/src/agent-workflow/condition-node-adapter.ts +69 -0
  281. package/template/apps/server/src/agent-workflow/definition-budget-validation.ts +41 -0
  282. package/template/apps/server/src/agent-workflow/definition-node-validation.ts +197 -0
  283. package/template/apps/server/src/agent-workflow/definition-validation.ts +198 -0
  284. package/template/apps/server/src/agent-workflow/delegated-tool-authorization.ts +15 -0
  285. package/template/apps/server/src/agent-workflow/delegation-child-delivery.ts +129 -0
  286. package/template/apps/server/src/agent-workflow/delegation-execution-authorization.ts +218 -0
  287. package/template/apps/server/src/agent-workflow/delegation-policy-validation.ts +253 -0
  288. package/template/apps/server/src/agent-workflow/delegation-policy.ts +179 -0
  289. package/template/apps/server/src/agent-workflow/drizzle-artifact-port.ts +211 -0
  290. package/template/apps/server/src/agent-workflow/drizzle-artifact-support.ts +152 -0
  291. package/template/apps/server/src/agent-workflow/drizzle-budget-ledger-settlement.ts +271 -0
  292. package/template/apps/server/src/agent-workflow/drizzle-budget-ledger-support.ts +226 -0
  293. package/template/apps/server/src/agent-workflow/drizzle-budget-ledger.ts +189 -0
  294. package/template/apps/server/src/agent-workflow/drizzle-cancellation-reconcile.ts +177 -0
  295. package/template/apps/server/src/agent-workflow/drizzle-delegated-tool-authorization.ts +155 -0
  296. package/template/apps/server/src/agent-workflow/drizzle-delegation-completion.ts +84 -0
  297. package/template/apps/server/src/agent-workflow/drizzle-delegation-lifecycle.ts +139 -0
  298. package/template/apps/server/src/agent-workflow/drizzle-delegation-port.ts +288 -0
  299. package/template/apps/server/src/agent-workflow/drizzle-effect-command-fence.ts +333 -0
  300. package/template/apps/server/src/agent-workflow/drizzle-evaluation-repository.ts +214 -0
  301. package/template/apps/server/src/agent-workflow/drizzle-event-validation.ts +43 -0
  302. package/template/apps/server/src/agent-workflow/drizzle-recovery-admission.ts +115 -0
  303. package/template/apps/server/src/agent-workflow/drizzle-repository-lineage.ts +103 -0
  304. package/template/apps/server/src/agent-workflow/drizzle-repository-mappers.ts +317 -0
  305. package/template/apps/server/src/agent-workflow/drizzle-repository-write.ts +311 -0
  306. package/template/apps/server/src/agent-workflow/drizzle-repository.ts +285 -0
  307. package/template/apps/server/src/agent-workflow/drizzle-side-effect-repository.ts +83 -0
  308. package/template/apps/server/src/agent-workflow/drizzle-write-support.ts +101 -0
  309. package/template/apps/server/src/agent-workflow/durable-continuation-authorization.ts +109 -0
  310. package/template/apps/server/src/agent-workflow/durable-continuation-driver.ts +97 -0
  311. package/template/apps/server/src/agent-workflow/durable-continuation-runtime.ts +173 -0
  312. package/template/apps/server/src/agent-workflow/durable-job-node-adapter.ts +106 -0
  313. package/template/apps/server/src/agent-workflow/effect-command-fence.ts +250 -0
  314. package/template/apps/server/src/agent-workflow/evaluation-evidence-coordinates.ts +225 -0
  315. package/template/apps/server/src/agent-workflow/evaluation-evidence-metrics.ts +280 -0
  316. package/template/apps/server/src/agent-workflow/evaluation-evidence-reader.ts +326 -0
  317. package/template/apps/server/src/agent-workflow/evaluation-metrics-validation.ts +85 -0
  318. package/template/apps/server/src/agent-workflow/evaluation-projection.ts +70 -0
  319. package/template/apps/server/src/agent-workflow/evaluation-repository.ts +134 -0
  320. package/template/apps/server/src/agent-workflow/evaluation-service.ts +292 -0
  321. package/template/apps/server/src/agent-workflow/evaluation-tool-registration.ts +95 -0
  322. package/template/apps/server/src/agent-workflow/evaluation-validation.ts +331 -0
  323. package/template/apps/server/src/agent-workflow/event-validation.ts +277 -0
  324. package/template/apps/server/src/agent-workflow/governed-tool-schema.ts +55 -0
  325. package/template/apps/server/src/agent-workflow/in-memory-evaluation-repository.ts +123 -0
  326. package/template/apps/server/src/agent-workflow/in-memory-mutation-validation.ts +154 -0
  327. package/template/apps/server/src/agent-workflow/in-memory-repository-support.ts +277 -0
  328. package/template/apps/server/src/agent-workflow/in-memory-repository.ts +339 -0
  329. package/template/apps/server/src/agent-workflow/in-memory-side-effect-store.ts +78 -0
  330. package/template/apps/server/src/agent-workflow/input-receipt.ts +55 -0
  331. package/template/apps/server/src/agent-workflow/model-node-adapter.ts +86 -0
  332. package/template/apps/server/src/agent-workflow/model-pricing-catalog.ts +215 -0
  333. package/template/apps/server/src/agent-workflow/node-adapter-factory.ts +83 -0
  334. package/template/apps/server/src/agent-workflow/node-adapters.ts +50 -0
  335. package/template/apps/server/src/agent-workflow/node-execution-ports.ts +185 -0
  336. package/template/apps/server/src/agent-workflow/node-input-receipt-port.ts +42 -0
  337. package/template/apps/server/src/agent-workflow/node-result-receipt.ts +50 -0
  338. package/template/apps/server/src/agent-workflow/platform-node-adapter-support.ts +185 -0
  339. package/template/apps/server/src/agent-workflow/platform-node-adapters.ts +264 -0
  340. package/template/apps/server/src/agent-workflow/platform-node-approval.ts +146 -0
  341. package/template/apps/server/src/agent-workflow/platform-node-direct-adapters.ts +65 -0
  342. package/template/apps/server/src/agent-workflow/production-delegation-scope.ts +58 -0
  343. package/template/apps/server/src/agent-workflow/production-node-policies.ts +62 -0
  344. package/template/apps/server/src/agent-workflow/project-launch-authority.contract.test.ts +53 -0
  345. package/template/apps/server/src/agent-workflow/project-launch-authority.ts +92 -0
  346. package/template/apps/server/src/agent-workflow/query-service.ts +198 -0
  347. package/template/apps/server/src/agent-workflow/release.ts +96 -0
  348. package/template/apps/server/src/agent-workflow/repository.ts +157 -0
  349. package/template/apps/server/src/agent-workflow/routes.ts +307 -0
  350. package/template/apps/server/src/agent-workflow/runtime-composition.ts +324 -0
  351. package/template/apps/server/src/agent-workflow/scheduler-cancellation-reconcile.ts +253 -0
  352. package/template/apps/server/src/agent-workflow/scheduler-cancellation-support.ts +145 -0
  353. package/template/apps/server/src/agent-workflow/scheduler-cancellation.ts +2 -0
  354. package/template/apps/server/src/agent-workflow/scheduler-context.ts +85 -0
  355. package/template/apps/server/src/agent-workflow/scheduler-deadline.ts +65 -0
  356. package/template/apps/server/src/agent-workflow/scheduler-effect-result.ts +205 -0
  357. package/template/apps/server/src/agent-workflow/scheduler-execution-convergence.ts +174 -0
  358. package/template/apps/server/src/agent-workflow/scheduler-execution.ts +211 -0
  359. package/template/apps/server/src/agent-workflow/scheduler-failure.ts +102 -0
  360. package/template/apps/server/src/agent-workflow/scheduler-join-cancellation.ts +282 -0
  361. package/template/apps/server/src/agent-workflow/scheduler-mutation-queue.ts +13 -0
  362. package/template/apps/server/src/agent-workflow/scheduler-node-timeout.ts +139 -0
  363. package/template/apps/server/src/agent-workflow/scheduler-parallel-dispatch.ts +99 -0
  364. package/template/apps/server/src/agent-workflow/scheduler-recovery-activation.ts +63 -0
  365. package/template/apps/server/src/agent-workflow/scheduler-recovery-budget.ts +41 -0
  366. package/template/apps/server/src/agent-workflow/scheduler-recovery-effect.ts +331 -0
  367. package/template/apps/server/src/agent-workflow/scheduler-recovery-event-time.ts +26 -0
  368. package/template/apps/server/src/agent-workflow/scheduler-recovery-failed-policy.ts +129 -0
  369. package/template/apps/server/src/agent-workflow/scheduler-recovery-node.ts +208 -0
  370. package/template/apps/server/src/agent-workflow/scheduler-recovery-policy-convergence.ts +140 -0
  371. package/template/apps/server/src/agent-workflow/scheduler-reservation-convergence.ts +40 -0
  372. package/template/apps/server/src/agent-workflow/scheduler-side-effect-execution.ts +249 -0
  373. package/template/apps/server/src/agent-workflow/scheduler-support.ts +235 -0
  374. package/template/apps/server/src/agent-workflow/scheduler-workflow-cancellation.ts +296 -0
  375. package/template/apps/server/src/agent-workflow/scheduler.ts +289 -0
  376. package/template/apps/server/src/agent-workflow/service-completion.ts +102 -0
  377. package/template/apps/server/src/agent-workflow/service-mutation-identity.ts +94 -0
  378. package/template/apps/server/src/agent-workflow/service-node-admission.ts +36 -0
  379. package/template/apps/server/src/agent-workflow/service-node-run-update.ts +55 -0
  380. package/template/apps/server/src/agent-workflow/service-recovery-events.ts +38 -0
  381. package/template/apps/server/src/agent-workflow/service-recovery.ts +264 -0
  382. package/template/apps/server/src/agent-workflow/service-retry.ts +86 -0
  383. package/template/apps/server/src/agent-workflow/service-run-command.ts +131 -0
  384. package/template/apps/server/src/agent-workflow/service-state-error.ts +21 -0
  385. package/template/apps/server/src/agent-workflow/service-state-invariants.ts +44 -0
  386. package/template/apps/server/src/agent-workflow/service-support.ts +152 -0
  387. package/template/apps/server/src/agent-workflow/service.ts +307 -0
  388. package/template/apps/server/src/agent-workflow/side-effect-state.ts +226 -0
  389. package/template/apps/server/src/agent-workflow/state-machine.ts +321 -0
  390. package/template/apps/server/src/agent-workflow/subagent-node-adapter.ts +229 -0
  391. package/template/apps/server/src/agent-workflow/tool-node-adapter.ts +259 -0
  392. package/template/apps/server/src/agent-workflow/usage.ts +149 -0
  393. package/template/apps/server/src/agent-workflow/wait-signal-service.ts +147 -0
  394. package/template/apps/server/src/agent-workflow/workflow-artifact-token.ts +109 -0
  395. package/template/apps/server/src/agent-workflow/workflow-value-validation.ts +101 -0
  396. package/template/apps/server/src/agent-workflow/workspace-policy.ts +109 -0
  397. package/template/apps/server/src/ai-runtime-report/remote-parser.ts +41 -0
  398. package/template/apps/server/src/ai-runtime-report/service.test.ts +2 -0
  399. package/template/apps/server/src/app/agent-runtime-composition.ts +43 -0
  400. package/template/apps/server/src/app/client-agent-host-auth-binding.ts +10 -0
  401. package/template/apps/server/src/app/client-agent-workflow-artifact-binding.ts +14 -0
  402. package/template/apps/server/src/application-services.ts +6 -0
  403. package/template/apps/server/src/auth/actor-resolver.test.ts +33 -0
  404. package/template/apps/server/src/auth/actor-resolver.ts +6 -1
  405. package/template/apps/server/src/auth/composition.ts +36 -0
  406. package/template/apps/server/src/auth/routes.test-support.ts +2 -0
  407. package/template/apps/server/src/auth/routes.test.ts +18 -0
  408. package/template/apps/server/src/auth/runtime.ts +2 -0
  409. package/template/apps/server/src/auth/service-options.ts +16 -0
  410. package/template/apps/server/src/auth/service.ts +7 -12
  411. package/template/apps/server/src/data-access/scope-containment.test.ts +31 -0
  412. package/template/apps/server/src/data-access/scope-containment.ts +48 -0
  413. package/template/apps/server/src/index.ts +35 -37
  414. package/template/apps/server/src/jobs/artifact-publication.test.ts +192 -0
  415. package/template/apps/server/src/jobs/artifact-publication.ts +56 -0
  416. package/template/apps/server/src/jobs/artifact-publisher.ts +101 -0
  417. package/template/apps/server/src/jobs/drizzle-artifact.ts +73 -1
  418. package/template/apps/server/src/jobs/drizzle-execution-repository.ts +14 -1
  419. package/template/apps/server/src/jobs/drizzle-execution.integration.test.ts +65 -0
  420. package/template/apps/server/src/jobs/drizzle-repository.integration.test.ts +1 -0
  421. package/template/apps/server/src/jobs/execution-repository.ts +28 -0
  422. package/template/apps/server/src/jobs/execution.test.ts +3 -1
  423. package/template/apps/server/src/jobs/in-memory-execution.ts +16 -0
  424. package/template/apps/server/src/jobs/in-memory-lease.ts +45 -1
  425. package/template/apps/server/src/jobs/legacy-adapter.integration.test.ts +2 -0
  426. package/template/apps/server/src/jobs/postgres-cleanup-contract.test.ts +58 -0
  427. package/template/apps/server/src/jobs/worker.ts +8 -14
  428. package/template/apps/server/src/license/pairing-service.test.ts +1 -1
  429. package/template/apps/server/src/module-host/agent-session-memory-port.ts +91 -0
  430. package/template/apps/server/src/module-host/{debug-session-provider-registration.test.ts → agent-session-provider-registration.test.ts} +42 -17
  431. package/template/apps/server/src/module-host/{debug-session-provider-registration.ts → agent-session-provider-registration.ts} +18 -18
  432. package/template/apps/server/src/module-host/agent-source-invalidation-port.ts +53 -0
  433. package/template/apps/server/src/module-host/background-ai-unavailable.ts +18 -0
  434. package/template/apps/server/src/module-host/durable-context.ts +19 -22
  435. package/template/apps/server/src/module-host/http-runtime.ts +14 -0
  436. package/template/apps/server/src/module-host/implementation-completeness.test.ts +80 -1
  437. package/template/apps/server/src/module-host/implementation-completeness.ts +28 -1
  438. package/template/apps/server/src/module-host/initialize-contracts.ts +4 -5
  439. package/template/apps/server/src/module-host/initialize.ts +4 -4
  440. package/template/apps/server/src/module-host/request-context.test.ts +5 -5
  441. package/template/apps/server/src/module-host/request-context.ts +40 -8
  442. package/template/apps/server/src/module-host/route-install-context.ts +65 -0
  443. package/template/apps/server/src/module-host/route-installer.ts +11 -56
  444. package/template/apps/server/src/module-host/scoped-host.ts +17 -12
  445. package/template/apps/server/src/module-host/storage-authorization-binding.test.ts +3 -3
  446. package/template/apps/server/src/module-host/storage-port.ts +3 -0
  447. package/template/apps/server/src/module-host/workflow-input-artifact-port.test.ts +104 -0
  448. package/template/apps/server/src/module-host/workflow-input-artifact-port.ts +229 -0
  449. package/template/apps/server/src/module-host/workflow-input-materialization.test.ts +163 -0
  450. package/template/apps/server/src/module-host/workflow-input-materialization.ts +161 -0
  451. package/template/apps/server/src/module-host.ts +3 -5
  452. package/template/apps/server/src/runtime.ts +3 -36
  453. package/template/apps/server/src/storage/routes-stream-cancellation.test.ts +19 -0
  454. package/template/apps/server/src/storage/routes.ts +3 -1
  455. package/template/apps/server/src/system/actor.ts +15 -2
  456. package/template/apps/server/src/system/authorization-invalidation-bridge.ts +30 -0
  457. package/template/apps/server/src/system/authorization-invalidation-composition.ts +36 -0
  458. package/template/apps/server/src/system/drizzle-system.ts +8 -1
  459. package/template/apps/server/src/system/identity-route-config.ts +9 -1
  460. package/template/apps/server/src/system/routes.ts +3 -0
  461. package/template/apps/server/src/system/seed.ts +3 -0
  462. package/template/apps/server/src/system/user-account-policy.ts +91 -0
  463. package/template/apps/server/src/workflow/drizzle-repository.integration.test.ts +1 -0
  464. package/template/apps/web/package.json +1 -0
  465. package/template/apps/web/src/layout/AppSidebar.vue +2 -0
  466. package/template/apps/web/src/pages/system/AgentSessionPage.vue +73 -0
  467. package/template/apps/web/src/pages/system/AgentSessionPage.webtest.ts +66 -0
  468. package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +69 -0
  469. package/template/apps/web/src/pages/system/components/agent-session/AgentSessionDetail.vue +114 -0
  470. package/template/apps/web/src/pages/system/components/agent-session/AgentSessionList.vue +84 -0
  471. package/template/apps/web/src/pages/system/components/agent-session/ContextVersionPanel.vue +119 -0
  472. package/template/apps/web/src/pages/system/components/agent-session/ContextVersionPanel.webtest.ts +46 -0
  473. package/template/apps/web/src/pages/system/components/agent-session/MemoryProjectionPanel.vue +163 -0
  474. package/template/apps/web/src/pages/system/components/agent-session/MemoryProjectionPanel.webtest.ts +62 -0
  475. package/template/apps/web/src/pages/system/components/agent-session/SessionTimeline.vue +71 -0
  476. package/template/apps/web/src/pages/system/components/agent-session/SessionTimeline.webtest.ts +34 -0
  477. package/template/apps/web/src/pages/system/components/agent-session/agent-session-presenter.ts +56 -0
  478. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowNodeCard.vue +39 -0
  479. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowNodeDetail.vue +172 -0
  480. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunDetail.vue +151 -0
  481. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunGraph.vue +96 -0
  482. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunList.vue +100 -0
  483. package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunSummary.vue +148 -0
  484. package/template/apps/web/src/pages/system/components/agent-workflow/agent-workflow-presenter.ts +74 -0
  485. package/template/apps/web/src/pages/system/components/agent-workflow/workflow-graph-layout.ts +108 -0
  486. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunDetailDialog.vue +9 -0
  487. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunDetailDialog.webtest.ts +22 -0
  488. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunTable.webtest.ts +2 -0
  489. package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeTrajectory.vue +118 -0
  490. package/template/apps/web/src/pages/system/composables/useAgentSessions.ts +209 -0
  491. package/template/apps/web/src/pages/system/composables/useAgentSessions.webtest.ts +138 -0
  492. package/template/apps/web/src/pages/system/composables/useAgentWorkflowRuns.ts +173 -0
  493. package/template/apps/web/src/router/index.ts +4 -0
  494. package/template/apps/web/src/router/platform-admin-route-bindings.ts +6 -0
  495. package/template/apps/web/src/services/agent-session-api.ts +159 -0
  496. package/template/apps/web/src/services/agent-session-api.webtest.ts +65 -0
  497. package/template/apps/web/src/services/agent-workflow-api.ts +181 -0
  498. package/template/apps/web/src/services/ai-runtime-api.ts +4 -0
  499. package/template/docker-compose.yml +11 -8
  500. package/template/docs/adr/0003-agent-session-event-source.md +3 -0
  501. package/template/docs/architecture/agent-harness.md +464 -0
  502. package/template/docs/architecture/agent-workflow.md +110 -0
  503. package/template/docs/architecture/ai-runtime.md +55 -47
  504. package/template/docs/architecture/durable-jobs.md +7 -0
  505. package/template/docs/architecture/module-host.md +4 -3
  506. package/template/docs/operations/adk-retirement.md +98 -0
  507. package/template/docs/operations/agent-session-memory.md +163 -0
  508. package/template/docs/operations/agent-session-troubleshooting.md +281 -0
  509. package/template/docs/operations/agent-workflow-recovery.md +85 -0
  510. package/template/docs/operations/incremental-delivery.md +1 -1
  511. package/template/docs/platform/agent-production-store.md +82 -0
  512. package/template/docs/platform/agent-run-reattachment.md +52 -0
  513. package/template/docs/platform/agent-runtime-observability.md +4 -3
  514. package/template/docs/platform/agent-runtime.md +116 -281
  515. package/template/docs/platform/agent-tool-approval.md +61 -0
  516. package/template/docs/platform/background-ai-operations.md +50 -0
  517. package/template/docs/platform/client-agent-session.md +319 -0
  518. package/template/docs/platform/embedding-ai-runtime.md +94 -0
  519. package/template/docs/platform/platform-authentication.md +5 -8
  520. package/template/package.json +0 -1
  521. package/template/packages/ai-client/index.ts +1 -0
  522. package/template/packages/ai-client/package.json +3 -1
  523. package/template/packages/ai-client/src/agent/client/client.ts +15 -2
  524. package/template/packages/ai-client/src/agent/client/run-protocol.test.ts +39 -25
  525. package/template/packages/ai-client/src/agent/client/types.ts +4 -0
  526. package/template/packages/ai-client/src/agent/contracts/contracts.test.ts +49 -7
  527. package/template/packages/ai-client/src/agent/contracts/events.ts +61 -0
  528. package/template/packages/ai-client/src/agent/contracts/runs.ts +1 -0
  529. package/template/packages/ai-client/src/client-agent/contracts.ts +131 -0
  530. package/template/packages/ai-client/src/client-agent/http.test.ts +60 -0
  531. package/template/packages/ai-client/src/client-agent/http.ts +66 -0
  532. package/template/packages/ai-client/src/client-agent/index.ts +4 -0
  533. package/template/packages/ai-client/src/client-agent/validation.test.ts +57 -0
  534. package/template/packages/ai-client/src/client-agent/validation.ts +152 -0
  535. package/template/packages/ai-client/src/client-agent/workflow-artifact/contracts.ts +85 -0
  536. package/template/packages/ai-client/src/client-agent/workflow-artifact/http.test.ts +49 -0
  537. package/template/packages/ai-client/src/client-agent/workflow-artifact/http.ts +82 -0
  538. package/template/packages/ai-client/src/client-agent/workflow-artifact/index.ts +3 -0
  539. package/template/packages/ai-client/src/client-agent/workflow-artifact/validation.test.ts +154 -0
  540. package/template/packages/ai-client/src/client-agent/workflow-artifact/validation.ts +332 -0
  541. package/template/packages/config/index.test.ts +18 -0
  542. package/template/packages/config/package.json +1 -1
  543. package/template/packages/config/src/platform-validation.ts +8 -0
  544. package/template/packages/config/src/platform.ts +22 -9
  545. package/template/packages/database/drizzle/0055_square_yellowjacket.sql +47 -0
  546. package/template/packages/database/drizzle/0056_tricky_living_mummy.sql +2 -0
  547. package/template/packages/database/drizzle/0057_mature_doomsday.sql +4 -0
  548. package/template/packages/database/drizzle/0058_agent_session_memory.sql +159 -0
  549. package/template/packages/database/drizzle/0059_agent_source_module_key.sql +16 -0
  550. package/template/packages/database/drizzle/0060_slimy_rocket_raccoon.sql +43 -0
  551. package/template/packages/database/drizzle/0061_agent_workflow.sql +303 -0
  552. package/template/packages/database/drizzle/0062_client_agent_workflow_artifact.sql +63 -0
  553. package/template/packages/database/drizzle/meta/0055_snapshot.json +11071 -0
  554. package/template/packages/database/drizzle/meta/0056_snapshot.json +11098 -0
  555. package/template/packages/database/drizzle/meta/0057_snapshot.json +10878 -0
  556. package/template/packages/database/drizzle/meta/0058_snapshot.json +12294 -0
  557. package/template/packages/database/drizzle/meta/0059_snapshot.json +12344 -0
  558. package/template/packages/database/drizzle/meta/0060_snapshot.json +12326 -0
  559. package/template/packages/database/drizzle/meta/0061_snapshot.json +14395 -0
  560. package/template/packages/database/drizzle/meta/0062_snapshot.json +14839 -0
  561. package/template/packages/database/drizzle/meta/_journal.json +56 -0
  562. package/template/packages/database/package.json +1 -1
  563. package/template/packages/database/src/agent-runtime-schema.test.ts +203 -0
  564. package/template/packages/database/src/schema/agent-context-message.ts +38 -0
  565. package/template/packages/database/src/schema/agent-runtime.ts +7 -0
  566. package/template/packages/database/src/schema/agent-session-receipt.ts +36 -0
  567. package/template/packages/database/src/schema/agent-session.ts +344 -0
  568. package/template/packages/database/src/schema/agent-workflow-delegation.ts +126 -0
  569. package/template/packages/database/src/schema/agent-workflow-effects.ts +213 -0
  570. package/template/packages/database/src/schema/agent-workflow-evaluation.ts +67 -0
  571. package/template/packages/database/src/schema/agent-workflow.ts +270 -0
  572. package/template/packages/database/src/schema/client-agent-workflow-artifact.ts +158 -0
  573. package/template/packages/database/src/schema/client-agent.ts +95 -0
  574. package/template/packages/database/src/schema/index.ts +9 -0
  575. package/template/packages/jobs/package.json +1 -1
  576. package/template/packages/jobs/src/handlers.test.ts +10 -0
  577. package/template/packages/jobs/src/handlers.ts +28 -11
  578. package/template/packages/modules/index.ts +2 -0
  579. package/template/packages/modules/package.json +1 -1
  580. package/template/packages/modules/src/ai-client-execution-composition.test.ts +98 -0
  581. package/template/packages/modules/src/ai-client-execution-policy.ts +60 -0
  582. package/template/packages/modules/src/ai-operation-composition.ts +2 -0
  583. package/template/packages/modules/src/manifest.ts +17 -0
  584. package/template/packages/modules/src/system-admin-routes.ts +16 -0
  585. package/template/packages/modules/src/system-admin-ui-catalog.ts +4 -1
  586. package/template/packages/modules/src/system-agent-audit-actions.ts +29 -0
  587. package/template/packages/modules/src/system-ai-api-bindings.ts +277 -0
  588. package/template/packages/modules/src/system-api-control-plane.ts +4 -78
  589. package/template/packages/modules/src/system-audit-actions.ts +128 -0
  590. package/template/packages/modules/src/system-features.ts +17 -0
  591. package/template/packages/modules/src/system-module-catalog.ts +21 -11
  592. package/template/packages/modules/src/system-modules.ts +22 -0
  593. package/template/packages/modules/src/system-permissions.ts +8 -0
  594. package/template/packages/server-sdk/index.ts +95 -0
  595. package/template/packages/server-sdk/package.json +9 -1
  596. package/template/packages/server-sdk/src/agent-session-memory-port.ts +64 -0
  597. package/template/packages/server-sdk/src/agent-session-provider.ts +63 -0
  598. package/template/packages/server-sdk/src/agent-source-invalidation-port.ts +54 -0
  599. package/template/packages/server-sdk/src/ai-operation-registration.ts +2 -0
  600. package/template/packages/server-sdk/src/client-agent-session.ts +107 -0
  601. package/template/packages/server-sdk/src/client-agent-workflow-artifact.contract.test.ts +113 -0
  602. package/template/packages/server-sdk/src/client-agent-workflow-artifact.ts +183 -0
  603. package/template/packages/server-sdk/src/debug-session-provider.ts +14 -63
  604. package/template/packages/server-sdk/src/durable-handler.ts +7 -0
  605. package/template/packages/server-sdk/src/module-host.ts +7 -3
  606. package/template/packages/server-sdk/src/request-context.ts +13 -0
  607. package/template/packages/server-sdk/src/workflow-input-artifact-port.ts +104 -0
  608. package/template/packages/server-sdk/src/workflow-input-artifact-validation.contract.test.ts +124 -0
  609. package/template/packages/server-sdk/src/workflow-input-artifact-validation.ts +347 -0
  610. package/template/packages/server-sdk/src/workflow-input-materialization-handler.ts +43 -0
  611. package/template/packages/shared/index.ts +3 -0
  612. package/template/packages/shared/package.json +1 -1
  613. package/template/packages/shared/src/agent-workflow-definition.ts +113 -0
  614. package/template/packages/shared/src/agent-workflow-delegation.ts +123 -0
  615. package/template/packages/shared/src/agent-workflow-evaluation.ts +159 -0
  616. package/template/packages/shared/src/agent-workflow-events.ts +99 -0
  617. package/template/packages/shared/src/agent-workflow-run.ts +259 -0
  618. package/template/packages/shared/src/agent-workflow.ts +3 -0
  619. package/template/packages/shared/src/ai-runtime-report.ts +25 -0
  620. package/template/packages/shared/src/rbac.ts +24 -0
  621. package/template/packages/storage/package.json +1 -1
  622. package/template/packages/storage/src/blob-store-put-once.test.ts +70 -0
  623. package/template/packages/storage/src/blob-store.ts +9 -0
  624. package/template/packages/storage/src/local-file-blob-put-once.ts +120 -0
  625. package/template/packages/storage/src/local-file-blob-store.ts +53 -1
  626. package/template/packages/storage/src/memory-blob-store.ts +73 -33
  627. package/template/packages/storage/src/upload-streams.test.ts +31 -0
  628. package/template/packages/storage/src/upload-streams.ts +20 -6
  629. package/template/apps/agent-server/adk_web_agents/__init__.py +0 -1
  630. package/template/apps/agent-server/adk_web_agents/canonical_debug/__init__.py +0 -1
  631. package/template/apps/agent-server/adk_web_agents/canonical_debug/agent.py +0 -145
  632. package/template/apps/agent-server/adk_web_agents/safe_debug/__init__.py +0 -3
  633. package/template/apps/agent-server/adk_web_agents/safe_debug/agent.py +0 -40
  634. package/template/apps/agent-server/adk_web_agents/services.py +0 -25
  635. package/template/apps/agent-server/project/adk-web-debug.json +0 -4
  636. package/template/apps/agent-server/src/southwind_agent_server/adk_adapter.py +0 -333
  637. package/template/apps/agent-server/src/southwind_agent_server/adk_debug.py +0 -348
  638. package/template/apps/agent-server/src/southwind_agent_server/adk_debug_sessions.py +0 -325
  639. package/template/apps/agent-server/src/southwind_agent_server/adk_failure.py +0 -13
  640. package/template/apps/agent-server/src/southwind_agent_server/adk_model.py +0 -304
  641. package/template/apps/agent-server/src/southwind_agent_server/adk_tools.py +0 -143
  642. package/template/apps/agent-server/tests/test_adk_adapter.py +0 -307
  643. package/template/apps/agent-server/tests/test_adk_debug_result_polling.py +0 -139
  644. package/template/apps/agent-server/tests/test_adk_debug_sessions.py +0 -215
  645. package/template/apps/agent-server/tests/test_adk_web_agent.py +0 -12
  646. package/template/apps/agent-server/tests/test_adk_web_canonical_debug.py +0 -282
  647. package/template/apps/server/src/agent/run-debug-authorization.ts +0 -27
  648. package/template/apps/server/src/agent/run-facade-adk-debug.test.ts +0 -95
  649. package/template/apps/server/src/runtime-adk-debug.test.ts +0 -270
  650. package/template/apps/server/src/runtime-adk-debug.ts +0 -164
  651. package/template/apps/server/src/runtime-request-actor.test.ts +0 -55
  652. package/template/apps/server/src/runtime-request-actor.ts +0 -22
  653. package/template/docker-compose.agent-debug.yml +0 -58
  654. package/template/scripts/dev-adk-web.ts +0 -107
@@ -0,0 +1,319 @@
1
+ # Governed Client Agent Session
2
+
3
+ 更新时间:2026-08-28。
4
+
5
+ ## 目的与边界
6
+
7
+ Client Agent Session 是 Windy 为浏览器、桌面壳和扩展等“宿主本地编排模型循环”提供的
8
+ 通用治理协议。它不是 PageAgent 专属实现,也不允许下游产品复制 Provider 凭据或
9
+ Agent Server 的 Tool execution grant。下游只负责业务 Composition 和浏览器 binding;
10
+ Windy 拥有会话、模型代理、receipt、终态和审计语义。
11
+
12
+ 生产闭环已经提供:
13
+
14
+ - `ModuleAiOperationDefinition.clientExecution` 显式 opt-in 与组合门禁;
15
+ - `@southwind-ai/server-sdk` 的宿主 Port 和 `@southwind-ai/ai-client/client-agent` DTO;
16
+ - 单 Run opaque bearer、Actor/Operation/Release/Input/Binding 承诺;
17
+ - `/chat/completions` 请求的 role、字段、model、字节、step 和并发约束;
18
+ - Manifest `providerDataPolicy` envelope allowlist 与 DLP;
19
+ - opaque Provider response receipt、exactly-once finalize/cancel/status/result;
20
+ - Provider 优先结果投影,以及不可冒充 Provider 证明的 `clientProjected` 标记;
21
+ - Actor、binding、权限漂移、TTL 和显式撤销后的 fail-closed 状态机。
22
+ - Windy Server 到 Agent Server 的 internal-token SSE Adapter;Agent Server 固定管理面
23
+ deployment、物理 model、Provider URL 和 Key;
24
+ - PostgreSQL/Drizzle `client_agent_sessions` 与 `client_agent_receipts` 事务仓储、前向
25
+ migration 和进程重启恢复;
26
+ - 登录会话撤销、权限漂移、TTL、binding revoke 与 Abort 的联动;
27
+ - `pageAgentClientRun` readiness 协商。只有 Agent Server Provider 与已配对的 Browser
28
+ Assistant Host Auth Adapter 同时就绪时才返回该 capability。
29
+
30
+ ## Manifest opt-in
31
+
32
+ 只有 `kind=agent`、`providerEgress.mode=configured-endpoint` 且已有
33
+ `providerDataPolicy` 的 Operation 能声明:
34
+
35
+ ```ts
36
+ clientExecution: {
37
+ mode: "governed-session",
38
+ launchAuthority: "direct", // Workflow Artifact 专用 Operation 使用 workflow-artifact
39
+ maxSteps: 12,
40
+ maxRequestBytes: 262_144,
41
+ maxResponseBytes: 262_144,
42
+ maxConcurrentRequests: 1,
43
+ }
44
+ ```
45
+
46
+ 这些上限不能突破 Operation 的输入/输出边界;`maxSteps` 最大 128,并发最大 4。
47
+ Manifest 不声明 Provider URL、物理模型或 Secret。客户端收到的 `modelAlias` 只是本次
48
+ Session 的固定逻辑别名。
49
+
50
+ `launchAuthority="workflow-artifact"` 是 Host enforcement,不是 prompt 约定:普通
51
+ `/agent/runs` 与普通 Client Session create 均隐藏并拒绝该 Operation,只有固定 Workflow
52
+ Artifact service 的内部 create seam 可签发 Session。
53
+
54
+ ## HTTP 契约
55
+
56
+ 创建与 capability 请求使用配对后短期 `bax_` installation session:
57
+
58
+ ```text
59
+ POST /api/agent/client-sessions
60
+ ```
61
+
62
+ 请求只包含 `operationKey`、符合 Operation input schema 的 `input`,以及宿主计算的
63
+ `clientBindingDigest`。binding 应覆盖 installation、conversation、tab 和 document
64
+ epoch 或宿主等价的服务切换 epoch;Windy 只保存 digest,不依赖当前浏览网页 origin 的
65
+ 人工授权。创建时自动执行 License、Feature、Permission、Scope、
66
+ Provider egress 与 data policy 检查,并返回:
67
+
68
+ - `clientRunId`、`sessionId`;
69
+ - 受信 `trustedBaseUrl` 和固定 `modelAlias`;
70
+ - steps/request bytes/response bytes/duration/concurrency 上限;
71
+ - `expiresAt` 和 `car_` 前缀的单 Run bearer。
72
+ - `capabilities: ["pageAgentClientRun"]`。
73
+
74
+ 浏览器扩展不需要也不持有宿主 Web cookie。`Authorization: Bearer bax_...` 只由
75
+ Client Agent Host Auth Adapter 在这些 route 上解析,再按 `actorId` 加载 canonical
76
+ Actor、最新 RBAC 与 Scope;普通业务 API 的 Actor resolver 明确拒绝 `bax_` 和 `car_`。
77
+ 调用创建前可探测生产 readiness:
78
+
79
+ ```text
80
+ GET /api/agent/client-sessions/capabilities
81
+ ```
82
+
83
+ 成功响应为 `{ capabilities: ["pageAgentClientRun"], modelAlias }`。Provider 未配置、
84
+ Agent Server 不可达或未登录时不协商该能力。此流程没有逐动作 approval,也不要求用户
85
+ 复制 token;宿主把 grant 只保存在受信内存中。
86
+
87
+ 带 `:sessionId` 的后续 Route 使用 `Authorization: Bearer car_...`,同时通过
88
+ `X-Windy-Host-Authorization: Bearer bax_...` 提供配对 Host Actor,并在
89
+ `x-windy-client-binding-digest` 中重申 binding:
90
+
91
+ ```text
92
+ POST /api/agent/client-sessions/:sessionId/v1/chat/completions
93
+ POST /api/agent/client-sessions/:sessionId/finalize
94
+ POST /api/agent/client-sessions/:sessionId/cancel
95
+ GET /api/agent/client-sessions/:sessionId
96
+ GET /api/agent/client-sessions/:sessionId/result
97
+ POST /api/agent/client-sessions/revoke
98
+ ```
99
+
100
+ `trustedBaseUrl` 是带当前 `sessionId` 的 OpenAI-compatible baseURL,例如
101
+ `https://windy.example/api/agent/client-sessions/cas_x/v1/`。PageAgent 只向其
102
+ `chat/completions` 子路径发送请求。`revoke` 使用 `bax_` Host Auth 和
103
+ `{ clientBindingDigest }`,只撤销当前 Actor 的匹配 binding;服务切换、installation
104
+ 撤销或宿主 session 关闭时应调用它。登出和登录会话撤销会由平台自动执行 Actor revoke。
105
+
106
+ bax/car bearer 只匹配 Client Agent Route,不能调用普通业务 API 或 Tool Host。服务端只保存其
107
+ SHA-256 hash。客户端请求只能使用固定 model alias 和允许的 OpenAI-compatible 字段;
108
+ URL、endpoint、未知 body 字段、未知 role、越界 Tool schema 都会被拒绝。
109
+
110
+ PageAgent Core 1.12.2 的通用 envelope 已锁定:`parallel_tool_calls` 必须为 `false`;
111
+ `tool_choice` 可为 `auto`、`none`,或引用当次 `tools` 中 function 的命名选择(包括
112
+ MacroTool `AgentOutput`);assistant 历史可携带经校验的 `tool_calls`,后续 tool message
113
+ 必须以 `tool_call_id/name` 匹配该调用。并行调用、未知命名 function 或断裂的 tool history
114
+ 都会 fail closed。
115
+
116
+ 流式响应转发标准 OpenAI SSE chunk;成功末尾追加
117
+ `event: windy.receipt`,其 data 为 receipt,再发送 `[DONE]`。非流式响应在
118
+ `windy_receipt` 字段和 `x-windy-provider-receipt-id` 响应头返回相同 receipt。Abort 会
119
+ 向 Agent Server 和 Provider 传播;取消或撤权后迟到 chunk 不能生成 receipt。
120
+
121
+ ## Receipt 与终态
122
+
123
+ 每次成功 Provider attempt 生成一个 `receipt_` opaque ID,并持有以下不可变绑定:
124
+
125
+ - Client Run、Actor、Operation、Release、binding digest;
126
+ - attempt 序号、request/response/deployment digest;
127
+ - issuedAt 和可选的服务端 canonical result 投影。
128
+
129
+ Repository 不保存 raw prompt、Provider response、Secret 或 bearer。HTTP 只公开 receipt
130
+ 所需的 opaque ID 与 digest,不公开 Actor、Scope、Release 内部快照。
131
+
132
+ `finalize` 必须按 attempt 顺序提交本 Run 的完整 receipt 链,且没有在途请求。Gateway
133
+ 能够从最终 Provider response 得到 schema-valid 投影时,结果标为
134
+ `provider-observed`;否则可以接受有界、schema-valid 的客户端投影,但必须标为
135
+ `client-projected`,`providerAttested=false`。客户端 DTO 没有 `runtimeVerified` 字段。
136
+
137
+ 完成、取消、撤销和过期都是不可改写终态。重复的相同 finalize 返回同一结果;不同
138
+ finalize、终态后的模型调用和跨 Run/Actor/binding receipt 重放均被拒绝。取消会 abort
139
+ 在途 Provider 请求;即使响应随后到达,也不能再追加 receipt 或改变终态。
140
+
141
+ ## Workflow Artifact Port
142
+
143
+ 预设 Workflow 调用 PageAgent 时复用既有 `job -> artifact -> final` 图节点,不新增
144
+ Client Agent 节点或在线画布。Release 的 Job Node 固定使用
145
+ `system.agent-workflow.client-agent-artifact` taskKey;project-owned Composition 为每个
146
+ Workflow 最多绑定一个 PageAgent Node、一个已声明 Operation 和 Artifact Policy。业务
147
+ Handler 只看到 `begin / claimOrAdvance / reconcileOrCancel` 三动作深 Port,不获得 Host
148
+ Auth、Provider 坐标、Client Session bearer 或 BlobStore。
149
+
150
+ 绑定必须 pin 审核时的完整 Immutable Release,而不是只写可被后续版本复用的 Workflow Key:
151
+
152
+ ```ts
153
+ {
154
+ workflowKey: "analysis.cross-case.full-review",
155
+ releaseDigest: "sha256:<审核后 Immutable Release digest>",
156
+ scopeContainmentContractVersion: 1,
157
+ nodeId: "page-agent-artifact",
158
+ operationKey: "analysis.cross-case.page-agent",
159
+ terminalResultAuthority: {
160
+ version: "sharp.cross-case-result.v1",
161
+ digest: "sha256:<project validator rules digest>",
162
+ canonicalize: async ({ workflowInput, inputArtifacts, proposedResult, actorId, scopeDigest, signal }) => {
163
+ // inputArtifacts 是 terminal 时重新授权并打开的 JSON,可校验 sourceArtifactId/locator
164
+ },
165
+ },
166
+ clientTaskAuthority: {
167
+ version: "sharp.cross-case-client-task.v1",
168
+ digest: "sha256:<project task projection digest>",
169
+ build: async ({ workflowInput, inputArtifacts, actorId, scopeDigest, signal }) => {
170
+ // inputArtifacts 是 Host 当前重授权并打开后的 JSON;只返回有界执行输入
171
+ return { taskKey: "sharp.cross-case.page-agent", input: { /* canonical locator/task */ } };
172
+ },
173
+ },
174
+ launchAuthority: {
175
+ version: "sharp.cross-case-launch.v1",
176
+ digest: "sha256:<membership/source/version/scope admission digest>",
177
+ authorizeRelease: async ({ definition, coordinates, actorId, signal }) => {},
178
+ authorizeRun: async ({ releaseId, releaseDigest, workflowInput, inputArtifacts, actorId, currentAuthorizationScope, signal }) => ({
179
+ authorizationScope: narrowToExactCase(currentAuthorizationScope, workflowInput),
180
+ }),
181
+ },
182
+ artifact: {
183
+ kind: "analysis-report",
184
+ contentType: "application/json",
185
+ filename: "analysis.json",
186
+ retentionPolicyKey: "analysis.case-artifact",
187
+ maxByteSize: 4 * 1024 * 1024,
188
+ },
189
+ }
190
+ ```
191
+
192
+ 该 Release 中固定 taskKey 的 Job Node 必须唯一,并且只能形成无 branch 的
193
+ `job -> artifact -> final` 直接链;Artifact Node 的 kind/policy 必须与绑定一致,三节点的
194
+ failure policy 不得通过 fallback/skip 绕开链路。发布新 Release 后必须重新审核并更新
195
+ `releaseDigest`,旧绑定不会静默授予新 Release PageAgent 权限。
196
+
197
+ terminal authority 在 Client Session 原子完成前收到 loader 当前 Workflow input,以及重新
198
+ reauthorize/resolve/open 后逐项核对实际 metadata 与字节上限的 canonical JSON input artifacts,
199
+ 再结合候选 canonical result、Actor、冻结 scope digest 与 AbortSignal 做 input-relative provenance
200
+ 校验。任一来源撤权、Owner/source 漂移、打开失败或 project 拒绝时 Session 与 Artifact 都保持
201
+ 未完成;返回值还要再次通过 Operation output schema。binding commitment 只承诺 authority
202
+ `version/digest`,绝不序列化函数本体。
203
+
204
+ 受绑定保护的 Workflow 不能从通用 `POST /agent/workflows/releases` 或 `/runs` 发布、复造或
205
+ 启动;即使 Actor、权限、Definition、coordinates 与 release digest 完全相同也按未发现拒绝。
206
+ project-owned preset 只能使用 Host 返回但不挂通用路由的 `agentWorkflowProjects` Seam:发布先
207
+ 调用 `launchAuthority.authorizeRelease`,启动先调用 `authorizeRun`,再把返回的 exact-case scope
208
+ 与 Host 传入的 `currentAuthorizationScope` 做 containment,并以该窄 scope 持久化 Run/Job
209
+ authorization。项目不得猜 tenant、roles 或 grants;Digest 只是 commitment,不是 launch capability。
210
+
211
+ claim 进入 running 前,Host 用当前 Run 的冻结 scope 对 Node `inputArtifacts` 重新执行 Durable
212
+ Artifact 字节、Owner 与 source authorization,并只把打开的 JSON payload 交给 project-owned
213
+ `clientTaskAuthority`。浏览器只收到 `{schemaVersion, taskKey, input, inputDigest}` 的 256 KiB
214
+ canonical task;`@southwind-ai/ai-client` 对未知字段、非 JSON、错误格式 digest/状态组合 fail closed,
215
+ 不会下发 raw Artifact。task authority 与 terminal authority 独立,前者控制执行输入,后者控制
216
+ input-relative 终态结果。
217
+
218
+ 浏览器可见 `workId` 的 canonical opaque 前缀固定为 `cawa_`;Server 生成器、
219
+ `@southwind-ai/server-sdk` 和 `@southwind-ai/ai-client` validator 必须同步,调用方只能原样回传,
220
+ 不得解析前缀后的内部身份。
221
+
222
+ Server 在浏览器可领取前先持久化 pending,并在同一事务锁定 canonical command 与 Run,
223
+ 复核 Actor、Scope、authorization、run policy、request digest、generation 和 effect fence。
224
+ 生产 Web 使用当前登录 Cookie,扩展使用已配对 `bax_` Host Auth;两者都只得到绑定
225
+ installation/session/run/node/command/scope/digest 的短期 grant。Client Agent Session 的
226
+ receipt 链完成后,Server 以一次性 terminal receipt 将 canonical JSON 写入稳定 Blob 坐标,
227
+ 再用 `publishArtifactOnce` 发布 Durable Artifact;重启只协调同一 receipt,不重放模型副作用。
228
+ 每次 Provider attempt 在预留前和真正出网紧前检查 canonical bridge,并在执行期间持续检查
229
+ Run/Node/command、generation/fence、Actor、Operation、client binding、Host session 与当前授权;
230
+ 取消、Host revoke 或 fence 轮换会先撤销 Session 并阻止新出网,普通非 Workflow Session 仍沿用
231
+ 原有授权语义。
232
+
233
+ Session finalize 与 Blob/bridge complete 之间允许进程退出。恢复只读已持久化的 completed Session、
234
+ 完整 receipt 链、final result 与 terminal request digest,确定性重建 terminal receipt、JSON 与稳定
235
+ Blob ref,再执行 `putOnce` 和 bridge complete。恢复不等待浏览器重发 advance,也不再次调用
236
+ Provider。completed advance 只有 `receiptIds + result` 的 canonical terminal request digest 与首次
237
+ 完成完全一致时才幂等返回;任何顺序、receipt 或 result 漂移都 fail closed。
238
+ 此 terminal replay 使用独立的 terminal-safe authorization:继续复核当前 Actor、RBAC、Scope、
239
+ Host/Session/claim 及原 Release/Definition/command 不可变坐标,但不要求 command 仍处于
240
+ `dispatched` 或 Run 仍处于 active。因而 command 已 committed/reconciled、Run 已 completed 后,
241
+ 相同摘要仍返回同一 Artifact。Scope 不做当前 digest 与冻结 digest 的机械相等比较:Host 从
242
+ Durable Job 读取不可伪造的冻结 authorizationScope,并证明当前 Actor scope 仍包含该冻结范围;
243
+ 相等是特例,当前范围缩小到不再包含冻结范围时仍按未发现处理,也不会恢复成更宽 Run。
244
+
245
+ 模块 Durable Handler 需要把 Storage resource 或 JSON snapshot 作为后续 Workflow input 时,使用
246
+ `context.workflowInputArtifacts`(或 `requireModuleWorkflowInputArtifactPublicationPortV1`)。Host
247
+ 先执行既有 resource-file policy/对象授权,再 `BlobStore.putOnce` 并在当前真实 Job lease 内调用
248
+ `publishArtifactOnce`;返回的 `AgentWorkflowArtifactRef.artifactId` 来自 Durable Artifact receipt,
249
+ 绝不能用 Storage `fileId` 替代。source coordinate 仍须由模块注册的 authoritative source
250
+ Adapter 支持当前对象复验。
251
+
252
+ Workflow 启动前的时序使用两阶段 `ModuleRequestContext.workflowInputMaterialization`:模块同时在
253
+ Manifest 声明 `<module>.workflow-input-materialize` Task,并用
254
+ `defineModuleWorkflowInputMaterializationHandlerV1` 注册固定 Handler。Route 先 `begin`,Host 只把
255
+ module-owned source specs 与当前 Actor/scope 提交为真实 Durable Job;后续 `resolve` 只返回
256
+ `pending`,或从同一 succeeded Job 的正式 publication 投影 `ready + AgentWorkflowArtifactRef[]`。
257
+ `begin`、Durable payload parser 与 worker publication 复用同一 public strict parser:resource/json
258
+ 字段按 mode 必填且互斥,未知字段、getter/稀疏数组、危险键、非有限数字、超深/超节点/超字节 JSON
259
+ 一律在 Storage/Blob 写入前拒绝;resource request 也必须精确匹配 `fileId/purpose/resourceType/resourceId`。
260
+ 调用方只能在 ready 后把 refs 连同 source IDs 交给 preset start;project prepare 仍重读业务对象并
261
+ 逐项匹配坐标,Workflow start 随后再次校验 Durable Artifact 字节、Owner、source authorization 与
262
+ 冻结 scope。客户端回传的是待复验 capability-like ref,不是来源授权事实。取消、撤权、Job/metadata
263
+ 漂移或非 succeeded 状态不会返回 refs;Coordinator 不创建 synthetic job。
264
+ 该固定 Manifest task 的实现事实就是同 key、同 feature/permission/audit 的 Durable Handler;
265
+ Module completeness 不要求再注册 scheduled `registerTaskHandlers` no-op,任一 capability 坐标漂移
266
+ 仍按缺少实现 fail closed。
267
+
268
+ `completed` 与 `cancelled` 是吸收态。取消先持久化 `cancellation-requested`,再撤销关联
269
+ Client Session,最后提交 cancelled;启动恢复会继续未完成的取消。只有尚未产生 attempt、
270
+ receipt 或在途请求的同一 installation/session/binding 才能立即接管丢失响应的 claim;其它
271
+ 迟到写入、过期 claim、fence 漂移、不同内容占用同一 Blob/Artifact 坐标均 fail closed。
272
+
273
+ ## 部署与稳定错误
274
+
275
+ 生产 Server 必须配置 `WINDY_PUBLIC_BASE_URL=https://windy.example`。它只用于生成受信
276
+ Windy baseURL,不能指向 Provider。Provider URL、Key、物理 model 和 deployment 只通过
277
+ Agent Server 管理面环境配置;公共 DTO 没有 BYOK 字段,也不支持客户端 model override。
278
+
279
+ 稳定错误 code 为 `INVALID_INPUT`、`FORBIDDEN`、`NOT_FOUND`、`CONFLICT`、
280
+ `LIMIT_EXCEEDED`、`PROVIDER_FAILED`、`INTERNAL_ERROR`。message 使用简体中文安全文案,不透传 Provider
281
+ 正文、URL、Key、物理 model 或内部错误。License/Feature/Permission/Scope 不满足统一
282
+ fail closed,不进入人工审批状态机。
283
+
284
+ PostgreSQL 集成回归使用 `CLIENT_AGENT_TEST_DATABASE_URL`,覆盖并发预留、receipt 原子写入、
285
+ 重启恢复与终态不可改写;Agent Server contract 回归覆盖 tool calls、DLP、SSE、Abort 和
286
+ Provider 错误脱敏。
287
+
288
+ ## 升级说明
289
+
290
+ 从不含生产 Client Agent Session 的版本升级时:
291
+
292
+ 1. 先执行标准 `windy update` / migration 流程,确认 migration 0055 已创建 session 与
293
+ receipt 两张表,0056 已加入 Host Session digest;不要手工回填 token 或 Provider 响应;
294
+ 2. Server 配置 `WINDY_PUBLIC_BASE_URL`,生产必须是最终用户可访问的 HTTPS 利剑服务 origin;
295
+ 3. Agent Server 继续使用现有 `QWEN_API_URL`、`QWEN_API_KEY`、`QWEN_MODEL` 与 deployment
296
+ 配置,绝不把这些值复制到 Web、扩展或业务模块;
297
+ 4. 业务模块仅在目标 Agent Operation 上声明 `clientExecution`;Workflow 专用 Operation 还必须
298
+ 声明 `launchAuthority: "workflow-artifact"`,同时保留原
299
+ Feature/Permission/License/Scope 与 `providerDataPolicy`;
300
+ 5. 在 project-owned `client-agent-host-auth-binding.ts` 装配实现
301
+ `ModuleClientAgentHostAuthAdapter` 的 P-256 pairing/bax Adapter;其 `authenticate` 只返回
302
+ actor/installation/session 标识,权限仍由 Windy canonical Actor 加载,并通过
303
+ `bindRevocations` 把 installation/session 撤销推给 Session Service。未装配或未 ready 时
304
+ 不注册/不协商 capability;
305
+ 6. 客户端先请求 capabilities;只有出现 `pageAgentClientRun` 才切换 PageAgent 路径,否则
306
+ 保持旧路径或明确不可用;
307
+ 7. 服务地址或 installation pairing 切换前调用 binding revoke,清除内存中的 grant;无法
308
+ 联系旧服务时不得复用旧 token,等待其短 TTL 到期。
309
+
310
+ Workflow Artifact Port 还要求 fresh deploy 顺序应用
311
+ `0062_client_agent_workflow_artifact.sql`,并在 project-owned
312
+ `client-agent-workflow-artifact-binding.ts` 登记审核后的 Workflow/Node/Operation/Artifact
313
+ 绑定。已经发布的 `0.6.14` recipe 保持不可变;既有 Starter 的 project-owned Composition
314
+ 由 `0.6.15` narrow recipe 以唯一 import/Omit/runtime property 三锚点接入。binding 缺失时
315
+ 创建新默认空 seam;只有完整匹配旧默认空 seam 才升级 release/scope/terminal authority 注释契约,客户已登记或
316
+ 任意字节漂移均在写入前停止并保留 WIP。
317
+
318
+ 协议没有 BYOK、用户模型选择、逐动作审批或逐目标网页 origin 授权字段。宿主配对只负责
319
+ 识别目标 Windy 服务、当前登录 actor、installation 和撤销边界。
@@ -0,0 +1,94 @@
1
+ # Embedding AI Runtime
2
+
3
+ Windy 提供受治理的文本与图片 Embedding 调用边界,不提供业务向量库。业务模块仍负责向量表、索引版本、增量更新、案件权限过滤、重建和排序。
4
+
5
+ ## 调用链
6
+
7
+ 业务模块在 Manifest 注册 `kind=embedding` Operation,同时声明稳定的 Feature、Permission、License、审计动作、数据分类、输入模态、能力和预算。模块 `setup(host)` 通过 `prepareEmbedding` 生成领域选项;浏览器只调用同源 `/api/embeddings`。
8
+
9
+ 文本经过 Provider 数据字段治理后进入 Runtime。图片必须是当前 Actor 有权读取的 `ArtifactRef`;平台重新签发短时引用,Runtime 校验大小、哈希、MIME 和像素预算,移除元数据后才交给内网 Adapter。业务代码不能提交文件路径、任意 URL 或 Base64。
10
+
11
+ `POST /api/embeddings/runs` 创建持久 Run;轮询 events/result 或取消时都会重新验证当前 Actor、Module、Feature、Permission、License 和 scope。图片 Run 在 worker 实际读图前仅以 `runId/itemId` 回调 Server;Server 从持久绑定恢复密封引用、重建当前 Guard 并刷新读取授权。客户端与 Embedding Runtime 都不能提交 Actor、scope 或新的 Artifact token。授权、资源完整性或部署限制发生漂移时,该操作 fail-closed。
12
+
13
+ ```ts
14
+ const operation = {
15
+ key: "analysis.embedding.multimodal",
16
+ kind: "embedding",
17
+ featureKey: "analysis.embedding",
18
+ permissionKey: "analysis.embedding.execute",
19
+ licenseFeatureKey: "analysis.embedding",
20
+ auditAction: "analysis.embedding.execute",
21
+ dataClassification: "sensitive",
22
+ inputModalities: ["text", "image"],
23
+ outputModalities: ["embedding"],
24
+ requiredCapabilities: ["embedding.text", "embedding.image"],
25
+ limits: {
26
+ maxDurationSeconds: 60,
27
+ maxInputBytes: 20_000_000,
28
+ maxOutputBytes: 20_000_000,
29
+ maxUnits: 64,
30
+ maxArtifacts: 16,
31
+ maxPixelsPerArtifact: 20_000_000,
32
+ },
33
+ };
34
+ ```
35
+
36
+ ## 固定输出契约
37
+
38
+ 每个批次返回稳定 `batchId`、逐项输入 SHA-256 和向量,以及由 Runtime 配置固定的:
39
+
40
+ - `deploymentAlias`
41
+ - `model`
42
+ - `version`
43
+ - `dimensions`
44
+ - `normalized`
45
+
46
+ Runtime 拒绝 ID/顺序漂移、维度漂移、非有限数值和与归一化声明不一致的向量。Adapter 响应不能覆盖上述部署元数据。这些字段使业务索引可重现、可判断何时需要重建。
47
+
48
+ ## 部署
49
+
50
+ Adapter URL 只允许本机、Compose 服务名、`.internal` 或私网 IP。平台不允许把敏感输入发往任意公网端点。
51
+
52
+ ```dotenv
53
+ EMBEDDING_SERVER_URL=http://embedding-server:8092
54
+ EMBEDDING_ARTIFACT_URL=http://server:9747/api/internal/ai/artifacts
55
+ EMBEDDING_RUN_ARTIFACT_URL=http://server:9747/api/internal/embeddings/runs
56
+ EMBEDDING_ADAPTER_URL=http://embedding-adapter:9000
57
+ EMBEDDING_ADAPTER_TOKEN=
58
+ EMBEDDING_DEPLOYMENT_KEY=local-embedding
59
+ EMBEDDING_DEPLOYMENT_IDENTITY=windy-deployment-v1_<uuidv4>
60
+ EMBEDDING_RELEASE_DIGEST=sha256:<64位小写十六进制>
61
+ EMBEDDING_OFFERS_DIGEST=sha256:<64位小写十六进制>
62
+ EMBEDDING_DEPLOYMENT_ALIAS=intranet-multimodal-v1
63
+ EMBEDDING_MODEL=local-model
64
+ EMBEDDING_MODEL_VERSION=2026-07
65
+ EMBEDDING_DIMENSIONS=1024
66
+ EMBEDDING_NORMALIZED=true
67
+ EMBEDDING_CAPABILITIES=embedding.text,embedding.image
68
+ EMBEDDING_MAX_UNITS=256
69
+ EMBEDDING_RUN_ENCRYPTION_SECRET=至少32字符的独立密钥
70
+ EMBEDDING_MAX_CONCURRENT_RUNS=1
71
+ EMBEDDING_MAX_QUEUE_DEPTH=0
72
+ EMBEDDING_READINESS_TIMEOUT_SECONDS=5
73
+ EMBEDDING_READINESS_TTL_SECONDS=60
74
+ EMBEDDING_RUN_TERMINAL_TTL_SECONDS=604800
75
+ ```
76
+
77
+ 启动可选服务:
78
+
79
+ ```bash
80
+ bun run dev:embedding
81
+ ```
82
+
83
+ 健康端点需要内部 Bearer Token,只在 `/v1/embedding/readiness` 真实探测 Adapter、
84
+ 重算完整原子 offers 与 release digest,并与配置 pin 完全一致时发布 readiness V1。
85
+ 可用 `python -m southwind_embedding_server.pin_cli` 从同一真实探测事实计算部署 pins;
86
+ 命令只输出 pins,不写 `.env`。Host 在业务 prepare、Artifact/Run 创建前固定
87
+ deployment pin,Remote 与 Embedding Runtime 在实际调用前再次核对。未配置 Adapter、
88
+ 缺失 pin、探测失败或部署漂移时返回 503,不回退到假向量或其它模型。
89
+
90
+ ## 错误与审计
91
+
92
+ 稳定错误码包括 `INVALID_INPUT`、`FORBIDDEN`、`CAPABILITY_UNAVAILABLE`、`BUDGET_EXCEEDED`、`OUTPUT_VALIDATION_FAILED` 和 `RUNTIME_UNAVAILABLE`。错误响应不透传 Adapter 正文。
93
+
94
+ 成功审计记录 Operation、Actor、批次、输入数量、部署别名、模型版本、维度和归一化状态,不记录原文、图片或向量。
@@ -99,14 +99,11 @@ Server 会幂等创建默认开发管理员和 `developer` 角色;仅当默认
99
99
 
100
100
  Web 不提供默认开发 Token。只有 Vite 开发模式同时设置 `VITE_DEV_AUTH_BYPASS=1` 和非空 `VITE_DEV_ADMIN_TOKEN` 时,前端才会携带显式 Bearer Token,并在登录页和应用壳持续显示警告;生产构建无条件忽略这两个变量。完成一次真实密码登录后,当前页面生命周期内会停用开发 Token,后续请求只使用 Cookie。
101
101
 
102
- 选择 Agent 模块的新项目会在本机 `.env` 自动生成独立随机
103
- `ADK_DEBUG_PLATFORM_TOKEN`。只有 `bun run dev:adk-web` 加载的开发 Compose Wrapper
104
- 会把它作为 `WINDY_ADK_DEBUG_TOKEN` 注入 Server,并注入 localhost-only ADK Web;它
105
- 不会复用 `WINDY_DEV_ADMIN_TOKEN`,也不会启用固定 `dev-admin-token` 或 `user:` 直通。
106
- Server 仅在 canonical Agent Run 路径和只读
107
- `GET /api/agent/debug/sessions/v1/**` 路径把它解析成 `service_adk_debug`,权限收敛为
108
- 项目选择的 Operation 与 allowed Tools 权限闭包。该 Token 不进入 Web、Agent
109
- Server、Provider 或生产 Compose;非 development Server 即使误配也会拒绝。
102
+ Agent Runtime 调试与历史会话读取复用 Windy 主站的真实登录身份,不创建第二种调试
103
+ Token、专用服务身份或开发认证旁路。`GET /api/agent/sessions/v1/**` 按 Provider 所绑定
104
+ Operation 的 Feature、Permission 与当前 Actor 数据范围逐次授权;主站 Runtime Report
105
+ 继续要求 `system.ai-runtime.read`。这些接口不接受 `WINDY_DEV_ADMIN_TOKEN` 以外的新型
106
+ Bearer 方案,也不会把内部服务 Token 下发给浏览器。
110
107
 
111
108
  未配置 `DATABASE_URL` 时不会注册真实登录 API;只允许显式的非生产开发直通,不存在内存生产账号或默认生产密码。
112
109
 
@@ -20,7 +20,6 @@
20
20
  "dev:speech": "PLATFORM_ENABLE_AI=true SPEECH_SERVER_URL=http://speech-server:8091 docker compose --profile agent --profile speech up --build",
21
21
  "speech:pins": "bun run scripts/provision-speech-readiness.ts",
22
22
  "dev:embedding": "PLATFORM_ENABLE_AI=true EMBEDDING_SERVER_URL=http://embedding-server:8092 docker compose --profile agent --profile embedding up --build",
23
- "dev:adk-web": "bun run scripts/dev-adk-web.ts",
24
23
  "dev:search": "OPENSEARCH_URL=http://opensearch:9200 docker compose --profile search up --build",
25
24
  "dev:license": "bun run --cwd apps/license dev",
26
25
  "dev:license:docker": "docker compose --profile license up license",
@@ -1,4 +1,5 @@
1
1
  export * from "./src/agent/index.js";
2
+ export * from "./src/client-agent/index.js";
2
3
  export type { ArtifactRef } from "./src/artifact-ref.js";
3
4
  export * from "./src/document/index.js";
4
5
  export * from "./src/embedding/index.js";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@southwind-ai/ai-client",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "engines": {
@@ -18,6 +18,8 @@
18
18
  "exports": {
19
19
  ".": "./index.ts",
20
20
  "./agent": "./src/agent/index.ts",
21
+ "./client-agent": "./src/client-agent/index.ts",
22
+ "./client-agent/workflow-artifact": "./src/client-agent/workflow-artifact/index.ts",
21
23
  "./contracts": "./src/agent/contracts/index.ts",
22
24
  "./document": "./src/document/index.ts",
23
25
  "./embedding": "./src/embedding/index.ts",
@@ -74,6 +74,7 @@ export class HttpAgentCaller implements AgentCaller {
74
74
  ...(options.screenshotIntakeToken
75
75
  ? { screenshotIntakeToken: options.screenshotIntakeToken }
76
76
  : {}),
77
+ ...(options.sessionId ? { sessionId: options.sessionId } : {}),
77
78
  };
78
79
  let response: Response;
79
80
  try {
@@ -103,6 +104,7 @@ export class HttpAgentCaller implements AgentCaller {
103
104
  const created = parseCreatedRun(await safeJson(response, "创建 Agent Run"));
104
105
  return this.createRun(operation, created.runId, created.eventsUrl, {
105
106
  signal: options.signal,
107
+ sessionId: options.sessionId,
106
108
  });
107
109
  }
108
110
 
@@ -120,7 +122,11 @@ export class HttpAgentCaller implements AgentCaller {
120
122
  {
121
123
  method: "POST",
122
124
  headers: { "content-type": "application/json" },
123
- body: JSON.stringify({ operationKey: operation.key, cursor }),
125
+ body: JSON.stringify({
126
+ operationKey: operation.key,
127
+ cursor,
128
+ ...(options.sessionId ? { sessionId: options.sessionId } : {}),
129
+ }),
124
130
  signal: options.signal,
125
131
  },
126
132
  );
@@ -154,6 +160,7 @@ export class HttpAgentCaller implements AgentCaller {
154
160
  signal: options.signal,
155
161
  initialSequence: cursor,
156
162
  initialTerminal: attached.terminalEvent,
163
+ sessionId: options.sessionId,
157
164
  });
158
165
  }
159
166
 
@@ -173,9 +180,15 @@ export class HttpAgentCaller implements AgentCaller {
173
180
  signal?: AbortSignal;
174
181
  initialSequence?: number;
175
182
  initialTerminal?: TerminalAgentEvent;
183
+ sessionId?: string;
176
184
  },
177
185
  ): AgentRun<Output> {
178
- const operationQuery = `operationKey=${encodeURIComponent(operation.key)}`;
186
+ const operationQuery = [
187
+ `operationKey=${encodeURIComponent(operation.key)}`,
188
+ ...(state.sessionId
189
+ ? [`sessionId=${encodeURIComponent(state.sessionId)}`]
190
+ : []),
191
+ ].join("&");
179
192
  return new HttpAgentRun<Output>({
180
193
  id: runId,
181
194
  eventsUrl: this.endpoint(eventsPath),
@@ -29,17 +29,31 @@ describe("Agent Run protocol safety", () => {
29
29
  expect(fake.calls).toBe(1);
30
30
  });
31
31
 
32
- test("跨 chunk 解析 heartbeat 和事件 frame", async () => {
33
- const started = frame({
34
- type: "run.started",
35
- runId: "run-chunks",
36
- sequence: 1,
37
- });
38
- const completed = frame({
39
- type: "run.completed",
40
- runId: "run-chunks",
41
- sequence: 2,
42
- });
32
+ test("从 sequence 0 跨 chunk 解码完整 canonical 事件流", async () => {
33
+ const canonicalEvents: AgentEvent[] = [
34
+ { type: "run.started", runId: "run-chunks", sequence: 1 },
35
+ {
36
+ type: "input.prepared",
37
+ runId: "run-chunks",
38
+ sequence: 2,
39
+ artifactCount: 0,
40
+ inputModalities: ["text"],
41
+ },
42
+ {
43
+ type: "output.delta",
44
+ runId: "run-chunks",
45
+ sequence: 3,
46
+ text: "完成",
47
+ },
48
+ {
49
+ type: "usage.reported",
50
+ runId: "run-chunks",
51
+ sequence: 4,
52
+ usage: { source: "unknown" },
53
+ },
54
+ { type: "run.completed", runId: "run-chunks", sequence: 5 },
55
+ ];
56
+ const stream = `: heartbeat\n\n${canonicalEvents.map(frame).join("")}`;
43
57
  const fake = plannedFetch([
44
58
  () =>
45
59
  json({
@@ -47,23 +61,21 @@ describe("Agent Run protocol safety", () => {
47
61
  status: "accepted",
48
62
  eventsUrl: "/events",
49
63
  }),
50
- () =>
51
- sse([
52
- ": heart",
53
- "beat\n\n" + started.slice(0, 9),
54
- started.slice(9) + completed.slice(0, 17),
55
- completed.slice(17),
56
- ]),
64
+ (input, init) => {
65
+ const url = new URL(
66
+ input instanceof Request ? input.url : input.toString(),
67
+ );
68
+ expect(url.searchParams.has("after")).toBe(false);
69
+ expect(new Headers(init?.headers).has("last-event-id")).toBe(false);
70
+ return sse([stream.slice(0, 8), stream.slice(8, 41), stream.slice(41)]);
71
+ },
57
72
  () => json({ runId: "run-chunks", status: "completed", output: "ok" }),
58
73
  ]);
59
74
  const run = await start(fake.fetch, "chunks");
60
75
  const events = collect(run.events);
61
76
 
62
77
  await expect(run.result()).resolves.toBe("ok");
63
- expect((await events).map(({ type }) => type)).toEqual([
64
- "run.started",
65
- "run.completed",
66
- ]);
78
+ expect(await events).toEqual(canonicalEvents);
67
79
  });
68
80
 
69
81
  test("run.failed 返回 canonical 安全错误且不请求 result", async () => {
@@ -186,16 +198,18 @@ function start(fetch: AgentFetch, idempotencyKey: string) {
186
198
  }).start(operation, null, { idempotencyKey });
187
199
  }
188
200
 
189
- function plannedFetch(plans: Array<() => Response>): {
201
+ function plannedFetch(
202
+ plans: Array<(...args: Parameters<AgentFetch>) => Response>,
203
+ ): {
190
204
  fetch: AgentFetch;
191
205
  readonly calls: number;
192
206
  } {
193
207
  let calls = 0;
194
208
  return {
195
- fetch: async () => {
209
+ fetch: async (...args) => {
196
210
  const plan = plans[calls++];
197
211
  if (!plan) throw new Error("unexpected fetch");
198
- return plan();
212
+ return plan(...args);
199
213
  },
200
214
  get calls() {
201
215
  return calls;
@@ -7,11 +7,15 @@ export interface StartAgentRunOptions {
7
7
  artifacts?: readonly ArtifactRef[];
8
8
  /** Host-issued one-shot screenshot intake; never an Artifact URL or Run owner. */
9
9
  screenshotIntakeToken?: string;
10
+ /** 可选的长期 Session;服务端会重新校验当前 Actor 与授权范围。 */
11
+ sessionId?: string;
10
12
  signal?: AbortSignal;
11
13
  }
12
14
 
13
15
  export interface AttachAgentRunOptions {
14
16
  cursor?: number;
17
+ /** 恢复长期 Session 关联;服务端仍会校验 Run、Actor 与 Scope。 */
18
+ sessionId?: string;
15
19
  signal?: AbortSignal;
16
20
  }
17
21