create-windy 0.6.12 → 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.
- package/dist/cli.js +572 -269
- package/package.json +1 -1
- package/template/.agents/skills/windy-business-module/SKILL.md +98 -70
- package/template/.windy-template.json +3 -3
- package/template/AGENTS.md +3 -6
- package/template/apps/agent-server/Dockerfile +2 -3
- package/template/apps/agent-server/README.md +38 -54
- package/template/apps/agent-server/pyproject.toml +0 -1
- package/template/apps/agent-server/src/southwind_agent_server/app.py +4 -2
- package/template/apps/agent-server/src/southwind_agent_server/attempt_context.py +191 -0
- package/template/apps/agent-server/src/southwind_agent_server/attempt_context_projection.py +203 -0
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_contracts.py +61 -0
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_governance.py +82 -0
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_routes.py +121 -0
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_runtime.py +158 -0
- package/template/apps/agent-server/src/southwind_agent_server/context_message_digest.py +24 -0
- package/template/apps/agent-server/src/southwind_agent_server/context_version_contracts.py +71 -0
- package/template/apps/agent-server/src/southwind_agent_server/context_version_port.py +307 -0
- package/template/apps/agent-server/src/southwind_agent_server/contracts.py +39 -0
- package/template/apps/agent-server/src/southwind_agent_server/deterministic.py +2 -0
- package/template/apps/agent-server/src/southwind_agent_server/engine.py +9 -1
- package/template/apps/agent-server/src/southwind_agent_server/engine_identity.py +2 -0
- package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +15 -0
- package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +37 -3
- package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +46 -26
- package/template/apps/agent-server/src/southwind_agent_server/openai_engine_validation.py +32 -0
- package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +7 -0
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_insert.py +5 -2
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_queries.py +1 -0
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_store.py +6 -1
- package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +3 -2
- package/template/apps/agent-server/src/southwind_agent_server/postgres_store_backend.py +1 -0
- package/template/apps/agent-server/src/southwind_agent_server/provider_governance.py +21 -0
- package/template/apps/agent-server/src/southwind_agent_server/report_lifecycle.py +2 -1
- package/template/apps/agent-server/src/southwind_agent_server/report_presenter.py +1 -0
- package/template/apps/agent-server/src/southwind_agent_server/report_routes.py +7 -1
- package/template/apps/agent-server/src/southwind_agent_server/report_store.py +10 -56
- package/template/apps/agent-server/src/southwind_agent_server/report_store_protocol.py +75 -0
- package/template/apps/agent-server/src/southwind_agent_server/report_types.py +9 -2
- package/template/apps/agent-server/src/southwind_agent_server/runtime_budget.py +74 -0
- package/template/apps/agent-server/src/southwind_agent_server/runtime_factory.py +11 -3
- package/template/apps/agent-server/src/southwind_agent_server/service.py +41 -65
- package/template/apps/agent-server/src/southwind_agent_server/service_control.py +64 -0
- package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +3 -0
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_errors.py +2 -0
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_schema.py +9 -1
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_store.py +6 -5
- package/template/apps/agent-server/src/southwind_agent_server/store.py +2 -0
- package/template/apps/agent-server/src/southwind_agent_server/trajectory.py +137 -0
- package/template/apps/agent-server/src/southwind_agent_server/unavailable_engine.py +58 -0
- package/template/apps/agent-server/tests/test_api.py +30 -11
- package/template/apps/agent-server/tests/test_client_completion.py +230 -0
- package/template/apps/agent-server/tests/test_provider_attempt_reporting.py +12 -24
- package/template/apps/agent-server/tests/test_report_resilience.py +2 -0
- package/template/apps/agent-server/tests/test_report_routes.py +58 -1
- package/template/apps/agent-server/tests/test_report_summary_parity.py +1 -0
- package/template/apps/agent-server/tests/test_run_capacity.py +2 -0
- package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +18 -3
- package/template/apps/agent-server/tests/test_trajectory.py +91 -0
- package/template/apps/agent-server/uv.lock +0 -259
- package/template/apps/server/Dockerfile +9 -4
- package/template/apps/server/src/agent/actor-projection-audit.ts +6 -0
- package/template/apps/server/src/agent/agent-run-delegation-policy.ts +115 -0
- package/template/apps/server/src/agent/agent-session-bootstrap.ts +23 -0
- package/template/apps/server/src/agent/{debug-session-facade-provider-failure.test.ts → agent-session-facade-provider-failure.test.ts} +24 -33
- package/template/apps/server/src/agent/{debug-session-facade.test.ts → agent-session-facade.test.ts} +34 -45
- package/template/apps/server/src/agent/{debug-session-facade.ts → agent-session-facade.ts} +50 -57
- package/template/apps/server/src/agent/{debug-session-id.test.ts → agent-session-id.test.ts} +5 -5
- package/template/apps/server/src/agent/{debug-session-id.ts → agent-session-id.ts} +7 -7
- package/template/apps/server/src/agent/{debug-session-provider-reader.ts → agent-session-provider-reader.ts} +18 -15
- package/template/apps/server/src/agent/{debug-session-routes.test.ts → agent-session-routes.test.ts} +16 -16
- package/template/apps/server/src/agent/{debug-session-routes.ts → agent-session-routes.ts} +12 -12
- package/template/apps/server/src/agent/{debug-session-validation.ts → agent-session-validation.ts} +13 -11
- package/template/apps/server/src/agent/client-session/authorization.ts +47 -0
- package/template/apps/server/src/agent/client-session/bootstrap.ts +96 -0
- package/template/apps/server/src/agent/client-session/capabilities.ts +19 -0
- package/template/apps/server/src/agent/client-session/completion.ts +299 -0
- package/template/apps/server/src/agent/client-session/contracts.ts +136 -0
- package/template/apps/server/src/agent/client-session/digest.ts +39 -0
- package/template/apps/server/src/agent/client-session/drizzle-repository.integration.test.ts +170 -0
- package/template/apps/server/src/agent/client-session/drizzle-repository.ts +345 -0
- package/template/apps/server/src/agent/client-session/errors.ts +28 -0
- package/template/apps/server/src/agent/client-session/fixtures/page-agent-1.12.2-request.json +52 -0
- package/template/apps/server/src/agent/client-session/host-auth.test.ts +144 -0
- package/template/apps/server/src/agent/client-session/host-auth.ts +110 -0
- package/template/apps/server/src/agent/client-session/manifest-admission.ts +240 -0
- package/template/apps/server/src/agent/client-session/openai-stream.ts +123 -0
- package/template/apps/server/src/agent/client-session/presentation.ts +46 -0
- package/template/apps/server/src/agent/client-session/remote-provider.test.ts +144 -0
- package/template/apps/server/src/agent/client-session/remote-provider.ts +216 -0
- package/template/apps/server/src/agent/client-session/repository.ts +225 -0
- package/template/apps/server/src/agent/client-session/request.test.ts +69 -0
- package/template/apps/server/src/agent/client-session/request.ts +289 -0
- package/template/apps/server/src/agent/client-session/revocation.ts +23 -0
- package/template/apps/server/src/agent/client-session/routes.ts +315 -0
- package/template/apps/server/src/agent/client-session/runtime-audit.ts +42 -0
- package/template/apps/server/src/agent/client-session/service.test-support.ts +226 -0
- package/template/apps/server/src/agent/client-session/service.test.ts +268 -0
- package/template/apps/server/src/agent/client-session/service.ts +346 -0
- package/template/apps/server/src/agent/context-memory/attempt-context-contracts.ts +60 -0
- package/template/apps/server/src/agent/context-memory/authoritative-source-registry.ts +127 -0
- package/template/apps/server/src/agent/context-memory/context-builder.test.ts +160 -0
- package/template/apps/server/src/agent/context-memory/context-builder.ts +184 -0
- package/template/apps/server/src/agent/context-memory/contracts.ts +284 -0
- package/template/apps/server/src/agent/context-memory/digest.ts +22 -0
- package/template/apps/server/src/agent/context-memory/memory-authorization.ts +82 -0
- package/template/apps/server/src/agent/context-memory/memory-content.ts +69 -0
- package/template/apps/server/src/agent/context-memory/memory-object-registry.ts +87 -0
- package/template/apps/server/src/agent/context-memory/memory-projector-contracts.ts +121 -0
- package/template/apps/server/src/agent/context-memory/memory-projector-validation.ts +155 -0
- package/template/apps/server/src/agent/context-memory/memory-projector.test.ts +19 -0
- package/template/apps/server/src/agent/context-memory/memory-projector.ts +259 -0
- package/template/apps/server/src/agent/context-memory/memory-retrieval-policy.ts +195 -0
- package/template/apps/server/src/agent/context-memory/memory-retriever.test.ts +339 -0
- package/template/apps/server/src/agent/context-memory/memory-retriever.ts +184 -0
- package/template/apps/server/src/agent/context-memory/search-provider-port.test.ts +62 -0
- package/template/apps/server/src/agent/context-memory/search-provider-port.ts +75 -0
- package/template/apps/server/src/agent/context-memory/working-context-expiry.ts +95 -0
- package/template/apps/server/src/agent/context-message-recovery.ts +23 -0
- package/template/apps/server/src/agent/context-version-routes.ts +241 -0
- package/template/apps/server/src/agent/context-version-runtime.ts +332 -0
- package/template/apps/server/src/agent/context-version-support.ts +93 -0
- package/template/apps/server/src/agent/context-version-validation.ts +118 -0
- package/template/apps/server/src/agent/drizzle-run-binding-repository.ts +11 -0
- package/template/apps/server/src/agent/idempotency-key.ts +9 -1
- package/template/apps/server/src/agent/memory-runtime-adapters.ts +266 -0
- package/template/apps/server/src/agent/memory-scope-binding.ts +14 -0
- package/template/apps/server/src/agent/module-ai-port-factory.ts +41 -0
- package/template/apps/server/src/agent/provider-input-governance.ts +19 -0
- package/template/apps/server/src/agent/remote-runtime-response.ts +162 -0
- package/template/apps/server/src/agent/remote-runtime.ts +53 -153
- package/template/apps/server/src/agent/run-audit.ts +2 -2
- package/template/apps/server/src/agent/run-authorization.test.ts +27 -0
- package/template/apps/server/src/agent/run-authorization.ts +60 -1
- package/template/apps/server/src/agent/run-binding-repository.ts +9 -0
- package/template/apps/server/src/agent/run-browser-authorization.ts +79 -0
- package/template/apps/server/src/agent/run-contracts.ts +23 -0
- package/template/apps/server/src/agent/run-facade.ts +139 -139
- package/template/apps/server/src/agent/run-failure-cleanup.ts +58 -0
- package/template/apps/server/src/agent/run-operation-policy.ts +20 -0
- package/template/apps/server/src/agent/run-route-input.ts +19 -1
- package/template/apps/server/src/agent/run-routes.ts +133 -5
- package/template/apps/server/src/agent/run-runtime-request.ts +89 -0
- package/template/apps/server/src/agent/run-session-authorization.ts +95 -0
- package/template/apps/server/src/agent/run-start-preparation.ts +71 -0
- package/template/apps/server/src/agent/runtime-bootstrap-input.ts +42 -0
- package/template/apps/server/src/agent/runtime-bootstrap-report.test.ts +53 -1
- package/template/apps/server/src/agent/runtime-bootstrap.ts +114 -111
- package/template/apps/server/src/agent/runtime-tool-composition.ts +38 -0
- package/template/apps/server/src/agent/session-context-source-support.ts +38 -0
- package/template/apps/server/src/agent/session-context-source.ts +346 -0
- package/template/apps/server/src/agent/session-invalidation/contracts.ts +217 -0
- package/template/apps/server/src/agent/session-invalidation/dispatcher.contract.test.ts +333 -0
- package/template/apps/server/src/agent/session-invalidation/dispatcher.ts +205 -0
- package/template/apps/server/src/agent/session-invalidation/module-authoritative-producer.test.ts +127 -0
- package/template/apps/server/src/agent/session-invalidation/module-authoritative-producer.ts +202 -0
- package/template/apps/server/src/agent/session-invalidation/read-guard.ts +39 -0
- package/template/apps/server/src/agent/session-invalidation/runtime.ts +69 -0
- package/template/apps/server/src/agent/session-invalidation/test-envelopes.ts +24 -0
- package/template/apps/server/src/agent/session-invalidation/worker.contract.test.ts +135 -0
- package/template/apps/server/src/agent/session-invalidation/worker.ts +76 -0
- package/template/apps/server/src/agent/session-log/checkpoint-digest.ts +36 -0
- package/template/apps/server/src/agent/session-log/domain.ts +123 -0
- package/template/apps/server/src/agent/session-log/events.ts +229 -0
- package/template/apps/server/src/agent/session-log/history.ts +143 -0
- package/template/apps/server/src/agent/session-log/in-memory-repository.ts +340 -0
- package/template/apps/server/src/agent/session-log/lifecycle.ts +67 -0
- package/template/apps/server/src/agent/session-log/replay-policy.ts +76 -0
- package/template/apps/server/src/agent/session-log/repository.ts +103 -0
- package/template/apps/server/src/agent/session-log/service.ts +349 -0
- package/template/apps/server/src/agent/session-log/session-log.test.ts +282 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-context-memory.ts +348 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-governed-context.ts +328 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-invalidation-outbox.ts +260 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-memory-projection-deletion.ts +56 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-run-projection-receipt.ts +80 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-session-fork.ts +147 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-session-list.ts +24 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-session-mapping.ts +154 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-session-mutations.ts +64 -0
- package/template/apps/server/src/agent/session-persistence/drizzle-session-repository.ts +335 -0
- package/template/apps/server/src/agent/session-persistence/invalidation-projections.ts +229 -0
- package/template/apps/server/src/agent/session-persistence/payload-codec.ts +90 -0
- package/template/apps/server/src/agent/session-projection-access.ts +155 -0
- package/template/apps/server/src/agent/session-projection-bootstrap.ts +87 -0
- package/template/apps/server/src/agent/session-projection-errors.ts +22 -0
- package/template/apps/server/src/agent/session-projection-facade.ts +349 -0
- package/template/apps/server/src/agent/session-projection-routes.ts +215 -0
- package/template/apps/server/src/agent/session-projection-view.ts +137 -0
- package/template/apps/server/src/agent/session-result-memory.ts +228 -0
- package/template/apps/server/src/agent/session-run-lifecycle.ts +85 -0
- package/template/apps/server/src/agent/session-run-link-contracts.ts +56 -0
- package/template/apps/server/src/agent/session-run-link.ts +343 -0
- package/template/apps/server/src/agent/session-run-recovery.ts +16 -0
- package/template/apps/server/src/agent/session-runtime-composition.ts +265 -0
- package/template/apps/server/src/agent/session-source-chain-authorizer.ts +141 -0
- package/template/apps/server/src/agent/session-terminal-reconciler.ts +100 -0
- package/template/apps/server/src/agent/session-turn-state.ts +49 -0
- package/template/apps/server/src/agent/tool-audit.ts +3 -3
- package/template/apps/server/src/agent/tool-execution-receipt.ts +13 -0
- package/template/apps/server/src/agent/tool-host.ts +41 -4
- package/template/apps/server/src/agent/tool-registry-composition.ts +52 -0
- package/template/apps/server/src/agent/tool-registry.test.ts +5 -5
- package/template/apps/server/src/agent/tool-registry.ts +53 -59
- package/template/apps/server/src/agent/unavailable-routes.ts +49 -5
- package/template/apps/server/src/agent/workflow-durable-runtime-input.ts +32 -0
- package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +59 -0
- package/template/apps/server/src/agent-workflow/adapter-dispatch.ts +148 -0
- package/template/apps/server/src/agent-workflow/approval-node-adapter.ts +77 -0
- package/template/apps/server/src/agent-workflow/artifact-access-error.ts +9 -0
- package/template/apps/server/src/agent-workflow/artifact-node-adapter.ts +67 -0
- package/template/apps/server/src/agent-workflow/artifact-policy.ts +71 -0
- package/template/apps/server/src/agent-workflow/artifact-source-authorization.ts +85 -0
- package/template/apps/server/src/agent-workflow/authorization.ts +238 -0
- package/template/apps/server/src/agent-workflow/budget-ledger.ts +118 -0
- package/template/apps/server/src/agent-workflow/budget-validation.ts +305 -0
- package/template/apps/server/src/agent-workflow/canonical-agent-run-binding.ts +17 -0
- package/template/apps/server/src/agent-workflow/canonical-agent-run-evidence.ts +142 -0
- package/template/apps/server/src/agent-workflow/canonical-agent-run-port.ts +304 -0
- package/template/apps/server/src/agent-workflow/canonical-agent-run-remote.ts +64 -0
- package/template/apps/server/src/agent-workflow/canonical-json.ts +16 -0
- package/template/apps/server/src/agent-workflow/command-drive.ts +195 -0
- package/template/apps/server/src/agent-workflow/command-error.ts +9 -0
- package/template/apps/server/src/agent-workflow/command-facade.ts +290 -0
- package/template/apps/server/src/agent-workflow/command-input.ts +133 -0
- package/template/apps/server/src/agent-workflow/condition-node-adapter.ts +69 -0
- package/template/apps/server/src/agent-workflow/definition-budget-validation.ts +41 -0
- package/template/apps/server/src/agent-workflow/definition-node-validation.ts +197 -0
- package/template/apps/server/src/agent-workflow/definition-validation.ts +198 -0
- package/template/apps/server/src/agent-workflow/delegated-tool-authorization.ts +15 -0
- package/template/apps/server/src/agent-workflow/delegation-child-delivery.ts +129 -0
- package/template/apps/server/src/agent-workflow/delegation-execution-authorization.ts +218 -0
- package/template/apps/server/src/agent-workflow/delegation-policy-validation.ts +253 -0
- package/template/apps/server/src/agent-workflow/delegation-policy.ts +179 -0
- package/template/apps/server/src/agent-workflow/drizzle-artifact-port.ts +211 -0
- package/template/apps/server/src/agent-workflow/drizzle-artifact-support.ts +152 -0
- package/template/apps/server/src/agent-workflow/drizzle-budget-ledger-settlement.ts +271 -0
- package/template/apps/server/src/agent-workflow/drizzle-budget-ledger-support.ts +226 -0
- package/template/apps/server/src/agent-workflow/drizzle-budget-ledger.ts +189 -0
- package/template/apps/server/src/agent-workflow/drizzle-cancellation-reconcile.ts +177 -0
- package/template/apps/server/src/agent-workflow/drizzle-delegated-tool-authorization.ts +155 -0
- package/template/apps/server/src/agent-workflow/drizzle-delegation-completion.ts +84 -0
- package/template/apps/server/src/agent-workflow/drizzle-delegation-lifecycle.ts +139 -0
- package/template/apps/server/src/agent-workflow/drizzle-delegation-port.ts +288 -0
- package/template/apps/server/src/agent-workflow/drizzle-effect-command-fence.ts +333 -0
- package/template/apps/server/src/agent-workflow/drizzle-evaluation-repository.ts +214 -0
- package/template/apps/server/src/agent-workflow/drizzle-event-validation.ts +43 -0
- package/template/apps/server/src/agent-workflow/drizzle-recovery-admission.ts +115 -0
- package/template/apps/server/src/agent-workflow/drizzle-repository-lineage.ts +103 -0
- package/template/apps/server/src/agent-workflow/drizzle-repository-mappers.ts +317 -0
- package/template/apps/server/src/agent-workflow/drizzle-repository-write.ts +311 -0
- package/template/apps/server/src/agent-workflow/drizzle-repository.ts +285 -0
- package/template/apps/server/src/agent-workflow/drizzle-side-effect-repository.ts +83 -0
- package/template/apps/server/src/agent-workflow/drizzle-write-support.ts +101 -0
- package/template/apps/server/src/agent-workflow/durable-continuation-authorization.ts +109 -0
- package/template/apps/server/src/agent-workflow/durable-continuation-driver.ts +97 -0
- package/template/apps/server/src/agent-workflow/durable-continuation-runtime.ts +173 -0
- package/template/apps/server/src/agent-workflow/durable-job-node-adapter.ts +106 -0
- package/template/apps/server/src/agent-workflow/effect-command-fence.ts +250 -0
- package/template/apps/server/src/agent-workflow/evaluation-evidence-coordinates.ts +225 -0
- package/template/apps/server/src/agent-workflow/evaluation-evidence-metrics.ts +280 -0
- package/template/apps/server/src/agent-workflow/evaluation-evidence-reader.ts +326 -0
- package/template/apps/server/src/agent-workflow/evaluation-metrics-validation.ts +85 -0
- package/template/apps/server/src/agent-workflow/evaluation-projection.ts +70 -0
- package/template/apps/server/src/agent-workflow/evaluation-repository.ts +134 -0
- package/template/apps/server/src/agent-workflow/evaluation-service.ts +292 -0
- package/template/apps/server/src/agent-workflow/evaluation-tool-registration.ts +95 -0
- package/template/apps/server/src/agent-workflow/evaluation-validation.ts +331 -0
- package/template/apps/server/src/agent-workflow/event-validation.ts +277 -0
- package/template/apps/server/src/agent-workflow/governed-tool-schema.ts +55 -0
- package/template/apps/server/src/agent-workflow/in-memory-evaluation-repository.ts +123 -0
- package/template/apps/server/src/agent-workflow/in-memory-mutation-validation.ts +154 -0
- package/template/apps/server/src/agent-workflow/in-memory-repository-support.ts +277 -0
- package/template/apps/server/src/agent-workflow/in-memory-repository.ts +339 -0
- package/template/apps/server/src/agent-workflow/in-memory-side-effect-store.ts +78 -0
- package/template/apps/server/src/agent-workflow/input-receipt.ts +55 -0
- package/template/apps/server/src/agent-workflow/model-node-adapter.ts +86 -0
- package/template/apps/server/src/agent-workflow/model-pricing-catalog.ts +215 -0
- package/template/apps/server/src/agent-workflow/node-adapter-factory.ts +83 -0
- package/template/apps/server/src/agent-workflow/node-adapters.ts +50 -0
- package/template/apps/server/src/agent-workflow/node-execution-ports.ts +185 -0
- package/template/apps/server/src/agent-workflow/node-input-receipt-port.ts +42 -0
- package/template/apps/server/src/agent-workflow/node-result-receipt.ts +50 -0
- package/template/apps/server/src/agent-workflow/platform-node-adapter-support.ts +185 -0
- package/template/apps/server/src/agent-workflow/platform-node-adapters.ts +256 -0
- package/template/apps/server/src/agent-workflow/platform-node-approval.ts +146 -0
- package/template/apps/server/src/agent-workflow/platform-node-direct-adapters.ts +65 -0
- package/template/apps/server/src/agent-workflow/production-delegation-scope.ts +58 -0
- package/template/apps/server/src/agent-workflow/production-node-policies.ts +62 -0
- package/template/apps/server/src/agent-workflow/query-service.ts +198 -0
- package/template/apps/server/src/agent-workflow/release.ts +96 -0
- package/template/apps/server/src/agent-workflow/repository.ts +157 -0
- package/template/apps/server/src/agent-workflow/routes.ts +307 -0
- package/template/apps/server/src/agent-workflow/runtime-composition.ts +308 -0
- package/template/apps/server/src/agent-workflow/scheduler-cancellation-reconcile.ts +253 -0
- package/template/apps/server/src/agent-workflow/scheduler-cancellation-support.ts +145 -0
- package/template/apps/server/src/agent-workflow/scheduler-cancellation.ts +2 -0
- package/template/apps/server/src/agent-workflow/scheduler-context.ts +85 -0
- package/template/apps/server/src/agent-workflow/scheduler-deadline.ts +65 -0
- package/template/apps/server/src/agent-workflow/scheduler-effect-result.ts +205 -0
- package/template/apps/server/src/agent-workflow/scheduler-execution-convergence.ts +174 -0
- package/template/apps/server/src/agent-workflow/scheduler-execution.ts +211 -0
- package/template/apps/server/src/agent-workflow/scheduler-failure.ts +102 -0
- package/template/apps/server/src/agent-workflow/scheduler-join-cancellation.ts +282 -0
- package/template/apps/server/src/agent-workflow/scheduler-mutation-queue.ts +13 -0
- package/template/apps/server/src/agent-workflow/scheduler-node-timeout.ts +139 -0
- package/template/apps/server/src/agent-workflow/scheduler-parallel-dispatch.ts +99 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-activation.ts +63 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-budget.ts +41 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-effect.ts +331 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-event-time.ts +26 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-failed-policy.ts +129 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-node.ts +208 -0
- package/template/apps/server/src/agent-workflow/scheduler-recovery-policy-convergence.ts +140 -0
- package/template/apps/server/src/agent-workflow/scheduler-reservation-convergence.ts +40 -0
- package/template/apps/server/src/agent-workflow/scheduler-side-effect-execution.ts +249 -0
- package/template/apps/server/src/agent-workflow/scheduler-support.ts +235 -0
- package/template/apps/server/src/agent-workflow/scheduler-workflow-cancellation.ts +296 -0
- package/template/apps/server/src/agent-workflow/scheduler.ts +289 -0
- package/template/apps/server/src/agent-workflow/service-completion.ts +102 -0
- package/template/apps/server/src/agent-workflow/service-mutation-identity.ts +94 -0
- package/template/apps/server/src/agent-workflow/service-node-admission.ts +36 -0
- package/template/apps/server/src/agent-workflow/service-node-run-update.ts +55 -0
- package/template/apps/server/src/agent-workflow/service-recovery-events.ts +38 -0
- package/template/apps/server/src/agent-workflow/service-recovery.ts +264 -0
- package/template/apps/server/src/agent-workflow/service-retry.ts +86 -0
- package/template/apps/server/src/agent-workflow/service-run-command.ts +131 -0
- package/template/apps/server/src/agent-workflow/service-state-error.ts +21 -0
- package/template/apps/server/src/agent-workflow/service-state-invariants.ts +44 -0
- package/template/apps/server/src/agent-workflow/service-support.ts +152 -0
- package/template/apps/server/src/agent-workflow/service.ts +307 -0
- package/template/apps/server/src/agent-workflow/side-effect-state.ts +226 -0
- package/template/apps/server/src/agent-workflow/state-machine.ts +321 -0
- package/template/apps/server/src/agent-workflow/subagent-node-adapter.ts +229 -0
- package/template/apps/server/src/agent-workflow/tool-node-adapter.ts +259 -0
- package/template/apps/server/src/agent-workflow/usage.ts +149 -0
- package/template/apps/server/src/agent-workflow/wait-signal-service.ts +147 -0
- package/template/apps/server/src/agent-workflow/workflow-artifact-token.ts +109 -0
- package/template/apps/server/src/agent-workflow/workflow-value-validation.ts +101 -0
- package/template/apps/server/src/agent-workflow/workspace-policy.ts +109 -0
- package/template/apps/server/src/ai-runtime-report/remote-parser.ts +41 -0
- package/template/apps/server/src/ai-runtime-report/service.test.ts +2 -0
- package/template/apps/server/src/app/agent-runtime-composition.ts +38 -0
- package/template/apps/server/src/app/client-agent-host-auth-binding.ts +10 -0
- package/template/apps/server/src/auth/actor-resolver.test.ts +33 -0
- package/template/apps/server/src/auth/actor-resolver.ts +6 -1
- package/template/apps/server/src/auth/composition.ts +36 -0
- package/template/apps/server/src/auth/routes.test-support.ts +2 -0
- package/template/apps/server/src/auth/routes.test.ts +18 -0
- package/template/apps/server/src/auth/runtime.ts +2 -0
- package/template/apps/server/src/auth/service-options.ts +16 -0
- package/template/apps/server/src/auth/service.ts +7 -12
- package/template/apps/server/src/index.ts +35 -37
- package/template/apps/server/src/license/pairing-service.test.ts +1 -1
- package/template/apps/server/src/module-host/agent-session-memory-port.ts +91 -0
- package/template/apps/server/src/module-host/{debug-session-provider-registration.test.ts → agent-session-provider-registration.test.ts} +42 -17
- package/template/apps/server/src/module-host/{debug-session-provider-registration.ts → agent-session-provider-registration.ts} +18 -18
- package/template/apps/server/src/module-host/agent-source-invalidation-port.ts +53 -0
- package/template/apps/server/src/module-host/http-runtime.ts +14 -0
- package/template/apps/server/src/module-host/initialize-contracts.ts +4 -5
- package/template/apps/server/src/module-host/initialize.ts +4 -4
- package/template/apps/server/src/module-host/request-context.test.ts +5 -5
- package/template/apps/server/src/module-host/request-context.ts +8 -0
- package/template/apps/server/src/module-host/route-install-context.ts +65 -0
- package/template/apps/server/src/module-host/route-installer.ts +11 -56
- package/template/apps/server/src/module-host/scoped-host.ts +17 -12
- package/template/apps/server/src/module-host/storage-authorization-binding.test.ts +3 -3
- package/template/apps/server/src/module-host.ts +3 -5
- package/template/apps/server/src/runtime.ts +3 -36
- package/template/apps/server/src/storage/routes-stream-cancellation.test.ts +19 -0
- package/template/apps/server/src/storage/routes.ts +3 -1
- package/template/apps/server/src/system/actor.ts +15 -2
- package/template/apps/server/src/system/authorization-invalidation-bridge.ts +30 -0
- package/template/apps/server/src/system/authorization-invalidation-composition.ts +36 -0
- package/template/apps/server/src/system/drizzle-system.ts +8 -1
- package/template/apps/server/src/system/identity-route-config.ts +9 -1
- package/template/apps/server/src/system/routes.ts +3 -0
- package/template/apps/server/src/system/seed.ts +3 -0
- package/template/apps/server/src/system/user-account-policy.ts +91 -0
- package/template/apps/web/package.json +1 -0
- package/template/apps/web/src/layout/AppSidebar.vue +2 -0
- package/template/apps/web/src/pages/system/AgentSessionPage.vue +73 -0
- package/template/apps/web/src/pages/system/AgentSessionPage.webtest.ts +66 -0
- package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +69 -0
- package/template/apps/web/src/pages/system/components/agent-session/AgentSessionDetail.vue +114 -0
- package/template/apps/web/src/pages/system/components/agent-session/AgentSessionList.vue +84 -0
- package/template/apps/web/src/pages/system/components/agent-session/ContextVersionPanel.vue +119 -0
- package/template/apps/web/src/pages/system/components/agent-session/ContextVersionPanel.webtest.ts +46 -0
- package/template/apps/web/src/pages/system/components/agent-session/MemoryProjectionPanel.vue +163 -0
- package/template/apps/web/src/pages/system/components/agent-session/MemoryProjectionPanel.webtest.ts +62 -0
- package/template/apps/web/src/pages/system/components/agent-session/SessionTimeline.vue +71 -0
- package/template/apps/web/src/pages/system/components/agent-session/SessionTimeline.webtest.ts +34 -0
- package/template/apps/web/src/pages/system/components/agent-session/agent-session-presenter.ts +56 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowNodeCard.vue +39 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowNodeDetail.vue +172 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunDetail.vue +151 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunGraph.vue +96 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunList.vue +100 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowRunSummary.vue +148 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/agent-workflow-presenter.ts +74 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/workflow-graph-layout.ts +108 -0
- package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunDetailDialog.vue +9 -0
- package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunDetailDialog.webtest.ts +22 -0
- package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeRunTable.webtest.ts +2 -0
- package/template/apps/web/src/pages/system/components/ai-runtime/AiRuntimeTrajectory.vue +118 -0
- package/template/apps/web/src/pages/system/composables/useAgentSessions.ts +209 -0
- package/template/apps/web/src/pages/system/composables/useAgentSessions.webtest.ts +138 -0
- package/template/apps/web/src/pages/system/composables/useAgentWorkflowRuns.ts +173 -0
- package/template/apps/web/src/router/index.ts +4 -0
- package/template/apps/web/src/router/platform-admin-route-bindings.ts +6 -0
- package/template/apps/web/src/services/agent-session-api.ts +159 -0
- package/template/apps/web/src/services/agent-session-api.webtest.ts +65 -0
- package/template/apps/web/src/services/agent-workflow-api.ts +181 -0
- package/template/apps/web/src/services/ai-runtime-api.ts +4 -0
- package/template/docker-compose.yml +11 -8
- package/template/docs/adr/0003-agent-session-event-source.md +3 -0
- package/template/docs/architecture/agent-harness.md +464 -0
- package/template/docs/architecture/agent-workflow.md +99 -0
- package/template/docs/architecture/ai-runtime.md +55 -47
- package/template/docs/architecture/module-host.md +4 -3
- package/template/docs/operations/adk-retirement.md +98 -0
- package/template/docs/operations/agent-session-memory.md +162 -0
- package/template/docs/operations/agent-session-troubleshooting.md +196 -0
- package/template/docs/operations/agent-workflow-recovery.md +74 -0
- package/template/docs/operations/incremental-delivery.md +1 -1
- package/template/docs/platform/agent-production-store.md +82 -0
- package/template/docs/platform/agent-run-reattachment.md +52 -0
- package/template/docs/platform/agent-runtime-observability.md +4 -3
- package/template/docs/platform/agent-runtime.md +116 -281
- package/template/docs/platform/agent-tool-approval.md +61 -0
- package/template/docs/platform/background-ai-operations.md +50 -0
- package/template/docs/platform/client-agent-session.md +173 -0
- package/template/docs/platform/embedding-ai-runtime.md +94 -0
- package/template/docs/platform/platform-authentication.md +5 -8
- package/template/package.json +0 -1
- package/template/packages/ai-client/index.ts +1 -0
- package/template/packages/ai-client/package.json +2 -1
- package/template/packages/ai-client/src/agent/client/client.ts +15 -2
- package/template/packages/ai-client/src/agent/client/run-protocol.test.ts +39 -25
- package/template/packages/ai-client/src/agent/client/types.ts +4 -0
- package/template/packages/ai-client/src/agent/contracts/contracts.test.ts +49 -7
- package/template/packages/ai-client/src/agent/contracts/events.ts +61 -0
- package/template/packages/ai-client/src/agent/contracts/runs.ts +1 -0
- package/template/packages/ai-client/src/client-agent/contracts.ts +131 -0
- package/template/packages/ai-client/src/client-agent/http.test.ts +60 -0
- package/template/packages/ai-client/src/client-agent/http.ts +66 -0
- package/template/packages/ai-client/src/client-agent/index.ts +3 -0
- package/template/packages/ai-client/src/client-agent/validation.test.ts +57 -0
- package/template/packages/ai-client/src/client-agent/validation.ts +152 -0
- package/template/packages/config/index.test.ts +18 -0
- package/template/packages/config/package.json +1 -1
- package/template/packages/config/src/platform-validation.ts +8 -0
- package/template/packages/config/src/platform.ts +22 -9
- package/template/packages/database/drizzle/0055_square_yellowjacket.sql +47 -0
- package/template/packages/database/drizzle/0056_tricky_living_mummy.sql +2 -0
- package/template/packages/database/drizzle/0057_mature_doomsday.sql +4 -0
- package/template/packages/database/drizzle/0058_agent_session_memory.sql +159 -0
- package/template/packages/database/drizzle/0059_agent_source_module_key.sql +16 -0
- package/template/packages/database/drizzle/0060_slimy_rocket_raccoon.sql +43 -0
- package/template/packages/database/drizzle/0061_agent_workflow.sql +303 -0
- package/template/packages/database/drizzle/meta/0055_snapshot.json +11071 -0
- package/template/packages/database/drizzle/meta/0056_snapshot.json +11098 -0
- package/template/packages/database/drizzle/meta/0057_snapshot.json +10878 -0
- package/template/packages/database/drizzle/meta/0058_snapshot.json +12294 -0
- package/template/packages/database/drizzle/meta/0059_snapshot.json +12344 -0
- package/template/packages/database/drizzle/meta/0060_snapshot.json +12326 -0
- package/template/packages/database/drizzle/meta/0061_snapshot.json +14395 -0
- package/template/packages/database/drizzle/meta/_journal.json +49 -0
- package/template/packages/database/package.json +1 -1
- package/template/packages/database/src/agent-runtime-schema.test.ts +26 -0
- package/template/packages/database/src/schema/agent-context-message.ts +38 -0
- package/template/packages/database/src/schema/agent-runtime.ts +7 -0
- package/template/packages/database/src/schema/agent-session-receipt.ts +36 -0
- package/template/packages/database/src/schema/agent-session.ts +344 -0
- package/template/packages/database/src/schema/agent-workflow-delegation.ts +126 -0
- package/template/packages/database/src/schema/agent-workflow-effects.ts +213 -0
- package/template/packages/database/src/schema/agent-workflow-evaluation.ts +67 -0
- package/template/packages/database/src/schema/agent-workflow.ts +270 -0
- package/template/packages/database/src/schema/client-agent.ts +95 -0
- package/template/packages/database/src/schema/index.ts +8 -0
- package/template/packages/jobs/package.json +1 -1
- package/template/packages/modules/index.ts +2 -0
- package/template/packages/modules/package.json +1 -1
- package/template/packages/modules/src/ai-client-execution-composition.test.ts +98 -0
- package/template/packages/modules/src/ai-client-execution-policy.ts +54 -0
- package/template/packages/modules/src/ai-operation-composition.ts +2 -0
- package/template/packages/modules/src/manifest.ts +15 -0
- package/template/packages/modules/src/system-admin-routes.ts +16 -0
- package/template/packages/modules/src/system-admin-ui-catalog.ts +4 -1
- package/template/packages/modules/src/system-agent-audit-actions.ts +26 -0
- package/template/packages/modules/src/system-ai-api-bindings.ts +262 -0
- package/template/packages/modules/src/system-api-control-plane.ts +4 -78
- package/template/packages/modules/src/system-audit-actions.ts +113 -0
- package/template/packages/modules/src/system-features.ts +17 -0
- package/template/packages/modules/src/system-module-catalog.ts +21 -11
- package/template/packages/modules/src/system-modules.ts +22 -0
- package/template/packages/modules/src/system-permissions.ts +8 -0
- package/template/packages/server-sdk/index.ts +43 -0
- package/template/packages/server-sdk/package.json +5 -1
- package/template/packages/server-sdk/src/agent-session-memory-port.ts +64 -0
- package/template/packages/server-sdk/src/agent-session-provider.ts +63 -0
- package/template/packages/server-sdk/src/agent-source-invalidation-port.ts +54 -0
- package/template/packages/server-sdk/src/ai-operation-registration.ts +2 -0
- package/template/packages/server-sdk/src/client-agent-session.ts +95 -0
- package/template/packages/server-sdk/src/debug-session-provider.ts +14 -63
- package/template/packages/server-sdk/src/module-host.ts +7 -3
- package/template/packages/server-sdk/src/request-context.ts +6 -0
- package/template/packages/shared/index.ts +3 -0
- package/template/packages/shared/package.json +1 -1
- package/template/packages/shared/src/agent-workflow-definition.ts +113 -0
- package/template/packages/shared/src/agent-workflow-delegation.ts +123 -0
- package/template/packages/shared/src/agent-workflow-evaluation.ts +159 -0
- package/template/packages/shared/src/agent-workflow-events.ts +99 -0
- package/template/packages/shared/src/agent-workflow-run.ts +259 -0
- package/template/packages/shared/src/agent-workflow.ts +3 -0
- package/template/packages/shared/src/ai-runtime-report.ts +25 -0
- package/template/packages/shared/src/rbac.ts +24 -0
- package/template/packages/storage/package.json +1 -1
- package/template/packages/storage/src/upload-streams.test.ts +31 -0
- package/template/packages/storage/src/upload-streams.ts +20 -6
- package/template/apps/agent-server/adk_web_agents/__init__.py +0 -1
- package/template/apps/agent-server/adk_web_agents/canonical_debug/__init__.py +0 -1
- package/template/apps/agent-server/adk_web_agents/canonical_debug/agent.py +0 -145
- package/template/apps/agent-server/adk_web_agents/safe_debug/__init__.py +0 -3
- package/template/apps/agent-server/adk_web_agents/safe_debug/agent.py +0 -40
- package/template/apps/agent-server/adk_web_agents/services.py +0 -25
- package/template/apps/agent-server/project/adk-web-debug.json +0 -4
- package/template/apps/agent-server/src/southwind_agent_server/adk_adapter.py +0 -333
- package/template/apps/agent-server/src/southwind_agent_server/adk_debug.py +0 -348
- package/template/apps/agent-server/src/southwind_agent_server/adk_debug_sessions.py +0 -325
- package/template/apps/agent-server/src/southwind_agent_server/adk_failure.py +0 -13
- package/template/apps/agent-server/src/southwind_agent_server/adk_model.py +0 -304
- package/template/apps/agent-server/src/southwind_agent_server/adk_tools.py +0 -143
- package/template/apps/agent-server/tests/test_adk_adapter.py +0 -307
- package/template/apps/agent-server/tests/test_adk_debug_result_polling.py +0 -139
- package/template/apps/agent-server/tests/test_adk_debug_sessions.py +0 -215
- package/template/apps/agent-server/tests/test_adk_web_agent.py +0 -12
- package/template/apps/agent-server/tests/test_adk_web_canonical_debug.py +0 -282
- package/template/apps/server/src/agent/run-debug-authorization.ts +0 -27
- package/template/apps/server/src/agent/run-facade-adk-debug.test.ts +0 -95
- package/template/apps/server/src/runtime-adk-debug.test.ts +0 -270
- package/template/apps/server/src/runtime-adk-debug.ts +0 -164
- package/template/apps/server/src/runtime-request-actor.test.ts +0 -55
- package/template/apps/server/src/runtime-request-actor.ts +0 -22
- package/template/docker-compose.agent-debug.yml +0 -58
- package/template/scripts/dev-adk-web.ts +0 -107
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import type { JsonValue } from "./json.js";
|
|
2
|
+
import type { ISODateTime } from "./primitives.js";
|
|
3
|
+
import type { AgentWorkflowNodeType } from "./agent-workflow-definition.js";
|
|
4
|
+
|
|
5
|
+
export interface AgentWorkflowBudget {
|
|
6
|
+
readonly maxDurationSeconds: number;
|
|
7
|
+
readonly maxModelAttempts: number;
|
|
8
|
+
readonly maxToolCalls: number;
|
|
9
|
+
readonly maxSubagents: number;
|
|
10
|
+
readonly maxParallelism: number;
|
|
11
|
+
readonly maxInputTokens: number;
|
|
12
|
+
readonly maxOutputTokens: number;
|
|
13
|
+
readonly maxCostMicros: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface AgentWorkflowArtifactRef {
|
|
17
|
+
readonly artifactId: string;
|
|
18
|
+
readonly kind: string;
|
|
19
|
+
readonly mediaType: string;
|
|
20
|
+
readonly byteSize: number;
|
|
21
|
+
readonly sha256: string;
|
|
22
|
+
readonly retentionPolicyKey: string;
|
|
23
|
+
readonly source: {
|
|
24
|
+
readonly moduleKey: string;
|
|
25
|
+
readonly kind: string;
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly version: string;
|
|
28
|
+
readonly sequence: number;
|
|
29
|
+
readonly digest?: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type AgentWorkflowMeasuredCount =
|
|
34
|
+
| {
|
|
35
|
+
readonly status: "measured";
|
|
36
|
+
readonly value: number;
|
|
37
|
+
readonly source: "provider-reported" | "host-measured";
|
|
38
|
+
}
|
|
39
|
+
| { readonly status: "unknown"; readonly reasonCode: string };
|
|
40
|
+
|
|
41
|
+
export type AgentWorkflowMeasuredCost =
|
|
42
|
+
| {
|
|
43
|
+
readonly status: "measured";
|
|
44
|
+
readonly amountMicros: number;
|
|
45
|
+
readonly currency: string;
|
|
46
|
+
readonly source:
|
|
47
|
+
| "provider-reported"
|
|
48
|
+
| "catalog-estimated"
|
|
49
|
+
| "host-measured";
|
|
50
|
+
}
|
|
51
|
+
| { readonly status: "unknown"; readonly reasonCode: string };
|
|
52
|
+
|
|
53
|
+
export interface AgentWorkflowUsage {
|
|
54
|
+
readonly durationMs: number;
|
|
55
|
+
readonly modelAttempts: number;
|
|
56
|
+
readonly toolCalls: number;
|
|
57
|
+
readonly subagents: number;
|
|
58
|
+
readonly inputTokens: AgentWorkflowMeasuredCount;
|
|
59
|
+
readonly outputTokens: AgentWorkflowMeasuredCount;
|
|
60
|
+
readonly cost: AgentWorkflowMeasuredCost;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface AgentWorkflowInputReceipt {
|
|
64
|
+
readonly schemaKey: string;
|
|
65
|
+
readonly value: JsonValue;
|
|
66
|
+
readonly valueDigest: string;
|
|
67
|
+
readonly recordedAt: ISODateTime;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type AgentWorkflowRunStatus =
|
|
71
|
+
| "accepted"
|
|
72
|
+
| "running"
|
|
73
|
+
| "waiting"
|
|
74
|
+
| "completed"
|
|
75
|
+
| "failed"
|
|
76
|
+
| "cancelled"
|
|
77
|
+
| "timed-out";
|
|
78
|
+
export type AgentWorkflowNodeRunStatus =
|
|
79
|
+
| "pending"
|
|
80
|
+
| "ready"
|
|
81
|
+
| "running"
|
|
82
|
+
| "waiting"
|
|
83
|
+
| "retry-scheduled"
|
|
84
|
+
| "completed"
|
|
85
|
+
| "failed"
|
|
86
|
+
| "cancelled"
|
|
87
|
+
| "skipped"
|
|
88
|
+
| "timed-out";
|
|
89
|
+
|
|
90
|
+
export interface AgentWorkflowRun {
|
|
91
|
+
readonly runId: string;
|
|
92
|
+
readonly releaseId: string;
|
|
93
|
+
readonly tenantId: string;
|
|
94
|
+
readonly actorId: string;
|
|
95
|
+
readonly routeKey: string;
|
|
96
|
+
readonly inputDigest: string;
|
|
97
|
+
readonly inputReceipt: AgentWorkflowInputReceipt;
|
|
98
|
+
readonly scopeDigest: string;
|
|
99
|
+
readonly authorizationSnapshotDigest: string;
|
|
100
|
+
readonly toolPolicyDigest: string;
|
|
101
|
+
readonly workspacePolicyDigest: string;
|
|
102
|
+
readonly executionPolicyDigest: string;
|
|
103
|
+
readonly status: AgentWorkflowRunStatus;
|
|
104
|
+
readonly budget: AgentWorkflowBudget;
|
|
105
|
+
readonly usage: AgentWorkflowUsage;
|
|
106
|
+
readonly deadlineAt: ISODateTime;
|
|
107
|
+
readonly sessionId?: string;
|
|
108
|
+
readonly parentRunId?: string;
|
|
109
|
+
readonly parentNodeId?: string;
|
|
110
|
+
readonly parentNodeRunId?: string;
|
|
111
|
+
readonly cancellationRequestedAt?: ISODateTime;
|
|
112
|
+
readonly createdAt: ISODateTime;
|
|
113
|
+
readonly updatedAt: ISODateTime;
|
|
114
|
+
readonly finishedAt?: ISODateTime;
|
|
115
|
+
readonly version: number;
|
|
116
|
+
readonly safeErrorCode?: string;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export interface AgentWorkflowNodeResultReceipt {
|
|
120
|
+
readonly receiptId: string;
|
|
121
|
+
readonly nodeRunId: string;
|
|
122
|
+
readonly resultDigest: string;
|
|
123
|
+
readonly outputSchemaKey?: string;
|
|
124
|
+
readonly selectedBranch?: string;
|
|
125
|
+
readonly smallResult?: JsonValue;
|
|
126
|
+
readonly executionEvidence?: {
|
|
127
|
+
readonly source: "agent-runtime-report";
|
|
128
|
+
readonly agentRunId: string;
|
|
129
|
+
readonly modelRouteKey: string;
|
|
130
|
+
readonly model: string;
|
|
131
|
+
readonly modelDeploymentDigest: string;
|
|
132
|
+
readonly modelConfigurationDigest: string;
|
|
133
|
+
};
|
|
134
|
+
readonly artifactIds: readonly string[];
|
|
135
|
+
readonly recordedAt: ISODateTime;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface AgentWorkflowNodeRun {
|
|
139
|
+
readonly nodeRunId: string;
|
|
140
|
+
readonly runId: string;
|
|
141
|
+
readonly nodeId: string;
|
|
142
|
+
readonly previousNodeRunId?: string;
|
|
143
|
+
readonly nodeType: AgentWorkflowNodeType;
|
|
144
|
+
readonly status: AgentWorkflowNodeRunStatus;
|
|
145
|
+
readonly attempt: number;
|
|
146
|
+
readonly maxAttempts: number;
|
|
147
|
+
readonly idempotencyKey: string;
|
|
148
|
+
readonly adapter?: {
|
|
149
|
+
readonly kind:
|
|
150
|
+
| "model-operation"
|
|
151
|
+
| "agent-tool"
|
|
152
|
+
| "child-agent"
|
|
153
|
+
| "approval-work-item"
|
|
154
|
+
| "durable-job"
|
|
155
|
+
| "wait-signal"
|
|
156
|
+
| "artifact-store"
|
|
157
|
+
| "finalizer";
|
|
158
|
+
readonly coordinate: string;
|
|
159
|
+
};
|
|
160
|
+
readonly inputArtifacts: readonly AgentWorkflowArtifactRef[];
|
|
161
|
+
readonly outputArtifacts: readonly AgentWorkflowArtifactRef[];
|
|
162
|
+
readonly resultReceipt?: AgentWorkflowNodeResultReceipt;
|
|
163
|
+
readonly safeErrorCode?: string;
|
|
164
|
+
readonly createdAt: ISODateTime;
|
|
165
|
+
readonly updatedAt: ISODateTime;
|
|
166
|
+
readonly startedAt?: ISODateTime;
|
|
167
|
+
readonly finishedAt?: ISODateTime;
|
|
168
|
+
readonly version: number;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
export function isAgentWorkflowTerminal(
|
|
172
|
+
status: AgentWorkflowRunStatus,
|
|
173
|
+
): boolean {
|
|
174
|
+
return ["completed", "failed", "cancelled", "timed-out"].includes(status);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export function isAgentWorkflowNodeTerminal(
|
|
178
|
+
status: AgentWorkflowNodeRunStatus,
|
|
179
|
+
): boolean {
|
|
180
|
+
return ["completed", "failed", "cancelled", "skipped", "timed-out"].includes(
|
|
181
|
+
status,
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export function isAgentWorkflowRunTransitionAllowed(
|
|
186
|
+
from: AgentWorkflowRunStatus,
|
|
187
|
+
to: AgentWorkflowRunStatus,
|
|
188
|
+
): boolean {
|
|
189
|
+
const allowed: Record<
|
|
190
|
+
AgentWorkflowRunStatus,
|
|
191
|
+
readonly AgentWorkflowRunStatus[]
|
|
192
|
+
> = {
|
|
193
|
+
accepted: ["running", "cancelled", "timed-out", "failed"],
|
|
194
|
+
running: ["waiting", "completed", "failed", "cancelled", "timed-out"],
|
|
195
|
+
waiting: ["running", "failed", "cancelled", "timed-out"],
|
|
196
|
+
completed: [],
|
|
197
|
+
failed: [],
|
|
198
|
+
cancelled: [],
|
|
199
|
+
"timed-out": [],
|
|
200
|
+
};
|
|
201
|
+
return allowed[from].includes(to);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export function isAgentWorkflowNodeTransitionAllowed(
|
|
205
|
+
from: AgentWorkflowNodeRunStatus,
|
|
206
|
+
to: AgentWorkflowNodeRunStatus,
|
|
207
|
+
): boolean {
|
|
208
|
+
const allowed: Record<
|
|
209
|
+
AgentWorkflowNodeRunStatus,
|
|
210
|
+
readonly AgentWorkflowNodeRunStatus[]
|
|
211
|
+
> = {
|
|
212
|
+
pending: ["ready", "skipped", "cancelled", "timed-out"],
|
|
213
|
+
ready: ["running", "cancelled", "timed-out"],
|
|
214
|
+
running: [
|
|
215
|
+
"waiting",
|
|
216
|
+
"completed",
|
|
217
|
+
"failed",
|
|
218
|
+
"cancelled",
|
|
219
|
+
"skipped",
|
|
220
|
+
"timed-out",
|
|
221
|
+
],
|
|
222
|
+
waiting: [
|
|
223
|
+
"running",
|
|
224
|
+
"completed",
|
|
225
|
+
"failed",
|
|
226
|
+
"cancelled",
|
|
227
|
+
"skipped",
|
|
228
|
+
"timed-out",
|
|
229
|
+
],
|
|
230
|
+
failed: ["retry-scheduled"],
|
|
231
|
+
"retry-scheduled": ["cancelled", "timed-out"],
|
|
232
|
+
completed: [],
|
|
233
|
+
cancelled: [],
|
|
234
|
+
skipped: [],
|
|
235
|
+
"timed-out": [],
|
|
236
|
+
};
|
|
237
|
+
return allowed[from].includes(to);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export function usageFitsWithinBudget(
|
|
241
|
+
usage: AgentWorkflowUsage,
|
|
242
|
+
budget: AgentWorkflowBudget,
|
|
243
|
+
): boolean {
|
|
244
|
+
if (
|
|
245
|
+
usage.inputTokens.status !== "measured" ||
|
|
246
|
+
usage.outputTokens.status !== "measured" ||
|
|
247
|
+
usage.cost.status !== "measured"
|
|
248
|
+
)
|
|
249
|
+
return false;
|
|
250
|
+
return (
|
|
251
|
+
usage.durationMs <= budget.maxDurationSeconds * 1_000 &&
|
|
252
|
+
usage.modelAttempts <= budget.maxModelAttempts &&
|
|
253
|
+
usage.toolCalls <= budget.maxToolCalls &&
|
|
254
|
+
usage.subagents <= budget.maxSubagents &&
|
|
255
|
+
usage.inputTokens.value <= budget.maxInputTokens &&
|
|
256
|
+
usage.outputTokens.value <= budget.maxOutputTokens &&
|
|
257
|
+
usage.cost.amountMicros <= budget.maxCostMicros
|
|
258
|
+
);
|
|
259
|
+
}
|
|
@@ -107,6 +107,8 @@ export interface AiRuntimeRunModelDeployment {
|
|
|
107
107
|
|
|
108
108
|
export interface AiRuntimeRunListItem {
|
|
109
109
|
runId: string;
|
|
110
|
+
/** 创建该 Run 的稳定 Engine 实现标识;历史 ADK Run 保持原值。 */
|
|
111
|
+
engineId: string;
|
|
110
112
|
operationKey: string;
|
|
111
113
|
actor: AiRuntimeActorSummary | null;
|
|
112
114
|
status: AiRuntimeRunStatus;
|
|
@@ -142,11 +144,34 @@ export interface AiRuntimeAttemptDetail extends AiRuntimeRunUsage {
|
|
|
142
144
|
finishedAt: ISODateTime | null;
|
|
143
145
|
}
|
|
144
146
|
|
|
147
|
+
export interface AiRuntimeTrajectoryEvent {
|
|
148
|
+
sequence: number;
|
|
149
|
+
sequenceEnd: number;
|
|
150
|
+
type: string;
|
|
151
|
+
title: string;
|
|
152
|
+
toolKey?: string;
|
|
153
|
+
approvalOutcome?: string;
|
|
154
|
+
attemptSequence?: number;
|
|
155
|
+
totalTokens?: number;
|
|
156
|
+
artifactCount?: number;
|
|
157
|
+
inputModalities?: string[];
|
|
158
|
+
deltaCount?: number;
|
|
159
|
+
outputCharacters?: number;
|
|
160
|
+
errorCode?: string;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export interface AiRuntimeTrajectory {
|
|
164
|
+
/** canonical Run 超过既有留存期后,报表仍可读但轨迹不再可用。 */
|
|
165
|
+
available: boolean;
|
|
166
|
+
events: AiRuntimeTrajectoryEvent[];
|
|
167
|
+
}
|
|
168
|
+
|
|
145
169
|
export interface AiRuntimeRunDetail extends AiRuntimeRunListItem {
|
|
146
170
|
releaseId: string;
|
|
147
171
|
traceId: string;
|
|
148
172
|
safeErrorCode: string | null;
|
|
149
173
|
attempts: AiRuntimeAttemptDetail[];
|
|
174
|
+
trajectory: AiRuntimeTrajectory;
|
|
150
175
|
}
|
|
151
176
|
|
|
152
177
|
export type AiRuntimeRunPage = PageResult<AiRuntimeRunListItem>;
|
|
@@ -69,6 +69,30 @@ export interface AgentRunAuthorizationSnapshot {
|
|
|
69
69
|
featureKey: string;
|
|
70
70
|
allowedToolKeys: string[];
|
|
71
71
|
toolNetworkMode: "forbidden";
|
|
72
|
+
/** Host-normalized current Case coordinate; absent forbids Case Memory. */
|
|
73
|
+
memoryScopeCaseId?: string;
|
|
74
|
+
// @windy-module system.agent begin
|
|
75
|
+
/** Workflow-only: binds the narrowed runtime budget to the Run grant. */
|
|
76
|
+
runtimeBudgetDigest?: string;
|
|
77
|
+
/** Workflow-only: frozen provider deployment and model used for this Run. */
|
|
78
|
+
modelPin?: {
|
|
79
|
+
deploymentKey: string;
|
|
80
|
+
model: string;
|
|
81
|
+
};
|
|
82
|
+
/** Child Agent only: immutable effective delegation ceiling. */
|
|
83
|
+
delegation?: {
|
|
84
|
+
delegationId: string;
|
|
85
|
+
policyDigest: string;
|
|
86
|
+
budgetDigest: string;
|
|
87
|
+
workspaceId: string;
|
|
88
|
+
workspacePolicyKey: string;
|
|
89
|
+
scopeDigest: string;
|
|
90
|
+
scopePolicyDigest: string;
|
|
91
|
+
capabilityKey: string;
|
|
92
|
+
requiredFeatureKeys: string[];
|
|
93
|
+
requiredPermissionKeys: string[];
|
|
94
|
+
};
|
|
95
|
+
// @windy-module system.agent end
|
|
72
96
|
}
|
|
73
97
|
|
|
74
98
|
export type CredentialState = "active" | "must-change-password";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { abortAwareStream } from "./upload-streams.js";
|
|
3
|
+
|
|
4
|
+
test("兼容 Bun 缺少 releaseLock 和 cancel 的请求流实现", async () => {
|
|
5
|
+
const bodyWithoutReleaseLock = {
|
|
6
|
+
getReader: () => ({
|
|
7
|
+
read: async () => ({ done: true, value: undefined }),
|
|
8
|
+
cancel: async () => undefined,
|
|
9
|
+
}),
|
|
10
|
+
} as unknown as ReadableStream<Uint8Array>;
|
|
11
|
+
const completed = abortAwareStream(
|
|
12
|
+
bodyWithoutReleaseLock,
|
|
13
|
+
new AbortController().signal,
|
|
14
|
+
).getReader();
|
|
15
|
+
|
|
16
|
+
await expect(completed.read()).resolves.toEqual({
|
|
17
|
+
done: true,
|
|
18
|
+
value: undefined,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const bodyWithoutCancel = {
|
|
22
|
+
getReader: () => ({
|
|
23
|
+
read: async () => ({ done: true, value: undefined }),
|
|
24
|
+
releaseLock: () => undefined,
|
|
25
|
+
}),
|
|
26
|
+
} as unknown as ReadableStream<Uint8Array>;
|
|
27
|
+
|
|
28
|
+
await expect(
|
|
29
|
+
abortAwareStream(bodyWithoutCancel, new AbortController().signal).cancel(),
|
|
30
|
+
).resolves.toBeUndefined();
|
|
31
|
+
});
|
|
@@ -22,7 +22,7 @@ export function abortAwareStream(
|
|
|
22
22
|
const result = await raceAbort(source.read(), signal);
|
|
23
23
|
if (result.done) {
|
|
24
24
|
finished = true;
|
|
25
|
-
source
|
|
25
|
+
releaseReader(source);
|
|
26
26
|
controller.close();
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
@@ -40,7 +40,7 @@ export function abortAwareStream(
|
|
|
40
40
|
await cancelReader(reader, reason);
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
await body
|
|
43
|
+
await cancelStream(body, reason);
|
|
44
44
|
},
|
|
45
45
|
},
|
|
46
46
|
{ highWaterMark: 0 },
|
|
@@ -69,7 +69,7 @@ export function concatBlobStreams(
|
|
|
69
69
|
}
|
|
70
70
|
const result = await current.read();
|
|
71
71
|
if (result.done) {
|
|
72
|
-
current
|
|
72
|
+
releaseReader(current);
|
|
73
73
|
current = undefined;
|
|
74
74
|
continue;
|
|
75
75
|
}
|
|
@@ -101,7 +101,7 @@ export function guardFileSignature(
|
|
|
101
101
|
while (prefixSize < requiredBytes) {
|
|
102
102
|
const result = await source.read();
|
|
103
103
|
if (result.done) {
|
|
104
|
-
source
|
|
104
|
+
releaseReader(source);
|
|
105
105
|
controller.error(signatureError());
|
|
106
106
|
return;
|
|
107
107
|
}
|
|
@@ -126,7 +126,7 @@ export function guardFileSignature(
|
|
|
126
126
|
}
|
|
127
127
|
const result = await source.read();
|
|
128
128
|
if (result.done) {
|
|
129
|
-
source
|
|
129
|
+
releaseReader(source);
|
|
130
130
|
controller.close();
|
|
131
131
|
} else {
|
|
132
132
|
controller.enqueue(result.value);
|
|
@@ -137,7 +137,7 @@ export function guardFileSignature(
|
|
|
137
137
|
await cancelReader(reader, reason);
|
|
138
138
|
return;
|
|
139
139
|
}
|
|
140
|
-
await body
|
|
140
|
+
await cancelStream(body, reason);
|
|
141
141
|
},
|
|
142
142
|
},
|
|
143
143
|
{ highWaterMark: 0 },
|
|
@@ -217,3 +217,17 @@ async function cancelReader(
|
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
|
+
|
|
221
|
+
async function cancelStream(
|
|
222
|
+
stream: ReadableStream<Uint8Array>,
|
|
223
|
+
reason?: unknown,
|
|
224
|
+
): Promise<void> {
|
|
225
|
+
const cancel = stream.cancel;
|
|
226
|
+
if (typeof cancel !== "function") return;
|
|
227
|
+
await cancel.call(stream, reason).catch(() => undefined);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function releaseReader(reader: ReadableStreamDefaultReader<Uint8Array>): void {
|
|
231
|
+
const releaseLock = reader.releaseLock;
|
|
232
|
+
if (typeof releaseLock === "function") releaseLock.call(reader);
|
|
233
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Developer-only ADK Web agents."""
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"""Developer-only canonical Run bridge for ADK Web."""
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
from collections.abc import AsyncGenerator
|
|
5
|
-
from typing import cast
|
|
6
|
-
|
|
7
|
-
from google.adk.agents import LlmAgent
|
|
8
|
-
from google.adk.models.base_llm import BaseLlm
|
|
9
|
-
from google.adk.models.llm_request import LlmRequest
|
|
10
|
-
from google.adk.models.llm_response import LlmResponse
|
|
11
|
-
from google.adk.tools.tool_context import ToolContext
|
|
12
|
-
from google.genai import types
|
|
13
|
-
|
|
14
|
-
from southwind_agent_server.adk_debug import (
|
|
15
|
-
CanonicalRunDebugClient,
|
|
16
|
-
TextOperationDebugConfig,
|
|
17
|
-
load_text_operation_debug_config,
|
|
18
|
-
)
|
|
19
|
-
from southwind_agent_server.adk_debug_sessions import (
|
|
20
|
-
IMPORTED_SESSION_STATE_KEY,
|
|
21
|
-
ImportedDebugSessionReadOnlyError,
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
TOOL_NAME = "run_canonical_operation"
|
|
25
|
-
PROJECT_OPERATION = load_text_operation_debug_config()
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
async def run_canonical_operation(
|
|
29
|
-
question: str, tool_context: ToolContext
|
|
30
|
-
) -> dict[str, object]:
|
|
31
|
-
"""Run the project-selected text Operation through canonical platform APIs."""
|
|
32
|
-
ensure_debug_session_writable(tool_context.state.get(IMPORTED_SESSION_STATE_KEY))
|
|
33
|
-
if PROJECT_OPERATION is None:
|
|
34
|
-
raise RuntimeError("项目尚未选择可调试的文本 Operation")
|
|
35
|
-
return await CanonicalRunDebugClient.from_environment(
|
|
36
|
-
PROJECT_OPERATION.operation_key
|
|
37
|
-
).run(question)
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def ensure_debug_session_writable(imported_marker: object) -> None:
|
|
41
|
-
if imported_marker is True:
|
|
42
|
-
raise ImportedDebugSessionReadOnlyError(
|
|
43
|
-
"导入的业务会话是实时只读投影;请新建本地会话继续提问"
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
class CanonicalDebugLlm(BaseLlm):
|
|
48
|
-
"""ADK dispatcher; real model and Tool execution stay in canonical Run."""
|
|
49
|
-
|
|
50
|
-
def __init__(self, operation: TextOperationDebugConfig | None) -> None:
|
|
51
|
-
super().__init__(model="windy-canonical-run-bridge")
|
|
52
|
-
self._operation = operation
|
|
53
|
-
|
|
54
|
-
async def generate_content_async(
|
|
55
|
-
self,
|
|
56
|
-
llm_request: LlmRequest,
|
|
57
|
-
stream: bool = False,
|
|
58
|
-
) -> AsyncGenerator[LlmResponse, None]:
|
|
59
|
-
del stream
|
|
60
|
-
question, user_turn_index = latest_user_turn(llm_request)
|
|
61
|
-
tool_response = latest_tool_response(llm_request, user_turn_index)
|
|
62
|
-
if tool_response is not None:
|
|
63
|
-
yield text_response(render_result(tool_response))
|
|
64
|
-
return
|
|
65
|
-
if self._operation is None:
|
|
66
|
-
yield text_response(
|
|
67
|
-
"项目尚未在 apps/agent-server/project/adk-web-debug.json "
|
|
68
|
-
"选择真实文本 Operation。"
|
|
69
|
-
)
|
|
70
|
-
return
|
|
71
|
-
if not question:
|
|
72
|
-
yield text_response("请输入要交给真实 Agent Runtime 调试的业务问题。")
|
|
73
|
-
return
|
|
74
|
-
yield LlmResponse(
|
|
75
|
-
content=types.Content(
|
|
76
|
-
role="model",
|
|
77
|
-
parts=[
|
|
78
|
-
types.Part(
|
|
79
|
-
function_call=types.FunctionCall(
|
|
80
|
-
name=TOOL_NAME,
|
|
81
|
-
args={"question": question},
|
|
82
|
-
)
|
|
83
|
-
)
|
|
84
|
-
],
|
|
85
|
-
),
|
|
86
|
-
partial=False,
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def latest_user_turn(request: LlmRequest) -> tuple[str, int]:
|
|
91
|
-
for index in range(len(request.contents) - 1, -1, -1):
|
|
92
|
-
content = request.contents[index]
|
|
93
|
-
if content.role != "user":
|
|
94
|
-
continue
|
|
95
|
-
text = "".join(part.text or "" for part in content.parts or [])
|
|
96
|
-
if text.strip():
|
|
97
|
-
return text.strip(), index
|
|
98
|
-
return "", -1
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def latest_tool_response(
|
|
102
|
-
request: LlmRequest, user_turn_index: int
|
|
103
|
-
) -> dict[str, object] | None:
|
|
104
|
-
if user_turn_index < 0:
|
|
105
|
-
return None
|
|
106
|
-
for content in reversed(request.contents[user_turn_index + 1 :]):
|
|
107
|
-
for part in content.parts or []:
|
|
108
|
-
response = part.function_response
|
|
109
|
-
if response and response.name == TOOL_NAME:
|
|
110
|
-
return cast(dict[str, object], response.response or {})
|
|
111
|
-
return None
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def render_result(value: dict[str, object]) -> str:
|
|
115
|
-
answer = value.get("answer")
|
|
116
|
-
run_id = value.get("runId")
|
|
117
|
-
events = value.get("events")
|
|
118
|
-
if not isinstance(answer, str) or not isinstance(run_id, str):
|
|
119
|
-
return "真实 Agent 调试 Run 返回了无效结果。"
|
|
120
|
-
trace = json.dumps(events if isinstance(events, list) else [], ensure_ascii=False)
|
|
121
|
-
return f"{answer}\n\n---\n调试 Run:{run_id}\n事件摘要:{trace}"
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
def text_response(text: str) -> LlmResponse:
|
|
125
|
-
return LlmResponse(
|
|
126
|
-
content=types.Content(role="model", parts=[types.Part(text=text)]),
|
|
127
|
-
partial=False,
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
def build_root_agent(
|
|
132
|
-
operation: TextOperationDebugConfig | None,
|
|
133
|
-
) -> LlmAgent:
|
|
134
|
-
return LlmAgent(
|
|
135
|
-
name="canonical_debug",
|
|
136
|
-
model=CanonicalDebugLlm(operation),
|
|
137
|
-
instruction=(
|
|
138
|
-
"每个业务问题都必须经 run_canonical_operation 交给 canonical Run;"
|
|
139
|
-
"不得自行回答、不得访问数据库或绕过平台授权。"
|
|
140
|
-
),
|
|
141
|
-
tools=[run_canonical_operation] if operation else [],
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
root_agent = build_root_agent(PROJECT_OPERATION)
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from collections.abc import AsyncGenerator
|
|
4
|
-
|
|
5
|
-
from google.adk.agents import LlmAgent
|
|
6
|
-
from google.adk.models.base_llm import BaseLlm
|
|
7
|
-
from google.adk.models.llm_request import LlmRequest
|
|
8
|
-
from google.adk.models.llm_response import LlmResponse
|
|
9
|
-
from google.genai import types
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class SafeDebugLlm(BaseLlm):
|
|
13
|
-
async def generate_content_async(
|
|
14
|
-
self,
|
|
15
|
-
llm_request: LlmRequest,
|
|
16
|
-
stream: bool = False,
|
|
17
|
-
) -> AsyncGenerator[LlmResponse, None]:
|
|
18
|
-
del llm_request, stream
|
|
19
|
-
text = (
|
|
20
|
-
"这是 Windy 的 ADK 开发调试 Agent。"
|
|
21
|
-
"它不连接业务 Repository、Tool Host 或模型 Provider,"
|
|
22
|
-
"不能代表生产业务 Operation。"
|
|
23
|
-
)
|
|
24
|
-
yield LlmResponse(
|
|
25
|
-
content=types.Content(
|
|
26
|
-
role="model",
|
|
27
|
-
parts=[types.Part(text=text)],
|
|
28
|
-
),
|
|
29
|
-
partial=False,
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
root_agent = LlmAgent(
|
|
34
|
-
name="safe_debug",
|
|
35
|
-
model=SafeDebugLlm(model="windy-safe-debug"),
|
|
36
|
-
instruction=(
|
|
37
|
-
"仅说明开发调试边界;不访问业务数据,不调用 Tool,不连接模型 Provider。"
|
|
38
|
-
),
|
|
39
|
-
tools=[],
|
|
40
|
-
)
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
from google.adk.cli.service_registry import get_service_registry
|
|
6
|
-
|
|
7
|
-
from southwind_agent_server.adk_debug_sessions import (
|
|
8
|
-
WindyDebugSessionClientV1,
|
|
9
|
-
WindyDebugSessionServiceV1,
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
SESSION_SERVICE_URI = "windy-debug://v1"
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def create_windy_debug_session_service(
|
|
16
|
-
uri: str, **_kwargs: Any
|
|
17
|
-
) -> WindyDebugSessionServiceV1:
|
|
18
|
-
if uri != SESSION_SERVICE_URI:
|
|
19
|
-
raise ValueError("Windy ADK debug session URI 版本不受支持")
|
|
20
|
-
return WindyDebugSessionServiceV1(WindyDebugSessionClientV1.from_environment())
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
get_service_registry().register_session_service(
|
|
24
|
-
"windy-debug", create_windy_debug_session_service
|
|
25
|
-
)
|