create-windy 0.8.3 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +838 -560
- package/package.json +1 -1
- package/template/.windy-template.json +2 -2
- package/template/apps/agent-server/Dockerfile +92 -22
- package/template/apps/agent-server/README.md +47 -85
- package/template/apps/agent-server/documents/office.py +216 -0
- package/template/apps/agent-server/documents/query_report.py +136 -0
- package/template/apps/agent-server/documents/smoke.py +177 -0
- package/template/apps/agent-server/documents/test_boundaries.py +185 -0
- package/template/apps/agent-server/host-contracts.ts +56 -0
- package/template/apps/agent-server/install-native.ts +167 -0
- package/template/apps/agent-server/main.ts +179 -0
- package/template/apps/agent-server/native/EXTENSIONS.md +46 -0
- package/template/apps/agent-server/native/admission.ts +73 -0
- package/template/apps/agent-server/native/authorization.test.ts +176 -0
- package/template/apps/agent-server/native/authorization.ts +118 -0
- package/template/apps/agent-server/native/boundary-io.ts +93 -0
- package/template/apps/agent-server/native/boundary-product.ts +107 -0
- package/template/apps/agent-server/native/boundary-project.test.ts +247 -0
- package/template/apps/agent-server/native/boundary-project.ts +188 -0
- package/template/apps/agent-server/native/boundary.ts +188 -0
- package/template/apps/agent-server/native/compaction-policy.test.ts +175 -0
- package/template/apps/agent-server/native/config.ts +95 -0
- package/template/apps/agent-server/native/conversation-instructions.ts +9 -0
- package/template/apps/agent-server/native/extensions.test.ts +190 -0
- package/template/apps/agent-server/native/extensions.ts +31 -0
- package/template/apps/agent-server/native/host-profile.test.ts +91 -0
- package/template/apps/agent-server/native/host-profile.ts +33 -0
- package/template/apps/agent-server/native/host-test-fixture.ts +13 -0
- package/template/apps/agent-server/native/http.ts +129 -0
- package/template/apps/agent-server/native/lifecycle.test.ts +285 -0
- package/template/apps/agent-server/native/lifecycle.ts +136 -0
- package/template/apps/agent-server/native/manager.ts +292 -0
- package/template/apps/agent-server/native/native.test.ts +207 -0
- package/template/apps/agent-server/native/office-preview.test.ts +50 -0
- package/template/apps/agent-server/native/office-preview.ts +25 -0
- package/template/apps/agent-server/native/parallel-harness.ts +242 -0
- package/template/apps/agent-server/native/parallel-mcp-fixture.ts +97 -0
- package/template/apps/agent-server/native/parallel.test.ts +256 -0
- package/template/apps/agent-server/native/profile-composition.test.ts +147 -0
- package/template/apps/agent-server/native/profile.ts +307 -0
- package/template/apps/agent-server/native/request.ts +61 -0
- package/template/apps/agent-server/native/session-conflict.test.ts +235 -0
- package/template/apps/agent-server/native/session-conflict.ts +21 -0
- package/template/apps/agent-server/native/shared-skills.test.ts +128 -0
- package/template/apps/agent-server/native/shared-skills.ts +240 -0
- package/template/apps/agent-server/native/socket-lifecycle.test.ts +48 -0
- package/template/apps/agent-server/native/socket.ts +130 -0
- package/template/apps/agent-server/native/storage-lifecycle.test.ts +217 -0
- package/template/apps/agent-server/native/storage.ts +188 -0
- package/template/apps/agent-server/native/stream-authorization.test.ts +89 -0
- package/template/apps/agent-server/native/worker.ts +77 -0
- package/template/apps/agent-server/native-download.test.ts +119 -0
- package/template/apps/agent-server/native-download.ts +145 -0
- package/template/apps/agent-server/package.json +63 -0
- package/template/apps/agent-server/plugins/access.mjs +126 -0
- package/template/apps/agent-server/plugins/branding/README.md +9 -0
- package/template/apps/agent-server/plugins/branding/brand.css +85 -0
- package/template/apps/agent-server/plugins/branding/client.js +338 -0
- package/template/apps/agent-server/plugins/branding/index.mjs +35 -0
- package/template/apps/agent-server/plugins/branding/loading.d.mts +2 -0
- package/template/apps/agent-server/plugins/branding/loading.mjs +66 -0
- package/template/apps/agent-server/plugins/branding/loading.test.ts +89 -0
- package/template/apps/agent-server/plugins/branding/package.json +21 -0
- package/template/apps/agent-server/plugins/branding.test.ts +294 -0
- package/template/apps/agent-server/plugins/compaction.mjs +83 -0
- package/template/apps/agent-server/plugins/compaction.test.ts +91 -0
- package/template/apps/agent-server/plugins/confine-network.py +57 -0
- package/template/apps/agent-server/plugins/default-skills.test.ts +62 -0
- package/template/apps/agent-server/plugins/downloads/README.md +28 -0
- package/template/apps/agent-server/plugins/downloads/client.js +126 -0
- package/template/apps/agent-server/plugins/downloads/downloads.test.ts +222 -0
- package/template/apps/agent-server/plugins/downloads/index.d.mts +19 -0
- package/template/apps/agent-server/plugins/downloads/index.mjs +180 -0
- package/template/apps/agent-server/plugins/downloads/package.json +20 -0
- package/template/apps/agent-server/plugins/drop-overlay/README.md +24 -0
- package/template/apps/agent-server/plugins/drop-overlay/drop-overlay.test.ts +199 -0
- package/template/apps/agent-server/plugins/drop-overlay/index.d.mts +8 -0
- package/template/apps/agent-server/plugins/drop-overlay/index.mjs +12 -0
- package/template/apps/agent-server/plugins/drop-overlay/style.css +102 -0
- package/template/apps/agent-server/plugins/locale/client.js +61 -0
- package/template/apps/agent-server/plugins/locale/index.d.mts +9 -0
- package/template/apps/agent-server/plugins/locale/index.mjs +16 -0
- package/template/apps/agent-server/plugins/locale/locale.test.ts +217 -0
- package/template/apps/agent-server/plugins/locale/package.json +19 -0
- package/template/apps/agent-server/plugins/parallel.mjs +146 -0
- package/template/apps/agent-server/plugins/preset-registry.d.mts +2 -0
- package/template/apps/agent-server/plugins/preset-registry.mjs +41 -0
- package/template/apps/agent-server/plugins/preset-registry.test.ts +46 -0
- package/template/apps/agent-server/plugins/questions.d.mts +25 -0
- package/template/apps/agent-server/plugins/questions.mjs +142 -0
- package/template/apps/agent-server/plugins/questions.test.ts +105 -0
- package/template/apps/agent-server/plugins/settings/README.md +17 -0
- package/template/apps/agent-server/plugins/settings/client.js +102 -0
- package/template/apps/agent-server/plugins/settings/index.mjs +17 -0
- package/template/apps/agent-server/plugins/settings/package.json +19 -0
- package/template/apps/agent-server/plugins/settings/settings.test.ts +129 -0
- package/template/apps/agent-server/plugins/settings-controller.d.mts +4 -0
- package/template/apps/agent-server/plugins/settings-controller.mjs +31 -0
- package/template/apps/agent-server/plugins/settings-controller.test.ts +17 -0
- package/template/apps/agent-server/plugins/settings-dispatch.test.ts +34 -0
- package/template/apps/agent-server/plugins/shared-skills.d.mts +15 -0
- package/template/apps/agent-server/plugins/shared-skills.mjs +82 -0
- package/template/apps/agent-server/plugins/shared-skills.test.ts +51 -0
- package/template/apps/agent-server/plugins/skill-library/README.md +11 -0
- package/template/apps/agent-server/plugins/skill-library/archive.test.ts +43 -0
- package/template/apps/agent-server/plugins/skill-library/bundle.mjs +234 -0
- package/template/apps/agent-server/plugins/skill-library/client-chunks.test.ts +107 -0
- package/template/apps/agent-server/plugins/skill-library/client-form-mount.test.ts +139 -0
- package/template/apps/agent-server/plugins/skill-library/client-form.test.ts +261 -0
- package/template/apps/agent-server/plugins/skill-library/client-ui.test.ts +268 -0
- package/template/apps/agent-server/plugins/skill-library/client-use.test.ts +158 -0
- package/template/apps/agent-server/plugins/skill-library/client.editor.js +93 -0
- package/template/apps/agent-server/plugins/skill-library/client.form.js +316 -0
- package/template/apps/agent-server/plugins/skill-library/client.js +348 -0
- package/template/apps/agent-server/plugins/skill-library/client.request.js +52 -0
- package/template/apps/agent-server/plugins/skill-library/client.transfer.js +48 -0
- package/template/apps/agent-server/plugins/skill-library/client.use.js +46 -0
- package/template/apps/agent-server/plugins/skill-library/default-roots.test.ts +84 -0
- package/template/apps/agent-server/plugins/skill-library/draft.d.mts +17 -0
- package/template/apps/agent-server/plugins/skill-library/draft.mjs +152 -0
- package/template/apps/agent-server/plugins/skill-library/draft.test.ts +287 -0
- package/template/apps/agent-server/plugins/skill-library/index.d.mts +49 -0
- package/template/apps/agent-server/plugins/skill-library/index.mjs +226 -0
- package/template/apps/agent-server/plugins/skill-library/package.json +24 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/README.md +27 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/UPSTREAM.md +54 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/boot.test.ts +150 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/client.js +146 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/client.test.ts +195 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/index.d.mts +9 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/index.mjs +30 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/metadata.test.ts +82 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/package.json +21 -0
- package/template/apps/agent-server/plugins/skill-library/presentation/react-boot.test.ts +162 -0
- package/template/apps/agent-server/plugins/skill-library/skills.test.ts +342 -0
- package/template/apps/agent-server/plugins/skill-library/storage.mjs +293 -0
- package/template/apps/agent-server/plugins/skill-library/style.css +229 -0
- package/template/apps/agent-server/plugins/skill-library/test-fixture.ts +77 -0
- package/template/apps/agent-server/plugins/skill-library/workflow.d.mts +18 -0
- package/template/apps/agent-server/plugins/skill-library/workflow.mjs +189 -0
- package/template/apps/agent-server/plugins/skill-library/workflow.test.ts +164 -0
- package/template/apps/agent-server/plugins/skills/README.md +5 -0
- package/template/apps/agent-server/plugins/skills/windy-data-summary/SKILL.md +14 -0
- package/template/apps/agent-server/plugins/skills/windy-extension-guide/SKILL.md +14 -0
- package/template/apps/agent-server/plugins/skills/windy-office/SKILL.md +14 -0
- package/template/apps/agent-server/plugins/skills/windy-skill-capture/SKILL.md +14 -0
- package/template/apps/agent-server/plugins/skills/windy-source-compare/SKILL.md +14 -0
- package/template/apps/agent-server/plugins/subprocess.mjs +40 -0
- package/template/apps/agent-server/plugins/theme/README.md +18 -0
- package/template/apps/agent-server/plugins/theme/client.js +18 -0
- package/template/apps/agent-server/plugins/theme/index.d.mts +9 -0
- package/template/apps/agent-server/plugins/theme/index.mjs +18 -0
- package/template/apps/agent-server/plugins/theme/package.json +19 -0
- package/template/apps/agent-server/plugins/theme/source-tokens.ts +82 -0
- package/template/apps/agent-server/plugins/theme/sync-tokens.ts +12 -0
- package/template/apps/agent-server/plugins/theme/theme.test.ts +193 -0
- package/template/apps/agent-server/plugins/theme/tokens.json +166 -0
- package/template/apps/agent-server/plugins/tool-catalog/README.md +79 -0
- package/template/apps/agent-server/plugins/tool-catalog/categories.mjs +111 -0
- package/template/apps/agent-server/plugins/tool-catalog/categories.test.ts +118 -0
- package/template/apps/agent-server/plugins/tool-catalog/client-cache.test.ts +264 -0
- package/template/apps/agent-server/plugins/tool-catalog/client.js +333 -0
- package/template/apps/agent-server/plugins/tool-catalog/client.test.ts +136 -0
- package/template/apps/agent-server/plugins/tool-catalog/discovery.d.mts +42 -0
- package/template/apps/agent-server/plugins/tool-catalog/discovery.mjs +242 -0
- package/template/apps/agent-server/plugins/tool-catalog/discovery.test.ts +229 -0
- package/template/apps/agent-server/plugins/tool-catalog/index.d.mts +5 -0
- package/template/apps/agent-server/plugins/tool-catalog/index.mjs +91 -0
- package/template/apps/agent-server/plugins/tool-catalog/package.json +23 -0
- package/template/apps/agent-server/plugins/tool-catalog/presentation.d.mts +21 -0
- package/template/apps/agent-server/plugins/tool-catalog/presentation.mjs +153 -0
- package/template/apps/agent-server/plugins/tool-catalog/presentation.test.ts +166 -0
- package/template/apps/agent-server/plugins/tool-catalog/routes.test.ts +209 -0
- package/template/apps/agent-server/plugins/tool-catalog/style.css +155 -0
- package/template/apps/agent-server/plugins/tool-catalog/use-tool.test.ts +160 -0
- package/template/apps/agent-server/plugins/tool-presentation/README.md +7 -0
- package/template/apps/agent-server/plugins/tool-presentation/build-client.ts +29 -0
- package/template/apps/agent-server/plugins/tool-presentation/client.js +312 -0
- package/template/apps/agent-server/plugins/tool-presentation/client.results.js +9 -0
- package/template/apps/agent-server/plugins/tool-presentation/client.test.ts +178 -0
- package/template/apps/agent-server/plugins/tool-presentation/index.mjs +10 -0
- package/template/apps/agent-server/plugins/tool-presentation/package.json +24 -0
- package/template/apps/agent-server/plugins/tool-presentation/result-discovery.mjs +43 -0
- package/template/apps/agent-server/plugins/tool-presentation/result-model.d.mts +51 -0
- package/template/apps/agent-server/plugins/tool-presentation/result-model.mjs +96 -0
- package/template/apps/agent-server/plugins/workspace/README.md +5 -0
- package/template/apps/agent-server/plugins/workspace/index.mjs +8 -0
- package/template/apps/agent-server/plugins/workspace/package.json +10 -0
- package/template/apps/agent-server/plugins/workspace/style.css +124 -0
- package/template/apps/agent-server/project/host.ts +13 -0
- package/template/apps/agent-server/runtime/artifacts.ts +115 -0
- package/template/apps/agent-server/runtime/audit.nodecheck.ts +60 -0
- package/template/apps/agent-server/runtime/capacity.ts +61 -0
- package/template/apps/agent-server/runtime/client-completion-budget.nodecheck.ts +92 -0
- package/template/apps/agent-server/runtime/compatibility.ts +33 -0
- package/template/apps/agent-server/runtime/completions.ts +320 -0
- package/template/apps/agent-server/runtime/config.ts +246 -0
- package/template/apps/agent-server/runtime/context-budget.ts +70 -0
- package/template/apps/agent-server/runtime/context-plugin.ts +306 -0
- package/template/apps/agent-server/runtime/context.nodecheck.ts +241 -0
- package/template/apps/agent-server/runtime/contracts.ts +201 -0
- package/template/apps/agent-server/runtime/dsh-engine.ts +196 -0
- package/template/apps/agent-server/runtime/evaluation-plugin.ts +115 -0
- package/template/apps/agent-server/runtime/evaluation.nodecheck.ts +194 -0
- package/template/apps/agent-server/runtime/events.ts +71 -0
- package/template/apps/agent-server/runtime/governance.ts +194 -0
- package/template/apps/agent-server/runtime/index.ts +339 -0
- package/template/apps/agent-server/runtime/internal-output.ts +37 -0
- package/template/apps/agent-server/runtime/isolation.nodecheck.ts +287 -0
- package/template/apps/agent-server/runtime/model-payload.ts +97 -0
- package/template/apps/agent-server/runtime/model-plugin.ts +308 -0
- package/template/apps/agent-server/runtime/model-route.ts +34 -0
- package/template/apps/agent-server/runtime/model-usage.ts +51 -0
- package/template/apps/agent-server/runtime/model-wire.ts +45 -0
- package/template/apps/agent-server/runtime/native-authorization.nodecheck.ts +126 -0
- package/template/apps/agent-server/runtime/native-completion.nodecheck.ts +81 -0
- package/template/apps/agent-server/runtime/output-validation.ts +66 -0
- package/template/apps/agent-server/runtime/production-capacity.nodecheck.ts +121 -0
- package/template/apps/agent-server/runtime/questions-workflow.nodecheck.ts +249 -0
- package/template/apps/agent-server/runtime/report-breakdown.ts +79 -0
- package/template/apps/agent-server/runtime/reporting.ts +219 -0
- package/template/apps/agent-server/runtime/run-completion.ts +39 -0
- package/template/apps/agent-server/runtime/run-request-digest.ts +18 -0
- package/template/apps/agent-server/runtime/runtime-test-fixtures.ts +264 -0
- package/template/apps/agent-server/runtime/runtime.nodecheck.ts +150 -0
- package/template/apps/agent-server/runtime/store-idempotency.nodecheck.ts +74 -0
- package/template/apps/agent-server/runtime/store.ts +324 -0
- package/template/apps/agent-server/runtime/structured-output-mode.nodecheck.ts +51 -0
- package/template/apps/agent-server/runtime/tool-name.ts +6 -0
- package/template/apps/agent-server/runtime/tool-plugin.ts +201 -0
- package/template/apps/agent-server/runtime/vision-readiness.ts +200 -0
- package/template/apps/agent-server/scripts/confinement-check.mjs +103 -0
- package/template/apps/agent-server/scripts/coordinator-check.mjs +344 -0
- package/template/apps/agent-server/scripts/documents-delivery-check.mjs +309 -0
- package/template/apps/agent-server/scripts/office-preview-check.mjs +92 -0
- package/template/apps/agent-server/scripts/test-confinement.ts +58 -0
- package/template/apps/agent-server/scripts/test-coordinator.ts +36 -0
- package/template/apps/agent-server/scripts/test-runtime.ts +46 -0
- package/template/apps/agent-server/tsconfig.json +21 -0
- package/template/apps/server/Dockerfile +3 -0
- package/template/apps/server/package.json +5 -1
- package/template/apps/server/scripts/check-dsh-platform-example.ts +251 -0
- package/template/apps/server/src/agent/dsh-runtime-wire.test.ts +33 -0
- package/template/apps/server/src/agent/governance-runtime.ts +41 -0
- package/template/apps/server/src/agent/remote-runtime-response.ts +1 -1
- package/template/apps/server/src/agent/run-contracts.ts +1 -0
- package/template/apps/server/src/agent/run-definition-support.ts +9 -0
- package/template/apps/server/src/agent/runtime-tool-composition.ts +2 -0
- package/template/apps/server/src/agent/workflow-runtime-bootstrap.ts +9 -0
- package/template/apps/server/src/agent-skills/access.ts +88 -0
- package/template/apps/server/src/agent-skills/bootstrap.ts +49 -0
- package/template/apps/server/src/agent-skills/builtin-registration.ts +83 -0
- package/template/apps/server/src/agent-skills/builtins.ts +19 -0
- package/template/apps/server/src/agent-skills/bundle-zip.ts +163 -0
- package/template/apps/server/src/agent-skills/bundle.test.ts +79 -0
- package/template/apps/server/src/agent-skills/bundle.ts +133 -0
- package/template/apps/server/src/agent-skills/contracts.ts +46 -0
- package/template/apps/server/src/agent-skills/drizzle-repository.ts +125 -0
- package/template/apps/server/src/agent-skills/input.ts +29 -0
- package/template/apps/server/src/agent-skills/postgres.integration.test.ts +348 -0
- package/template/apps/server/src/agent-skills/read-routes.test.ts +116 -0
- package/template/apps/server/src/agent-skills/reader.ts +108 -0
- package/template/apps/server/src/agent-skills/repository.ts +105 -0
- package/template/apps/server/src/agent-skills/routes.ts +176 -0
- package/template/apps/server/src/agent-skills/service.test.ts +295 -0
- package/template/apps/server/src/agent-skills/service.ts +301 -0
- package/template/apps/server/src/agent-workflow/preset-registry.test.ts +137 -0
- package/template/apps/server/src/agent-workflow/preset-registry.ts +191 -0
- package/template/apps/server/src/agent-workflow/preset-routes.test.ts +94 -0
- package/template/apps/server/src/agent-workflow/preset-routes.ts +45 -0
- package/template/apps/server/src/ai-runtime-report/service.test.ts +10 -7
- package/template/apps/server/src/ai-runtime-report/service.ts +1 -1
- package/template/apps/server/src/app/agent-workflow-presets.ts +4 -0
- package/template/apps/server/src/app/dsh-skill-draft-audit.test.ts +195 -0
- package/template/apps/server/src/app/dsh-skill-draft-audit.ts +115 -0
- package/template/apps/server/src/app/dsh-workbench-audit.test.ts +71 -0
- package/template/apps/server/src/app/dsh-workbench-audit.ts +34 -0
- package/template/apps/server/src/app/dsh-workbench-handshake.test.ts +63 -0
- package/template/apps/server/src/app/dsh-workbench-handshake.ts +48 -0
- package/template/apps/server/src/app/dsh-workbench-http.test.ts +96 -0
- package/template/apps/server/src/app/dsh-workbench-lan-origin.test.ts +114 -0
- package/template/apps/server/src/app/dsh-workbench-launch.test.ts +70 -0
- package/template/apps/server/src/app/dsh-workbench-origin.test.ts +54 -0
- package/template/apps/server/src/app/dsh-workbench-proxy.ts +205 -0
- package/template/apps/server/src/app/dsh-workbench-session-conflict.test.ts +61 -0
- package/template/apps/server/src/app/dsh-workbench-session.ts +59 -0
- package/template/apps/server/src/app/dsh-workbench-socket-audit.test.ts +115 -0
- package/template/apps/server/src/app/dsh-workbench-socket.test.ts +246 -0
- package/template/apps/server/src/app/dsh-workbench-socket.ts +272 -0
- package/template/apps/server/src/app/dsh-workbench-test-support.ts +158 -0
- package/template/apps/server/src/app/dsh-workbench.test.ts +213 -0
- package/template/apps/server/src/app/dsh-workbench.ts +279 -0
- package/template/apps/server/src/app/workbench-public-origin.ts +16 -0
- package/template/apps/server/src/data-governance/user-plaintext-routes.test.ts +3 -0
- package/template/apps/server/src/http-app.ts +31 -0
- package/template/apps/server/src/mcp/adapter.ts +1 -0
- package/template/apps/server/src/module-composition.test.ts +23 -0
- package/template/apps/server/src/module-composition.ts +9 -2
- package/template/apps/server/src/observability/bootstrap.ts +12 -0
- package/template/apps/server/src/observability/diagnostic-failure-recorder.ts +94 -0
- package/template/apps/server/src/observability/diagnostic-http-contract.test.ts +42 -0
- package/template/apps/server/src/observability/diagnostic-index.test.ts +89 -0
- package/template/apps/server/src/observability/diagnostic-index.ts +88 -0
- package/template/apps/server/src/observability/diagnostic-repository.ts +67 -0
- package/template/apps/server/src/platform-app-bootstrap.ts +42 -0
- package/template/apps/server/src/platform-http-runtime.ts +6 -0
- package/template/apps/server/src/runtime-development.test.ts +25 -0
- package/template/apps/server/src/runtime-development.ts +6 -44
- package/template/apps/server/src/system/diagnostic-routes.test.ts +78 -0
- package/template/apps/server/src/system/diagnostic-routes.ts +66 -0
- package/template/apps/web/Dockerfile +9 -1
- package/template/apps/web/dev/start.ts +21 -10
- package/template/apps/web/dsh-workbench-location.ts +21 -0
- package/template/apps/web/dsh-workbench-proxy.test.ts +121 -0
- package/template/apps/web/dsh-workbench-proxy.ts +194 -0
- package/template/apps/web/package.json +3 -1
- package/template/apps/web/server.ts +27 -6
- package/template/apps/web/src/composables/useLoginFlow.ts +13 -1
- package/template/apps/web/src/pages/errors/PlatformErrorPage.vue +6 -0
- package/template/apps/web/src/pages/errors/PlatformErrorPage.webtest.ts +14 -1
- package/template/apps/web/src/pages/errors/error-page-extension.ts +1 -0
- package/template/apps/web/src/pages/system/AgentNativePage.vue +44 -0
- package/template/apps/web/src/pages/system/AgentWorkflowPage.vue +20 -7
- package/template/apps/web/src/pages/system/DiagnosticLookupPage.vue +56 -0
- package/template/apps/web/src/pages/system/DiagnosticLookupPage.webtest.ts +99 -0
- package/template/apps/web/src/pages/system/SystemAgentSkillsPage.vue +88 -0
- package/template/apps/web/src/pages/system/components/DiagnosticRecordDetails.vue +52 -0
- package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillDetailDialog.vue +166 -0
- package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillGovernanceActionDialog.vue +51 -0
- package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.vue +320 -0
- package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillImportDialog.webtest.ts +96 -0
- package/template/apps/web/src/pages/system/components/agent-skills/AgentSkillsTable.vue +69 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.vue +82 -0
- package/template/apps/web/src/pages/system/components/agent-workflow/WorkflowPresetCatalog.webtest.ts +57 -0
- package/template/apps/web/src/pages/system/composables/useAgentSkillsGovernance.ts +105 -0
- package/template/apps/web/src/pages/system/composables/useAgentWorkflowPresets.ts +44 -0
- package/template/apps/web/src/pages/system/composables/useDiagnosticLookup.ts +64 -0
- package/template/apps/web/src/router/error-navigation.ts +3 -1
- package/template/apps/web/src/router/error-navigation.webtest.ts +14 -2
- package/template/apps/web/src/router/index.ts +8 -49
- package/template/apps/web/src/router/platform-admin-pages.ts +79 -0
- package/template/apps/web/src/router/platform-admin-route-bindings.ts +8 -0
- package/template/apps/web/src/services/agent-skills-api.ts +55 -0
- package/template/apps/web/src/services/agent-workflow-api.ts +12 -0
- package/template/apps/web/src/services/diagnostics-api.ts +12 -0
- package/template/apps/web/src/services/http.ts +18 -0
- package/template/apps/web/src/services/http.webtest.ts +51 -0
- package/template/apps/web/vite.config.ts +39 -0
- package/template/deploy/dsh/README.md +5 -0
- package/template/deploy/dsh/documents/README.md +9 -0
- package/template/deploy/dsh/documents/requirements.in +6 -0
- package/template/deploy/dsh/documents/requirements.lock +72 -0
- package/template/docker-compose.yml +24 -10
- package/template/docs/adr/0004-embedded-dsh-runtime.md +9 -0
- package/template/docs/architecture/agent-admin-workbench-implementation.md +73 -0
- package/template/docs/architecture/agent-admin-workbench-plan.md +41 -0
- package/template/docs/architecture/agent-harness.md +2 -0
- package/template/docs/architecture/agent-runtime-compatibility.md +2 -0
- package/template/docs/architecture/embedded-dsh-integration.md +44 -0
- package/template/docs/development/dsh-plugins.md +55 -0
- package/template/docs/operations/dsh-agent-migration.md +98 -0
- package/template/docs/platform/agent-production-store.md +5 -78
- package/template/docs/platform/agent-runtime-observability.md +2 -0
- package/template/docs/platform/agent-runtime.md +2 -0
- package/template/docs/platform/agent-skills.md +25 -0
- package/template/package.json +4 -3
- package/template/packages/database/drizzle/0064_dsh_skills_diagnostics.sql +42 -0
- package/template/packages/database/drizzle/meta/0064_snapshot.json +15349 -0
- package/template/packages/database/drizzle/meta/_journal.json +7 -0
- package/template/packages/database/package.json +2 -2
- package/template/packages/database/src/schema/agent-skills.ts +65 -0
- package/template/packages/database/src/schema/diagnostics.ts +27 -0
- package/template/packages/database/src/schema/index.ts +8 -0
- package/template/packages/modules/package.json +1 -1
- package/template/packages/modules/src/system-admin-routes.ts +24 -0
- package/template/packages/modules/src/system-admin-ui-catalog.ts +17 -10
- package/template/packages/modules/src/system-agent-admin-bindings.ts +2 -0
- package/template/packages/modules/src/system-agent-admin-menus.ts +20 -0
- package/template/packages/modules/src/system-agent-audit-actions.ts +3 -0
- package/template/packages/modules/src/system-agent-dsh.ts +119 -0
- package/template/packages/modules/src/system-api-permissions.ts +9 -0
- package/template/packages/modules/src/system-audit-actions.ts +11 -0
- package/template/packages/modules/src/system-features.ts +5 -0
- package/template/packages/modules/src/system-module-audit-selection.ts +25 -0
- package/template/packages/modules/src/system-module-catalog.ts +12 -32
- package/template/packages/modules/src/system-modules.ts +14 -3
- package/template/packages/modules/src/system-permissions.ts +10 -0
- package/template/packages/server-sdk/package.json +2 -2
- package/template/packages/shared/index.ts +12 -0
- package/template/packages/shared/package.json +1 -1
- package/template/packages/shared/src/agent-skills.ts +68 -0
- package/template/packages/shared/src/agent-workflow-presets.ts +26 -0
- package/template/packages/shared/src/diagnostics.ts +13 -0
- package/template/packages/shared/src/rbac.ts +1 -0
- package/template/apps/agent-server/install-python-dependencies.sh +0 -92
- package/template/apps/agent-server/pyproject.toml +0 -51
- package/template/apps/agent-server/src/southwind_agent_server/__init__.py +0 -5
- package/template/apps/agent-server/src/southwind_agent_server/app.py +0 -344
- package/template/apps/agent-server/src/southwind_agent_server/approval_resolution.py +0 -30
- package/template/apps/agent-server/src/southwind_agent_server/artifact_input.py +0 -153
- package/template/apps/agent-server/src/southwind_agent_server/asgi.py +0 -8
- package/template/apps/agent-server/src/southwind_agent_server/attempt_context.py +0 -199
- package/template/apps/agent-server/src/southwind_agent_server/attempt_context_projection.py +0 -203
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_contracts.py +0 -61
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_governance.py +0 -82
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_routes.py +0 -121
- package/template/apps/agent-server/src/southwind_agent_server/client_completion_runtime.py +0 -158
- package/template/apps/agent-server/src/southwind_agent_server/config.py +0 -267
- package/template/apps/agent-server/src/southwind_agent_server/context_message_digest.py +0 -24
- package/template/apps/agent-server/src/southwind_agent_server/context_version_contracts.py +0 -71
- package/template/apps/agent-server/src/southwind_agent_server/context_version_port.py +0 -307
- package/template/apps/agent-server/src/southwind_agent_server/contracts.py +0 -297
- package/template/apps/agent-server/src/southwind_agent_server/deterministic.py +0 -63
- package/template/apps/agent-server/src/southwind_agent_server/engine.py +0 -134
- package/template/apps/agent-server/src/southwind_agent_server/engine_capacity.py +0 -31
- package/template/apps/agent-server/src/southwind_agent_server/engine_identity.py +0 -2
- package/template/apps/agent-server/src/southwind_agent_server/fingerprint.py +0 -61
- package/template/apps/agent-server/src/southwind_agent_server/health_routes.py +0 -93
- package/template/apps/agent-server/src/southwind_agent_server/http_helpers.py +0 -62
- package/template/apps/agent-server/src/southwind_agent_server/lease.py +0 -15
- package/template/apps/agent-server/src/southwind_agent_server/multimodal.py +0 -76
- package/template/apps/agent-server/src/southwind_agent_server/openai_engine.py +0 -329
- package/template/apps/agent-server/src/southwind_agent_server/openai_engine_validation.py +0 -165
- package/template/apps/agent-server/src/southwind_agent_server/openai_provider.py +0 -345
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_insert.py +0 -37
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_queries.py +0 -235
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_replay.py +0 -44
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_status.py +0 -83
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_store.py +0 -336
- package/template/apps/agent-server/src/southwind_agent_server/postgres_report_summary.py +0 -304
- package/template/apps/agent-server/src/southwind_agent_server/postgres_store.py +0 -335
- package/template/apps/agent-server/src/southwind_agent_server/postgres_store_backend.py +0 -333
- package/template/apps/agent-server/src/southwind_agent_server/provider_audit.py +0 -144
- package/template/apps/agent-server/src/southwind_agent_server/provider_governance.py +0 -309
- package/template/apps/agent-server/src/southwind_agent_server/provider_output_guidance.py +0 -34
- package/template/apps/agent-server/src/southwind_agent_server/readiness_pin.py +0 -37
- package/template/apps/agent-server/src/southwind_agent_server/report_lifecycle.py +0 -218
- package/template/apps/agent-server/src/southwind_agent_server/report_metrics.py +0 -149
- package/template/apps/agent-server/src/southwind_agent_server/report_presenter.py +0 -300
- package/template/apps/agent-server/src/southwind_agent_server/report_routes.py +0 -132
- package/template/apps/agent-server/src/southwind_agent_server/report_store.py +0 -298
- package/template/apps/agent-server/src/southwind_agent_server/report_store_protocol.py +0 -75
- package/template/apps/agent-server/src/southwind_agent_server/report_types.py +0 -118
- package/template/apps/agent-server/src/southwind_agent_server/run_admission.py +0 -64
- package/template/apps/agent-server/src/southwind_agent_server/run_capacity.py +0 -59
- package/template/apps/agent-server/src/southwind_agent_server/runtime_budget.py +0 -74
- package/template/apps/agent-server/src/southwind_agent_server/runtime_compatibility.py +0 -89
- package/template/apps/agent-server/src/southwind_agent_server/runtime_factory.py +0 -105
- package/template/apps/agent-server/src/southwind_agent_server/runtime_logging.py +0 -57
- package/template/apps/agent-server/src/southwind_agent_server/service.py +0 -325
- package/template/apps/agent-server/src/southwind_agent_server/service_control.py +0 -64
- package/template/apps/agent-server/src/southwind_agent_server/service_errors.py +0 -4
- package/template/apps/agent-server/src/southwind_agent_server/service_execution.py +0 -34
- package/template/apps/agent-server/src/southwind_agent_server/service_tasks.py +0 -34
- package/template/apps/agent-server/src/southwind_agent_server/signal_events.py +0 -53
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_catalog.py +0 -118
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_errors.py +0 -2
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_schema.py +0 -73
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_serialization.py +0 -16
- package/template/apps/agent-server/src/southwind_agent_server/sqlite_store.py +0 -350
- package/template/apps/agent-server/src/southwind_agent_server/sse.py +0 -41
- package/template/apps/agent-server/src/southwind_agent_server/store.py +0 -255
- package/template/apps/agent-server/src/southwind_agent_server/store_cipher.py +0 -40
- package/template/apps/agent-server/src/southwind_agent_server/structured_logging.py +0 -145
- package/template/apps/agent-server/src/southwind_agent_server/telemetry.py +0 -93
- package/template/apps/agent-server/src/southwind_agent_server/tool_host.py +0 -152
- package/template/apps/agent-server/src/southwind_agent_server/trajectory.py +0 -137
- package/template/apps/agent-server/src/southwind_agent_server/unavailable_engine.py +0 -58
- package/template/apps/agent-server/src/southwind_agent_server/vision_probe.py +0 -87
- package/template/apps/agent-server/src/southwind_agent_server/vision_requirement.py +0 -28
- package/template/apps/agent-server/src/southwind_agent_server/vlm_readiness.py +0 -247
- package/template/apps/agent-server/tests/__init__.py +0 -1
- package/template/apps/agent-server/tests/openai_provider_test_support.py +0 -131
- package/template/apps/agent-server/tests/test_api.py +0 -305
- package/template/apps/agent-server/tests/test_artifact_input.py +0 -110
- package/template/apps/agent-server/tests/test_client_completion.py +0 -230
- package/template/apps/agent-server/tests/test_config.py +0 -106
- package/template/apps/agent-server/tests/test_fingerprint.py +0 -10
- package/template/apps/agent-server/tests/test_multimodal.py +0 -81
- package/template/apps/agent-server/tests/test_openai_provider.py +0 -320
- package/template/apps/agent-server/tests/test_postgres_report_status.py +0 -59
- package/template/apps/agent-server/tests/test_postgres_report_summary.py +0 -298
- package/template/apps/agent-server/tests/test_postgres_store.py +0 -135
- package/template/apps/agent-server/tests/test_provider_attempt_reporting.py +0 -140
- package/template/apps/agent-server/tests/test_provider_governance.py +0 -276
- package/template/apps/agent-server/tests/test_report_attempt_lifecycle.py +0 -126
- package/template/apps/agent-server/tests/test_report_resilience.py +0 -183
- package/template/apps/agent-server/tests/test_report_routes.py +0 -143
- package/template/apps/agent-server/tests/test_report_store.py +0 -347
- package/template/apps/agent-server/tests/test_report_summary_parity.py +0 -116
- package/template/apps/agent-server/tests/test_report_terminal_sync.py +0 -177
- package/template/apps/agent-server/tests/test_run_capacity.py +0 -112
- package/template/apps/agent-server/tests/test_run_operational_logging.py +0 -114
- package/template/apps/agent-server/tests/test_runtime_compatibility.py +0 -119
- package/template/apps/agent-server/tests/test_runtime_factory_readiness.py +0 -52
- package/template/apps/agent-server/tests/test_sqlite_store.py +0 -182
- package/template/apps/agent-server/tests/test_structured_logging.py +0 -142
- package/template/apps/agent-server/tests/test_telemetry.py +0 -25
- package/template/apps/agent-server/tests/test_tool_approval.py +0 -28
- package/template/apps/agent-server/tests/test_tool_structured_output.py +0 -347
- package/template/apps/agent-server/tests/test_trajectory.py +0 -91
- package/template/apps/agent-server/tests/test_vision_readiness_enforcement.py +0 -72
- package/template/apps/agent-server/tests/test_vlm_readiness.py +0 -106
- package/template/apps/agent-server/uv.lock +0 -831
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { Component } from "vue";
|
|
2
|
+
import type { PlatformAdminPageKey } from "./platform-admin-route-bindings";
|
|
3
|
+
// @windy-module system.audit begin
|
|
4
|
+
import DiagnosticLookupPage from "@/pages/system/DiagnosticLookupPage.vue";
|
|
5
|
+
// @windy-module system.audit end
|
|
6
|
+
// @windy-module system.license begin
|
|
7
|
+
import LicensePage from "@/pages/license/LicensePage.vue";
|
|
8
|
+
// @windy-module system.license end
|
|
9
|
+
// @windy-module system.operations begin
|
|
10
|
+
import SystemOperationsPage from "@/pages/system/SystemOperationsPage.vue";
|
|
11
|
+
// @windy-module system.operations end
|
|
12
|
+
// @windy-module system.agent begin
|
|
13
|
+
import AiRuntimePage from "@/pages/system/AiRuntimePage.vue";
|
|
14
|
+
// @windy-module system.agent end
|
|
15
|
+
// @windy-module system.agent begin
|
|
16
|
+
import SystemAgentSkillsPage from "@/pages/system/SystemAgentSkillsPage.vue";
|
|
17
|
+
// @windy-module system.agent end
|
|
18
|
+
// @windy-module system.agent begin
|
|
19
|
+
import AgentNativePage from "@/pages/system/AgentNativePage.vue";
|
|
20
|
+
// @windy-module system.agent end
|
|
21
|
+
// @windy-module system.agent begin
|
|
22
|
+
import AgentToolsPage from "@/pages/system/AgentToolsPage.vue";
|
|
23
|
+
// @windy-module system.agent end
|
|
24
|
+
// @windy-module system.agent begin
|
|
25
|
+
import AgentDebugPage from "@/pages/system/AgentDebugPage.vue";
|
|
26
|
+
// @windy-module system.agent end
|
|
27
|
+
// @windy-module system.agent begin
|
|
28
|
+
import AgentSessionPage from "@/pages/system/AgentSessionPage.vue";
|
|
29
|
+
// @windy-module system.agent end
|
|
30
|
+
// @windy-module system.agent begin
|
|
31
|
+
import AgentWorkflowPage from "@/pages/system/AgentWorkflowPage.vue";
|
|
32
|
+
// @windy-module system.agent end
|
|
33
|
+
// @windy-module system.notification begin
|
|
34
|
+
import SystemNotificationsPage from "@/pages/system/SystemNotificationsPage.vue";
|
|
35
|
+
// @windy-module system.notification end
|
|
36
|
+
import SystemResourceRoutePage from "@/pages/system/SystemResourceRoutePage.vue";
|
|
37
|
+
// @windy-module system.settings begin
|
|
38
|
+
import GlobalSettingsPage from "@/pages/settings/GlobalSettingsPage.vue";
|
|
39
|
+
// @windy-module system.settings end
|
|
40
|
+
import PersonalSettingsPage from "@/pages/profile/PersonalSettingsPage.vue";
|
|
41
|
+
import UiComponentPage from "@/pages/ui/UiComponentPage.vue";
|
|
42
|
+
// @windy-module system.configuration begin
|
|
43
|
+
import ModuleConfigurationPage from "@/pages/configuration/ModuleConfigurationPage.vue";
|
|
44
|
+
// @windy-module system.configuration end
|
|
45
|
+
|
|
46
|
+
export const platformAdminPageComponents: Partial<
|
|
47
|
+
Record<PlatformAdminPageKey, Component>
|
|
48
|
+
> = {
|
|
49
|
+
resource: SystemResourceRoutePage,
|
|
50
|
+
// @windy-module system.audit begin
|
|
51
|
+
diagnostics: DiagnosticLookupPage,
|
|
52
|
+
// @windy-module system.audit end
|
|
53
|
+
profile: PersonalSettingsPage,
|
|
54
|
+
"ui-components": UiComponentPage,
|
|
55
|
+
// @windy-module system.settings begin
|
|
56
|
+
settings: GlobalSettingsPage,
|
|
57
|
+
// @windy-module system.settings end
|
|
58
|
+
// @windy-module system.license begin
|
|
59
|
+
license: LicensePage,
|
|
60
|
+
// @windy-module system.license end
|
|
61
|
+
// @windy-module system.notification begin
|
|
62
|
+
notification: SystemNotificationsPage,
|
|
63
|
+
// @windy-module system.notification end
|
|
64
|
+
// @windy-module system.operations begin
|
|
65
|
+
operations: SystemOperationsPage,
|
|
66
|
+
// @windy-module system.operations end
|
|
67
|
+
// @windy-module system.agent begin
|
|
68
|
+
"agent-tools": AgentToolsPage,
|
|
69
|
+
"agent-skills": SystemAgentSkillsPage,
|
|
70
|
+
"agent-native": AgentNativePage,
|
|
71
|
+
"agent-debug": AgentDebugPage,
|
|
72
|
+
"agent-session": AgentSessionPage,
|
|
73
|
+
"agent-workflow": AgentWorkflowPage,
|
|
74
|
+
"ai-runtime": AiRuntimePage,
|
|
75
|
+
// @windy-module system.agent end
|
|
76
|
+
// @windy-module system.configuration begin
|
|
77
|
+
configuration: ModuleConfigurationPage,
|
|
78
|
+
// @windy-module system.configuration end
|
|
79
|
+
};
|
|
@@ -2,6 +2,9 @@ import type { SystemResourceKey } from "@/pages/system/resource-config";
|
|
|
2
2
|
|
|
3
3
|
export type PlatformAdminPageKey =
|
|
4
4
|
| "resource"
|
|
5
|
+
// @windy-module system.audit begin
|
|
6
|
+
| "diagnostics"
|
|
7
|
+
// @windy-module system.audit end
|
|
5
8
|
| "settings"
|
|
6
9
|
| "profile"
|
|
7
10
|
| "license"
|
|
@@ -9,6 +12,8 @@ export type PlatformAdminPageKey =
|
|
|
9
12
|
| "operations"
|
|
10
13
|
// @windy-module system.agent begin
|
|
11
14
|
| "agent-tools"
|
|
15
|
+
| "agent-skills"
|
|
16
|
+
| "agent-native"
|
|
12
17
|
| "agent-debug"
|
|
13
18
|
| "agent-session"
|
|
14
19
|
| "agent-workflow"
|
|
@@ -54,6 +59,7 @@ export const platformAdminRouteBindings: readonly PlatformAdminRouteBinding[] =
|
|
|
54
59
|
// @windy-module system.license end
|
|
55
60
|
// @windy-module system.audit begin
|
|
56
61
|
{ routeKey: "system.audit", page: "resource", resourceKey: "auditLogs" },
|
|
62
|
+
{ routeKey: "system.diagnostics", page: "diagnostics" },
|
|
57
63
|
// @windy-module system.audit end
|
|
58
64
|
// @windy-module system.notification begin
|
|
59
65
|
{ routeKey: "system.notification", page: "notification" },
|
|
@@ -63,6 +69,8 @@ export const platformAdminRouteBindings: readonly PlatformAdminRouteBinding[] =
|
|
|
63
69
|
// @windy-module system.operations end
|
|
64
70
|
// @windy-module system.agent begin
|
|
65
71
|
{ routeKey: "system.agent-tools", page: "agent-tools" },
|
|
72
|
+
{ routeKey: "system.agent-skill", page: "agent-skills" },
|
|
73
|
+
{ routeKey: "system.agent-workbench", page: "agent-native" },
|
|
66
74
|
{ routeKey: "system.agent-debug", page: "agent-debug" },
|
|
67
75
|
{ routeKey: "system.agent-session", page: "agent-session" },
|
|
68
76
|
{ routeKey: "system.agent-workflow", page: "agent-workflow" },
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AgentSkillBundle,
|
|
3
|
+
AgentSkillCommandRequest,
|
|
4
|
+
AgentSkillGovernanceItem,
|
|
5
|
+
AgentSkillVersion,
|
|
6
|
+
ImportAgentSkillRequest,
|
|
7
|
+
} from "@southwind-ai/shared";
|
|
8
|
+
import { apiRequest } from "./http";
|
|
9
|
+
export type {
|
|
10
|
+
AgentSkillGovernanceItem,
|
|
11
|
+
AgentSkillVersion,
|
|
12
|
+
ImportAgentSkillRequest,
|
|
13
|
+
};
|
|
14
|
+
export function listGovernedAgentSkills(signal?: AbortSignal) {
|
|
15
|
+
return apiRequest<readonly AgentSkillGovernanceItem[]>("/agent/skills", {
|
|
16
|
+
signal,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export function readAgentSkill(key: string, signal?: AbortSignal) {
|
|
20
|
+
return apiRequest<{ skill: AgentSkillVersion; bundle: AgentSkillBundle }>(
|
|
21
|
+
`/agent/skills/${encodeURIComponent(key)}`,
|
|
22
|
+
{ signal },
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
export function listAgentSkillVersions(key: string, signal?: AbortSignal) {
|
|
26
|
+
return apiRequest<readonly AgentSkillVersion[]>(
|
|
27
|
+
`/agent/skills/${encodeURIComponent(key)}/versions`,
|
|
28
|
+
{ signal },
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
export function importAgentSkill(
|
|
32
|
+
input: ImportAgentSkillRequest,
|
|
33
|
+
idempotencyKey: string,
|
|
34
|
+
) {
|
|
35
|
+
return apiRequest<AgentSkillVersion>("/agent/skills", {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: { "idempotency-key": idempotencyKey },
|
|
38
|
+
body: JSON.stringify(input),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export function governAgentSkill(
|
|
42
|
+
key: string,
|
|
43
|
+
action: "disable" | "rollback",
|
|
44
|
+
input: AgentSkillCommandRequest,
|
|
45
|
+
idempotencyKey: string,
|
|
46
|
+
) {
|
|
47
|
+
return apiRequest<AgentSkillVersion>(
|
|
48
|
+
`/agent/skills/${encodeURIComponent(key)}/${action}`,
|
|
49
|
+
{
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: { "idempotency-key": idempotencyKey },
|
|
52
|
+
body: JSON.stringify(input),
|
|
53
|
+
},
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { apiRequest } from "./http";
|
|
2
|
+
import type { AgentWorkflowPresetListResponse } from "@southwind-ai/shared";
|
|
3
|
+
export type {
|
|
4
|
+
AgentWorkflowPresetListResponse,
|
|
5
|
+
AgentWorkflowPresetSummary,
|
|
6
|
+
} from "@southwind-ai/shared";
|
|
2
7
|
|
|
3
8
|
export type AgentWorkflowRunStatus =
|
|
4
9
|
| "accepted"
|
|
@@ -179,3 +184,10 @@ export function getAgentWorkflowRun(runId: string, signal?: AbortSignal) {
|
|
|
179
184
|
function requestOptions(signal?: AbortSignal): { signal?: AbortSignal } {
|
|
180
185
|
return signal ? { signal } : {};
|
|
181
186
|
}
|
|
187
|
+
|
|
188
|
+
export function listAgentWorkflowPresets(signal?: AbortSignal) {
|
|
189
|
+
return apiRequest<AgentWorkflowPresetListResponse>(
|
|
190
|
+
"/agent/workflows/presets",
|
|
191
|
+
requestOptions(signal),
|
|
192
|
+
);
|
|
193
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DiagnosticRecord } from "@southwind-ai/shared";
|
|
2
|
+
import { apiRequest } from "./http";
|
|
3
|
+
|
|
4
|
+
export type { DiagnosticRecord } from "@southwind-ai/shared";
|
|
5
|
+
|
|
6
|
+
export function getDiagnostic(id: string, signal: AbortSignal) {
|
|
7
|
+
return apiRequest<DiagnosticRecord>(
|
|
8
|
+
`/system/diagnostics/${encodeURIComponent(id)}`,
|
|
9
|
+
{ signal, cache: "no-store" },
|
|
10
|
+
{ suppressFailureHandler: true },
|
|
11
|
+
);
|
|
12
|
+
}
|
|
@@ -25,6 +25,7 @@ export interface ApiClientOptions {
|
|
|
25
25
|
export interface ApiFailure {
|
|
26
26
|
kind: "internal" | "maintenance" | "network";
|
|
27
27
|
requestId?: string;
|
|
28
|
+
diagnosticId?: string;
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
export class ApiError extends Error {
|
|
@@ -34,6 +35,7 @@ export class ApiError extends Error {
|
|
|
34
35
|
readonly code?: string,
|
|
35
36
|
readonly reason?: string,
|
|
36
37
|
readonly requestId?: string,
|
|
38
|
+
readonly diagnosticId?: string,
|
|
37
39
|
) {
|
|
38
40
|
super(message);
|
|
39
41
|
this.name = "ApiError";
|
|
@@ -87,6 +89,7 @@ export function createApiClient(options: ApiClientOptions) {
|
|
|
87
89
|
failureHandler?.({
|
|
88
90
|
kind: result.status === 503 ? "maintenance" : "internal",
|
|
89
91
|
requestId: error.requestId,
|
|
92
|
+
...(error.diagnosticId ? { diagnosticId: error.diagnosticId } : {}),
|
|
90
93
|
});
|
|
91
94
|
}
|
|
92
95
|
throw error;
|
|
@@ -126,6 +129,9 @@ export function createApiClient(options: ApiClientOptions) {
|
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
async function readApiError(response: Response): Promise<ApiError> {
|
|
132
|
+
const diagnosticId = diagnosticIdFrom(
|
|
133
|
+
response.headers.get("x-diagnostic-id"),
|
|
134
|
+
);
|
|
129
135
|
try {
|
|
130
136
|
const payload = (await response.json()) as {
|
|
131
137
|
error?: string;
|
|
@@ -142,6 +148,7 @@ async function readApiError(response: Response): Promise<ApiError> {
|
|
|
142
148
|
payload.error,
|
|
143
149
|
payload.reason,
|
|
144
150
|
response.headers.get("x-request-id") || undefined,
|
|
151
|
+
diagnosticId,
|
|
145
152
|
);
|
|
146
153
|
} catch {
|
|
147
154
|
return new ApiError(
|
|
@@ -150,10 +157,21 @@ async function readApiError(response: Response): Promise<ApiError> {
|
|
|
150
157
|
undefined,
|
|
151
158
|
undefined,
|
|
152
159
|
response.headers.get("x-request-id") || undefined,
|
|
160
|
+
diagnosticId,
|
|
153
161
|
);
|
|
154
162
|
}
|
|
155
163
|
}
|
|
156
164
|
|
|
165
|
+
/** Server diagnostic coordinates remain separate from request correlation IDs. */
|
|
166
|
+
export function diagnosticIdFrom(value: unknown): string | undefined {
|
|
167
|
+
return typeof value === "string" &&
|
|
168
|
+
/^diag-[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(
|
|
169
|
+
value,
|
|
170
|
+
)
|
|
171
|
+
? value
|
|
172
|
+
: undefined;
|
|
173
|
+
}
|
|
174
|
+
|
|
157
175
|
function configuredDevelopmentToken(): string | undefined {
|
|
158
176
|
if (!import.meta.env.DEV || import.meta.env.VITE_DEV_AUTH_BYPASS !== "1") {
|
|
159
177
|
return undefined;
|
|
@@ -110,6 +110,57 @@ describe("Web HTTP 会话策略", () => {
|
|
|
110
110
|
]);
|
|
111
111
|
});
|
|
112
112
|
|
|
113
|
+
test.each([true, false])(
|
|
114
|
+
"保留服务端诊断编号且兼容 JSON/非 JSON 错误响应:%s",
|
|
115
|
+
async (json) => {
|
|
116
|
+
const diagnosticId = "diag-019a1234-5678-7000-8000-000000000001";
|
|
117
|
+
const headers = {
|
|
118
|
+
"x-request-id": "req-diagnostic",
|
|
119
|
+
"x-diagnostic-id": diagnosticId,
|
|
120
|
+
};
|
|
121
|
+
const client = createApiClient({
|
|
122
|
+
apiBase: "/api",
|
|
123
|
+
fetcher: async () =>
|
|
124
|
+
json
|
|
125
|
+
? Response.json({ error: "UNAVAILABLE" }, { status: 503, headers })
|
|
126
|
+
: new Response("proxy unavailable", { status: 503, headers }),
|
|
127
|
+
});
|
|
128
|
+
const failures = vi.fn();
|
|
129
|
+
client.setFailureHandler(failures);
|
|
130
|
+
await expect(client.request("/failure")).rejects.toMatchObject({
|
|
131
|
+
status: 503,
|
|
132
|
+
requestId: "req-diagnostic",
|
|
133
|
+
diagnosticId,
|
|
134
|
+
});
|
|
135
|
+
expect(failures).toHaveBeenCalledWith({
|
|
136
|
+
kind: "maintenance",
|
|
137
|
+
requestId: "req-diagnostic",
|
|
138
|
+
diagnosticId,
|
|
139
|
+
});
|
|
140
|
+
},
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
test("不把 Request ID 或任意响应头伪装为服务端诊断编号", async () => {
|
|
144
|
+
const client = createApiClient({
|
|
145
|
+
apiBase: "/api",
|
|
146
|
+
fetcher: async () =>
|
|
147
|
+
Response.json(
|
|
148
|
+
{ error: "UNAVAILABLE" },
|
|
149
|
+
{
|
|
150
|
+
status: 503,
|
|
151
|
+
headers: {
|
|
152
|
+
"x-request-id": "req-preserved",
|
|
153
|
+
"x-diagnostic-id": "not-a-diagnostic",
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
),
|
|
157
|
+
});
|
|
158
|
+
await expect(client.request("/failure")).rejects.toMatchObject({
|
|
159
|
+
requestId: "req-preserved",
|
|
160
|
+
diagnosticId: undefined,
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
113
164
|
test("传输失败进入网络异常,调用方可显式抑制全局错误页", async () => {
|
|
114
165
|
const failures = vi.fn();
|
|
115
166
|
const fetcher = vi.fn<typeof fetch>(async () => {
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
// @windy-module system.agent begin
|
|
2
|
+
import {
|
|
3
|
+
isDshWorkbenchPath,
|
|
4
|
+
dshWorkbenchProxyPath,
|
|
5
|
+
dshWorkbenchLoginPath,
|
|
6
|
+
} from "./dsh-workbench-location";
|
|
7
|
+
// @windy-module system.agent end
|
|
1
8
|
import { spawnSync } from "node:child_process";
|
|
2
9
|
import { fileURLToPath, URL } from "node:url";
|
|
3
10
|
import tailwindcss from "@tailwindcss/vite";
|
|
@@ -43,6 +50,38 @@ export default defineConfig({
|
|
|
43
50
|
strictPort: true,
|
|
44
51
|
watch: usePolling ? { usePolling: true, interval: 200 } : undefined,
|
|
45
52
|
proxy: {
|
|
53
|
+
// @windy-module system.agent begin
|
|
54
|
+
"^/agent(?:$|[/?])": {
|
|
55
|
+
target: process.env.API_UPSTREAM ?? "http://localhost:9747",
|
|
56
|
+
ws: true,
|
|
57
|
+
bypass: (request) =>
|
|
58
|
+
isDshWorkbenchPath(request.url ?? "/") ? undefined : "/index.html",
|
|
59
|
+
rewrite: dshWorkbenchProxyPath,
|
|
60
|
+
configure(proxy) {
|
|
61
|
+
proxy.on("proxyReq", (upstream, request) => {
|
|
62
|
+
for (const name of Object.keys(request.headers))
|
|
63
|
+
if (
|
|
64
|
+
name.startsWith("x-windy-") ||
|
|
65
|
+
name.startsWith("x-forwarded-") ||
|
|
66
|
+
name === "forwarded"
|
|
67
|
+
)
|
|
68
|
+
upstream.removeHeader(name);
|
|
69
|
+
});
|
|
70
|
+
proxy.on("proxyRes", (response, request) => {
|
|
71
|
+
const login = dshWorkbenchLoginPath(
|
|
72
|
+
(request.url ?? "/").replace(
|
|
73
|
+
/^\/api\/agent\/native\/(?=\?|$)/,
|
|
74
|
+
"/agent",
|
|
75
|
+
),
|
|
76
|
+
);
|
|
77
|
+
if (response.statusCode === 401 && login) {
|
|
78
|
+
response.statusCode = 302;
|
|
79
|
+
response.headers.location = login;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
// @windy-module system.agent end
|
|
46
85
|
"/api": process.env.API_UPSTREAM ?? "http://localhost:9747",
|
|
47
86
|
},
|
|
48
87
|
},
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# 内置 DSH 的构建资料
|
|
2
|
+
|
|
3
|
+
DSH通过`apps/agent-server` Bun workspace和原有Agent Server镜像交付;用户从Windy同源`/agent`进入。此目录只保存离线文档工具的依赖锁及说明,不创建独立DSH服务、端口或镜像栈。
|
|
4
|
+
|
|
5
|
+
运行、隔离、容量和验证边界见[内置接入方案](../../docs/architecture/embedded-dsh-integration.md),构建与重置步骤见[迁移运维](../../docs/operations/dsh-agent-migration.md)。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Agent 离线文档工具
|
|
2
|
+
|
|
3
|
+
Python仅供文档工具使用,Agent执行内核由Node/DSH承担。`requirements.in`描述直接依赖,`requirements.lock`固定完整版本与hash;Agent Server镜像在构建时下载wheel,最终环境从本地归档离线安装。运行时不安装新包。
|
|
4
|
+
|
|
5
|
+
工具源位于`apps/agent-server/documents`,包括Office读写、工作区边界、报告与烟雾探针。只能处理当前用户已授权的工作区文件;正式业务回存仍走所属模块服务和审批。
|
|
6
|
+
|
|
7
|
+
DOCX在线预览沿用DSH官方`office-to-pdf`、固定`libreoffice-kit-wasm@0.1.5`与PDF.js。完整WASM包、许可证、源码配方和完整性清单随同Agent镜像保存;Python包或系统LibreOffice不替代该预览链路。
|
|
8
|
+
|
|
9
|
+
更新依赖时使用实际解析结果生成锁,验证Linux原生架构与文档产物。禁止只改hash或在运行容器下载补丁。配置、资源限制和验收说明见[迁移运维](../../../docs/operations/dsh-agent-migration.md)。
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Resolved from PyPI release metadata on 2026-10-15; no sdists or runtime downloads.
|
|
2
|
+
# Supported wheels: CPython 3.12/3.14, Linux glibc amd64/aarch64, macOS arm64/x86_64.
|
|
3
|
+
# Production runtime is Python 3.12; 3.14 wheels support host-only smoke checks.
|
|
4
|
+
# Online: python -m pip install --only-binary=:all: --require-hashes -r requirements.lock
|
|
5
|
+
# Offline: add --no-index --find-links=/wheelhouse to the same command.
|
|
6
|
+
|
|
7
|
+
python-docx==1.2.0 \
|
|
8
|
+
--hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7
|
|
9
|
+
|
|
10
|
+
openpyxl==3.1.5 \
|
|
11
|
+
--hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2
|
|
12
|
+
|
|
13
|
+
pypdf==6.20.1 \
|
|
14
|
+
--hash=sha256:aa5a55ddcffdc5e5ab291d5decb23f6383f4e56f8e3263dc39af41fff03885ad
|
|
15
|
+
|
|
16
|
+
reportlab==5.0.1 \
|
|
17
|
+
--hash=sha256:1c36e6bb0e71780c72331eba60da7f602e8d4389a8723825af71342e49d791e8
|
|
18
|
+
|
|
19
|
+
defusedxml==0.7.1 \
|
|
20
|
+
--hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61
|
|
21
|
+
|
|
22
|
+
lxml==6.1.3 \
|
|
23
|
+
--hash=sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc \
|
|
24
|
+
--hash=sha256:2221e88679d1351e9a40aaee54bc65679b9795bbd0160bc3d5e36b163344eb75 \
|
|
25
|
+
--hash=sha256:28a23fefdb345b2d4d0ff2860571b5ff9a89a28b6a120f720e8fb0324d346626 \
|
|
26
|
+
--hash=sha256:2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165 \
|
|
27
|
+
--hash=sha256:2cae5d5c90a62d9139c512a0cb1aad1d182b022b5740daea2617eb5bf7fc658e \
|
|
28
|
+
--hash=sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11 \
|
|
29
|
+
--hash=sha256:4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d \
|
|
30
|
+
--hash=sha256:545ccc14fb05485f48b4439ec35beb16d5b5280eb6c81c658bd4707a2a119414 \
|
|
31
|
+
--hash=sha256:5a143e6207579de8baeded4eaac9134413200359f1969d636f0bfb98ee8c3c8f \
|
|
32
|
+
--hash=sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d \
|
|
33
|
+
--hash=sha256:8db38ff3fb7aee7d6a82ae4da2eef1178656fe1216841fbd24870062a9d60473 \
|
|
34
|
+
--hash=sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c \
|
|
35
|
+
--hash=sha256:a1cec0f99b9b914d39176347a93b7610dc09324491aee1cbc57cd291a41a1d55 \
|
|
36
|
+
--hash=sha256:a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0 \
|
|
37
|
+
--hash=sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a \
|
|
38
|
+
--hash=sha256:c6c0c13128a32eb04a51357e56a094e13aa8e6d3d1884de2e9ae923f6915e1a8 \
|
|
39
|
+
--hash=sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5 \
|
|
40
|
+
--hash=sha256:f6b9d2aad499c769ee8287609ab0e6de99d8bcea99c6e6c2e64945259fd52fb2
|
|
41
|
+
|
|
42
|
+
typing-extensions==4.16.0 \
|
|
43
|
+
--hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8
|
|
44
|
+
|
|
45
|
+
et-xmlfile==2.0.0 \
|
|
46
|
+
--hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa
|
|
47
|
+
|
|
48
|
+
pillow==12.3.0 \
|
|
49
|
+
--hash=sha256:164b31cd1a0490ab6efae01aa5df49da7061be0af1b30e035b6e9a1bfe34ee6e \
|
|
50
|
+
--hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \
|
|
51
|
+
--hash=sha256:3edce1d53195db527e0191f84b71d02022de0540bf43a16ed734ed7537b07385 \
|
|
52
|
+
--hash=sha256:5afb51d599ea772b8365ae807ae557f18bccfe46ab261fd1c2a9ed700fc6eb17 \
|
|
53
|
+
--hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \
|
|
54
|
+
--hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \
|
|
55
|
+
--hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \
|
|
56
|
+
--hash=sha256:bf16ba1b4d0b6b7c8e534936632270cf70eb00dbe09005bc345b2677b726855c \
|
|
57
|
+
--hash=sha256:d9c7f76c0673154f044e9d78c8655fb4213f6ca31a836df48b40fe5d187717b9 \
|
|
58
|
+
--hash=sha256:e158cb00350dc278f3b91551101aa7d12415a66ebf2c91d8d5ac14e56ddd3ad0 \
|
|
59
|
+
--hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \
|
|
60
|
+
--hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7
|
|
61
|
+
|
|
62
|
+
charset-normalizer==3.5.2 \
|
|
63
|
+
--hash=sha256:34276fd796040bf0993ab33a369aa572e6979c7aab225a88893667ad8eac8f7a \
|
|
64
|
+
--hash=sha256:3d31298449090ab8d47b7b1b2a555ff73cac7ed438a08b7ac160980c7ebed649 \
|
|
65
|
+
--hash=sha256:6bd128f206a7752ae1f2ab6c61bf8a24ba28913a10df8b14c2637b973ff97a80 \
|
|
66
|
+
--hash=sha256:8d86d6fc60743dc916eb79e2eb1ec4818e21e427731543af40a3021851174a13 \
|
|
67
|
+
--hash=sha256:b6b751274acb69d77b3323d6b7dbaa3c7fdfc1eb829b7eb61d262f32e1af9685 \
|
|
68
|
+
--hash=sha256:b91363207bd9dc966a691e959bb47f64b30f7ac4b072be9968b366982f7db77c \
|
|
69
|
+
--hash=sha256:dca9ab98072a5a54ebacebdc45f53e645336b320c667410b061be1ca588ae709 \
|
|
70
|
+
--hash=sha256:ed2a239c0ea213acc1908150a3037257083c7c083128f1a4cec2ec4b97dca491 \
|
|
71
|
+
--hash=sha256:f0aa869112ef88429ae17820d99c3dd9504c9e9c671d3c246f3d7442cb051084 \
|
|
72
|
+
--hash=sha256:fcff63213e8e6e47770541a4607175404f47cbb3ebea7b6058cc82d524a0e424
|
|
@@ -51,7 +51,7 @@ services:
|
|
|
51
51
|
WINDY_SYSTEM_USAGE_PATHS: /app/data/audit
|
|
52
52
|
PLATFORM_ENABLE_AI: ${PLATFORM_ENABLE_AI:-false}
|
|
53
53
|
AGENT_SERVER_URL: http://agent-server:8080
|
|
54
|
-
WINDY_PUBLIC_BASE_URL: ${WINDY_PUBLIC_BASE_URL:-
|
|
54
|
+
WINDY_PUBLIC_BASE_URL: "${WINDY_PUBLIC_BASE_URL:-}"
|
|
55
55
|
AGENT_TOOL_HOST_URL: http://server:9747
|
|
56
56
|
TOOL_SANDBOX_SOCKET: /run/windy-tool-sandbox/worker.sock
|
|
57
57
|
AGENT_SERVER_INTERNAL_TOKEN: ${AGENT_SERVER_INTERNAL_TOKEN:-}
|
|
@@ -161,23 +161,38 @@ services:
|
|
|
161
161
|
context: .
|
|
162
162
|
dockerfile: apps/agent-server/Dockerfile
|
|
163
163
|
args:
|
|
164
|
-
|
|
164
|
+
WINDY_AGENT_NATIVE_REGISTRY: ${WINDY_AGENT_NATIVE_REGISTRY:-https://registry.npmjs.org}
|
|
165
|
+
WINDY_PYPI_INDEX_URL: ${WINDY_PYPI_INDEX_URL:-https://pypi.org/simple}
|
|
166
|
+
cap_drop: ["ALL"]
|
|
167
|
+
cap_add: ["SETUID", "SETGID", "CHOWN", "DAC_OVERRIDE", "KILL"]
|
|
168
|
+
security_opt:
|
|
169
|
+
- no-new-privileges:true
|
|
170
|
+
pids_limit: 512
|
|
171
|
+
mem_limit: ${AGENT_SERVER_MEMORY_LIMIT:-4g}
|
|
172
|
+
cpus: ${AGENT_SERVER_CPU_LIMIT:-2}
|
|
165
173
|
environment:
|
|
166
174
|
AGENT_SERVER_INTERNAL_TOKEN: ${AGENT_SERVER_INTERNAL_TOKEN:-}
|
|
167
175
|
AGENT_CONTEXT_HOST_URL: http://server:9747
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
176
|
+
AGENT_INTERNAL_OUTPUT_ENCRYPTION_SECRET: ${AGENT_INTERNAL_OUTPUT_ENCRYPTION_SECRET:-}
|
|
177
|
+
AGENT_RUNTIME_DATABASE_PATH: /app/data/agent/embedded-dsh.sqlite
|
|
178
|
+
AI_TOOL_HOST_URL: http://server:9747
|
|
179
|
+
AI_ARTIFACT_URL: http://server:9747/api/internal/ai/artifacts
|
|
180
|
+
AGENT_DSH_HOME: /app/data/agent/dsh
|
|
181
|
+
AGENT_DSH_MAX_USERS: ${AGENT_DSH_MAX_USERS:-2}
|
|
182
|
+
AGENT_DSH_USER_EXTENSIONS: ${AGENT_DSH_USER_EXTENSIONS:-1}
|
|
183
|
+
AGENT_DSH_MAX_ACTIVE_RUNS: ${AGENT_DSH_MAX_ACTIVE_RUNS:-2}
|
|
184
|
+
AGENT_DSH_WORKSPACE_MAX_BYTES: ${AGENT_DSH_WORKSPACE_MAX_BYTES:-536870912}
|
|
174
185
|
AI_PROVIDER_AUDIT_RETENTION_DAYS: ${AI_PROVIDER_AUDIT_RETENTION_DAYS:-90}
|
|
175
186
|
QWEN_API_URL: ${QWEN_API_URL:-}
|
|
176
187
|
QWEN_API_KEY: ${QWEN_API_KEY:-}
|
|
177
188
|
QWEN_MODEL: ${QWEN_MODEL:-}
|
|
189
|
+
QWEN_STRUCTURED_OUTPUT_MODE: ${QWEN_STRUCTURED_OUTPUT_MODE:-json_schema}
|
|
178
190
|
AI_PROVIDER_HTTPS_HOST_ALLOWLIST: ${AI_PROVIDER_HTTPS_HOST_ALLOWLIST:-}
|
|
179
|
-
AI_PROVIDER_CONNECT_TIMEOUT_MS: ${AI_PROVIDER_CONNECT_TIMEOUT_MS:-5000}
|
|
180
191
|
AI_PROVIDER_REQUEST_TIMEOUT_MS: ${AI_PROVIDER_REQUEST_TIMEOUT_MS:-60000}
|
|
192
|
+
AI_PROVIDER_CONTEXT_TOKENS: ${AI_PROVIDER_CONTEXT_TOKENS:-}
|
|
193
|
+
AI_PROVIDER_TOKENIZE_PATH: ${AI_PROVIDER_TOKENIZE_PATH:-}
|
|
194
|
+
AI_PROVIDER_OUTPUT_RESERVE_TOKENS: ${AI_PROVIDER_OUTPUT_RESERVE_TOKENS:-4096}
|
|
195
|
+
AI_PROVIDER_CONTEXT_SAFETY_TOKENS: ${AI_PROVIDER_CONTEXT_SAFETY_TOKENS:-512}
|
|
181
196
|
AI_PROVIDER_MAX_RESPONSE_BYTES: ${AI_PROVIDER_MAX_RESPONSE_BYTES:-2097152}
|
|
182
197
|
AI_PROVIDER_MAX_DURATION_SECONDS: ${AI_PROVIDER_MAX_DURATION_SECONDS:-300}
|
|
183
198
|
AI_PROVIDER_MAX_INPUT_BYTES: ${AI_PROVIDER_MAX_INPUT_BYTES:-67108864}
|
|
@@ -197,7 +212,6 @@ services:
|
|
|
197
212
|
condition: service_completed_successfully
|
|
198
213
|
server:
|
|
199
214
|
condition: service_started
|
|
200
|
-
|
|
201
215
|
document-server:
|
|
202
216
|
profiles: ["document"]
|
|
203
217
|
build:
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 内置 DSH 接管通用 Agent 执行
|
|
2
|
+
|
|
3
|
+
日期:2026-10-29。状态:接受。
|
|
4
|
+
|
|
5
|
+
Windy采用sharp-sword验证过的官方DSH嵌入模式,用Node/TypeScript Agent Server替换Python Direct Engine。DSH负责通用模型循环、原生会话、工作区与插件;Windy保留canonical Run、身份/授权、工具审批、审计、Artifact、长期业务Session/Memory与Workflow义务。
|
|
6
|
+
|
|
7
|
+
该决定不改变ADR0003的业务Session事实源。DSH原生历史不是业务事实库,不将模型总结自动升级为领域事实。共享技能统一为DSH文件包及宿主版本治理,退役旧Code Skill执行依赖。
|
|
8
|
+
|
|
9
|
+
取舍:复用公开上游能力,减少双引擎与业务项目维护负担;接受固定预发布版本的升级复核责任、Linux隔离要求及当前单副本SQLite边界。允许重置旧Agent专用数据,不提供旧Python历史迁移,业务数据库及文件保留。实现见[架构](../architecture/embedded-dsh-integration.md)。
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Agent 管理工作台技术实现
|
|
2
|
+
|
|
3
|
+
日期:2026-10-07。对应[方案](./agent-admin-workbench-plan.md)。本轮实现已合入 main,0.8.3 已按用户授权跳过 gate 直接发布,见[发布记录](../operations/create-windy-0.8.3-release.md);尚未证明下游升级或生产部署。
|
|
4
|
+
|
|
5
|
+
## 交付入口与业务结果
|
|
6
|
+
|
|
7
|
+
- `/admin/system/agent-tools`:管理员可按模块、Operation、当前条件及关键词查看实际装配的工具,并查看完整 JSON Schema、权限、Feature、审批、幂等、Scope、实际 Host/Sandbox 执行模式和预算。页面没有直接 Tool 执行按钮。
|
|
8
|
+
- `/admin/system/agent-debug`:支持授权 Operation 选择、JSON 输入、真实测试 Session/Run、实时事件、安全结果和取消;同一个本工作台新建测试 Session 可多轮运行。历史业务/Harness 会话在同一工作台逐步回放。
|
|
9
|
+
- 原 `/admin/system/agent-sessions` 提供受权限保护的回放入口;AI Runtime 报表和 Workflow 入口继续承担原业务职责。
|
|
10
|
+
|
|
11
|
+
每一项执行使用当前登录用户、Operation Manifest 与正常 Run API。选择历史会话后发起测试必须创建独立 Session,回放播放器不调用任何执行、取消或业务写入 API。未保存测试输入在离开、切换模式/会话和刷新前确认;浏览器退出使用 beforeunload。离开运行页面仅断开查看,不自动取消运行。
|
|
12
|
+
|
|
13
|
+
## 运行链与授权
|
|
14
|
+
|
|
15
|
+
`runtime-tool-composition` 构造 GovernedToolRegistry;动态目录复用注册表和正式 Operation 注册。`runtime-bootstrap` 装配目录与工作台,AI 关闭时目录仍显示契约,Operation 不可启动。声明 readiness 的 Operation 使用实际只读 readiness 投影,失败不降级。
|
|
16
|
+
|
|
17
|
+
新能力在 system.agent 的 Feature、Permission、API、菜单、Admin Route、审计和 module distribution 一起登记:`system.agent-tools.read`、`system.agent-debug.read/manage`。创建测试会话还要求 `system.agent-session.manage`;读 Harness 要求 session.read;业务 Provider 和每一个 Run/Workflow 再按自身当前 Guard、Actor 和 Scope 重新授权。
|
|
18
|
+
|
|
19
|
+
测试创建通过 PostgreSQL AH-1 Session 服务,随后正常 `/api/agent/runs` 签发授权、准备输入并启动 Runtime。缺少持久 Session 或 Run Runtime 时返回 503,不制造内存假会话。运行结果路径负责现有 Memory/Turn 终态投影;回放通过独立只读 Reader 读取 Runtime,不借用会写终态的普通 result 路径。
|
|
20
|
+
|
|
21
|
+
Manifest 新增可选 `visibility: public|internal`,缺省 public,未知值装配拒绝。internal Operation 的浏览器创建、events、result、cancel、attach 和历史 Reader 全部关闭;可信服务端编排仍通过正常 Facade Guard。Workflow-only 和尚未交付的隔离执行不从普通调试入口启动。
|
|
22
|
+
|
|
23
|
+
## 业务会话接入
|
|
24
|
+
|
|
25
|
+
继续使用 `registerAgentSessionProviders()`;旧 `registerDebugSessionProviders()` alias 保持兼容。Provider get() 在当前 Actor、案件范围及 revision 下读取业务消息,可提供可选:
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
const sessionReferences = {
|
|
29
|
+
runRefs: [
|
|
30
|
+
{
|
|
31
|
+
runId: "run_1",
|
|
32
|
+
operationKey: "analysis.copilot.case",
|
|
33
|
+
messageSequence: 3,
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
workflowRefs: [{ workflowRunId: "workflow_run_1", messageSequence: 3 }],
|
|
37
|
+
truncated: true,
|
|
38
|
+
};
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Run 引用还可声明真实 sessionId、turnId 和 workflowRunId;具体定义以 SDK TypeScript 类型为准。引用必须来自真实已验证历史,不允许按文本推断。平台校验有界数量、唯一 ID、合法 Operation 和消息序号;Provider 授权通过仍不能代替逐 Run/Workflow 重新授权。历史 Run binding 已过期、权限收回、Scope 改变或 Runtime 记录不可用时显示缺失,不旁路授权。
|
|
42
|
+
|
|
43
|
+
利剑 `createCopilotDebugSessionProvider()` 保留当前案件与 revision 校验,从本次显示的已完成、runtimeVerified 助手消息取 runId/operationKey,关联 messageSequence。超过 16 条可见消息返回 truncated:true,不扩大业务消息披露范围。当前集成是源码补丁,不能宣称利剑已通过新发布版本官方升级。
|
|
44
|
+
|
|
45
|
+
## 事件与关联
|
|
46
|
+
|
|
47
|
+
Fork 回放复用 AH-1 checkpoint/lineage replay,并逐父/子 Session 当前重授权,以分段保留独立序号。
|
|
48
|
+
|
|
49
|
+
Session、业务消息、Run 和 Workflow 分别保持各自 ledger 顺序,不把相互独立 sequence 合并成伪全局序列。播放器展示明确的父记录与子日志,并支持 Run/Turn/Step、model attempt/usage、Tool call、审批、Artifact 及节点尝试/分支定位。Tool 请求和结果按 toolCallId 互跳;Workflow 节点优先 nodeRunId。审批节点只从 approval-work-item adapter 的真实安全坐标投影 workItemId,并关联同节点的事件,不披露审批 payload。
|
|
50
|
+
|
|
51
|
+
Run 事件白名单保留 canonical answer delta、Tool/审批坐标、usage/attempt 和安全错误代码,丢弃原始参数、Provider body 和未知事件细节。安全历史结果有界裁剪;internal 结果不读取。Workflow 查询端口读取所有 nodeRuns,保留之前的失败与重试,不使用原详情的 latest-only 投影冒充完整历史。事件读取、业务窗口和 Workflow 发现有界截断时显示 partial/missing。
|
|
52
|
+
|
|
53
|
+
未记录的模型尝试、进程丢失前未结算的事件、旧记录缺少 Run 引用均无法恢复。当前使用已交付 canonical 事件,不把尚未发布的 Execution Runtime/Workspace/Process/Job 轨迹能力混入验收;对应独立 Trace 待办仍保留。
|
|
54
|
+
|
|
55
|
+
## 升级与运维
|
|
56
|
+
|
|
57
|
+
新 Server 子目录随 system.agent 整体分发;新增页面、composables、services、共享 DTO、模块辅助文件和文档均归属 system.agent。Shared/router/Manifest import 使用 module marker,未选择 Agent 时可裁剪。Module ownership selector 拆出独立 helper,保持目录文件大小。
|
|
58
|
+
|
|
59
|
+
源码已合入 main;本次用户明确授权跳过全部门禁,0.8.3 已直接发布,冻结 SHA 与公开字节及 CLI 消费事实已核验,不声明完整发布矩阵通过。下游升级 owner 已收到通知,使用官方 windy update 事务及 doctor,再验证新菜单权限、Runtime/readiness、PostgreSQL Session 和业务 Provider。业务 Provider 及 Router/page loader 的项目代码是 preserve 层接入,需要由下游 owner 对照新契约集成。
|
|
60
|
+
|
|
61
|
+
## 验证证据与边界
|
|
62
|
+
|
|
63
|
+
- 目录与 internal 可见性:22 项定向测试、55 个断言通过;读取不调用 prepare、Provider 或 Tool。
|
|
64
|
+
- Manifest 组合与注册:10 项测试、62 个断言通过。
|
|
65
|
+
- Agent Facade、会话兼容与可选模块裁剪:30 项集中回归、217 个断言通过。
|
|
66
|
+
- Web API 编排、目录、播放器和 fork 分段:主 Agent 集中 15 项定向测试通过,Web 类型检查、Oxfmt、Oxlint 通过。
|
|
67
|
+
- 利剑 Provider 关联:12 项相关测试、42 个断言通过;三文件定向 TypeScript、Oxfmt、Oxlint 通过。
|
|
68
|
+
- 目录、internal 可见性、工作台、只读 Reader、Session/fork、SSE 和 HTTP 接缝:主 Agent 集中 29 项定向测试、113 个断言通过;Workflow 投影单独定向验证保留全部节点尝试。
|
|
69
|
+
- 主 Agent 新增 Session 服务 → PersistentRunLink → 普通 Run HTTP → 终态投影 → 只读记录链路契约测试:1 项、18 个断言通过,确认回放不追加日志或重启 Runtime。该检查的持久适配器和 Runtime 是受控内存 fixture。
|
|
70
|
+
|
|
71
|
+
后端提交 `a0a626c2`,UI 与分发提交 `5cbd5565`;利剑 Provider 提交 `a5e615e50`。提交门禁的全项目 TypeScript/Vue 类型检查及所提交文件 Oxfmt/Oxlint 通过;最终 Manifest composition 验证通过。
|
|
72
|
+
|
|
73
|
+
这些检查使用受控 fixtures,不冒充新工作台真实 Provider、PostgreSQL 部署或浏览器端到端验收。此前 0.8.2 模型链路证据不自动等同于新工作台部署验证。未运行 Playwright、Chrome、GitHub Actions 或完整发布矩阵。
|