@kindgi/api 0.1.4 → 0.1.5-rc.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/dist/agent-binding.d.ts +13 -0
- package/dist/agent-binding.d.ts.map +1 -1
- package/dist/agent-pins.d.ts.map +1 -1
- package/dist/agent-pins.js +18 -2
- package/dist/agent-pins.js.map +1 -1
- package/dist/app.d.ts +110 -17
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +163 -35
- package/dist/app.js.map +1 -1
- package/dist/block-publish.d.ts +56 -0
- package/dist/block-publish.d.ts.map +1 -0
- package/dist/block-publish.js +132 -0
- package/dist/block-publish.js.map +1 -0
- package/dist/caller.d.ts +24 -0
- package/dist/caller.d.ts.map +1 -0
- package/dist/caller.js +47 -0
- package/dist/caller.js.map +1 -0
- package/dist/capability-binding.d.ts +11 -0
- package/dist/capability-binding.d.ts.map +1 -1
- package/dist/derive-agent-version.d.ts +7 -0
- package/dist/derive-agent-version.d.ts.map +1 -1
- package/dist/derive-agent-version.js +4 -0
- package/dist/derive-agent-version.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +73 -7
- package/dist/errors.js.map +1 -1
- package/dist/eval-case-binding.d.ts +16 -4
- package/dist/eval-case-binding.d.ts.map +1 -1
- package/dist/eval-run-binding.d.ts +31 -0
- package/dist/eval-run-binding.d.ts.map +1 -1
- package/dist/eval-run-dispatcher.d.ts +7 -0
- package/dist/eval-run-dispatcher.d.ts.map +1 -1
- package/dist/eval-run-dispatcher.js.map +1 -1
- package/dist/eval-sample.d.ts +11 -0
- package/dist/eval-sample.d.ts.map +1 -0
- package/dist/eval-sample.js +34 -0
- package/dist/eval-sample.js.map +1 -0
- package/dist/eval-suite-binding.d.ts +13 -0
- package/dist/eval-suite-binding.d.ts.map +1 -1
- package/dist/eval-suite-binding.js.map +1 -1
- package/dist/flow-binding.d.ts +18 -0
- package/dist/flow-binding.d.ts.map +1 -1
- package/dist/flow-pins.d.ts.map +1 -1
- package/dist/flow-pins.js +18 -2
- package/dist/flow-pins.js.map +1 -1
- package/dist/gate.d.ts.map +1 -1
- package/dist/gate.js +25 -0
- package/dist/gate.js.map +1 -1
- package/dist/handler-binding.d.ts +32 -0
- package/dist/handler-binding.d.ts.map +1 -1
- package/dist/hitl-binding.d.ts +23 -0
- package/dist/hitl-binding.d.ts.map +1 -1
- package/dist/identity-directory-binding.d.ts +82 -4
- package/dist/identity-directory-binding.d.ts.map +1 -1
- package/dist/identity-provider-binding.d.ts +197 -17
- package/dist/identity-provider-binding.d.ts.map +1 -1
- package/dist/improvement-pass-binding.d.ts +196 -0
- package/dist/improvement-pass-binding.d.ts.map +1 -0
- package/dist/improvement-pass-binding.js +9 -0
- package/dist/improvement-pass-binding.js.map +1 -0
- package/dist/index.d.ts +35 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/judged-dispatcher.d.ts +25 -4
- package/dist/judged-dispatcher.d.ts.map +1 -1
- package/dist/judged-dispatcher.js +43 -6
- package/dist/judged-dispatcher.js.map +1 -1
- package/dist/judgment-binding.d.ts +25 -1
- package/dist/judgment-binding.d.ts.map +1 -1
- package/dist/mcp-endpoint-binding.d.ts +7 -0
- package/dist/mcp-endpoint-binding.d.ts.map +1 -1
- package/dist/memory-binding.d.ts +124 -17
- package/dist/memory-binding.d.ts.map +1 -1
- package/dist/memory-erasure-binding.d.ts +145 -0
- package/dist/memory-erasure-binding.d.ts.map +1 -0
- package/dist/memory-erasure-binding.js +4 -0
- package/dist/memory-erasure-binding.js.map +1 -0
- package/dist/middleware/auth.d.ts +66 -13
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +150 -50
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/authorize.d.ts +6 -0
- package/dist/middleware/authorize.d.ts.map +1 -1
- package/dist/middleware/authorize.js +113 -4
- package/dist/middleware/authorize.js.map +1 -1
- package/dist/middleware/error-mapper.d.ts +5 -0
- package/dist/middleware/error-mapper.d.ts.map +1 -1
- package/dist/middleware/error-mapper.js +14 -1
- package/dist/middleware/error-mapper.js.map +1 -1
- package/dist/middleware/idempotency.d.ts +70 -5
- package/dist/middleware/idempotency.d.ts.map +1 -1
- package/dist/middleware/idempotency.js +174 -41
- package/dist/middleware/idempotency.js.map +1 -1
- package/dist/middleware/key-project.d.ts +17 -0
- package/dist/middleware/key-project.d.ts.map +1 -0
- package/dist/middleware/key-project.js +75 -0
- package/dist/middleware/key-project.js.map +1 -0
- package/dist/middleware/principal.d.ts.map +1 -1
- package/dist/middleware/principal.js +9 -5
- package/dist/middleware/principal.js.map +1 -1
- package/dist/middleware/project-ref.d.ts.map +1 -1
- package/dist/middleware/project-ref.js +3 -0
- package/dist/middleware/project-ref.js.map +1 -1
- package/dist/openapi/generate.d.ts.map +1 -1
- package/dist/openapi/generate.js +5 -2
- package/dist/openapi/generate.js.map +1 -1
- package/dist/openapi/operations.d.ts.map +1 -1
- package/dist/openapi/operations.js +918 -139
- package/dist/openapi/operations.js.map +1 -1
- package/dist/openapi/schemas.d.ts +90 -13
- package/dist/openapi/schemas.d.ts.map +1 -1
- package/dist/openapi/schemas.js +2081 -359
- package/dist/openapi/schemas.js.map +1 -1
- package/dist/person-grants-binding.d.ts +77 -0
- package/dist/person-grants-binding.d.ts.map +1 -0
- package/dist/person-grants-binding.js +4 -0
- package/dist/person-grants-binding.js.map +1 -0
- package/dist/proposal-service.d.ts +121 -0
- package/dist/proposal-service.d.ts.map +1 -0
- package/dist/proposal-service.js +447 -0
- package/dist/proposal-service.js.map +1 -0
- package/dist/proposal-status.d.ts +60 -0
- package/dist/proposal-status.d.ts.map +1 -0
- package/dist/proposal-status.js +109 -0
- package/dist/proposal-status.js.map +1 -0
- package/dist/provider-binding.d.ts +10 -0
- package/dist/provider-binding.d.ts.map +1 -1
- package/dist/publish-refused.d.ts +18 -3
- package/dist/publish-refused.d.ts.map +1 -1
- package/dist/publish-refused.js +18 -3
- package/dist/publish-refused.js.map +1 -1
- package/dist/routes/adapters.d.ts +2 -1
- package/dist/routes/adapters.d.ts.map +1 -1
- package/dist/routes/adapters.js +3 -1
- package/dist/routes/adapters.js.map +1 -1
- package/dist/routes/agent-releases.d.ts +55 -3
- package/dist/routes/agent-releases.d.ts.map +1 -1
- package/dist/routes/agent-releases.js +85 -55
- package/dist/routes/agent-releases.js.map +1 -1
- package/dist/routes/agents.d.ts +12 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +100 -2
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/approvals.d.ts +15 -3
- package/dist/routes/approvals.d.ts.map +1 -1
- package/dist/routes/approvals.js +133 -122
- package/dist/routes/approvals.js.map +1 -1
- package/dist/routes/artifacts.d.ts +25 -3
- package/dist/routes/artifacts.d.ts.map +1 -1
- package/dist/routes/artifacts.js +116 -7
- package/dist/routes/artifacts.js.map +1 -1
- package/dist/routes/auth.d.ts +25 -1
- package/dist/routes/auth.d.ts.map +1 -1
- package/dist/routes/auth.js +655 -281
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/blocks.d.ts.map +1 -1
- package/dist/routes/blocks.js +2 -42
- package/dist/routes/blocks.js.map +1 -1
- package/dist/routes/capabilities.d.ts +2 -1
- package/dist/routes/capabilities.d.ts.map +1 -1
- package/dist/routes/capabilities.js +6 -1
- package/dist/routes/capabilities.js.map +1 -1
- package/dist/routes/compliance.d.ts +9 -10
- package/dist/routes/compliance.d.ts.map +1 -1
- package/dist/routes/compliance.js +42 -61
- package/dist/routes/compliance.js.map +1 -1
- package/dist/routes/conversations.d.ts +8 -1
- package/dist/routes/conversations.d.ts.map +1 -1
- package/dist/routes/conversations.js +87 -8
- package/dist/routes/conversations.js.map +1 -1
- package/dist/routes/cost.d.ts +7 -1
- package/dist/routes/cost.d.ts.map +1 -1
- package/dist/routes/cost.js +22 -3
- package/dist/routes/cost.js.map +1 -1
- package/dist/routes/denied.d.ts +11 -0
- package/dist/routes/denied.d.ts.map +1 -0
- package/dist/routes/denied.js +17 -0
- package/dist/routes/denied.js.map +1 -0
- package/dist/routes/deployments.d.ts +2 -1
- package/dist/routes/deployments.d.ts.map +1 -1
- package/dist/routes/deployments.js +44 -12
- package/dist/routes/deployments.js.map +1 -1
- package/dist/routes/eval-comparison.d.ts.map +1 -1
- package/dist/routes/eval-comparison.js +69 -1
- package/dist/routes/eval-comparison.js.map +1 -1
- package/dist/routes/eval-overrides.d.ts +18 -0
- package/dist/routes/eval-overrides.d.ts.map +1 -0
- package/dist/routes/eval-overrides.js +81 -0
- package/dist/routes/eval-overrides.js.map +1 -0
- package/dist/routes/eval-runs.d.ts +10 -1
- package/dist/routes/eval-runs.d.ts.map +1 -1
- package/dist/routes/eval-runs.js +63 -7
- package/dist/routes/eval-runs.js.map +1 -1
- package/dist/routes/eval-suites.d.ts.map +1 -1
- package/dist/routes/eval-suites.js +20 -1
- package/dist/routes/eval-suites.js.map +1 -1
- package/dist/routes/event-triggers.d.ts +5 -1
- package/dist/routes/event-triggers.d.ts.map +1 -1
- package/dist/routes/event-triggers.js +26 -3
- package/dist/routes/event-triggers.js.map +1 -1
- package/dist/routes/export-signing-keys.d.ts +12 -0
- package/dist/routes/export-signing-keys.d.ts.map +1 -0
- package/dist/routes/export-signing-keys.js +24 -0
- package/dist/routes/export-signing-keys.js.map +1 -0
- package/dist/routes/flows.d.ts.map +1 -1
- package/dist/routes/flows.js +9 -1
- package/dist/routes/flows.js.map +1 -1
- package/dist/routes/gate-policies.d.ts +4 -1
- package/dist/routes/gate-policies.d.ts.map +1 -1
- package/dist/routes/gate-policies.js +29 -5
- package/dist/routes/gate-policies.js.map +1 -1
- package/dist/routes/guardrails.d.ts +16 -14
- package/dist/routes/guardrails.d.ts.map +1 -1
- package/dist/routes/guardrails.js +39 -3
- package/dist/routes/guardrails.js.map +1 -1
- package/dist/routes/identity.d.ts +20 -4
- package/dist/routes/identity.d.ts.map +1 -1
- package/dist/routes/identity.js +246 -6
- package/dist/routes/identity.js.map +1 -1
- package/dist/routes/improvement-passes.d.ts +52 -0
- package/dist/routes/improvement-passes.d.ts.map +1 -0
- package/dist/routes/improvement-passes.js +449 -0
- package/dist/routes/improvement-passes.js.map +1 -0
- package/dist/routes/judged-suites.d.ts +50 -0
- package/dist/routes/judged-suites.d.ts.map +1 -1
- package/dist/routes/judged-suites.js +66 -27
- package/dist/routes/judged-suites.js.map +1 -1
- package/dist/routes/judgment-context.d.ts +18 -2
- package/dist/routes/judgment-context.d.ts.map +1 -1
- package/dist/routes/judgment-context.js +63 -5
- package/dist/routes/judgment-context.js.map +1 -1
- package/dist/routes/judgment-flow-context.d.ts.map +1 -1
- package/dist/routes/judgment-flow-context.js +14 -2
- package/dist/routes/judgment-flow-context.js.map +1 -1
- package/dist/routes/judgments.d.ts.map +1 -1
- package/dist/routes/judgments.js +8 -1
- package/dist/routes/judgments.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +26 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/memory-access.d.ts +43 -0
- package/dist/routes/memory-access.d.ts.map +1 -0
- package/dist/routes/memory-access.js +129 -0
- package/dist/routes/memory-access.js.map +1 -0
- package/dist/routes/memory-erasures.d.ts +25 -0
- package/dist/routes/memory-erasures.d.ts.map +1 -0
- package/dist/routes/memory-erasures.js +214 -0
- package/dist/routes/memory-erasures.js.map +1 -0
- package/dist/routes/memory-parse.d.ts +38 -0
- package/dist/routes/memory-parse.d.ts.map +1 -0
- package/dist/routes/memory-parse.js +199 -0
- package/dist/routes/memory-parse.js.map +1 -0
- package/dist/routes/memory.d.ts +9 -4
- package/dist/routes/memory.d.ts.map +1 -1
- package/dist/routes/memory.js +226 -234
- package/dist/routes/memory.js.map +1 -1
- package/dist/routes/observations.d.ts +4 -1
- package/dist/routes/observations.d.ts.map +1 -1
- package/dist/routes/observations.js +8 -2
- package/dist/routes/observations.js.map +1 -1
- package/dist/routes/pagination.d.ts +7 -0
- package/dist/routes/pagination.d.ts.map +1 -1
- package/dist/routes/pagination.js +10 -0
- package/dist/routes/pagination.js.map +1 -1
- package/dist/routes/policies.d.ts +2 -1
- package/dist/routes/policies.d.ts.map +1 -1
- package/dist/routes/policies.js +3 -1
- package/dist/routes/policies.js.map +1 -1
- package/dist/routes/project-mismatch.d.ts +22 -0
- package/dist/routes/project-mismatch.d.ts.map +1 -0
- package/dist/routes/project-mismatch.js +34 -0
- package/dist/routes/project-mismatch.js.map +1 -0
- package/dist/routes/projects.d.ts +15 -4
- package/dist/routes/projects.d.ts.map +1 -1
- package/dist/routes/projects.js +100 -9
- package/dist/routes/projects.js.map +1 -1
- package/dist/routes/proposals.d.ts +25 -17
- package/dist/routes/proposals.d.ts.map +1 -1
- package/dist/routes/proposals.js +340 -507
- package/dist/routes/proposals.js.map +1 -1
- package/dist/routes/provenance.d.ts +17 -3
- package/dist/routes/provenance.d.ts.map +1 -1
- package/dist/routes/provenance.js +79 -103
- package/dist/routes/provenance.js.map +1 -1
- package/dist/routes/providers.d.ts +17 -1
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +110 -3
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/public-run-tokens.d.ts.map +1 -1
- package/dist/routes/public-run-tokens.js +3 -0
- package/dist/routes/public-run-tokens.js.map +1 -1
- package/dist/routes/runs.d.ts +10 -0
- package/dist/routes/runs.d.ts.map +1 -1
- package/dist/routes/runs.js +92 -42
- package/dist/routes/runs.js.map +1 -1
- package/dist/routes/schedules.d.ts +21 -13
- package/dist/routes/schedules.d.ts.map +1 -1
- package/dist/routes/schedules.js +416 -55
- package/dist/routes/schedules.js.map +1 -1
- package/dist/routes/segments.d.ts +2 -0
- package/dist/routes/segments.d.ts.map +1 -1
- package/dist/routes/segments.js +5 -0
- package/dist/routes/segments.js.map +1 -1
- package/dist/routes/service-accounts.d.ts +17 -0
- package/dist/routes/service-accounts.d.ts.map +1 -0
- package/dist/routes/service-accounts.js +212 -0
- package/dist/routes/service-accounts.js.map +1 -0
- package/dist/routes/sign-in-options.d.ts +50 -0
- package/dist/routes/sign-in-options.d.ts.map +1 -0
- package/dist/routes/sign-in-options.js +98 -0
- package/dist/routes/sign-in-options.js.map +1 -0
- package/dist/routes/signing-keys.d.ts +2 -1
- package/dist/routes/signing-keys.d.ts.map +1 -1
- package/dist/routes/signing-keys.js +3 -1
- package/dist/routes/signing-keys.js.map +1 -1
- package/dist/routes/tenant-access.d.ts +13 -0
- package/dist/routes/tenant-access.d.ts.map +1 -0
- package/dist/routes/tenant-access.js +26 -0
- package/dist/routes/tenant-access.js.map +1 -0
- package/dist/routes/tenant.d.ts.map +1 -1
- package/dist/routes/tenant.js +4 -0
- package/dist/routes/tenant.js.map +1 -1
- package/dist/routes/token-sign-in.d.ts +36 -0
- package/dist/routes/token-sign-in.d.ts.map +1 -0
- package/dist/routes/token-sign-in.js +101 -0
- package/dist/routes/token-sign-in.js.map +1 -0
- package/dist/routes/tokens.d.ts +15 -5
- package/dist/routes/tokens.d.ts.map +1 -1
- package/dist/routes/tokens.js +162 -43
- package/dist/routes/tokens.js.map +1 -1
- package/dist/routes/tools.d.ts.map +1 -1
- package/dist/routes/tools.js +9 -1
- package/dist/routes/tools.js.map +1 -1
- package/dist/routes/trigger-access.d.ts +29 -0
- package/dist/routes/trigger-access.d.ts.map +1 -0
- package/dist/routes/trigger-access.js +33 -0
- package/dist/routes/trigger-access.js.map +1 -0
- package/dist/routes/webhook-endpoints.d.ts +2 -1
- package/dist/routes/webhook-endpoints.d.ts.map +1 -1
- package/dist/routes/webhook-endpoints.js +11 -3
- package/dist/routes/webhook-endpoints.js.map +1 -1
- package/dist/routes/webhooks.d.ts +5 -1
- package/dist/routes/webhooks.d.ts.map +1 -1
- package/dist/routes/webhooks.js +25 -2
- package/dist/routes/webhooks.js.map +1 -1
- package/dist/run-failure.d.ts +21 -0
- package/dist/run-failure.d.ts.map +1 -0
- package/dist/run-failure.js +29 -0
- package/dist/run-failure.js.map +1 -0
- package/dist/service-account-binding.d.ts +108 -0
- package/dist/service-account-binding.d.ts.map +1 -0
- package/dist/service-account-binding.js +4 -0
- package/dist/service-account-binding.js.map +1 -0
- package/dist/session-store-binding.d.ts +61 -13
- package/dist/session-store-binding.d.ts.map +1 -1
- package/dist/signed-export.d.ts +89 -0
- package/dist/signed-export.d.ts.map +1 -0
- package/dist/signed-export.js +149 -0
- package/dist/signed-export.js.map +1 -0
- package/dist/supervisor-binding.d.ts +186 -413
- package/dist/supervisor-binding.d.ts.map +1 -1
- package/dist/testing/app-bindings.d.ts +33 -0
- package/dist/testing/app-bindings.d.ts.map +1 -0
- package/dist/testing/app-bindings.js +112 -0
- package/dist/testing/app-bindings.js.map +1 -0
- package/dist/testing/index.d.ts +11 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +13 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/stub-binding.d.ts +34 -0
- package/dist/testing/stub-binding.d.ts.map +1 -0
- package/dist/testing/stub-binding.js +42 -0
- package/dist/testing/stub-binding.js.map +1 -0
- package/dist/testing/trigger-registry.d.ts +21 -0
- package/dist/testing/trigger-registry.d.ts.map +1 -0
- package/dist/testing/trigger-registry.js +206 -0
- package/dist/testing/trigger-registry.js.map +1 -0
- package/dist/token-admin.d.ts +46 -8
- package/dist/token-admin.d.ts.map +1 -1
- package/dist/token-admin.js.map +1 -1
- package/dist/tool-binding.d.ts +13 -0
- package/dist/tool-binding.d.ts.map +1 -1
- package/dist/trigger-binding.d.ts +2 -2
- package/dist/trigger-binding.d.ts.map +1 -1
- package/dist/trigger-binding.js +1 -1
- package/dist/trigger-binding.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/webhook-endpoint-binding.d.ts +19 -3
- package/dist/webhook-endpoint-binding.d.ts.map +1 -1
- package/dist/webhook-endpoint-binding.js +1 -1
- package/dist/webhook-endpoint-binding.js.map +1 -1
- package/openapi.json +15385 -8788
- package/package.json +26 -22
- package/src/agent-binding.ts +14 -0
- package/src/agent-pins.ts +18 -2
- package/src/app.ts +366 -80
- package/src/block-publish.ts +181 -0
- package/src/caller.ts +62 -0
- package/src/capability-binding.ts +12 -0
- package/src/derive-agent-version.ts +9 -1
- package/src/errors.ts +73 -7
- package/src/eval-case-binding.ts +17 -1
- package/src/eval-run-binding.ts +31 -0
- package/src/eval-run-dispatcher.ts +7 -0
- package/src/eval-sample.ts +42 -0
- package/src/eval-suite-binding.ts +14 -0
- package/src/flow-binding.ts +19 -0
- package/src/flow-pins.ts +18 -2
- package/src/gate.ts +26 -0
- package/src/handler-binding.ts +36 -1
- package/src/hitl-binding.ts +24 -0
- package/src/identity-directory-binding.ts +85 -4
- package/src/identity-provider-binding.ts +216 -21
- package/src/improvement-pass-binding.ts +193 -0
- package/src/index.ts +153 -31
- package/src/judged-dispatcher.ts +78 -11
- package/src/judgment-binding.ts +25 -1
- package/src/mcp-endpoint-binding.ts +7 -0
- package/src/memory-binding.ts +121 -17
- package/src/memory-erasure-binding.ts +156 -0
- package/src/middleware/auth.ts +228 -62
- package/src/middleware/authorize.ts +139 -3
- package/src/middleware/error-mapper.ts +15 -1
- package/src/middleware/idempotency.ts +230 -43
- package/src/middleware/key-project.ts +86 -0
- package/src/middleware/principal.ts +9 -5
- package/src/middleware/project-ref.ts +3 -0
- package/src/openapi/generate.ts +11 -2
- package/src/openapi/operations.ts +1059 -142
- package/src/openapi/schemas.ts +2387 -469
- package/src/person-grants-binding.ts +76 -0
- package/src/proposal-service.ts +640 -0
- package/src/proposal-status.ts +176 -0
- package/src/provider-binding.ts +10 -0
- package/src/publish-refused.ts +38 -9
- package/src/routes/adapters.ts +4 -0
- package/src/routes/agent-releases.ts +121 -69
- package/src/routes/agents.ts +128 -1
- package/src/routes/approvals.ts +164 -154
- package/src/routes/artifacts.ts +181 -11
- package/src/routes/auth.ts +804 -336
- package/src/routes/blocks.ts +2 -53
- package/src/routes/capabilities.ts +10 -1
- package/src/routes/compliance.ts +60 -99
- package/src/routes/conversations.ts +101 -7
- package/src/routes/cost.ts +32 -3
- package/src/routes/denied.ts +28 -0
- package/src/routes/deployments.ts +62 -16
- package/src/routes/eval-comparison.ts +81 -2
- package/src/routes/eval-overrides.ts +108 -0
- package/src/routes/eval-runs.ts +86 -6
- package/src/routes/eval-suites.ts +25 -1
- package/src/routes/event-triggers.ts +27 -3
- package/src/routes/export-signing-keys.ts +31 -0
- package/src/routes/flows.ts +12 -1
- package/src/routes/gate-policies.ts +37 -6
- package/src/routes/guardrails.ts +61 -2
- package/src/routes/identity.ts +328 -10
- package/src/routes/improvement-passes.ts +541 -0
- package/src/routes/judged-suites.ts +113 -43
- package/src/routes/judgment-context.ts +76 -5
- package/src/routes/judgment-flow-context.ts +16 -2
- package/src/routes/judgments.ts +17 -3
- package/src/routes/mcp.ts +29 -1
- package/src/routes/memory-access.ts +179 -0
- package/src/routes/memory-erasures.ts +240 -0
- package/src/routes/memory-parse.ts +250 -0
- package/src/routes/memory.ts +244 -286
- package/src/routes/observations.ts +15 -2
- package/src/routes/pagination.ts +12 -0
- package/src/routes/policies.ts +7 -1
- package/src/routes/project-mismatch.ts +56 -0
- package/src/routes/projects.ts +107 -13
- package/src/routes/proposals.ts +370 -611
- package/src/routes/provenance.ts +99 -133
- package/src/routes/providers.ts +142 -3
- package/src/routes/public-run-tokens.ts +3 -0
- package/src/routes/runs.ts +119 -39
- package/src/routes/schedules.ts +472 -60
- package/src/routes/segments.ts +11 -0
- package/src/routes/service-accounts.ts +262 -0
- package/src/routes/sign-in-options.ts +168 -0
- package/src/routes/signing-keys.ts +7 -1
- package/src/routes/tenant-access.ts +37 -0
- package/src/routes/tenant.ts +6 -0
- package/src/routes/token-sign-in.ts +161 -0
- package/src/routes/tokens.ts +172 -46
- package/src/routes/tools.ts +12 -1
- package/src/routes/trigger-access.ts +72 -0
- package/src/routes/webhook-endpoints.ts +15 -3
- package/src/routes/webhooks.ts +26 -2
- package/src/run-failure.ts +42 -0
- package/src/service-account-binding.ts +113 -0
- package/src/session-store-binding.ts +65 -13
- package/src/signed-export.ts +250 -0
- package/src/supervisor-binding.ts +169 -409
- package/src/testing/app-bindings.ts +142 -0
- package/src/testing/index.ts +21 -0
- package/src/testing/stub-binding.ts +53 -0
- package/src/testing/trigger-registry.ts +259 -0
- package/src/token-admin.ts +40 -8
- package/src/tool-binding.ts +14 -0
- package/src/trigger-binding.ts +8 -1
- package/src/types.ts +16 -0
- package/src/webhook-endpoint-binding.ts +18 -3
|
@@ -7,6 +7,7 @@ import type { Context } from 'hono';
|
|
|
7
7
|
import type { Cursor, TenantId, TriggerId } from '@kindgi/types';
|
|
8
8
|
|
|
9
9
|
import { statusFor, toWireError } from '../errors.js';
|
|
10
|
+
import type { Authorizer } from '../middleware/authorize.js';
|
|
10
11
|
import type {
|
|
11
12
|
EventTriggerRecord,
|
|
12
13
|
RegisterEventTriggerInput,
|
|
@@ -15,6 +16,7 @@ import type {
|
|
|
15
16
|
} from '../trigger-binding.js';
|
|
16
17
|
import type { AppEnv } from '../types.js';
|
|
17
18
|
import { clampLimit } from './pagination.js';
|
|
19
|
+
import { triggerAccess } from './trigger-access.js';
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* Event triggers — fire a flow run when a matching event arrives on
|
|
@@ -22,9 +24,16 @@ import { clampLimit } from './pagination.js';
|
|
|
22
24
|
*
|
|
23
25
|
* Seven routes, mirroring the schedules surface. This surface registers
|
|
24
26
|
* triggers; it does not publish events.
|
|
27
|
+
*
|
|
28
|
+
* With an authorizer (T243 A), the trigger's flow decides who may see or
|
|
29
|
+
* change it (`trigger-access.ts`).
|
|
25
30
|
*/
|
|
26
|
-
export function eventTriggersRouter(
|
|
31
|
+
export function eventTriggersRouter(
|
|
32
|
+
binding: TriggerRegistryBinding,
|
|
33
|
+
authorizer?: Authorizer,
|
|
34
|
+
): Hono<AppEnv> {
|
|
27
35
|
const r = new Hono<AppEnv>();
|
|
36
|
+
const access = triggerAccess(binding, 'event', authorizer);
|
|
28
37
|
|
|
29
38
|
// ---------- POST / (register) ----------
|
|
30
39
|
r.post('/', async (c) => {
|
|
@@ -37,11 +46,14 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
37
46
|
|
|
38
47
|
const flowId = requireString(body, 'flowId');
|
|
39
48
|
const flowVersion = requireString(body, 'flowVersion');
|
|
40
|
-
const eventKind = requireString(body
|
|
49
|
+
const eventKind = requireString(body, 'config.eventKind');
|
|
41
50
|
if (flowId.kind === 'err') return bad(c, requestId, flowId.message);
|
|
42
51
|
if (flowVersion.kind === 'err') return bad(c, requestId, flowVersion.message);
|
|
43
52
|
if (eventKind.kind === 'err') return bad(c, requestId, eventKind.message);
|
|
44
53
|
|
|
54
|
+
const refused = await access.onRegister(c, flowId.value);
|
|
55
|
+
if (refused !== undefined) return refused;
|
|
56
|
+
|
|
45
57
|
const rawConfig = (body.config ?? {}) as Record<string, unknown>;
|
|
46
58
|
const registerInput: RegisterEventTriggerInput = {
|
|
47
59
|
kind: 'event',
|
|
@@ -84,7 +96,9 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
84
96
|
...(statusFilter !== undefined && { status: statusFilter }),
|
|
85
97
|
});
|
|
86
98
|
return c.json({
|
|
87
|
-
data: page.data
|
|
99
|
+
data: (await access.visible(c, page.data as readonly EventTriggerRecord[])).map(
|
|
100
|
+
serializeEventTrigger,
|
|
101
|
+
),
|
|
88
102
|
hasMore: page.nextCursor !== undefined,
|
|
89
103
|
...(page.nextCursor !== undefined && { nextCursor: page.nextCursor as unknown as string }),
|
|
90
104
|
});
|
|
@@ -95,6 +109,8 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
95
109
|
const requestId = c.get('requestId');
|
|
96
110
|
const tenantId = c.get('tenantId') as TenantId;
|
|
97
111
|
const triggerId = c.req.param('triggerId') as TriggerId;
|
|
112
|
+
const refused = await access.onTrigger(c, triggerId, ['read']);
|
|
113
|
+
if (refused !== undefined) return refused;
|
|
98
114
|
|
|
99
115
|
const rec = await binding.get({ tenantId, triggerId });
|
|
100
116
|
if (rec === null || rec.kind !== 'event') return notFound(c, requestId, triggerId);
|
|
@@ -106,6 +122,8 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
106
122
|
const requestId = c.get('requestId');
|
|
107
123
|
const tenantId = c.get('tenantId') as TenantId;
|
|
108
124
|
const triggerId = c.req.param('triggerId') as TriggerId;
|
|
125
|
+
const refused = await access.onTrigger(c, triggerId, ['write', 'execute']);
|
|
126
|
+
if (refused !== undefined) return refused;
|
|
109
127
|
|
|
110
128
|
const parsed = await parseJsonObject(c, requestId);
|
|
111
129
|
if (parsed.kind === 'err') return parsed.response;
|
|
@@ -149,6 +167,8 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
149
167
|
const requestId = c.get('requestId');
|
|
150
168
|
const tenantId = c.get('tenantId') as TenantId;
|
|
151
169
|
const triggerId = c.req.param('triggerId') as TriggerId;
|
|
170
|
+
const refused = await access.onTrigger(c, triggerId, ['write']);
|
|
171
|
+
if (refused !== undefined) return refused;
|
|
152
172
|
const result = await binding.pause({ tenantId, triggerId });
|
|
153
173
|
if (result.kind === 'err') return lifecycleError(c, requestId, result.error, triggerId);
|
|
154
174
|
return c.json(serializeEventTrigger(result.value as EventTriggerRecord));
|
|
@@ -159,6 +179,8 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
159
179
|
const requestId = c.get('requestId');
|
|
160
180
|
const tenantId = c.get('tenantId') as TenantId;
|
|
161
181
|
const triggerId = c.req.param('triggerId') as TriggerId;
|
|
182
|
+
const refused = await access.onTrigger(c, triggerId, ['write']);
|
|
183
|
+
if (refused !== undefined) return refused;
|
|
162
184
|
const result = await binding.resume({ tenantId, triggerId });
|
|
163
185
|
if (result.kind === 'err') return lifecycleError(c, requestId, result.error, triggerId);
|
|
164
186
|
return c.json(serializeEventTrigger(result.value as EventTriggerRecord));
|
|
@@ -168,6 +190,8 @@ export function eventTriggersRouter(binding: TriggerRegistryBinding): Hono<AppEn
|
|
|
168
190
|
r.post('/:triggerId/unregister', async (c) => {
|
|
169
191
|
const tenantId = c.get('tenantId') as TenantId;
|
|
170
192
|
const triggerId = c.req.param('triggerId') as TriggerId;
|
|
193
|
+
const refused = await access.onTrigger(c, triggerId, ['write']);
|
|
194
|
+
if (refused !== undefined) return refused;
|
|
171
195
|
const outcome = await binding.unregister({ tenantId, triggerId });
|
|
172
196
|
return c.json({
|
|
173
197
|
eventTriggerId: triggerId as unknown as string,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
|
|
4
|
+
import { Hono } from 'hono';
|
|
5
|
+
|
|
6
|
+
import type { ExportSigningBinding } from '@kindgi/crypto';
|
|
7
|
+
|
|
8
|
+
import type { AppEnv } from '../types.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `GET /v1/export-signing-keys`: the public keys this deployment signs
|
|
12
|
+
* its exports with, active first. A verifier pins them: an export's own
|
|
13
|
+
* embedded `publicKey` only proves it wasn't changed, these say who
|
|
14
|
+
* signed it. Empty when the deployment doesn't sign exports. Any
|
|
15
|
+
* authenticated caller may read them; they're public keys.
|
|
16
|
+
*/
|
|
17
|
+
export function exportSigningKeysRouter(signer: ExportSigningBinding | undefined): Hono<AppEnv> {
|
|
18
|
+
const r = new Hono<AppEnv>();
|
|
19
|
+
r.get('/', (c) =>
|
|
20
|
+
c.json({
|
|
21
|
+
data: (signer?.listKeys() ?? []).map((key, index) => ({
|
|
22
|
+
keyId: key.keyId,
|
|
23
|
+
algorithm: key.algorithm,
|
|
24
|
+
publicKeyPem: key.publicKeyPem,
|
|
25
|
+
fingerprint: key.fingerprint,
|
|
26
|
+
active: index === 0,
|
|
27
|
+
})),
|
|
28
|
+
}),
|
|
29
|
+
);
|
|
30
|
+
return r;
|
|
31
|
+
}
|
package/src/routes/flows.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { refuseWritesWhenReadOnly } from '../registry-read-only.js';
|
|
|
18
18
|
import type { ToolRegistryBinding } from '../tool-binding.js';
|
|
19
19
|
import type { AppEnv } from '../types.js';
|
|
20
20
|
import { clampLimit } from './pagination.js';
|
|
21
|
+
import { projectMismatch } from './project-mismatch.js';
|
|
21
22
|
import { parseScopeParams } from './scope-params.js';
|
|
22
23
|
|
|
23
24
|
/**
|
|
@@ -132,8 +133,15 @@ export function flowsRouter(
|
|
|
132
133
|
...(scopeParsed.scope !== undefined && { scope: scopeParsed.scope }),
|
|
133
134
|
...(scopeParsed.inherit !== undefined && { inherit: scopeParsed.inherit }),
|
|
134
135
|
});
|
|
136
|
+
// Only what the caller may read (T243 A), as `GET …/:id` asks.
|
|
137
|
+
const visible =
|
|
138
|
+
authorizer === undefined
|
|
139
|
+
? page.data
|
|
140
|
+
: await authorizer.filterByCan(c, 'read', page.data, (a) =>
|
|
141
|
+
ref('flow', a.id as unknown as string),
|
|
142
|
+
);
|
|
135
143
|
return c.json({
|
|
136
|
-
data:
|
|
144
|
+
data: visible.map(serializeGraph),
|
|
137
145
|
hasMore: page.nextCursor !== undefined,
|
|
138
146
|
...(page.nextCursor !== undefined && { nextCursor: page.nextCursor as unknown as string }),
|
|
139
147
|
});
|
|
@@ -334,6 +342,9 @@ export function flowsRouter(
|
|
|
334
342
|
),
|
|
335
343
|
);
|
|
336
344
|
}
|
|
345
|
+
if (outcome.kind === 'project-mismatch') {
|
|
346
|
+
return projectMismatch(c, 'flow', outcome.flowId as unknown as string, outcome.projectId);
|
|
347
|
+
}
|
|
337
348
|
if (outcome.kind === 'project-not-found') {
|
|
338
349
|
// Caller supplied a `projectId` that does not resolve within
|
|
339
350
|
// this tenant. Distinct signal from `already-registered` so the
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { type Context, Hono } from 'hono';
|
|
5
5
|
|
|
6
6
|
import { ref } from '@kindgi/authz';
|
|
7
|
-
import type { Cursor, TenantId } from '@kindgi/types';
|
|
7
|
+
import type { Cursor, LiveScope, TenantId } from '@kindgi/types';
|
|
8
8
|
|
|
9
9
|
import { statusFor, toWireError } from '../errors.js';
|
|
10
10
|
import type { GatePolicyBinding, GatePolicyError } from '../gate-policy-binding.js';
|
|
@@ -30,7 +30,10 @@ const ID_RE = /^[a-z0-9][a-z0-9._-]{0,127}$/;
|
|
|
30
30
|
* POST /:policyId/versions/:version/unregister|reinstate
|
|
31
31
|
*
|
|
32
32
|
* Writes need `admin` on the tenant: whoever may promote mustn't be able
|
|
33
|
-
* to loosen the gate on their own promotion.
|
|
33
|
+
* to loosen the gate on their own promotion. Reads need `read` on the
|
|
34
|
+
* policy's scope (a segment's: its project), as judge classes do: one the
|
|
35
|
+
* caller can't read answers 404, as if it weren't there, and the list
|
|
36
|
+
* shows only those they can.
|
|
34
37
|
*/
|
|
35
38
|
export function gatePoliciesRouter(
|
|
36
39
|
binding: GatePolicyBinding,
|
|
@@ -46,6 +49,11 @@ export function gatePoliciesRouter(
|
|
|
46
49
|
});
|
|
47
50
|
}
|
|
48
51
|
|
|
52
|
+
/** Whether the caller may read a policy: `read` on its scope. */
|
|
53
|
+
const canRead = async (c: Ctx, policy: { readonly scope: LiveScope }): Promise<boolean> =>
|
|
54
|
+
authorizer === undefined ||
|
|
55
|
+
authorizer.can(c, 'read', scopeRef(c.get('tenantId') as TenantId, policy.scope));
|
|
56
|
+
|
|
49
57
|
r.get('/', async (c) => {
|
|
50
58
|
const requestId = c.get('requestId');
|
|
51
59
|
const scope = scopeFromQuery((n) => c.req.query(n), c.req.queries('segment') ?? []);
|
|
@@ -59,8 +67,14 @@ export function gatePoliciesRouter(
|
|
|
59
67
|
...(scope.scope !== undefined && { scope: scope.scope }),
|
|
60
68
|
...(cursor !== undefined && cursor.length > 0 && { cursor: cursor as Cursor }),
|
|
61
69
|
});
|
|
70
|
+
const visible =
|
|
71
|
+
authorizer === undefined
|
|
72
|
+
? page.data
|
|
73
|
+
: await authorizer.filterByCan(c, 'read', page.data, (p) =>
|
|
74
|
+
scopeRef(c.get('tenantId') as TenantId, p.scope),
|
|
75
|
+
);
|
|
62
76
|
return c.json({
|
|
63
|
-
data:
|
|
77
|
+
data: visible.map(serializeGatePolicy),
|
|
64
78
|
hasMore: page.nextCursor !== undefined,
|
|
65
79
|
...(page.nextCursor !== undefined && { nextCursor: page.nextCursor as unknown as string }),
|
|
66
80
|
});
|
|
@@ -71,7 +85,7 @@ export function gatePoliciesRouter(
|
|
|
71
85
|
tenantId: c.get('tenantId') as TenantId,
|
|
72
86
|
id: c.req.param('policyId'),
|
|
73
87
|
});
|
|
74
|
-
if (found === null) return notFound(c, c.req.param('policyId'));
|
|
88
|
+
if (found === null || !(await canRead(c, found))) return notFound(c, c.req.param('policyId'));
|
|
75
89
|
return c.json(serializeGatePolicy(found));
|
|
76
90
|
});
|
|
77
91
|
|
|
@@ -80,7 +94,11 @@ export function gatePoliciesRouter(
|
|
|
80
94
|
tenantId: c.get('tenantId') as TenantId,
|
|
81
95
|
id: c.req.param('policyId'),
|
|
82
96
|
});
|
|
83
|
-
|
|
97
|
+
// A policy's versions share its scope (`gate-policy-scope-changed`).
|
|
98
|
+
const first = versions[0];
|
|
99
|
+
if (first === undefined || !(await canRead(c, first))) {
|
|
100
|
+
return notFound(c, c.req.param('policyId'));
|
|
101
|
+
}
|
|
84
102
|
return c.json({ data: versions.map(serializeGatePolicy), hasMore: false });
|
|
85
103
|
});
|
|
86
104
|
|
|
@@ -90,7 +108,7 @@ export function gatePoliciesRouter(
|
|
|
90
108
|
id: c.req.param('policyId'),
|
|
91
109
|
version: c.req.param('version'),
|
|
92
110
|
});
|
|
93
|
-
if (found === null) {
|
|
111
|
+
if (found === null || !(await canRead(c, found))) {
|
|
94
112
|
return notFound(c, c.req.param('policyId'), c.req.param('version'));
|
|
95
113
|
}
|
|
96
114
|
return c.json(serializeGatePolicy(found));
|
|
@@ -144,6 +162,19 @@ export function gatePoliciesRouter(
|
|
|
144
162
|
|
|
145
163
|
type Ctx = Context<AppEnv>;
|
|
146
164
|
|
|
165
|
+
/** The resource a gate policy's scope is: what reading it needs `read` on. */
|
|
166
|
+
function scopeRef(tenantId: TenantId, scope: LiveScope) {
|
|
167
|
+
switch (scope.kind) {
|
|
168
|
+
case 'tenant':
|
|
169
|
+
return ref('tenant', tenantId as unknown as string);
|
|
170
|
+
case 'org':
|
|
171
|
+
return ref('org', scope.orgId as unknown as string);
|
|
172
|
+
case 'project':
|
|
173
|
+
case 'segment':
|
|
174
|
+
return ref('project', scope.projectId as unknown as string);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
147
178
|
function badInput(c: Ctx, requestId: string, message: string) {
|
|
148
179
|
c.status(statusFor('bad-input') as never);
|
|
149
180
|
return c.json(toWireError({ code: 'bad-input', message }, requestId));
|
package/src/routes/guardrails.ts
CHANGED
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
import { Hono } from 'hono';
|
|
5
5
|
|
|
6
6
|
import { type Principal, ref, tuplesForCreate } from '@kindgi/authz';
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
type Guardrail,
|
|
9
|
+
type GuardrailConfigProblem,
|
|
10
|
+
createCheckRegistry,
|
|
11
|
+
describeGuardrailConfigProblems,
|
|
12
|
+
validateGuardrailSpec,
|
|
13
|
+
} from '@kindgi/guardrails';
|
|
8
14
|
import type { Cursor, GuardrailId, ProjectId, TenantId, UserId } from '@kindgi/types';
|
|
9
15
|
|
|
10
16
|
import { statusFor, toWireError } from '../errors.js';
|
|
@@ -28,6 +34,9 @@ import { parseScopeParams } from './scope-params.js';
|
|
|
28
34
|
* guardrails whose check code is already bundled server-side. Check
|
|
29
35
|
* code is not uploaded over this surface.
|
|
30
36
|
*/
|
|
37
|
+
/** The built-in checks, for the config of a guardrail naming one. */
|
|
38
|
+
const builtInChecks = createCheckRegistry();
|
|
39
|
+
|
|
31
40
|
/**
|
|
32
41
|
* Optional side-effect callback fired after a successful write
|
|
33
42
|
* (register, unregister) to a guardrail. Lets an in-process
|
|
@@ -42,10 +51,26 @@ export type GuardrailWriteHook = (params: {
|
|
|
42
51
|
readonly kind: 'register' | 'unregister';
|
|
43
52
|
}) => void | Promise<void>;
|
|
44
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Checks a guardrail being registered against the check it names: every
|
|
56
|
+
* way its `config` breaks that check's `configSchema` (a pack check's,
|
|
57
|
+
* from its deployment), via `guardrailConfigProblems`. Any problem
|
|
58
|
+
* refuses the registration with `422 guardrail-config-invalid`
|
|
59
|
+
* (`details.issues`). Absent, or nothing to check against (an unknown
|
|
60
|
+
* check, a check without a schema): no problems. A guardrail naming a
|
|
61
|
+
* built-in check is checked by the route itself, against the built-in's
|
|
62
|
+
* schema, whatever the runtime passes here.
|
|
63
|
+
*/
|
|
64
|
+
export type GuardrailConfigCheck = (input: {
|
|
65
|
+
readonly tenantId: TenantId;
|
|
66
|
+
readonly guardrail: Guardrail;
|
|
67
|
+
}) => Promise<readonly GuardrailConfigProblem[]>;
|
|
68
|
+
|
|
45
69
|
export function guardrailsRouter(
|
|
46
70
|
binding: GuardrailRegistryBinding,
|
|
47
71
|
authorizer?: Authorizer,
|
|
48
72
|
onWrite?: GuardrailWriteHook,
|
|
73
|
+
checkConfig?: GuardrailConfigCheck,
|
|
49
74
|
): Hono<AppEnv> {
|
|
50
75
|
const r = new Hono<AppEnv>();
|
|
51
76
|
// A read-only registry (under `kindgi dev`, the pack's files) refuses
|
|
@@ -127,8 +152,15 @@ export function guardrailsRouter(
|
|
|
127
152
|
...(scopeParsed.scope !== undefined && { scope: scopeParsed.scope }),
|
|
128
153
|
...(scopeParsed.inherit !== undefined && { inherit: scopeParsed.inherit }),
|
|
129
154
|
});
|
|
155
|
+
// Only what the caller may read (T243 A), as `GET …/:id` asks.
|
|
156
|
+
const visible =
|
|
157
|
+
authorizer === undefined
|
|
158
|
+
? page.data
|
|
159
|
+
: await authorizer.filterByCan(c, 'read', page.data, (a) =>
|
|
160
|
+
ref('guardrail', a.id as unknown as string),
|
|
161
|
+
);
|
|
130
162
|
return c.json({
|
|
131
|
-
data:
|
|
163
|
+
data: visible.map(serializeGuardrail),
|
|
132
164
|
hasMore: page.nextCursor !== undefined,
|
|
133
165
|
...(page.nextCursor !== undefined && { nextCursor: page.nextCursor as unknown as string }),
|
|
134
166
|
});
|
|
@@ -210,6 +242,33 @@ export function guardrailsRouter(
|
|
|
210
242
|
);
|
|
211
243
|
}
|
|
212
244
|
|
|
245
|
+
// A built-in check's config is the route's to check (its schema ships with
|
|
246
|
+
// `@kindgi/guardrails`); any other check's, the runtime's.
|
|
247
|
+
const builtIn = builtInChecks.get(validated.value.check);
|
|
248
|
+
const problems =
|
|
249
|
+
builtIn?.configProblems !== undefined
|
|
250
|
+
? builtIn.configProblems(validated.value.config)
|
|
251
|
+
: await checkConfig?.({ tenantId, guardrail: validated.value });
|
|
252
|
+
if (problems !== undefined && problems.length > 0) {
|
|
253
|
+
c.status(statusFor('guardrail-config-invalid') as never);
|
|
254
|
+
return c.json(
|
|
255
|
+
toWireError(
|
|
256
|
+
{
|
|
257
|
+
code: 'guardrail-config-invalid',
|
|
258
|
+
message: describeGuardrailConfigProblems(
|
|
259
|
+
{
|
|
260
|
+
guardrailId: validated.value.id as unknown as string,
|
|
261
|
+
check: validated.value.check,
|
|
262
|
+
},
|
|
263
|
+
problems,
|
|
264
|
+
),
|
|
265
|
+
issues: problems as unknown as Record<string, unknown>[],
|
|
266
|
+
},
|
|
267
|
+
requestId,
|
|
268
|
+
),
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
|
|
213
272
|
const principal = c.get('principal') as Principal | undefined;
|
|
214
273
|
const creatorUserId =
|
|
215
274
|
principal?.actor.kind === 'user' ? (principal.actor.id as UserId) : undefined;
|