@kindgi/api 0.0.0-bootstrap.0 → 0.1.0
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/LICENSE +201 -0
- package/README.md +216 -1
- package/dist/adapter-binding.d.ts +177 -0
- package/dist/adapter-binding.d.ts.map +1 -0
- package/dist/adapter-binding.js +12 -0
- package/dist/adapter-binding.js.map +1 -0
- package/dist/agent-binding.d.ts +207 -0
- package/dist/agent-binding.d.ts.map +1 -0
- package/dist/agent-binding.js +4 -0
- package/dist/agent-binding.js.map +1 -0
- package/dist/app.d.ts +770 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +396 -0
- package/dist/app.js.map +1 -0
- package/dist/capability-binding.d.ts +76 -0
- package/dist/capability-binding.d.ts.map +1 -0
- package/dist/capability-binding.js +4 -0
- package/dist/capability-binding.js.map +1 -0
- package/dist/cost-binding.d.ts +175 -0
- package/dist/cost-binding.d.ts.map +1 -0
- package/dist/cost-binding.js +13 -0
- package/dist/cost-binding.js.map +1 -0
- package/dist/deployment-binding.d.ts +201 -0
- package/dist/deployment-binding.d.ts.map +1 -0
- package/dist/deployment-binding.js +4 -0
- package/dist/deployment-binding.js.map +1 -0
- package/dist/env-binding.d.ts +132 -0
- package/dist/env-binding.d.ts.map +1 -0
- package/dist/env-binding.js +4 -0
- package/dist/env-binding.js.map +1 -0
- package/dist/errors.d.ts +37 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +264 -0
- package/dist/errors.js.map +1 -0
- package/dist/eval-run-binding.d.ts +196 -0
- package/dist/eval-run-binding.d.ts.map +1 -0
- package/dist/eval-run-binding.js +16 -0
- package/dist/eval-run-binding.js.map +1 -0
- package/dist/eval-run-dispatcher.d.ts +131 -0
- package/dist/eval-run-dispatcher.d.ts.map +1 -0
- package/dist/eval-run-dispatcher.js +368 -0
- package/dist/eval-run-dispatcher.js.map +1 -0
- package/dist/eval-suite-binding.d.ts +227 -0
- package/dist/eval-suite-binding.d.ts.map +1 -0
- package/dist/eval-suite-binding.js +24 -0
- package/dist/eval-suite-binding.js.map +1 -0
- package/dist/event-bus-binding.d.ts +107 -0
- package/dist/event-bus-binding.d.ts.map +1 -0
- package/dist/event-bus-binding.js +5 -0
- package/dist/event-bus-binding.js.map +1 -0
- package/dist/flow-binding.d.ts +194 -0
- package/dist/flow-binding.d.ts.map +1 -0
- package/dist/flow-binding.js +4 -0
- package/dist/flow-binding.js.map +1 -0
- package/dist/guardrail-binding.d.ts +138 -0
- package/dist/guardrail-binding.d.ts.map +1 -0
- package/dist/guardrail-binding.js +4 -0
- package/dist/guardrail-binding.js.map +1 -0
- package/dist/handler-binding.d.ts +126 -0
- package/dist/handler-binding.d.ts.map +1 -0
- package/dist/handler-binding.js +4 -0
- package/dist/handler-binding.js.map +1 -0
- package/dist/hitl-binding.d.ts +115 -0
- package/dist/hitl-binding.d.ts.map +1 -0
- package/dist/hitl-binding.js +4 -0
- package/dist/hitl-binding.js.map +1 -0
- package/dist/identity-directory-binding.d.ts +116 -0
- package/dist/identity-directory-binding.d.ts.map +1 -0
- package/dist/identity-directory-binding.js +4 -0
- package/dist/identity-directory-binding.js.map +1 -0
- package/dist/identity-provider-binding.d.ts +184 -0
- package/dist/identity-provider-binding.d.ts.map +1 -0
- package/dist/identity-provider-binding.js +4 -0
- package/dist/identity-provider-binding.js.map +1 -0
- package/dist/image-registry-binding.d.ts +165 -0
- package/dist/image-registry-binding.d.ts.map +1 -0
- package/dist/image-registry-binding.js +4 -0
- package/dist/image-registry-binding.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -0
- package/dist/key-management-binding.d.ts +101 -0
- package/dist/key-management-binding.d.ts.map +1 -0
- package/dist/key-management-binding.js +4 -0
- package/dist/key-management-binding.js.map +1 -0
- package/dist/mcp-endpoint-binding.d.ts +312 -0
- package/dist/mcp-endpoint-binding.d.ts.map +1 -0
- package/dist/mcp-endpoint-binding.js +12 -0
- package/dist/mcp-endpoint-binding.js.map +1 -0
- package/dist/memory-binding.d.ts +209 -0
- package/dist/memory-binding.d.ts.map +1 -0
- package/dist/memory-binding.js +4 -0
- package/dist/memory-binding.js.map +1 -0
- package/dist/middleware/auth.d.ts +168 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +247 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/authorize.d.ts +26 -0
- package/dist/middleware/authorize.d.ts.map +1 -0
- package/dist/middleware/authorize.js +65 -0
- package/dist/middleware/authorize.js.map +1 -0
- package/dist/middleware/error-mapper.d.ts +13 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -0
- package/dist/middleware/error-mapper.js +32 -0
- package/dist/middleware/error-mapper.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +43 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +118 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/principal.d.ts +4 -0
- package/dist/middleware/principal.d.ts.map +1 -0
- package/dist/middleware/principal.js +42 -0
- package/dist/middleware/principal.js.map +1 -0
- package/dist/middleware/public-run-routes.d.ts +16 -0
- package/dist/middleware/public-run-routes.d.ts.map +1 -0
- package/dist/middleware/public-run-routes.js +43 -0
- package/dist/middleware/public-run-routes.js.map +1 -0
- package/dist/middleware/request-id.d.ts +14 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +24 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/sigv4-verify.d.ts +64 -0
- package/dist/middleware/sigv4-verify.d.ts.map +1 -0
- package/dist/middleware/sigv4-verify.js +286 -0
- package/dist/middleware/sigv4-verify.js.map +1 -0
- package/dist/middleware/sigv4.d.ts +25 -0
- package/dist/middleware/sigv4.d.ts.map +1 -0
- package/dist/middleware/sigv4.js +120 -0
- package/dist/middleware/sigv4.js.map +1 -0
- package/dist/openapi/generate.d.ts +15 -0
- package/dist/openapi/generate.d.ts.map +1 -0
- package/dist/openapi/generate.js +241 -0
- package/dist/openapi/generate.js.map +1 -0
- package/dist/openapi/operations.d.ts +70 -0
- package/dist/openapi/operations.d.ts.map +1 -0
- package/dist/openapi/operations.js +5051 -0
- package/dist/openapi/operations.js.map +1 -0
- package/dist/openapi/schemas.d.ts +590 -0
- package/dist/openapi/schemas.d.ts.map +1 -0
- package/dist/openapi/schemas.js +5820 -0
- package/dist/openapi/schemas.js.map +1 -0
- package/dist/provenance-binding.d.ts +116 -0
- package/dist/provenance-binding.d.ts.map +1 -0
- package/dist/provenance-binding.js +31 -0
- package/dist/provenance-binding.js.map +1 -0
- package/dist/provider-binding.d.ts +174 -0
- package/dist/provider-binding.d.ts.map +1 -0
- package/dist/provider-binding.js +4 -0
- package/dist/provider-binding.js.map +1 -0
- package/dist/public-run-token.d.ts +97 -0
- package/dist/public-run-token.d.ts.map +1 -0
- package/dist/public-run-token.js +167 -0
- package/dist/public-run-token.js.map +1 -0
- package/dist/retention-binding.d.ts +69 -0
- package/dist/retention-binding.d.ts.map +1 -0
- package/dist/retention-binding.js +4 -0
- package/dist/retention-binding.js.map +1 -0
- package/dist/reviewer-binding.d.ts +84 -0
- package/dist/reviewer-binding.d.ts.map +1 -0
- package/dist/reviewer-binding.js +4 -0
- package/dist/reviewer-binding.js.map +1 -0
- package/dist/rotation-status-store.d.ts +96 -0
- package/dist/rotation-status-store.d.ts.map +1 -0
- package/dist/rotation-status-store.js +106 -0
- package/dist/rotation-status-store.js.map +1 -0
- package/dist/routes/adapters.d.ts +29 -0
- package/dist/routes/adapters.d.ts.map +1 -0
- package/dist/routes/adapters.js +230 -0
- package/dist/routes/adapters.js.map +1 -0
- package/dist/routes/agents.d.ts +17 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +342 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/approvals.d.ts +37 -0
- package/dist/routes/approvals.d.ts.map +1 -0
- package/dist/routes/approvals.js +551 -0
- package/dist/routes/approvals.js.map +1 -0
- package/dist/routes/artifacts.d.ts +25 -0
- package/dist/routes/artifacts.d.ts.map +1 -0
- package/dist/routes/artifacts.js +265 -0
- package/dist/routes/artifacts.js.map +1 -0
- package/dist/routes/audit.d.ts +6 -0
- package/dist/routes/audit.d.ts.map +1 -0
- package/dist/routes/audit.js +162 -0
- package/dist/routes/audit.js.map +1 -0
- package/dist/routes/auth.d.ts +47 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/auth.js +630 -0
- package/dist/routes/auth.js.map +1 -0
- package/dist/routes/capabilities.d.ts +14 -0
- package/dist/routes/capabilities.d.ts.map +1 -0
- package/dist/routes/capabilities.js +62 -0
- package/dist/routes/capabilities.js.map +1 -0
- package/dist/routes/compliance.d.ts +37 -0
- package/dist/routes/compliance.d.ts.map +1 -0
- package/dist/routes/compliance.js +321 -0
- package/dist/routes/compliance.js.map +1 -0
- package/dist/routes/conversations.d.ts +13 -0
- package/dist/routes/conversations.d.ts.map +1 -0
- package/dist/routes/conversations.js +295 -0
- package/dist/routes/conversations.js.map +1 -0
- package/dist/routes/cost.d.ts +24 -0
- package/dist/routes/cost.d.ts.map +1 -0
- package/dist/routes/cost.js +243 -0
- package/dist/routes/cost.js.map +1 -0
- package/dist/routes/deployments.d.ts +122 -0
- package/dist/routes/deployments.d.ts.map +1 -0
- package/dist/routes/deployments.js +1036 -0
- package/dist/routes/deployments.js.map +1 -0
- package/dist/routes/env.d.ts +62 -0
- package/dist/routes/env.d.ts.map +1 -0
- package/dist/routes/env.js +311 -0
- package/dist/routes/env.js.map +1 -0
- package/dist/routes/eval-runs.d.ts +28 -0
- package/dist/routes/eval-runs.d.ts.map +1 -0
- package/dist/routes/eval-runs.js +479 -0
- package/dist/routes/eval-runs.js.map +1 -0
- package/dist/routes/eval-suites.d.ts +24 -0
- package/dist/routes/eval-suites.d.ts.map +1 -0
- package/dist/routes/eval-suites.js +381 -0
- package/dist/routes/eval-suites.js.map +1 -0
- package/dist/routes/event-triggers.d.ts +12 -0
- package/dist/routes/event-triggers.d.ts.map +1 -0
- package/dist/routes/event-triggers.js +218 -0
- package/dist/routes/event-triggers.js.map +1 -0
- package/dist/routes/flows.d.ts +23 -0
- package/dist/routes/flows.d.ts.map +1 -0
- package/dist/routes/flows.js +344 -0
- package/dist/routes/flows.js.map +1 -0
- package/dist/routes/guardrails.d.ts +33 -0
- package/dist/routes/guardrails.d.ts.map +1 -0
- package/dist/routes/guardrails.js +236 -0
- package/dist/routes/guardrails.js.map +1 -0
- package/dist/routes/identity.d.ts +39 -0
- package/dist/routes/identity.d.ts.map +1 -0
- package/dist/routes/identity.js +138 -0
- package/dist/routes/identity.js.map +1 -0
- package/dist/routes/mcp.d.ts +23 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +727 -0
- package/dist/routes/mcp.js.map +1 -0
- package/dist/routes/memory.d.ts +16 -0
- package/dist/routes/memory.d.ts.map +1 -0
- package/dist/routes/memory.js +353 -0
- package/dist/routes/memory.js.map +1 -0
- package/dist/routes/observations.d.ts +19 -0
- package/dist/routes/observations.d.ts.map +1 -0
- package/dist/routes/observations.js +135 -0
- package/dist/routes/observations.js.map +1 -0
- package/dist/routes/orgs.d.ts +24 -0
- package/dist/routes/orgs.d.ts.map +1 -0
- package/dist/routes/orgs.js +208 -0
- package/dist/routes/orgs.js.map +1 -0
- package/dist/routes/pagination.d.ts +18 -0
- package/dist/routes/pagination.d.ts.map +1 -0
- package/dist/routes/pagination.js +35 -0
- package/dist/routes/pagination.js.map +1 -0
- package/dist/routes/policies.d.ts +23 -0
- package/dist/routes/policies.d.ts.map +1 -0
- package/dist/routes/policies.js +314 -0
- package/dist/routes/policies.js.map +1 -0
- package/dist/routes/projects.d.ts +45 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +485 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/proposals.d.ts +24 -0
- package/dist/routes/proposals.d.ts.map +1 -0
- package/dist/routes/proposals.js +581 -0
- package/dist/routes/proposals.js.map +1 -0
- package/dist/routes/provenance.d.ts +34 -0
- package/dist/routes/provenance.d.ts.map +1 -0
- package/dist/routes/provenance.js +274 -0
- package/dist/routes/provenance.js.map +1 -0
- package/dist/routes/providers.d.ts +32 -0
- package/dist/routes/providers.d.ts.map +1 -0
- package/dist/routes/providers.js +490 -0
- package/dist/routes/providers.js.map +1 -0
- package/dist/routes/public-run-tokens.d.ts +17 -0
- package/dist/routes/public-run-tokens.d.ts.map +1 -0
- package/dist/routes/public-run-tokens.js +69 -0
- package/dist/routes/public-run-tokens.js.map +1 -0
- package/dist/routes/retention.d.ts +19 -0
- package/dist/routes/retention.d.ts.map +1 -0
- package/dist/routes/retention.js +152 -0
- package/dist/routes/retention.js.map +1 -0
- package/dist/routes/reviewers.d.ts +5 -0
- package/dist/routes/reviewers.d.ts.map +1 -0
- package/dist/routes/reviewers.js +161 -0
- package/dist/routes/reviewers.js.map +1 -0
- package/dist/routes/runs.d.ts +34 -0
- package/dist/routes/runs.d.ts.map +1 -0
- package/dist/routes/runs.js +773 -0
- package/dist/routes/runs.js.map +1 -0
- package/dist/routes/s3.d.ts +31 -0
- package/dist/routes/s3.d.ts.map +1 -0
- package/dist/routes/s3.js +433 -0
- package/dist/routes/s3.js.map +1 -0
- package/dist/routes/schedules.d.ts +20 -0
- package/dist/routes/schedules.d.ts.map +1 -0
- package/dist/routes/schedules.js +234 -0
- package/dist/routes/schedules.js.map +1 -0
- package/dist/routes/scope-params.d.ts +57 -0
- package/dist/routes/scope-params.d.ts.map +1 -0
- package/dist/routes/scope-params.js +105 -0
- package/dist/routes/scope-params.js.map +1 -0
- package/dist/routes/secret-ref.d.ts +20 -0
- package/dist/routes/secret-ref.d.ts.map +1 -0
- package/dist/routes/secret-ref.js +42 -0
- package/dist/routes/secret-ref.js.map +1 -0
- package/dist/routes/secrets.d.ts +53 -0
- package/dist/routes/secrets.d.ts.map +1 -0
- package/dist/routes/secrets.js +715 -0
- package/dist/routes/secrets.js.map +1 -0
- package/dist/routes/signing-keys.d.ts +23 -0
- package/dist/routes/signing-keys.d.ts.map +1 -0
- package/dist/routes/signing-keys.js +212 -0
- package/dist/routes/signing-keys.js.map +1 -0
- package/dist/routes/sse.d.ts +58 -0
- package/dist/routes/sse.d.ts.map +1 -0
- package/dist/routes/sse.js +92 -0
- package/dist/routes/sse.js.map +1 -0
- package/dist/routes/teams.d.ts +30 -0
- package/dist/routes/teams.d.ts.map +1 -0
- package/dist/routes/teams.js +443 -0
- package/dist/routes/teams.js.map +1 -0
- package/dist/routes/tenant.d.ts +57 -0
- package/dist/routes/tenant.d.ts.map +1 -0
- package/dist/routes/tenant.js +352 -0
- package/dist/routes/tenant.js.map +1 -0
- package/dist/routes/tokens.d.ts +14 -0
- package/dist/routes/tokens.d.ts.map +1 -0
- package/dist/routes/tokens.js +231 -0
- package/dist/routes/tokens.js.map +1 -0
- package/dist/routes/tools.d.ts +33 -0
- package/dist/routes/tools.d.ts.map +1 -0
- package/dist/routes/tools.js +380 -0
- package/dist/routes/tools.js.map +1 -0
- package/dist/routes/webhook-endpoints.d.ts +10 -0
- package/dist/routes/webhook-endpoints.d.ts.map +1 -0
- package/dist/routes/webhook-endpoints.js +407 -0
- package/dist/routes/webhook-endpoints.js.map +1 -0
- package/dist/routes/webhooks.d.ts +21 -0
- package/dist/routes/webhooks.d.ts.map +1 -0
- package/dist/routes/webhooks.js +228 -0
- package/dist/routes/webhooks.js.map +1 -0
- package/dist/s3-credential-binding.d.ts +54 -0
- package/dist/s3-credential-binding.d.ts.map +1 -0
- package/dist/s3-credential-binding.js +4 -0
- package/dist/s3-credential-binding.js.map +1 -0
- package/dist/secrets-binding.d.ts +281 -0
- package/dist/secrets-binding.d.ts.map +1 -0
- package/dist/secrets-binding.js +10 -0
- package/dist/secrets-binding.js.map +1 -0
- package/dist/secrets-provider-binding.d.ts +164 -0
- package/dist/secrets-provider-binding.d.ts.map +1 -0
- package/dist/secrets-provider-binding.js +4 -0
- package/dist/secrets-provider-binding.js.map +1 -0
- package/dist/session-store-binding.d.ts +148 -0
- package/dist/session-store-binding.d.ts.map +1 -0
- package/dist/session-store-binding.js +4 -0
- package/dist/session-store-binding.js.map +1 -0
- package/dist/signing-key-binding.d.ts +210 -0
- package/dist/signing-key-binding.d.ts.map +1 -0
- package/dist/signing-key-binding.js +4 -0
- package/dist/signing-key-binding.js.map +1 -0
- package/dist/state-store-binding.d.ts +53 -0
- package/dist/state-store-binding.d.ts.map +1 -0
- package/dist/state-store-binding.js +38 -0
- package/dist/state-store-binding.js.map +1 -0
- package/dist/supervisor-binding.d.ts +526 -0
- package/dist/supervisor-binding.d.ts.map +1 -0
- package/dist/supervisor-binding.js +4 -0
- package/dist/supervisor-binding.js.map +1 -0
- package/dist/tenant-host-access.d.ts +41 -0
- package/dist/tenant-host-access.d.ts.map +1 -0
- package/dist/tenant-host-access.js +42 -0
- package/dist/tenant-host-access.js.map +1 -0
- package/dist/token-admin.d.ts +99 -0
- package/dist/token-admin.d.ts.map +1 -0
- package/dist/token-admin.js +4 -0
- package/dist/token-admin.js.map +1 -0
- package/dist/tool-binding.d.ts +247 -0
- package/dist/tool-binding.d.ts.map +1 -0
- package/dist/tool-binding.js +4 -0
- package/dist/tool-binding.js.map +1 -0
- package/dist/trigger-binding.d.ts +13 -0
- package/dist/trigger-binding.d.ts.map +1 -0
- package/dist/trigger-binding.js +4 -0
- package/dist/trigger-binding.js.map +1 -0
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/webhook-endpoint-binding.d.ts +230 -0
- package/dist/webhook-endpoint-binding.d.ts.map +1 -0
- package/dist/webhook-endpoint-binding.js +12 -0
- package/dist/webhook-endpoint-binding.js.map +1 -0
- package/dist/xml.d.ts +79 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +115 -0
- package/dist/xml.js.map +1 -0
- package/openapi.json +29659 -0
- package/package.json +76 -4
- package/scripts/emit-openapi.mjs +44 -0
- package/src/adapter-binding.ts +204 -0
- package/src/agent-binding.ts +231 -0
- package/src/app.ts +1285 -0
- package/src/capability-binding.ts +83 -0
- package/src/cost-binding.ts +213 -0
- package/src/deployment-binding.ts +225 -0
- package/src/env-binding.ts +140 -0
- package/src/errors.ts +291 -0
- package/src/eval-run-binding.ts +209 -0
- package/src/eval-run-dispatcher.ts +497 -0
- package/src/eval-suite-binding.ts +257 -0
- package/src/event-bus-binding.ts +127 -0
- package/src/flow-binding.ts +213 -0
- package/src/guardrail-binding.ts +151 -0
- package/src/handler-binding.ts +132 -0
- package/src/hitl-binding.ts +172 -0
- package/src/identity-directory-binding.ts +128 -0
- package/src/identity-provider-binding.ts +203 -0
- package/src/image-registry-binding.ts +193 -0
- package/src/index.ts +606 -0
- package/src/key-management-binding.ts +91 -0
- package/src/mcp-endpoint-binding.ts +311 -0
- package/src/memory-binding.ts +239 -0
- package/src/middleware/auth.ts +437 -0
- package/src/middleware/authorize.ts +125 -0
- package/src/middleware/error-mapper.ts +37 -0
- package/src/middleware/idempotency.ts +160 -0
- package/src/middleware/principal.ts +64 -0
- package/src/middleware/public-run-routes.ts +50 -0
- package/src/middleware/request-id.ts +28 -0
- package/src/middleware/sigv4-verify.ts +374 -0
- package/src/middleware/sigv4.ts +165 -0
- package/src/openapi/generate.ts +307 -0
- package/src/openapi/operations.ts +5445 -0
- package/src/openapi/schemas.ts +6363 -0
- package/src/provenance-binding.ts +169 -0
- package/src/provider-binding.ts +196 -0
- package/src/public-run-token.ts +263 -0
- package/src/retention-binding.ts +78 -0
- package/src/reviewer-binding.ts +99 -0
- package/src/rotation-status-store.ts +209 -0
- package/src/routes/adapters.ts +319 -0
- package/src/routes/agents.ts +424 -0
- package/src/routes/approvals.ts +759 -0
- package/src/routes/artifacts.ts +317 -0
- package/src/routes/audit.ts +219 -0
- package/src/routes/auth.ts +806 -0
- package/src/routes/capabilities.ts +79 -0
- package/src/routes/compliance.ts +482 -0
- package/src/routes/conversations.ts +369 -0
- package/src/routes/cost.ts +327 -0
- package/src/routes/deployments.ts +1493 -0
- package/src/routes/env.ts +429 -0
- package/src/routes/eval-runs.ts +631 -0
- package/src/routes/eval-suites.ts +490 -0
- package/src/routes/event-triggers.ts +283 -0
- package/src/routes/flows.ts +423 -0
- package/src/routes/guardrails.ts +320 -0
- package/src/routes/identity.ts +203 -0
- package/src/routes/mcp.ts +940 -0
- package/src/routes/memory.ts +430 -0
- package/src/routes/observations.ts +175 -0
- package/src/routes/orgs.ts +273 -0
- package/src/routes/pagination.ts +51 -0
- package/src/routes/policies.ts +413 -0
- package/src/routes/projects.ts +634 -0
- package/src/routes/proposals.ts +719 -0
- package/src/routes/provenance.ts +406 -0
- package/src/routes/providers.ts +624 -0
- package/src/routes/public-run-tokens.ts +104 -0
- package/src/routes/retention.ts +193 -0
- package/src/routes/reviewers.ts +209 -0
- package/src/routes/runs.ts +981 -0
- package/src/routes/s3.ts +519 -0
- package/src/routes/schedules.ts +300 -0
- package/src/routes/scope-params.ts +133 -0
- package/src/routes/secret-ref.ts +52 -0
- package/src/routes/secrets.ts +975 -0
- package/src/routes/signing-keys.ts +259 -0
- package/src/routes/sse.ts +148 -0
- package/src/routes/teams.ts +584 -0
- package/src/routes/tenant.ts +530 -0
- package/src/routes/tokens.ts +285 -0
- package/src/routes/tools.ts +491 -0
- package/src/routes/webhook-endpoints.ts +534 -0
- package/src/routes/webhooks.ts +296 -0
- package/src/s3-credential-binding.ts +58 -0
- package/src/secrets-binding.ts +308 -0
- package/src/secrets-provider-binding.ts +167 -0
- package/src/session-store-binding.ts +163 -0
- package/src/signing-key-binding.ts +235 -0
- package/src/state-store-binding.ts +84 -0
- package/src/supervisor-binding.ts +554 -0
- package/src/tenant-host-access.ts +62 -0
- package/src/token-admin.ts +104 -0
- package/src/tool-binding.ts +274 -0
- package/src/trigger-binding.ts +38 -0
- package/src/types.ts +74 -0
- package/src/webhook-endpoint-binding.ts +246 -0
- package/src/xml.ts +196 -0
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
|
|
6
|
+
import type { RunId, TenantId, Timestamp } from '@kindgi/types';
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
AgentRef,
|
|
10
|
+
EvalRun,
|
|
11
|
+
EvalRunBinding,
|
|
12
|
+
EvalRunCancelInput,
|
|
13
|
+
EvalRunCancelOutcome,
|
|
14
|
+
EvalRunGetInput,
|
|
15
|
+
EvalRunListInput,
|
|
16
|
+
EvalRunPage,
|
|
17
|
+
EvalRunStartInput,
|
|
18
|
+
EvalRunStartOutcome,
|
|
19
|
+
EvalRunStatus,
|
|
20
|
+
FlowRef,
|
|
21
|
+
} from './eval-run-binding.js';
|
|
22
|
+
import { EVAL_RUN_STATUSES } from './eval-run-binding.js';
|
|
23
|
+
import type { EvalKind, EvalSuite, EvalSuiteRegistryBinding } from './eval-suite-binding.js';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Reference eval-run dispatcher — proves the pattern end-to-end for
|
|
27
|
+
* the `accuracy` kind with an in-process `EvalRunBinding` that wraps
|
|
28
|
+
* an in-memory run store. Durable deployments swap this for a
|
|
29
|
+
* dispatcher that starts real runs (`runGraph`) so the EvalRun is a
|
|
30
|
+
* specialized run and inherits durability + replay + cancel.
|
|
31
|
+
*
|
|
32
|
+
* The in-process shape lets tests wire a subject invoker + a judge
|
|
33
|
+
* without booting a full runtime — the surface (`EvalRunBinding`) is
|
|
34
|
+
* identical to what a durable deployment exposes.
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
// ---------- dispatcher-per-kind primitive ----------
|
|
38
|
+
|
|
39
|
+
export interface EvalCase {
|
|
40
|
+
readonly id?: string;
|
|
41
|
+
readonly input: unknown;
|
|
42
|
+
readonly expected?: unknown;
|
|
43
|
+
readonly expectedOutput?: unknown;
|
|
44
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface EvalRunSubjectInvokeInput {
|
|
48
|
+
readonly tenantId: TenantId;
|
|
49
|
+
readonly target: AgentRef | FlowRef;
|
|
50
|
+
readonly input: unknown;
|
|
51
|
+
readonly dryRun: boolean;
|
|
52
|
+
readonly abortSignal: AbortSignal;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface EvalRunSubjectInvokeOutcome {
|
|
56
|
+
readonly output?: unknown;
|
|
57
|
+
readonly error?: string;
|
|
58
|
+
readonly costUsd?: number;
|
|
59
|
+
readonly durationMs?: number;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Caller-plugged subject invoker. Real deployments route this into
|
|
64
|
+
* `RunHandlerBinding.invokeAgent` / `invokeFlow` (the same surface
|
|
65
|
+
* `/v1/runs` uses); tests pass a synchronous stub.
|
|
66
|
+
*/
|
|
67
|
+
export interface EvalSubjectInvoker {
|
|
68
|
+
invoke(input: EvalRunSubjectInvokeInput): Promise<EvalRunSubjectInvokeOutcome>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Grader contract used by the reference accuracy dispatcher —
|
|
73
|
+
* deployments can plug in an eval-judge adapter or an LLM judge. Kept
|
|
74
|
+
* local to `@kindgi/api` so the API package does not depend on an
|
|
75
|
+
* evals package (it stays consumer-neutral).
|
|
76
|
+
*/
|
|
77
|
+
export interface EvalGrader {
|
|
78
|
+
readonly id: string;
|
|
79
|
+
grade(input: EvalGraderInput): Promise<EvalGraderOutcome>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface EvalGraderInput {
|
|
83
|
+
readonly caseInput: unknown;
|
|
84
|
+
readonly actualOutput: unknown;
|
|
85
|
+
readonly expected: unknown;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface EvalGraderOutcome {
|
|
89
|
+
readonly pass: boolean;
|
|
90
|
+
readonly score: number;
|
|
91
|
+
readonly reason?: string;
|
|
92
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export interface DispatchContext {
|
|
96
|
+
readonly tenantId: TenantId;
|
|
97
|
+
readonly runId: RunId;
|
|
98
|
+
readonly suite: EvalSuite;
|
|
99
|
+
readonly target: AgentRef | FlowRef;
|
|
100
|
+
readonly dryRun: boolean;
|
|
101
|
+
readonly abortSignal: AbortSignal;
|
|
102
|
+
readonly subject: EvalSubjectInvoker;
|
|
103
|
+
onProgress(perCase: Readonly<Record<string, unknown>>): void;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export interface DispatchResult {
|
|
107
|
+
readonly result: Readonly<Record<string, unknown>>;
|
|
108
|
+
readonly error?: string;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface EvalRunDispatcher {
|
|
112
|
+
readonly kind: EvalKind;
|
|
113
|
+
validate?(
|
|
114
|
+
suite: EvalSuite,
|
|
115
|
+
target: AgentRef | FlowRef,
|
|
116
|
+
): { kind: 'ok' } | { kind: 'err'; message: string };
|
|
117
|
+
dispatch(ctx: DispatchContext): Promise<DispatchResult>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// ---------- reference accuracy dispatcher ----------
|
|
121
|
+
|
|
122
|
+
export interface AccuracyDispatcherOptions {
|
|
123
|
+
readonly grader: EvalGrader;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Reference dispatcher for `EvalKind === 'accuracy'`. Reads
|
|
128
|
+
* `spec.cases` from the registered suite; for each case, invokes the
|
|
129
|
+
* subject with `case.input`, grades `(caseInput, actualOutput,
|
|
130
|
+
* case.expected ?? case.expectedOutput)` through the injected
|
|
131
|
+
* `EvalGrader`, and aggregates `{ passCount, totalCount, meanScore,
|
|
132
|
+
* perCase[] }`.
|
|
133
|
+
*
|
|
134
|
+
* A dry-run echoes the plan (case count + first-case preview) without
|
|
135
|
+
* invoking the subject — proves the same envelope is available on
|
|
136
|
+
* `dryRun: true` requests. Callers use it as a sanity check before
|
|
137
|
+
* paying for the real run.
|
|
138
|
+
*/
|
|
139
|
+
export function createAccuracyDispatcher(options: AccuracyDispatcherOptions): EvalRunDispatcher {
|
|
140
|
+
return {
|
|
141
|
+
kind: 'accuracy',
|
|
142
|
+
validate(suite): { kind: 'ok' } | { kind: 'err'; message: string } {
|
|
143
|
+
const cases = extractCases(suite.spec);
|
|
144
|
+
if (cases === null) {
|
|
145
|
+
return { kind: 'err', message: 'accuracy suite.spec.cases must be an array' };
|
|
146
|
+
}
|
|
147
|
+
if (cases.length === 0) {
|
|
148
|
+
return { kind: 'err', message: 'accuracy suite.spec.cases must not be empty' };
|
|
149
|
+
}
|
|
150
|
+
return { kind: 'ok' };
|
|
151
|
+
},
|
|
152
|
+
async dispatch(ctx): Promise<DispatchResult> {
|
|
153
|
+
const cases = extractCases(ctx.suite.spec) ?? [];
|
|
154
|
+
if (ctx.dryRun) {
|
|
155
|
+
return {
|
|
156
|
+
result: {
|
|
157
|
+
passCount: 0,
|
|
158
|
+
totalCount: cases.length,
|
|
159
|
+
meanScore: 0,
|
|
160
|
+
perCase: [],
|
|
161
|
+
dryRun: true,
|
|
162
|
+
preview: cases.slice(0, 1).map((c, i) => ({
|
|
163
|
+
caseIndex: i,
|
|
164
|
+
input: c.input,
|
|
165
|
+
expected: extractExpected(c),
|
|
166
|
+
})),
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const perCase: Record<string, unknown>[] = [];
|
|
171
|
+
let passCount = 0;
|
|
172
|
+
let scoreSum = 0;
|
|
173
|
+
for (let i = 0; i < cases.length; i++) {
|
|
174
|
+
if (ctx.abortSignal.aborted) {
|
|
175
|
+
return {
|
|
176
|
+
result: {
|
|
177
|
+
passCount,
|
|
178
|
+
totalCount: cases.length,
|
|
179
|
+
meanScore: perCase.length > 0 ? scoreSum / perCase.length : 0,
|
|
180
|
+
perCase,
|
|
181
|
+
cancelled: true,
|
|
182
|
+
},
|
|
183
|
+
error: 'cancelled',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
const c = cases[i];
|
|
187
|
+
if (c === undefined) continue;
|
|
188
|
+
const expected = extractExpected(c);
|
|
189
|
+
const invocation = await ctx.subject.invoke({
|
|
190
|
+
tenantId: ctx.tenantId,
|
|
191
|
+
target: ctx.target,
|
|
192
|
+
input: c.input,
|
|
193
|
+
dryRun: ctx.dryRun,
|
|
194
|
+
abortSignal: ctx.abortSignal,
|
|
195
|
+
});
|
|
196
|
+
if (invocation.error !== undefined) {
|
|
197
|
+
const entry = {
|
|
198
|
+
caseIndex: i,
|
|
199
|
+
...(c.id !== undefined && { caseId: c.id }),
|
|
200
|
+
pass: false,
|
|
201
|
+
score: 0,
|
|
202
|
+
error: invocation.error,
|
|
203
|
+
};
|
|
204
|
+
perCase.push(entry);
|
|
205
|
+
ctx.onProgress(entry);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const grade = await options.grader.grade({
|
|
209
|
+
caseInput: c.input,
|
|
210
|
+
actualOutput: invocation.output,
|
|
211
|
+
expected,
|
|
212
|
+
});
|
|
213
|
+
if (grade.pass) passCount += 1;
|
|
214
|
+
scoreSum += grade.score;
|
|
215
|
+
const entry: Record<string, unknown> = {
|
|
216
|
+
caseIndex: i,
|
|
217
|
+
...(c.id !== undefined && { caseId: c.id }),
|
|
218
|
+
pass: grade.pass,
|
|
219
|
+
score: grade.score,
|
|
220
|
+
...(grade.reason !== undefined && { reason: grade.reason }),
|
|
221
|
+
...(grade.metadata !== undefined && { judgeMetadata: grade.metadata }),
|
|
222
|
+
};
|
|
223
|
+
perCase.push(entry);
|
|
224
|
+
ctx.onProgress(entry);
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
result: {
|
|
228
|
+
passCount,
|
|
229
|
+
totalCount: cases.length,
|
|
230
|
+
meanScore: cases.length > 0 ? scoreSum / cases.length : 0,
|
|
231
|
+
perCase,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function extractCases(spec: Readonly<Record<string, unknown>>): readonly EvalCase[] | null {
|
|
239
|
+
const cases = spec.cases;
|
|
240
|
+
if (!Array.isArray(cases)) return null;
|
|
241
|
+
const out: EvalCase[] = [];
|
|
242
|
+
for (const c of cases) {
|
|
243
|
+
if (c === null || typeof c !== 'object') return null;
|
|
244
|
+
const rec = c as Record<string, unknown>;
|
|
245
|
+
if (!('input' in rec)) return null;
|
|
246
|
+
out.push(rec as unknown as EvalCase);
|
|
247
|
+
}
|
|
248
|
+
return out;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function extractExpected(c: EvalCase): unknown {
|
|
252
|
+
if (c.expected !== undefined) return c.expected;
|
|
253
|
+
return c.expectedOutput;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// ---------- in-process EvalRunBinding ----------
|
|
257
|
+
|
|
258
|
+
export interface InProcessEvalRunBindingOptions {
|
|
259
|
+
readonly suiteRegistry: EvalSuiteRegistryBinding;
|
|
260
|
+
readonly subject: EvalSubjectInvoker;
|
|
261
|
+
readonly dispatchers: Partial<Record<EvalKind, EvalRunDispatcher>>;
|
|
262
|
+
/**
|
|
263
|
+
* Optional clock override — tests inject a monotonic stub so
|
|
264
|
+
* timestamps are deterministic. Defaults to `() => new Date()`.
|
|
265
|
+
*/
|
|
266
|
+
readonly now?: () => Date;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Reference in-process `EvalRunBinding`. Persists eval-run rows in a
|
|
271
|
+
* `Map<runId, EvalRun>`; suitable for tests and dev deployments.
|
|
272
|
+
* Production deployments swap in a durable binding that starts real
|
|
273
|
+
* runs (`runGraph`) — the surface is identical, only the persistence +
|
|
274
|
+
* execution substrate changes.
|
|
275
|
+
*
|
|
276
|
+
* A run starts as `running`, resolves per its dispatcher's outcome,
|
|
277
|
+
* and can be cancelled via `AbortController.abort()` on the wrapped
|
|
278
|
+
* controller. Cancellation is best-effort — a dispatcher that has
|
|
279
|
+
* already returned cannot be undone; the row transitions to
|
|
280
|
+
* `cancelled` and any partial `perCase` results are preserved.
|
|
281
|
+
*/
|
|
282
|
+
export function createInProcessEvalRunBinding(
|
|
283
|
+
options: InProcessEvalRunBindingOptions,
|
|
284
|
+
): EvalRunBinding {
|
|
285
|
+
const now = options.now ?? ((): Date => new Date());
|
|
286
|
+
const runs = new Map<string, EvalRun>();
|
|
287
|
+
const controllers = new Map<string, AbortController>();
|
|
288
|
+
|
|
289
|
+
const setRun = (r: EvalRun): void => {
|
|
290
|
+
runs.set(r.runId as unknown as string, r);
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
async start(input: EvalRunStartInput): Promise<EvalRunStartOutcome> {
|
|
295
|
+
const suite = await options.suiteRegistry.get({
|
|
296
|
+
tenantId: input.tenantId,
|
|
297
|
+
suiteId: input.suiteId,
|
|
298
|
+
});
|
|
299
|
+
if (suite === null) {
|
|
300
|
+
return { kind: 'suite-not-found', suiteId: input.suiteId };
|
|
301
|
+
}
|
|
302
|
+
const dispatcher = options.dispatchers[suite.kind];
|
|
303
|
+
if (dispatcher === undefined) {
|
|
304
|
+
return { kind: 'dispatcher-not-registered', evalKind: suite.kind };
|
|
305
|
+
}
|
|
306
|
+
const target: AgentRef | FlowRef | undefined = input.agentRef ?? input.flowRef;
|
|
307
|
+
if (target === undefined) {
|
|
308
|
+
return {
|
|
309
|
+
kind: 'dispatcher-input-invalid',
|
|
310
|
+
message: 'agentRef or flowRef required',
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
if (dispatcher.validate !== undefined) {
|
|
314
|
+
const v = dispatcher.validate(suite, target);
|
|
315
|
+
if (v.kind === 'err') {
|
|
316
|
+
return { kind: 'dispatcher-input-invalid', message: v.message };
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const runId = randomUUID() as unknown as RunId;
|
|
320
|
+
const startedAt = now().toISOString() as unknown as Timestamp;
|
|
321
|
+
const record: EvalRun = {
|
|
322
|
+
runId,
|
|
323
|
+
tenantId: input.tenantId,
|
|
324
|
+
suiteId: suite.id,
|
|
325
|
+
suiteVersion: suite.version,
|
|
326
|
+
kind: suite.kind,
|
|
327
|
+
...(input.agentRef !== undefined && { agentRef: input.agentRef }),
|
|
328
|
+
...(input.flowRef !== undefined && { flowRef: input.flowRef }),
|
|
329
|
+
status: 'running' as EvalRunStatus,
|
|
330
|
+
dryRun: input.dryRun === true,
|
|
331
|
+
startedAt,
|
|
332
|
+
...(input.correlationId !== undefined && { correlationId: input.correlationId }),
|
|
333
|
+
};
|
|
334
|
+
setRun(record);
|
|
335
|
+
const controller = new AbortController();
|
|
336
|
+
controllers.set(runId as unknown as string, controller);
|
|
337
|
+
|
|
338
|
+
// Fire-and-forget the dispatch — completion updates the row.
|
|
339
|
+
// Errors thrown by the dispatcher itself land the run in
|
|
340
|
+
// `failed` (bug in the dispatcher, not a case-level failure).
|
|
341
|
+
void (async (): Promise<void> => {
|
|
342
|
+
let outcome: DispatchResult;
|
|
343
|
+
try {
|
|
344
|
+
outcome = await dispatcher.dispatch({
|
|
345
|
+
tenantId: input.tenantId,
|
|
346
|
+
runId,
|
|
347
|
+
suite,
|
|
348
|
+
target,
|
|
349
|
+
dryRun: input.dryRun === true,
|
|
350
|
+
abortSignal: controller.signal,
|
|
351
|
+
subject: options.subject,
|
|
352
|
+
onProgress: (perCaseEntry: Readonly<Record<string, unknown>>) => {
|
|
353
|
+
const current = runs.get(runId as unknown as string);
|
|
354
|
+
if (current === undefined) return;
|
|
355
|
+
const currentResult = (current.result ?? {}) as Record<string, unknown>;
|
|
356
|
+
const perCase = Array.isArray(currentResult.perCase)
|
|
357
|
+
? [...(currentResult.perCase as unknown[]), perCaseEntry]
|
|
358
|
+
: [perCaseEntry];
|
|
359
|
+
setRun({
|
|
360
|
+
...current,
|
|
361
|
+
result: { ...currentResult, perCase } as Readonly<Record<string, unknown>>,
|
|
362
|
+
});
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
} catch (cause) {
|
|
366
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
367
|
+
const current = runs.get(runId as unknown as string);
|
|
368
|
+
if (current === undefined) return;
|
|
369
|
+
setRun({
|
|
370
|
+
...current,
|
|
371
|
+
status: 'failed',
|
|
372
|
+
completedAt: now().toISOString() as unknown as Timestamp,
|
|
373
|
+
error: `Dispatcher threw: ${message}`,
|
|
374
|
+
});
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
const current = runs.get(runId as unknown as string);
|
|
378
|
+
if (current === undefined) return;
|
|
379
|
+
if (current.status === 'cancelled') {
|
|
380
|
+
// Cancel path already set the terminal row; preserve any
|
|
381
|
+
// partial result the dispatcher produced.
|
|
382
|
+
setRun({
|
|
383
|
+
...current,
|
|
384
|
+
result: outcome.result,
|
|
385
|
+
...(current.completedAt === undefined && {
|
|
386
|
+
completedAt: now().toISOString() as unknown as Timestamp,
|
|
387
|
+
}),
|
|
388
|
+
});
|
|
389
|
+
return;
|
|
390
|
+
}
|
|
391
|
+
const status: EvalRunStatus =
|
|
392
|
+
outcome.error === undefined
|
|
393
|
+
? 'completed'
|
|
394
|
+
: outcome.error === 'cancelled'
|
|
395
|
+
? 'cancelled'
|
|
396
|
+
: 'failed';
|
|
397
|
+
setRun({
|
|
398
|
+
...current,
|
|
399
|
+
status,
|
|
400
|
+
completedAt: now().toISOString() as unknown as Timestamp,
|
|
401
|
+
result: outcome.result,
|
|
402
|
+
...(outcome.error !== undefined &&
|
|
403
|
+
outcome.error !== 'cancelled' && {
|
|
404
|
+
error: outcome.error,
|
|
405
|
+
}),
|
|
406
|
+
});
|
|
407
|
+
})();
|
|
408
|
+
|
|
409
|
+
return { kind: 'ok', runId };
|
|
410
|
+
},
|
|
411
|
+
|
|
412
|
+
async get(input: EvalRunGetInput): Promise<EvalRun | null> {
|
|
413
|
+
const record = runs.get(input.runId as unknown as string);
|
|
414
|
+
if (record === undefined) return null;
|
|
415
|
+
if ((record.tenantId as unknown as string) !== (input.tenantId as unknown as string)) {
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
return record;
|
|
419
|
+
},
|
|
420
|
+
|
|
421
|
+
async list(input: EvalRunListInput): Promise<EvalRunPage> {
|
|
422
|
+
const filter = input.filter ?? {};
|
|
423
|
+
const all: EvalRun[] = [];
|
|
424
|
+
for (const r of runs.values()) {
|
|
425
|
+
if ((r.tenantId as unknown as string) !== (input.tenantId as unknown as string)) continue;
|
|
426
|
+
if (filter.suiteId !== undefined && r.suiteId !== filter.suiteId) continue;
|
|
427
|
+
if (filter.status !== undefined && r.status !== filter.status) continue;
|
|
428
|
+
if (filter.agentId !== undefined) {
|
|
429
|
+
if (r.agentRef === undefined) continue;
|
|
430
|
+
if ((r.agentRef.agentId as unknown as string) !== (filter.agentId as unknown as string)) {
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
if (filter.flowId !== undefined) {
|
|
435
|
+
if (r.flowRef === undefined) continue;
|
|
436
|
+
if ((r.flowRef.flowId as unknown as string) !== (filter.flowId as unknown as string)) {
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
if (filter.from !== undefined) {
|
|
441
|
+
if ((r.startedAt as unknown as string) < (filter.from as unknown as string)) continue;
|
|
442
|
+
}
|
|
443
|
+
if (filter.to !== undefined) {
|
|
444
|
+
if ((r.startedAt as unknown as string) > (filter.to as unknown as string)) continue;
|
|
445
|
+
}
|
|
446
|
+
all.push(r);
|
|
447
|
+
}
|
|
448
|
+
all.sort((a, b) => {
|
|
449
|
+
const at = a.startedAt as unknown as string;
|
|
450
|
+
const bt = b.startedAt as unknown as string;
|
|
451
|
+
if (at !== bt) return at < bt ? 1 : -1;
|
|
452
|
+
return (a.runId as unknown as string) < (b.runId as unknown as string) ? 1 : -1;
|
|
453
|
+
});
|
|
454
|
+
const cursor = input.cursor as unknown as string | undefined;
|
|
455
|
+
const startAt =
|
|
456
|
+
cursor === undefined
|
|
457
|
+
? 0
|
|
458
|
+
: Math.max(0, all.findIndex((r) => (r.runId as unknown as string) === cursor) + 1);
|
|
459
|
+
const slice = all.slice(startAt, startAt + input.limit);
|
|
460
|
+
const hasMore = startAt + slice.length < all.length;
|
|
461
|
+
const last = slice[slice.length - 1];
|
|
462
|
+
return {
|
|
463
|
+
data: slice,
|
|
464
|
+
...(hasMore &&
|
|
465
|
+
last !== undefined && {
|
|
466
|
+
nextCursor: last.runId as unknown as import('@kindgi/types').Cursor,
|
|
467
|
+
}),
|
|
468
|
+
};
|
|
469
|
+
},
|
|
470
|
+
|
|
471
|
+
async cancel(input: EvalRunCancelInput): Promise<EvalRunCancelOutcome> {
|
|
472
|
+
const record = runs.get(input.runId as unknown as string);
|
|
473
|
+
if (record === undefined) return { kind: 'not-found' };
|
|
474
|
+
if ((record.tenantId as unknown as string) !== (input.tenantId as unknown as string)) {
|
|
475
|
+
return { kind: 'not-found' };
|
|
476
|
+
}
|
|
477
|
+
if (isTerminal(record.status)) {
|
|
478
|
+
return { kind: 'already-terminal', status: record.status };
|
|
479
|
+
}
|
|
480
|
+
const controller = controllers.get(input.runId as unknown as string);
|
|
481
|
+
controller?.abort();
|
|
482
|
+
setRun({
|
|
483
|
+
...record,
|
|
484
|
+
status: 'cancelled',
|
|
485
|
+
completedAt: now().toISOString() as unknown as Timestamp,
|
|
486
|
+
});
|
|
487
|
+
return { kind: 'ok' };
|
|
488
|
+
},
|
|
489
|
+
};
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
function isTerminal(status: EvalRunStatus): boolean {
|
|
493
|
+
return status === 'completed' || status === 'failed' || status === 'cancelled';
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
// re-export for callers that only import the dispatcher module.
|
|
497
|
+
export { EVAL_RUN_STATUSES };
|