@stigmer/server 3.15.3-dev.20260914121148 → 3.16.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/README.md +3 -3
- package/dist/archive/content-store.d.ts +35 -0
- package/dist/archive/content-store.d.ts.map +1 -0
- package/dist/archive/content-store.js +98 -0
- package/dist/archive/content-store.js.map +1 -0
- package/dist/archive/inflate.d.ts +22 -0
- package/dist/archive/inflate.d.ts.map +1 -0
- package/dist/archive/inflate.js +75 -0
- package/dist/archive/inflate.js.map +1 -0
- package/dist/archive/limits.d.ts +33 -0
- package/dist/archive/limits.d.ts.map +1 -0
- package/dist/archive/limits.js +31 -0
- package/dist/archive/limits.js.map +1 -0
- package/dist/archive/open.d.ts +24 -0
- package/dist/archive/open.d.ts.map +1 -0
- package/dist/archive/open.js +93 -0
- package/dist/archive/open.js.map +1 -0
- package/dist/{domain/skill/storage → archive}/prefilter.d.ts +5 -0
- package/dist/archive/prefilter.d.ts.map +1 -0
- package/dist/archive/prefilter.js.map +1 -0
- package/dist/archive/write.d.ts +8 -0
- package/dist/archive/write.d.ts.map +1 -0
- package/dist/archive/write.js +44 -0
- package/dist/archive/write.js.map +1 -0
- package/dist/authorization/authorizer.d.ts +98 -0
- package/dist/authorization/authorizer.d.ts.map +1 -0
- package/dist/authorization/authorizer.js +156 -0
- package/dist/authorization/authorizer.js.map +1 -0
- package/dist/authorization/derived-tuples.d.ts +42 -0
- package/dist/authorization/derived-tuples.d.ts.map +1 -0
- package/dist/authorization/derived-tuples.js +240 -0
- package/dist/authorization/derived-tuples.js.map +1 -0
- package/dist/authorization/evaluator.d.ts +66 -0
- package/dist/authorization/evaluator.d.ts.map +1 -0
- package/dist/authorization/evaluator.js +153 -0
- package/dist/authorization/evaluator.js.map +1 -0
- package/dist/authorization/facts.d.ts +29 -0
- package/dist/authorization/facts.d.ts.map +1 -0
- package/dist/authorization/facts.js +17 -0
- package/dist/authorization/facts.js.map +1 -0
- package/dist/authorization/lane-admission.d.ts +50 -0
- package/dist/authorization/lane-admission.d.ts.map +1 -0
- package/dist/authorization/lane-admission.js +13 -0
- package/dist/authorization/lane-admission.js.map +1 -0
- package/dist/authorization/list-read-scope.d.ts +18 -0
- package/dist/authorization/list-read-scope.d.ts.map +1 -0
- package/dist/authorization/list-read-scope.js +155 -0
- package/dist/authorization/list-read-scope.js.map +1 -0
- package/dist/authorization/model/agent.d.ts +2 -0
- package/dist/authorization/model/agent.d.ts.map +1 -0
- package/dist/authorization/model/agent.js +42 -0
- package/dist/authorization/model/agent.js.map +1 -0
- package/dist/authorization/model/agent_channel.d.ts +2 -0
- package/dist/authorization/model/agent_channel.d.ts.map +1 -0
- package/dist/authorization/model/agent_channel.js +38 -0
- package/dist/authorization/model/agent_channel.js.map +1 -0
- package/dist/authorization/model/agent_execution.d.ts +2 -0
- package/dist/authorization/model/agent_execution.d.ts.map +1 -0
- package/dist/authorization/model/agent_execution.js +25 -0
- package/dist/authorization/model/agent_execution.js.map +1 -0
- package/dist/authorization/model/agent_instance.d.ts +2 -0
- package/dist/authorization/model/agent_instance.d.ts.map +1 -0
- package/dist/authorization/model/agent_instance.js +47 -0
- package/dist/authorization/model/agent_instance.js.map +1 -0
- package/dist/authorization/model/agent_share.d.ts +2 -0
- package/dist/authorization/model/agent_share.d.ts.map +1 -0
- package/dist/authorization/model/agent_share.js +29 -0
- package/dist/authorization/model/agent_share.js.map +1 -0
- package/dist/authorization/model/api_key.d.ts +2 -0
- package/dist/authorization/model/api_key.d.ts.map +1 -0
- package/dist/authorization/model/api_key.js +27 -0
- package/dist/authorization/model/api_key.js.map +1 -0
- package/dist/authorization/model/artifact.d.ts +2 -0
- package/dist/authorization/model/artifact.d.ts.map +1 -0
- package/dist/authorization/model/artifact.js +27 -0
- package/dist/authorization/model/artifact.js.map +1 -0
- package/dist/authorization/model/channel_app.d.ts +2 -0
- package/dist/authorization/model/channel_app.d.ts.map +1 -0
- package/dist/authorization/model/channel_app.js +28 -0
- package/dist/authorization/model/channel_app.js.map +1 -0
- package/dist/authorization/model/default-of.d.ts +38 -0
- package/dist/authorization/model/default-of.d.ts.map +1 -0
- package/dist/authorization/model/default-of.js +39 -0
- package/dist/authorization/model/default-of.js.map +1 -0
- package/dist/authorization/model/environment.d.ts +2 -0
- package/dist/authorization/model/environment.d.ts.map +1 -0
- package/dist/authorization/model/environment.js +33 -0
- package/dist/authorization/model/environment.js.map +1 -0
- package/dist/authorization/model/execution_context.d.ts +2 -0
- package/dist/authorization/model/execution_context.d.ts.map +1 -0
- package/dist/authorization/model/execution_context.js +19 -0
- package/dist/authorization/model/execution_context.js.map +1 -0
- package/dist/authorization/model/iam_policy.d.ts +2 -0
- package/dist/authorization/model/iam_policy.d.ts.map +1 -0
- package/dist/authorization/model/iam_policy.js +31 -0
- package/dist/authorization/model/iam_policy.js.map +1 -0
- package/dist/authorization/model/identity_account.d.ts +2 -0
- package/dist/authorization/model/identity_account.d.ts.map +1 -0
- package/dist/authorization/model/identity_account.js +25 -0
- package/dist/authorization/model/identity_account.js.map +1 -0
- package/dist/authorization/model/index.d.ts +36 -0
- package/dist/authorization/model/index.d.ts.map +1 -0
- package/dist/authorization/model/index.js +72 -0
- package/dist/authorization/model/index.js.map +1 -0
- package/dist/authorization/model/mcp_server.d.ts +2 -0
- package/dist/authorization/model/mcp_server.d.ts.map +1 -0
- package/dist/authorization/model/mcp_server.js +37 -0
- package/dist/authorization/model/mcp_server.js.map +1 -0
- package/dist/authorization/model/memory.d.ts +2 -0
- package/dist/authorization/model/memory.d.ts.map +1 -0
- package/dist/authorization/model/memory.js +26 -0
- package/dist/authorization/model/memory.js.map +1 -0
- package/dist/authorization/model/oauth_app.d.ts +2 -0
- package/dist/authorization/model/oauth_app.d.ts.map +1 -0
- package/dist/authorization/model/oauth_app.js +30 -0
- package/dist/authorization/model/oauth_app.js.map +1 -0
- package/dist/authorization/model/organization.d.ts +2 -0
- package/dist/authorization/model/organization.d.ts.map +1 -0
- package/dist/authorization/model/organization.js +54 -0
- package/dist/authorization/model/organization.js.map +1 -0
- package/dist/authorization/model/plugin.d.ts +2 -0
- package/dist/authorization/model/plugin.d.ts.map +1 -0
- package/dist/authorization/model/plugin.js +44 -0
- package/dist/authorization/model/plugin.js.map +1 -0
- package/dist/authorization/model/project.d.ts +2 -0
- package/dist/authorization/model/project.d.ts.map +1 -0
- package/dist/authorization/model/project.js +32 -0
- package/dist/authorization/model/project.js.map +1 -0
- package/dist/authorization/model/rewrite.d.ts +127 -0
- package/dist/authorization/model/rewrite.d.ts.map +1 -0
- package/dist/authorization/model/rewrite.js +82 -0
- package/dist/authorization/model/rewrite.js.map +1 -0
- package/dist/authorization/model/schedule.d.ts +2 -0
- package/dist/authorization/model/schedule.d.ts.map +1 -0
- package/dist/authorization/model/schedule.js +29 -0
- package/dist/authorization/model/schedule.js.map +1 -0
- package/dist/authorization/model/session.d.ts +2 -0
- package/dist/authorization/model/session.d.ts.map +1 -0
- package/dist/authorization/model/session.js +38 -0
- package/dist/authorization/model/session.js.map +1 -0
- package/dist/authorization/model/skill.d.ts +2 -0
- package/dist/authorization/model/skill.d.ts.map +1 -0
- package/dist/authorization/model/skill.js +38 -0
- package/dist/authorization/model/skill.js.map +1 -0
- package/dist/authorization/model/workflow.d.ts +2 -0
- package/dist/authorization/model/workflow.d.ts.map +1 -0
- package/dist/authorization/model/workflow.js +38 -0
- package/dist/authorization/model/workflow.js.map +1 -0
- package/dist/authorization/model/workflow_execution.d.ts +2 -0
- package/dist/authorization/model/workflow_execution.d.ts.map +1 -0
- package/dist/authorization/model/workflow_execution.js +32 -0
- package/dist/authorization/model/workflow_execution.js.map +1 -0
- package/dist/authorization/model/workflow_instance.d.ts +2 -0
- package/dist/authorization/model/workflow_instance.d.ts.map +1 -0
- package/dist/authorization/model/workflow_instance.js +92 -0
- package/dist/authorization/model/workflow_instance.js.map +1 -0
- package/dist/authorization/organization-directory.d.ts +13 -0
- package/dist/authorization/organization-directory.d.ts.map +1 -0
- package/dist/authorization/organization-directory.js +83 -0
- package/dist/authorization/organization-directory.js.map +1 -0
- package/dist/authorization/person.d.ts +42 -0
- package/dist/authorization/person.d.ts.map +1 -0
- package/dist/authorization/person.js +19 -0
- package/dist/authorization/person.js.map +1 -0
- package/dist/authorization/posture.d.ts +38 -0
- package/dist/authorization/posture.d.ts.map +1 -0
- package/dist/authorization/posture.js +7 -0
- package/dist/authorization/posture.js.map +1 -0
- package/dist/authorization/schedule-fire-caller.d.ts +12 -0
- package/dist/authorization/schedule-fire-caller.d.ts.map +1 -0
- package/dist/authorization/schedule-fire-caller.js +67 -0
- package/dist/authorization/schedule-fire-caller.js.map +1 -0
- package/dist/authorization/store-test-kit.d.ts +68 -0
- package/dist/authorization/store-test-kit.d.ts.map +1 -0
- package/dist/authorization/store-test-kit.js +311 -0
- package/dist/authorization/store-test-kit.js.map +1 -0
- package/dist/authorization/tuples.d.ts +115 -0
- package/dist/authorization/tuples.d.ts.map +1 -0
- package/dist/authorization/tuples.js +83 -0
- package/dist/authorization/tuples.js.map +1 -0
- package/dist/boot/compose.d.ts.map +1 -1
- package/dist/boot/compose.js +220 -43
- package/dist/boot/compose.js.map +1 -1
- package/dist/boot/inprocess.d.ts +12 -0
- package/dist/boot/inprocess.d.ts.map +1 -1
- package/dist/boot/inprocess.js +68 -21
- package/dist/boot/inprocess.js.map +1 -1
- package/dist/domain/agent/controller.d.ts.map +1 -1
- package/dist/domain/agent/controller.js +9 -0
- package/dist/domain/agent/controller.js.map +1 -1
- package/dist/domain/executioncontext/resolve-values-for-caller.d.ts +33 -14
- package/dist/domain/executioncontext/resolve-values-for-caller.d.ts.map +1 -1
- package/dist/domain/executioncontext/resolve-values-for-caller.js +32 -8
- package/dist/domain/executioncontext/resolve-values-for-caller.js.map +1 -1
- package/dist/domain/iampolicy/constants.d.ts +11 -0
- package/dist/domain/iampolicy/constants.d.ts.map +1 -1
- package/dist/domain/iampolicy/constants.js +11 -0
- package/dist/domain/iampolicy/constants.js.map +1 -1
- package/dist/domain/iampolicy/membership.d.ts +72 -1
- package/dist/domain/iampolicy/membership.d.ts.map +1 -1
- package/dist/domain/iampolicy/membership.js +141 -56
- package/dist/domain/iampolicy/membership.js.map +1 -1
- package/dist/domain/identityaccount/actor.d.ts +41 -0
- package/dist/domain/identityaccount/actor.d.ts.map +1 -0
- package/dist/domain/identityaccount/actor.js +34 -0
- package/dist/domain/identityaccount/actor.js.map +1 -0
- package/dist/domain/identityaccount/resolve.d.ts +19 -0
- package/dist/domain/identityaccount/resolve.d.ts.map +1 -1
- package/dist/domain/identityaccount/resolve.js +12 -0
- package/dist/domain/identityaccount/resolve.js.map +1 -1
- package/dist/domain/mcpserver/connect-execution-id.d.ts +5 -0
- package/dist/domain/mcpserver/connect-execution-id.d.ts.map +1 -0
- package/dist/domain/mcpserver/connect-execution-id.js +32 -0
- package/dist/domain/mcpserver/connect-execution-id.js.map +1 -0
- package/dist/domain/mcpserver/connect.d.ts +28 -2
- package/dist/domain/mcpserver/connect.d.ts.map +1 -1
- package/dist/domain/mcpserver/connect.js +27 -7
- package/dist/domain/mcpserver/connect.js.map +1 -1
- package/dist/domain/mcpserver/controller.d.ts.map +1 -1
- package/dist/domain/mcpserver/controller.js +9 -0
- package/dist/domain/mcpserver/controller.js.map +1 -1
- package/dist/domain/mcpserver/engine.d.ts +9 -3
- package/dist/domain/mcpserver/engine.d.ts.map +1 -1
- package/dist/domain/mcpserver/engine.js.map +1 -1
- package/dist/domain/mcpserver/start-connect.js +1 -1
- package/dist/domain/mcpserver/start-connect.js.map +1 -1
- package/dist/domain/platform/controller.d.ts +24 -11
- package/dist/domain/platform/controller.d.ts.map +1 -1
- package/dist/domain/platform/controller.js.map +1 -1
- package/dist/domain/plugin/archive.d.ts +37 -0
- package/dist/domain/plugin/archive.d.ts.map +1 -0
- package/dist/domain/plugin/archive.js +50 -0
- package/dist/domain/plugin/archive.js.map +1 -0
- package/dist/domain/plugin/constants.d.ts +38 -0
- package/dist/domain/plugin/constants.d.ts.map +1 -0
- package/dist/domain/plugin/constants.js +46 -0
- package/dist/domain/plugin/constants.js.map +1 -0
- package/dist/domain/plugin/controller.d.ts +25 -0
- package/dist/domain/plugin/controller.d.ts.map +1 -0
- package/dist/domain/plugin/controller.js +493 -0
- package/dist/domain/plugin/controller.js.map +1 -0
- package/dist/domain/plugin/materialize/agent.d.ts +13 -0
- package/dist/domain/plugin/materialize/agent.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/agent.js +128 -0
- package/dist/domain/plugin/materialize/agent.js.map +1 -0
- package/dist/domain/plugin/materialize/default-agent-instructions.d.ts +22 -0
- package/dist/domain/plugin/materialize/default-agent-instructions.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/default-agent-instructions.js +31 -0
- package/dist/domain/plugin/materialize/default-agent-instructions.js.map +1 -0
- package/dist/domain/plugin/materialize/identity.d.ts +28 -0
- package/dist/domain/plugin/materialize/identity.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/identity.js +40 -0
- package/dist/domain/plugin/materialize/identity.js.map +1 -0
- package/dist/domain/plugin/materialize/mcp-servers.d.ts +15 -0
- package/dist/domain/plugin/materialize/mcp-servers.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/mcp-servers.js +131 -0
- package/dist/domain/plugin/materialize/mcp-servers.js.map +1 -0
- package/dist/domain/plugin/materialize/plan.d.ts +24 -0
- package/dist/domain/plugin/materialize/plan.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/plan.js +77 -0
- package/dist/domain/plugin/materialize/plan.js.map +1 -0
- package/dist/domain/plugin/materialize/ports.d.ts +42 -0
- package/dist/domain/plugin/materialize/ports.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/ports.js +2 -0
- package/dist/domain/plugin/materialize/ports.js.map +1 -0
- package/dist/domain/plugin/materialize/skills.d.ts +12 -0
- package/dist/domain/plugin/materialize/skills.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/skills.js +44 -0
- package/dist/domain/plugin/materialize/skills.js.map +1 -0
- package/dist/domain/plugin/materialize/workflows.d.ts +15 -0
- package/dist/domain/plugin/materialize/workflows.d.ts.map +1 -0
- package/dist/domain/plugin/materialize/workflows.js +31 -0
- package/dist/domain/plugin/materialize/workflows.js.map +1 -0
- package/dist/domain/plugin/members.d.ts +42 -0
- package/dist/domain/plugin/members.d.ts.map +1 -0
- package/dist/domain/plugin/members.js +97 -0
- package/dist/domain/plugin/members.js.map +1 -0
- package/dist/domain/plugin/overlay/documents.d.ts +31 -0
- package/dist/domain/plugin/overlay/documents.d.ts.map +1 -0
- package/dist/domain/plugin/overlay/documents.js +38 -0
- package/dist/domain/plugin/overlay/documents.js.map +1 -0
- package/dist/domain/plugin/overlay/parse.d.ts +16 -0
- package/dist/domain/plugin/overlay/parse.d.ts.map +1 -0
- package/dist/domain/plugin/overlay/parse.js +79 -0
- package/dist/domain/plugin/overlay/parse.js.map +1 -0
- package/dist/domain/plugin/overlay/sanitize.d.ts +10 -0
- package/dist/domain/plugin/overlay/sanitize.d.ts.map +1 -0
- package/dist/domain/plugin/overlay/sanitize.js +103 -0
- package/dist/domain/plugin/overlay/sanitize.js.map +1 -0
- package/dist/domain/plugin/push.d.ts +133 -0
- package/dist/domain/plugin/push.d.ts.map +1 -0
- package/dist/domain/plugin/push.js +800 -0
- package/dist/domain/plugin/push.js.map +1 -0
- package/dist/domain/plugin/search-extractor.d.ts +3 -0
- package/dist/domain/plugin/search-extractor.d.ts.map +1 -0
- package/dist/domain/plugin/search-extractor.js +41 -0
- package/dist/domain/plugin/search-extractor.js.map +1 -0
- package/dist/domain/skill/constants.d.ts +6 -11
- package/dist/domain/skill/constants.d.ts.map +1 -1
- package/dist/domain/skill/constants.js +6 -11
- package/dist/domain/skill/constants.js.map +1 -1
- package/dist/domain/skill/controller.d.ts.map +1 -1
- package/dist/domain/skill/controller.js +33 -30
- package/dist/domain/skill/controller.js.map +1 -1
- package/dist/domain/skill/push.d.ts +9 -10
- package/dist/domain/skill/push.d.ts.map +1 -1
- package/dist/domain/skill/push.js +53 -122
- package/dist/domain/skill/push.js.map +1 -1
- package/dist/domain/skill/search-extractor.d.ts.map +1 -1
- package/dist/domain/skill/search-extractor.js.map +1 -1
- package/dist/domain/skill/storage/artifact-storage.d.ts +26 -29
- package/dist/domain/skill/storage/artifact-storage.d.ts.map +1 -1
- package/dist/domain/skill/storage/artifact-storage.js +6 -103
- package/dist/domain/skill/storage/artifact-storage.js.map +1 -1
- package/dist/domain/skill/storage/zip-gate.d.ts +1 -2
- package/dist/domain/skill/storage/zip-gate.d.ts.map +1 -1
- package/dist/domain/skill/storage/zip-gate.js +56 -126
- package/dist/domain/skill/storage/zip-gate.js.map +1 -1
- package/dist/domain/skill/version-resolution.d.ts +5 -5
- package/dist/domain/skill/version-resolution.d.ts.map +1 -1
- package/dist/domain/skill/version-resolution.js +34 -216
- package/dist/domain/skill/version-resolution.js.map +1 -1
- package/dist/domain/workflow/controller.d.ts.map +1 -1
- package/dist/domain/workflow/controller.js +30 -3
- package/dist/domain/workflow/controller.js.map +1 -1
- package/dist/domain/workflow/registry/data/task-kind-registry.json +1 -0
- package/dist/domain/workflowexecution/phases.d.ts +21 -0
- package/dist/domain/workflowexecution/phases.d.ts.map +1 -0
- package/dist/domain/workflowexecution/phases.js +31 -0
- package/dist/domain/workflowexecution/phases.js.map +1 -0
- package/dist/extensions/authorizer.d.ts +10 -5
- package/dist/extensions/authorizer.d.ts.map +1 -1
- package/dist/extensions/drivers.d.ts +4 -1
- package/dist/extensions/drivers.d.ts.map +1 -1
- package/dist/extensions/list-read-scope.d.ts +47 -20
- package/dist/extensions/list-read-scope.d.ts.map +1 -1
- package/dist/extensions/list-read-scope.js +20 -24
- package/dist/extensions/list-read-scope.js.map +1 -1
- package/dist/extensions/organization-directory.d.ts +13 -9
- package/dist/extensions/organization-directory.d.ts.map +1 -1
- package/dist/extensions/organization-directory.js.map +1 -1
- package/dist/extensions/resource-authorization.d.ts +33 -0
- package/dist/extensions/resource-authorization.d.ts.map +1 -1
- package/dist/extensions/schedule-fire-caller.d.ts +45 -18
- package/dist/extensions/schedule-fire-caller.d.ts.map +1 -1
- package/dist/extensions/schedule-fire-caller.js +12 -1
- package/dist/extensions/schedule-fire-caller.js.map +1 -1
- package/dist/identity/oidc-verifier.js +8 -1
- package/dist/identity/oidc-verifier.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline/apiresource-labels.d.ts +23 -3
- package/dist/pipeline/apiresource-labels.d.ts.map +1 -1
- package/dist/pipeline/apiresource-labels.js +20 -0
- package/dist/pipeline/apiresource-labels.js.map +1 -1
- package/dist/pipeline/apiresource-meta.d.ts +15 -0
- package/dist/pipeline/apiresource-meta.d.ts.map +1 -1
- package/dist/pipeline/apiresource-meta.js +34 -0
- package/dist/pipeline/apiresource-meta.js.map +1 -1
- package/dist/pipeline/errors.d.ts.map +1 -1
- package/dist/pipeline/errors.js.map +1 -1
- package/dist/pipeline/steps/authorization-facts.d.ts +12 -0
- package/dist/pipeline/steps/authorization-facts.d.ts.map +1 -0
- package/dist/pipeline/steps/authorization-facts.js +100 -0
- package/dist/pipeline/steps/authorization-facts.js.map +1 -0
- package/dist/pipeline/steps/delete.d.ts.map +1 -1
- package/dist/pipeline/steps/delete.js +1 -1
- package/dist/pipeline/steps/delete.js.map +1 -1
- package/dist/pipeline/steps/duplicate.d.ts.map +1 -1
- package/dist/pipeline/steps/duplicate.js.map +1 -1
- package/dist/pipeline/steps/guard-memory-capture.d.ts.map +1 -1
- package/dist/pipeline/steps/guard-memory-capture.js +5 -3
- package/dist/pipeline/steps/guard-memory-capture.js.map +1 -1
- package/dist/pipeline/steps/guard-plugin-managed.d.ts +12 -0
- package/dist/pipeline/steps/guard-plugin-managed.d.ts.map +1 -0
- package/dist/pipeline/steps/guard-plugin-managed.js +96 -0
- package/dist/pipeline/steps/guard-plugin-managed.js.map +1 -0
- package/dist/pipeline/steps/guard-reserved-labels.d.ts +16 -2
- package/dist/pipeline/steps/guard-reserved-labels.d.ts.map +1 -1
- package/dist/pipeline/steps/guard-reserved-labels.js +11 -7
- package/dist/pipeline/steps/guard-reserved-labels.js.map +1 -1
- package/dist/pipeline/steps/helpers.d.ts.map +1 -1
- package/dist/pipeline/steps/helpers.js.map +1 -1
- package/dist/pipeline/steps/index-search.d.ts.map +1 -1
- package/dist/pipeline/steps/index-search.js.map +1 -1
- package/dist/pipeline/steps/load-existing.d.ts.map +1 -1
- package/dist/pipeline/steps/load-existing.js +1 -1
- package/dist/pipeline/steps/load-existing.js.map +1 -1
- package/dist/pipeline/steps/references.d.ts +16 -0
- package/dist/pipeline/steps/references.d.ts.map +1 -1
- package/dist/pipeline/steps/references.js +18 -0
- package/dist/pipeline/steps/references.js.map +1 -1
- package/dist/pipeline/steps/resolve-artifact-source.d.ts +35 -0
- package/dist/pipeline/steps/resolve-artifact-source.d.ts.map +1 -0
- package/dist/pipeline/steps/resolve-artifact-source.js +27 -0
- package/dist/pipeline/steps/resolve-artifact-source.js.map +1 -0
- package/dist/pipeline/steps/server-stamped-reserved-labels.d.ts.map +1 -1
- package/dist/pipeline/steps/server-stamped-reserved-labels.js.map +1 -1
- package/dist/pipeline/steps/slug.d.ts.map +1 -1
- package/dist/pipeline/steps/slug.js.map +1 -1
- package/dist/pipeline/steps/validate-visibility.d.ts +9 -0
- package/dist/pipeline/steps/validate-visibility.d.ts.map +1 -1
- package/dist/pipeline/steps/validate-visibility.js +6 -1
- package/dist/pipeline/steps/validate-visibility.js.map +1 -1
- package/dist/pipeline/steps/validation.d.ts.map +1 -1
- package/dist/pipeline/steps/validation.js.map +1 -1
- package/dist/pipeline/steps/version-archive.d.ts +63 -0
- package/dist/pipeline/steps/version-archive.d.ts.map +1 -0
- package/dist/pipeline/steps/version-archive.js +129 -0
- package/dist/pipeline/steps/version-archive.js.map +1 -0
- package/dist/pipeline/steps/version-history.d.ts +49 -0
- package/dist/pipeline/steps/version-history.d.ts.map +1 -0
- package/dist/pipeline/steps/version-history.js +229 -0
- package/dist/pipeline/steps/version-history.js.map +1 -0
- package/dist/pipeline/steps/visibility-gates.d.ts +8 -0
- package/dist/pipeline/steps/visibility-gates.d.ts.map +1 -1
- package/dist/pipeline/steps/visibility-gates.js +7 -2
- package/dist/pipeline/steps/visibility-gates.js.map +1 -1
- package/dist/query/search/registry.d.ts.map +1 -1
- package/dist/query/search/registry.js +2 -0
- package/dist/query/search/registry.js.map +1 -1
- package/dist/runnerauth/bound-execution.d.ts +27 -0
- package/dist/runnerauth/bound-execution.d.ts.map +1 -0
- package/dist/runnerauth/bound-execution.js +137 -0
- package/dist/runnerauth/bound-execution.js.map +1 -0
- package/dist/runnerauth/built-in-runner-credential-provider.d.ts +28 -0
- package/dist/runnerauth/built-in-runner-credential-provider.d.ts.map +1 -0
- package/dist/runnerauth/built-in-runner-credential-provider.js +217 -0
- package/dist/runnerauth/built-in-runner-credential-provider.js.map +1 -0
- package/dist/runnerauth/constants.d.ts +63 -0
- package/dist/runnerauth/constants.d.ts.map +1 -0
- package/dist/runnerauth/constants.js +63 -0
- package/dist/runnerauth/constants.js.map +1 -0
- package/dist/runnerauth/dispatch-credential.d.ts +38 -0
- package/dist/runnerauth/dispatch-credential.d.ts.map +1 -0
- package/dist/runnerauth/dispatch-credential.js +17 -0
- package/dist/runnerauth/dispatch-credential.js.map +1 -0
- package/dist/runnerauth/runner-credential-provider.d.ts +49 -11
- package/dist/runnerauth/runner-credential-provider.d.ts.map +1 -1
- package/dist/runnerauth/runner-credential-provider.js +16 -4
- package/dist/runnerauth/runner-credential-provider.js.map +1 -1
- package/dist/runnerauth/runner-subject-verifier.d.ts +14 -0
- package/dist/runnerauth/runner-subject-verifier.d.ts.map +1 -0
- package/dist/runnerauth/runner-subject-verifier.js +115 -0
- package/dist/runnerauth/runner-subject-verifier.js.map +1 -0
- package/dist/runnerauth/runnerauth.d.ts +33 -4
- package/dist/runnerauth/runnerauth.d.ts.map +1 -1
- package/dist/runnerauth/runnerauth.js +131 -35
- package/dist/runnerauth/runnerauth.js.map +1 -1
- package/dist/temporal/agentexecution/engine-client.d.ts +13 -0
- package/dist/temporal/agentexecution/engine-client.d.ts.map +1 -1
- package/dist/temporal/agentexecution/engine-client.js +10 -2
- package/dist/temporal/agentexecution/engine-client.js.map +1 -1
- package/dist/temporal/agentexecution/workflow-input.d.ts +13 -0
- package/dist/temporal/agentexecution/workflow-input.d.ts.map +1 -1
- package/dist/temporal/agentexecution/workflows/invoke-agent-execution.d.ts.map +1 -1
- package/dist/temporal/agentexecution/workflows/invoke-agent-execution.js +35 -31
- package/dist/temporal/agentexecution/workflows/invoke-agent-execution.js.map +1 -1
- package/dist/temporal/schedule/run-starter.d.ts +1 -1
- package/dist/temporal/schedule/run-starter.d.ts.map +1 -1
- package/dist/temporal/schedule/run-starter.js +14 -1
- package/dist/temporal/schedule/run-starter.js.map +1 -1
- package/dist/temporal/workflowexecution/engine-client.d.ts +24 -0
- package/dist/temporal/workflowexecution/engine-client.d.ts.map +1 -1
- package/dist/temporal/workflowexecution/engine-client.js +26 -19
- package/dist/temporal/workflowexecution/engine-client.js.map +1 -1
- package/dist/temporal/workflowexecution/workflow-input.d.ts +14 -0
- package/dist/temporal/workflowexecution/workflow-input.d.ts.map +1 -1
- package/package.json +5 -4
- package/src/archive/__tests__/archive.test.ts +233 -0
- package/src/{domain/skill → archive}/__tests__/prefilter.test.ts +1 -1
- package/src/archive/content-store.ts +132 -0
- package/src/archive/inflate.ts +107 -0
- package/src/archive/limits.ts +42 -0
- package/src/archive/open.ts +131 -0
- package/src/{domain/skill/storage → archive}/prefilter.ts +5 -0
- package/src/archive/write.ts +54 -0
- package/src/authorization/README.md +124 -0
- package/src/authorization/__tests__/authorizer.test.ts +719 -0
- package/src/authorization/__tests__/derived-tuples.test.ts +802 -0
- package/src/authorization/__tests__/drivers.ts +70 -0
- package/src/authorization/__tests__/evaluator.test.ts +359 -0
- package/src/authorization/__tests__/facts.test.ts +155 -0
- package/src/authorization/__tests__/fixtures/fga/agent-channel-owner.fga.yaml +112 -0
- package/src/authorization/__tests__/fixtures/fga/agent-share-owner.fga.yaml +109 -0
- package/src/authorization/__tests__/fixtures/fga/artifact-org-and-owner.fga.yaml +128 -0
- package/src/authorization/__tests__/fixtures/fga/blueprint-private-visibility.fga.yaml +410 -0
- package/src/authorization/__tests__/fixtures/fga/channel-app-owner.fga.yaml +125 -0
- package/src/authorization/__tests__/fixtures/fga/channel-participation.fga.yaml +201 -0
- package/src/authorization/__tests__/fixtures/fga/channel-session-visibility.fga.yaml +187 -0
- package/src/authorization/__tests__/fixtures/fga/cross-org-share-creation.fga.yaml +98 -0
- package/src/authorization/__tests__/fixtures/fga/default-instance-inheritance.fga.yaml +271 -0
- package/src/authorization/__tests__/fixtures/fga/memory-subject-only.fga.yaml +72 -0
- package/src/authorization/__tests__/fixtures/fga/org-admin-owner-inheritance.fga.yaml +328 -0
- package/src/authorization/__tests__/fixtures/fga/org-shared-environment.fga.yaml +144 -0
- package/src/authorization/__tests__/fixtures/fga/platform-visibility.fga.yaml +223 -0
- package/src/authorization/__tests__/fixtures/fga/provider-standing-viewer.fga.yaml +40 -0
- package/src/authorization/__tests__/fixtures/fga/public-visibility-setter.fga.yaml +52 -0
- package/src/authorization/__tests__/fixtures/fga/reserved-label-writer.fga.yaml +41 -0
- package/src/authorization/__tests__/fixtures/fga/schedule-owner.fga.yaml +113 -0
- package/src/authorization/__tests__/fixtures/fga/schedule-session-visibility.fga.yaml +214 -0
- package/src/authorization/__tests__/fixtures/fga/session-personal-resource.fga.yaml +117 -0
- package/src/authorization/__tests__/fixtures/fga/workflow-execution-sharing.fga.yaml +192 -0
- package/src/authorization/__tests__/lane-admission.test.ts +115 -0
- package/src/authorization/__tests__/list-read-scope.measure.test.ts +317 -0
- package/src/authorization/__tests__/list-read-scope.test.ts +796 -0
- package/src/authorization/__tests__/organization-directory.test.ts +236 -0
- package/src/authorization/__tests__/person.test.ts +114 -0
- package/src/authorization/__tests__/posture.test.ts +25 -0
- package/src/authorization/__tests__/schedule-fire-caller.test.ts +134 -0
- package/src/authorization/__tests__/store-tests.test.ts +306 -0
- package/src/authorization/__tests__/support.ts +101 -0
- package/src/authorization/__tests__/tuples.test.ts +62 -0
- package/src/authorization/__tests__/wire-permissions.test.ts +154 -0
- package/src/authorization/authorizer.ts +208 -0
- package/src/authorization/derived-tuples.ts +384 -0
- package/src/authorization/evaluator.ts +283 -0
- package/src/authorization/facts.ts +47 -0
- package/src/authorization/lane-admission.ts +73 -0
- package/src/authorization/list-read-scope.ts +216 -0
- package/src/authorization/model/__tests__/registry.test.ts +317 -0
- package/src/authorization/model/agent.ts +64 -0
- package/src/authorization/model/agent_channel.ts +49 -0
- package/src/authorization/model/agent_execution.ts +33 -0
- package/src/authorization/model/agent_instance.ts +66 -0
- package/src/authorization/model/agent_share.ts +40 -0
- package/src/authorization/model/api_key.ts +28 -0
- package/src/authorization/model/artifact.ts +38 -0
- package/src/authorization/model/channel_app.ts +39 -0
- package/src/authorization/model/default-of.ts +99 -0
- package/src/authorization/model/environment.ts +48 -0
- package/src/authorization/model/execution_context.ts +20 -0
- package/src/authorization/model/iam_policy.ts +42 -0
- package/src/authorization/model/identity_account.ts +26 -0
- package/src/authorization/model/index.ts +108 -0
- package/src/authorization/model/mcp_server.ts +59 -0
- package/src/authorization/model/memory.ts +27 -0
- package/src/authorization/model/oauth_app.ts +42 -0
- package/src/authorization/model/organization.ts +55 -0
- package/src/authorization/model/plugin.ts +66 -0
- package/src/authorization/model/project.ts +47 -0
- package/src/authorization/model/rewrite.ts +213 -0
- package/src/authorization/model/schedule.ts +40 -0
- package/src/authorization/model/session.ts +50 -0
- package/src/authorization/model/skill.ts +60 -0
- package/src/authorization/model/workflow.ts +60 -0
- package/src/authorization/model/workflow_execution.ts +44 -0
- package/src/authorization/model/workflow_instance.ts +122 -0
- package/src/authorization/organization-directory.ts +114 -0
- package/src/authorization/person.ts +68 -0
- package/src/authorization/posture.ts +49 -0
- package/src/authorization/schedule-fire-caller.ts +87 -0
- package/src/authorization/store-test-kit.ts +454 -0
- package/src/authorization/tuples.ts +190 -0
- package/src/boot/compose.ts +246 -52
- package/src/boot/inprocess.ts +115 -31
- package/src/domain/agent/controller.ts +11 -0
- package/src/domain/executioncontext/__tests__/executioncontext.test.ts +104 -0
- package/src/domain/executioncontext/__tests__/resolve-values-capability.test.ts +33 -4
- package/src/domain/executioncontext/resolve-values-for-caller.ts +79 -22
- package/src/domain/iampolicy/__tests__/membership.test.ts +357 -3
- package/src/domain/iampolicy/constants.ts +12 -0
- package/src/domain/iampolicy/membership.ts +221 -66
- package/src/domain/identityaccount/__tests__/account-for-stamp.test.ts +111 -0
- package/src/domain/identityaccount/actor.ts +84 -0
- package/src/domain/identityaccount/resolve.ts +31 -0
- package/src/domain/mcpserver/__tests__/connect.test.ts +17 -2
- package/src/domain/mcpserver/connect-execution-id.ts +34 -0
- package/src/domain/mcpserver/connect.ts +38 -3
- package/src/domain/mcpserver/controller.ts +11 -0
- package/src/domain/mcpserver/engine.ts +9 -3
- package/src/domain/mcpserver/start-connect.ts +1 -1
- package/src/domain/platform/controller.ts +24 -11
- package/src/domain/plugin/__tests__/materialize.test.ts +303 -0
- package/src/domain/plugin/__tests__/overlay-parse.test.ts +85 -0
- package/src/domain/plugin/__tests__/plugin.test.ts +796 -0
- package/src/domain/plugin/__tests__/sanitize.test.ts +174 -0
- package/src/domain/plugin/archive.ts +89 -0
- package/src/domain/plugin/constants.ts +53 -0
- package/src/domain/plugin/controller.ts +913 -0
- package/src/domain/plugin/materialize/agent.ts +186 -0
- package/src/domain/plugin/materialize/default-agent-instructions.ts +59 -0
- package/src/domain/plugin/materialize/identity.ts +67 -0
- package/src/domain/plugin/materialize/mcp-servers.ts +175 -0
- package/src/domain/plugin/materialize/plan.ts +124 -0
- package/src/domain/plugin/materialize/ports.ts +53 -0
- package/src/domain/plugin/materialize/skills.ts +68 -0
- package/src/domain/plugin/materialize/workflows.ts +51 -0
- package/src/domain/plugin/members.ts +180 -0
- package/src/domain/plugin/overlay/documents.ts +78 -0
- package/src/domain/plugin/overlay/parse.ts +115 -0
- package/src/domain/plugin/overlay/sanitize.ts +151 -0
- package/src/domain/plugin/push.ts +1062 -0
- package/src/domain/plugin/search-extractor.ts +60 -0
- package/src/domain/skill/constants.ts +11 -14
- package/src/domain/skill/controller.ts +44 -36
- package/src/domain/skill/push.ts +61 -156
- package/src/domain/skill/search-extractor.ts +3 -1
- package/src/domain/skill/storage/artifact-storage.ts +23 -124
- package/src/domain/skill/storage/zip-gate.ts +58 -154
- package/src/domain/skill/version-resolution.ts +67 -269
- package/src/domain/workflow/controller.ts +38 -4
- package/src/domain/workflow/registry/data/task-kind-registry.json +1 -0
- package/src/domain/workflowexecution/__tests__/phases.test.ts +58 -0
- package/src/domain/workflowexecution/phases.ts +33 -0
- package/src/extensions/__tests__/built-in-authorization-composed.test.ts +835 -0
- package/src/extensions/__tests__/composed-support.ts +32 -1
- package/src/extensions/__tests__/extension-composition.test.ts +42 -1
- package/src/extensions/__tests__/list-read-scope.test.ts +137 -33
- package/src/extensions/__tests__/role-reconciliation-composed.test.ts +209 -0
- package/src/extensions/__tests__/tier-truthfulness.test.ts +6 -14
- package/src/extensions/authorizer.ts +10 -5
- package/src/extensions/drivers.ts +4 -1
- package/src/extensions/list-read-scope.ts +67 -45
- package/src/extensions/organization-directory.ts +13 -9
- package/src/extensions/resource-authorization.ts +34 -0
- package/src/extensions/schedule-fire-caller.ts +49 -18
- package/src/identity/__tests__/oidc-verifier.test.ts +22 -0
- package/src/identity/oidc-verifier.ts +8 -1
- package/src/index.ts +51 -1
- package/src/pipeline/__tests__/kind-by-id-prefix.test.ts +75 -0
- package/src/pipeline/__tests__/router-transport.test.ts +1 -3
- package/src/pipeline/apiresource-labels.ts +31 -3
- package/src/pipeline/apiresource-meta.ts +41 -0
- package/src/pipeline/errors.ts +5 -5
- package/src/pipeline/steps/__tests__/authorize-annotation-completeness.test.ts +1 -20
- package/src/pipeline/steps/__tests__/guard-memory-capture.test.ts +58 -44
- package/src/pipeline/steps/__tests__/guard-plugin-managed.test.ts +151 -0
- package/src/pipeline/steps/__tests__/guard-reserved-labels.test.ts +83 -8
- package/src/pipeline/steps/authorization-facts.ts +131 -0
- package/src/pipeline/steps/delete.ts +11 -3
- package/src/pipeline/steps/duplicate.ts +8 -2
- package/src/pipeline/steps/guard-memory-capture.ts +5 -3
- package/src/pipeline/steps/guard-plugin-managed.ts +133 -0
- package/src/pipeline/steps/guard-reserved-labels.ts +29 -8
- package/src/pipeline/steps/helpers.ts +4 -1
- package/src/pipeline/steps/index-search.ts +28 -15
- package/src/pipeline/steps/load-existing.ts +12 -3
- package/src/pipeline/steps/references.ts +36 -2
- package/src/pipeline/steps/resolve-artifact-source.ts +66 -0
- package/src/pipeline/steps/server-stamped-reserved-labels.ts +2 -1
- package/src/pipeline/steps/slug.ts +7 -2
- package/src/pipeline/steps/validate-visibility.ts +9 -2
- package/src/pipeline/steps/validation.ts +3 -1
- package/src/pipeline/steps/version-archive.ts +225 -0
- package/src/pipeline/steps/version-history.ts +362 -0
- package/src/pipeline/steps/visibility-gates.ts +12 -9
- package/src/query/README.md +1 -1
- package/src/query/search/__tests__/criteria.test.ts +6 -7
- package/src/query/search/__tests__/query-store.test.ts +9 -2
- package/src/query/search/__tests__/registry.test.ts +6 -4
- package/src/query/search/registry.ts +6 -1
- package/src/runnerauth/__tests__/bound-execution.test.ts +334 -0
- package/src/runnerauth/__tests__/built-in-runner-credential-provider.test.ts +516 -0
- package/src/runnerauth/__tests__/dispatch-credential.test.ts +94 -0
- package/src/runnerauth/__tests__/runner-credential-provider.test.ts +27 -0
- package/src/runnerauth/__tests__/runner-subject-composed.test.ts +497 -0
- package/src/runnerauth/__tests__/runner-subject-verifier.test.ts +541 -0
- package/src/runnerauth/bound-execution.ts +270 -0
- package/src/runnerauth/built-in-runner-credential-provider.ts +300 -0
- package/src/runnerauth/constants.ts +74 -0
- package/src/runnerauth/dispatch-credential.ts +63 -0
- package/src/runnerauth/runner-credential-provider.ts +60 -11
- package/src/runnerauth/runner-subject-verifier.ts +152 -0
- package/src/runnerauth/runnerauth.ts +148 -38
- package/src/temporal/agentexecution/__tests__/engine-client.test.ts +107 -38
- package/src/temporal/agentexecution/__tests__/invoke-workflow.test.ts +105 -2
- package/src/temporal/agentexecution/engine-client.ts +27 -2
- package/src/temporal/agentexecution/workflow-input.ts +13 -0
- package/src/temporal/agentexecution/workflows/invoke-agent-execution.ts +90 -44
- package/src/temporal/schedule/__tests__/run-starter.test.ts +86 -24
- package/src/temporal/schedule/run-starter.ts +31 -8
- package/src/temporal/workflowexecution/__tests__/engine-client.test.ts +139 -33
- package/src/temporal/workflowexecution/engine-client.ts +48 -21
- package/src/temporal/workflowexecution/workflow-input.ts +14 -0
- package/dist/domain/skill/storage/prefilter.d.ts.map +0 -1
- package/dist/domain/skill/storage/prefilter.js.map +0 -1
- /package/dist/{domain/skill/storage → archive}/prefilter.js +0 -0
package/src/boot/inprocess.ts
CHANGED
|
@@ -70,6 +70,9 @@ import type {
|
|
|
70
70
|
import type { AgentExecutionApprovalForwarder } from "../domain/workflowexecution/submit-approval.js";
|
|
71
71
|
import type { AgentExecutionFileDecisionForwarder } from "../domain/workflowexecution/submit-file-decision.js";
|
|
72
72
|
import type { ParentWorkflowLoader } from "../domain/workflowinstance/steps.js";
|
|
73
|
+
import type { PluginMaterializer } from "../domain/plugin/materialize/ports.js";
|
|
74
|
+
import { UpdateVisibilityInputSchema } from "@stigmer/protos/ai/stigmer/commons/apiresource/io_pb";
|
|
75
|
+
import type { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
73
76
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
74
77
|
import type { OrphanDeleter } from "../domain/project/reconcile.js";
|
|
75
78
|
import type { ExecutionStatusWriter } from "../temporal/agentexecution/activities.js";
|
|
@@ -153,6 +156,17 @@ export interface InProcessClients {
|
|
|
153
156
|
* minted — exactly like the schedule clock and the reconciler above.
|
|
154
157
|
*/
|
|
155
158
|
readonly executionStatusWriter: ExecutionStatusWriter;
|
|
159
|
+
/**
|
|
160
|
+
* The plugin controller's materialisation edge: every member a plugin
|
|
161
|
+
* installs, upgrades, re-levels or removes goes through the owning
|
|
162
|
+
* domain's FULL chain (skill push, the three applies, updateVisibility,
|
|
163
|
+
* delete) AS THE INSTALLING CALLER (the asCaller call options), so a
|
|
164
|
+
* materialised skill is attributed to the user who installed it and
|
|
165
|
+
* carries the plugin's reserved labels by the in-process origin the
|
|
166
|
+
* guards pass structurally. The delete routing is the reconciler's
|
|
167
|
+
* switch, shared.
|
|
168
|
+
*/
|
|
169
|
+
readonly pluginMaterializer: PluginMaterializer;
|
|
156
170
|
}
|
|
157
171
|
|
|
158
172
|
/**
|
|
@@ -318,8 +332,14 @@ export function createInProcessClients(
|
|
|
318
332
|
executionContextCreator: {
|
|
319
333
|
create: (ec) => executionContextCommand.create(ec),
|
|
320
334
|
},
|
|
335
|
+
// The connect lane's ephemeral EC is created AS THE CONNECTING PERSON
|
|
336
|
+
// (ruling R5's asCaller lane): its creator stamp is what the
|
|
337
|
+
// runner-subject verifier resolves the connect token's bearer to under
|
|
338
|
+
// the built-in posture (runnerauth/bound-execution.ts). The delete
|
|
339
|
+
// stays the server's own act — the row is the lane's, whoever asked.
|
|
321
340
|
connectExecutionContextClient: {
|
|
322
|
-
create: (ec) =>
|
|
341
|
+
create: (ec, caller) =>
|
|
342
|
+
executionContextCommand.create(ec, asCaller(caller)),
|
|
323
343
|
delete: (input) => executionContextCommand.delete(input),
|
|
324
344
|
},
|
|
325
345
|
// The workflowexecution edges: the default-instance self-heal creates
|
|
@@ -378,38 +398,102 @@ export function createInProcessClients(
|
|
|
378
398
|
// delete is attempted, in both editions. Log-only surface: reconcile
|
|
379
399
|
// failures never reach the wire.
|
|
380
400
|
projectOrphanDeleter: {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
await mcpServerCommand.delete(
|
|
397
|
-
create(ApiResourceDeleteInputSchema, { resourceId }),
|
|
398
|
-
);
|
|
399
|
-
return;
|
|
400
|
-
case ApiResourceKind.skill:
|
|
401
|
-
await skillCommand.delete(
|
|
402
|
-
create(SkillIdSchema, { value: resourceId }),
|
|
403
|
-
);
|
|
404
|
-
return;
|
|
405
|
-
default:
|
|
406
|
-
throw new Error(
|
|
407
|
-
`unsupported resource kind for delete: ${ApiResourceKind[kind] ?? String(kind)}`,
|
|
408
|
-
);
|
|
409
|
-
}
|
|
410
|
-
},
|
|
401
|
+
delete: (kind, resourceId) => deleteByKind(kind, resourceId),
|
|
402
|
+
},
|
|
403
|
+
pluginMaterializer: {
|
|
404
|
+
pushSkill: (request, caller) =>
|
|
405
|
+
skillCommand.push(request, asCaller(caller)),
|
|
406
|
+
applyMcpServer: (server, caller) =>
|
|
407
|
+
mcpServerCommand.apply(server, asCaller(caller)),
|
|
408
|
+
applyAgent: (agent, caller) =>
|
|
409
|
+
agentCommand.apply(agent, asCaller(caller)),
|
|
410
|
+
applyWorkflow: (workflow, caller) =>
|
|
411
|
+
workflowCommand.apply(workflow, asCaller(caller)),
|
|
412
|
+
updateVisibility: (kind, resourceId, visibility, caller) =>
|
|
413
|
+
updateVisibilityByKind(kind, resourceId, visibility, asCaller(caller)),
|
|
414
|
+
deleteByKind: (kind, resourceId, caller) =>
|
|
415
|
+
deleteByKind(kind, resourceId, asCaller(caller)),
|
|
411
416
|
},
|
|
412
417
|
};
|
|
413
418
|
|
|
419
|
+
/**
|
|
420
|
+
* Delete routing for the four reconciled kinds — Go's
|
|
421
|
+
* ResourceDeleterAdapter.Delete switch (execution_engine.go:75-92),
|
|
422
|
+
* shared by the project reconciler (internal class, no caller) and the
|
|
423
|
+
* plugin controller (as the installing caller). Every orphan or member
|
|
424
|
+
* delete runs the owning domain's FULL pipeline. The unsupported-kind
|
|
425
|
+
* default is defense-in-depth: both callers refuse unsupported kinds
|
|
426
|
+
* before any delete is attempted.
|
|
427
|
+
*/
|
|
428
|
+
async function deleteByKind(
|
|
429
|
+
kind: ApiResourceKind,
|
|
430
|
+
resourceId: string,
|
|
431
|
+
options?: CallOptions,
|
|
432
|
+
): Promise<void> {
|
|
433
|
+
switch (kind) {
|
|
434
|
+
case ApiResourceKind.agent:
|
|
435
|
+
await agentCommand.delete(
|
|
436
|
+
create(AgentIdSchema, { value: resourceId }),
|
|
437
|
+
options,
|
|
438
|
+
);
|
|
439
|
+
return;
|
|
440
|
+
case ApiResourceKind.workflow:
|
|
441
|
+
await workflowCommand.delete(
|
|
442
|
+
create(WorkflowIdSchema, { value: resourceId }),
|
|
443
|
+
options,
|
|
444
|
+
);
|
|
445
|
+
return;
|
|
446
|
+
case ApiResourceKind.mcp_server:
|
|
447
|
+
// McpServer's delete input is the commons ApiResourceDeleteInput
|
|
448
|
+
// (not an id wrapper) — Go's client builds the same message.
|
|
449
|
+
await mcpServerCommand.delete(
|
|
450
|
+
create(ApiResourceDeleteInputSchema, { resourceId }),
|
|
451
|
+
options,
|
|
452
|
+
);
|
|
453
|
+
return;
|
|
454
|
+
case ApiResourceKind.skill:
|
|
455
|
+
await skillCommand.delete(
|
|
456
|
+
create(SkillIdSchema, { value: resourceId }),
|
|
457
|
+
options,
|
|
458
|
+
);
|
|
459
|
+
return;
|
|
460
|
+
default:
|
|
461
|
+
throw new Error(
|
|
462
|
+
`unsupported resource kind for delete: ${ApiResourceKind[kind] ?? String(kind)}`,
|
|
463
|
+
);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/** The one door for a level change on each member kind (metadata.proto). */
|
|
468
|
+
async function updateVisibilityByKind(
|
|
469
|
+
kind: ApiResourceKind,
|
|
470
|
+
resourceId: string,
|
|
471
|
+
visibility: ApiResourceVisibility,
|
|
472
|
+
options: CallOptions,
|
|
473
|
+
): Promise<void> {
|
|
474
|
+
const input = create(UpdateVisibilityInputSchema, {
|
|
475
|
+
resourceId,
|
|
476
|
+
visibility,
|
|
477
|
+
});
|
|
478
|
+
switch (kind) {
|
|
479
|
+
case ApiResourceKind.agent:
|
|
480
|
+
await agentCommand.updateVisibility(input, options);
|
|
481
|
+
return;
|
|
482
|
+
case ApiResourceKind.workflow:
|
|
483
|
+
await workflowCommand.updateVisibility(input, options);
|
|
484
|
+
return;
|
|
485
|
+
case ApiResourceKind.mcp_server:
|
|
486
|
+
await mcpServerCommand.updateVisibility(input, options);
|
|
487
|
+
return;
|
|
488
|
+
case ApiResourceKind.skill:
|
|
489
|
+
await skillCommand.updateVisibility(input, options);
|
|
490
|
+
return;
|
|
491
|
+
default:
|
|
492
|
+
throw new Error(
|
|
493
|
+
`unsupported resource kind for updateVisibility: ${ApiResourceKind[kind] ?? String(kind)}`,
|
|
494
|
+
);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
414
498
|
return { clients, transport };
|
|
415
499
|
}
|
|
@@ -64,6 +64,7 @@ import {
|
|
|
64
64
|
EXISTING_RESOURCE_KEY,
|
|
65
65
|
newLoadExistingStep,
|
|
66
66
|
} from "../../pipeline/steps/load-existing.js";
|
|
67
|
+
import { newGuardPluginManagedStep } from "../../pipeline/steps/guard-plugin-managed.js";
|
|
67
68
|
import {
|
|
68
69
|
SHOULD_CREATE_KEY,
|
|
69
70
|
newLoadForApplyStep,
|
|
@@ -216,6 +217,10 @@ async function update(
|
|
|
216
217
|
.addStep(newValidateProtoStep())
|
|
217
218
|
.addStep(newResolveSlugStep())
|
|
218
219
|
.addStep(newLoadExistingStep(deps.store))
|
|
220
|
+
// A resource a plugin materialised is the plugin's to redefine; a client
|
|
221
|
+
// write is refused naming the plugin (GuardPluginManaged, keyed on the
|
|
222
|
+
// STORED labels and the plugin row's existence).
|
|
223
|
+
.addStep(newGuardPluginManagedStep(deps.store))
|
|
219
224
|
.addStep(newBuildUpdateStateStep())
|
|
220
225
|
.addStep(newGuardReservedLabelsStep(deps.authorizer))
|
|
221
226
|
.addStep(newNormalizeReferencesStep())
|
|
@@ -294,6 +299,7 @@ async function deleteAgent(
|
|
|
294
299
|
.addStep(newValidateProtoStep())
|
|
295
300
|
.addStep(newExtractResourceIdStep())
|
|
296
301
|
.addStep(newLoadExistingForDeleteStep(deps.store, AgentSchema))
|
|
302
|
+
.addStep(newGuardPluginManagedStep(deps.store))
|
|
297
303
|
.addStep(newCascadeDeleteInstancesStep(deps.store, deps.logger))
|
|
298
304
|
.addStep(newCascadeDeleteSharesStep(deps.store, deps.logger))
|
|
299
305
|
.addStep(newDeleteResourceStep(deps.store))
|
|
@@ -349,6 +355,11 @@ async function updateVisibility(
|
|
|
349
355
|
)
|
|
350
356
|
.addStep(newValidateProtoStep())
|
|
351
357
|
.addStep(newLoadAgentForVisibilityUpdateStep(deps.store))
|
|
358
|
+
.addStep(
|
|
359
|
+
newGuardPluginManagedStep(deps.store, {
|
|
360
|
+
existingKey: UPDATE_VISIBILITY_AGENT_KEY,
|
|
361
|
+
}),
|
|
362
|
+
)
|
|
352
363
|
.addStep(newRecordVisibilityBeforeUpdateStep(UPDATE_VISIBILITY_AGENT_KEY))
|
|
353
364
|
.addStep(newValidateVisibilityUpdateStep())
|
|
354
365
|
.addStep(
|
|
@@ -36,6 +36,8 @@ import type { Client, Transport } from "@connectrpc/connect";
|
|
|
36
36
|
import { createGrpcTransport } from "@connectrpc/connect-node";
|
|
37
37
|
import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
|
|
38
38
|
|
|
39
|
+
import { AgentExecutionSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
|
|
40
|
+
import { ExecutionPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
39
41
|
import { ExecutionContextSchema } from "@stigmer/protos/ai/stigmer/agentic/executioncontext/v1/api_pb";
|
|
40
42
|
import type { ExecutionContext } from "@stigmer/protos/ai/stigmer/agentic/executioncontext/v1/api_pb";
|
|
41
43
|
import { ExecutionContextCommandController } from "@stigmer/protos/ai/stigmer/agentic/executioncontext/v1/command_pb";
|
|
@@ -53,6 +55,7 @@ import {
|
|
|
53
55
|
} from "../../../encryption/encryption.js";
|
|
54
56
|
import { SqliteStore } from "../../../store/sqlite/store.js";
|
|
55
57
|
import { REDACTED_MARKER } from "../../environment/constants.js";
|
|
58
|
+
import { newConnectExecutionId } from "../../mcpserver/connect-execution-id.js";
|
|
56
59
|
import {
|
|
57
60
|
DELETE_EXECUTION_CONTEXT_ACTIVITY_NAME,
|
|
58
61
|
deleteExecutionContextForExecution,
|
|
@@ -419,6 +422,107 @@ describe("executioncontext domain (encryption + runner auth enabled)", () => {
|
|
|
419
422
|
});
|
|
420
423
|
});
|
|
421
424
|
|
|
425
|
+
describe("the run credential on the decrypt lane — validity is the row's", () => {
|
|
426
|
+
// A no-`exp` token: the row is the only thing that can end it, so the
|
|
427
|
+
// lane reads the bound execution's liveness for exactly this shape and
|
|
428
|
+
// keeps the clocked arms above untouched (their ECs name no row).
|
|
429
|
+
const RUN_ID = "aex_run_credential";
|
|
430
|
+
|
|
431
|
+
async function seedRun(
|
|
432
|
+
phase: ExecutionPhase,
|
|
433
|
+
completedAt = "",
|
|
434
|
+
): Promise<void> {
|
|
435
|
+
await ts.server.store.saveResource(
|
|
436
|
+
ApiResourceKind.agent_execution,
|
|
437
|
+
RUN_ID,
|
|
438
|
+
AgentExecutionSchema,
|
|
439
|
+
create(AgentExecutionSchema, {
|
|
440
|
+
metadata: { id: RUN_ID, name: RUN_ID, org: "test-org" },
|
|
441
|
+
status: { phase, completedAt },
|
|
442
|
+
}),
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
beforeAll(async () => {
|
|
447
|
+
await ts.command.create(ecInput({ executionId: RUN_ID }));
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
async function readRun(): Promise<ExecutionContext> {
|
|
451
|
+
const credential = ts.server.runnerAuthService.mintRunCredential(RUN_ID);
|
|
452
|
+
return await ts.query.getByExecutionId(
|
|
453
|
+
{ executionId: RUN_ID },
|
|
454
|
+
{ headers: bearerHeaders(credential) },
|
|
455
|
+
);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
it("decrypts while the run is live", async () => {
|
|
459
|
+
await seedRun(ExecutionPhase.EXECUTION_IN_PROGRESS);
|
|
460
|
+
expect((await readRun()).spec!.data["API_TOKEN"]!.value).toBe(
|
|
461
|
+
"super-secret-token",
|
|
462
|
+
);
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
it("still decrypts just after the run ended — the grace covers the writes that trail the terminal stamp", async () => {
|
|
466
|
+
await seedRun(
|
|
467
|
+
ExecutionPhase.EXECUTION_COMPLETED,
|
|
468
|
+
new Date().toISOString(),
|
|
469
|
+
);
|
|
470
|
+
expect((await readRun()).spec!.data["API_TOKEN"]!.value).toBe(
|
|
471
|
+
"super-secret-token",
|
|
472
|
+
);
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
it("redacts once the run is over past the grace — a token in Temporal history cannot decrypt a finished run's secrets", async () => {
|
|
476
|
+
await seedRun(
|
|
477
|
+
ExecutionPhase.EXECUTION_COMPLETED,
|
|
478
|
+
new Date(Date.now() - 60 * 60 * 1000).toISOString(),
|
|
479
|
+
);
|
|
480
|
+
expect((await readRun()).spec!.data["API_TOKEN"]!.value).toBe(
|
|
481
|
+
REDACTED_MARKER,
|
|
482
|
+
);
|
|
483
|
+
});
|
|
484
|
+
|
|
485
|
+
it("redacts for a terminal run that does not say when it ended — no grace without a timestamp", async () => {
|
|
486
|
+
await seedRun(ExecutionPhase.EXECUTION_FAILED);
|
|
487
|
+
expect((await readRun()).spec!.data["API_TOKEN"]!.value).toBe(
|
|
488
|
+
REDACTED_MARKER,
|
|
489
|
+
);
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
it("redacts when the credential names a run this server does not have", async () => {
|
|
493
|
+
const orphan = "aex_no_such_run";
|
|
494
|
+
await ts.command.create(ecInput({ executionId: orphan }));
|
|
495
|
+
const credential = ts.server.runnerAuthService.mintRunCredential(orphan);
|
|
496
|
+
const ec = await ts.query.getByExecutionId(
|
|
497
|
+
{ executionId: orphan },
|
|
498
|
+
{ headers: bearerHeaders(credential) },
|
|
499
|
+
);
|
|
500
|
+
expect(ec.spec!.data["API_TOKEN"]!.value).toBe(REDACTED_MARKER);
|
|
501
|
+
});
|
|
502
|
+
|
|
503
|
+
it("redacts for a clockless token bound to a connect's EC — a connect is not a run, and no mint produces that shape (the verifier refuses it through the same predicate)", async () => {
|
|
504
|
+
const connectId = newConnectExecutionId("mcps_conn");
|
|
505
|
+
await ts.command.create(ecInput({ executionId: connectId }));
|
|
506
|
+
const clockless =
|
|
507
|
+
ts.server.runnerAuthService.mintRunCredential(connectId);
|
|
508
|
+
const redacted = await ts.query.getByExecutionId(
|
|
509
|
+
{ executionId: connectId },
|
|
510
|
+
{ headers: bearerHeaders(clockless) },
|
|
511
|
+
);
|
|
512
|
+
expect(redacted.spec!.data["API_TOKEN"]!.value).toBe(REDACTED_MARKER);
|
|
513
|
+
// The connect lane's own CLOCKED token keeps decrypting the same EC:
|
|
514
|
+
// the clocked arms above are untouched by the run-credential rule.
|
|
515
|
+
const clocked = ts.server.runnerAuthService.mint(connectId, 300).token;
|
|
516
|
+
const decrypted = await ts.query.getByExecutionId(
|
|
517
|
+
{ executionId: connectId },
|
|
518
|
+
{ headers: bearerHeaders(clocked) },
|
|
519
|
+
);
|
|
520
|
+
expect(decrypted.spec!.data["API_TOKEN"]!.value).toBe(
|
|
521
|
+
"super-secret-token",
|
|
522
|
+
);
|
|
523
|
+
});
|
|
524
|
+
});
|
|
525
|
+
|
|
422
526
|
describe("decrypt error doctrine", () => {
|
|
423
527
|
it("tampered stored ciphertext drops the ONE key while the read succeeds; intact keys decrypt", async () => {
|
|
424
528
|
const created = await ts.command.create(
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
EncryptionScope,
|
|
20
20
|
SecretService,
|
|
21
21
|
} from "../../../encryption/encryption.js";
|
|
22
|
+
import type { BoundExecutionStore } from "../../../runnerauth/bound-execution.js";
|
|
22
23
|
import { InvalidTokenError } from "../../../runnerauth/runnerauth.js";
|
|
23
24
|
import type { RunnerCredentialProvider } from "../../../runnerauth/runner-credential-provider.js";
|
|
24
25
|
import { resolveValuesForCaller } from "../resolve-values-for-caller.js";
|
|
@@ -31,6 +32,14 @@ const silentLogger = createLogger({
|
|
|
31
32
|
|
|
32
33
|
const secretService = SecretService.create(Buffer.alloc(32, 7));
|
|
33
34
|
|
|
35
|
+
/** The capability arm never reads the store — a store that proves it. */
|
|
36
|
+
const store: BoundExecutionStore = {
|
|
37
|
+
getResource: () =>
|
|
38
|
+
Promise.reject(new Error("the capability arm must not read the store")),
|
|
39
|
+
findByField: () =>
|
|
40
|
+
Promise.reject(new Error("the capability arm must not read the store")),
|
|
41
|
+
};
|
|
42
|
+
|
|
34
43
|
/** A minimal HandlerContext: the resolve path reads only the auth header. */
|
|
35
44
|
function ctxWithBearer(token: string): HandlerContext {
|
|
36
45
|
const headers = new Headers();
|
|
@@ -84,7 +93,12 @@ describe("resolveValuesForCaller (capability delegation — C4)", () => {
|
|
|
84
93
|
const provider = providerWith(async () => true);
|
|
85
94
|
const ec = await executionContext();
|
|
86
95
|
await resolveValuesForCaller(
|
|
87
|
-
{
|
|
96
|
+
{
|
|
97
|
+
logger: silentLogger,
|
|
98
|
+
secretService,
|
|
99
|
+
runnerAuthService: provider,
|
|
100
|
+
store,
|
|
101
|
+
},
|
|
88
102
|
ctxWithBearer("sandbox-token"),
|
|
89
103
|
ec,
|
|
90
104
|
);
|
|
@@ -96,7 +110,12 @@ describe("resolveValuesForCaller (capability delegation — C4)", () => {
|
|
|
96
110
|
const provider = providerWith(async () => false);
|
|
97
111
|
const ec = await executionContext();
|
|
98
112
|
await resolveValuesForCaller(
|
|
99
|
-
{
|
|
113
|
+
{
|
|
114
|
+
logger: silentLogger,
|
|
115
|
+
secretService,
|
|
116
|
+
runnerAuthService: provider,
|
|
117
|
+
store,
|
|
118
|
+
},
|
|
100
119
|
ctxWithBearer("someone-elses-token"),
|
|
101
120
|
ec,
|
|
102
121
|
);
|
|
@@ -107,7 +126,12 @@ describe("resolveValuesForCaller (capability delegation — C4)", () => {
|
|
|
107
126
|
const provider = providerWith(async () => true);
|
|
108
127
|
const ec = await executionContext();
|
|
109
128
|
await resolveValuesForCaller(
|
|
110
|
-
{
|
|
129
|
+
{
|
|
130
|
+
logger: silentLogger,
|
|
131
|
+
secretService,
|
|
132
|
+
runnerAuthService: provider,
|
|
133
|
+
store,
|
|
134
|
+
},
|
|
111
135
|
ctxWithBearer(""),
|
|
112
136
|
ec,
|
|
113
137
|
);
|
|
@@ -121,7 +145,12 @@ describe("resolveValuesForCaller (capability delegation — C4)", () => {
|
|
|
121
145
|
});
|
|
122
146
|
const ec = await executionContext();
|
|
123
147
|
await resolveValuesForCaller(
|
|
124
|
-
{
|
|
148
|
+
{
|
|
149
|
+
logger: silentLogger,
|
|
150
|
+
secretService,
|
|
151
|
+
runnerAuthService: provider,
|
|
152
|
+
store,
|
|
153
|
+
},
|
|
125
154
|
ctxWithBearer("sandbox-token"),
|
|
126
155
|
ec,
|
|
127
156
|
);
|
|
@@ -14,21 +14,37 @@
|
|
|
14
14
|
* distinguishes itself with an execution-scoped token minted by
|
|
15
15
|
* getRunnerScopedToken and presented as a Bearer authorization header
|
|
16
16
|
* (the same header shape a cloud runner uses for its sandbox credential).
|
|
17
|
-
* Decrypt requires the FULL binding: a valid
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
17
|
+
* Decrypt requires the FULL binding: a valid token whose execution_id
|
|
18
|
+
* claim equals this EC's spec.execution_id, and — for a RUN credential,
|
|
19
|
+
* the no-`exp` token the dispatch path hands the runner — a bound
|
|
20
|
+
* execution that is still live (runnerauth/bound-execution.ts: not
|
|
21
|
+
* terminal, or ended within the grace). Everything else — no header, a
|
|
22
|
+
* malformed or expired token, a token minted for a different execution,
|
|
23
|
+
* a run credential whose run is over — falls closed to the same
|
|
24
|
+
* redaction get/getByReference apply, as a SUCCESSFUL response, not an
|
|
25
|
+
* error.
|
|
22
26
|
*
|
|
23
|
-
*
|
|
24
|
-
* chassis
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
27
|
+
* The decrypt decision lives HERE, in the domain, whatever the identity
|
|
28
|
+
* chassis makes of the token. Under trusted-local no verifier claims it
|
|
29
|
+
* and this is the one RPC that reads the raw header (the consumer the
|
|
30
|
+
* runnerauth module header reserves, "the executioncontext resolve
|
|
31
|
+
* step"). Under the built-in authorization posture the runner-subject
|
|
32
|
+
* verifier ALSO admits the same token as the run's human at position 1
|
|
33
|
+
* (runnerauth.ts header, 2026-09-16) — that decides WHO is calling and
|
|
34
|
+
* whether they may read the row; whether the row's secrets are decrypted
|
|
35
|
+
* for them is still this lane's binding check, so a person who can view
|
|
36
|
+
* an execution's context never receives its plaintext by holding a
|
|
37
|
+
* credential for a different one. The redaction-as-success contract is
|
|
38
|
+
* pinned by the conformance suites and holds on every arm.
|
|
39
|
+
*
|
|
40
|
+
* Why liveness is read only for a no-`exp` token: a clocked token's
|
|
41
|
+
* validity was decided by `verify` (its clock) and its binding, and the
|
|
42
|
+
* ExecutionContext it opens need not name an execution row at all — the
|
|
43
|
+
* connect lane's token opens an EC for an MCP discovery, and the rosters
|
|
44
|
+
* pin a clocked token decrypting an EC whose execution id names no row.
|
|
45
|
+
* A run credential has no clock; the row is the only thing that can end
|
|
46
|
+
* it, and a plaintext token in Temporal history must not decrypt a
|
|
47
|
+
* finished run's secrets for good.
|
|
32
48
|
*
|
|
33
49
|
* # Decrypt error doctrine (the oss#405 runtime-resolution doctrine,
|
|
34
50
|
* # arms per the two-armed taxonomy in encryption/errors.ts)
|
|
@@ -56,8 +72,16 @@ import { EncryptionUnavailableError } from "../../encryption/encryption.js";
|
|
|
56
72
|
import type { SecretService } from "../../encryption/encryption.js";
|
|
57
73
|
import { internalError } from "../../pipeline/errors.js";
|
|
58
74
|
import { parseBearerToken } from "../../pipeline/interceptors/auth.js";
|
|
75
|
+
import {
|
|
76
|
+
bindsARun,
|
|
77
|
+
loadBoundExecution,
|
|
78
|
+
} from "../../runnerauth/bound-execution.js";
|
|
79
|
+
import type { BoundExecutionStore } from "../../runnerauth/bound-execution.js";
|
|
59
80
|
import type { RunnerCredentialProvider } from "../../runnerauth/runner-credential-provider.js";
|
|
60
|
-
import {
|
|
81
|
+
import {
|
|
82
|
+
isClockedToken,
|
|
83
|
+
TOKEN_TYPE_EXECUTION_SCOPED,
|
|
84
|
+
} from "../../runnerauth/runnerauth.js";
|
|
61
85
|
import { encryptionKeyMissingMessage } from "./constants.js";
|
|
62
86
|
import { redactExecutionContextSecrets } from "./redact.js";
|
|
63
87
|
|
|
@@ -65,6 +89,8 @@ export interface ResolveValuesDeps {
|
|
|
65
89
|
readonly logger: Logger;
|
|
66
90
|
readonly secretService: SecretService;
|
|
67
91
|
readonly runnerAuthService: RunnerCredentialProvider;
|
|
92
|
+
/** Where the bound execution lives — read for a run credential's liveness only. */
|
|
93
|
+
readonly store: BoundExecutionStore;
|
|
68
94
|
}
|
|
69
95
|
|
|
70
96
|
/**
|
|
@@ -123,15 +149,23 @@ async function runnerMayDecrypt(
|
|
|
123
149
|
}
|
|
124
150
|
}
|
|
125
151
|
|
|
126
|
-
const
|
|
127
|
-
|
|
152
|
+
const token = bearerToken(ctx);
|
|
153
|
+
const executionId = verifyRunnerToken(deps, token, ec);
|
|
154
|
+
if (executionId === undefined) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
if (!isClockedToken(token) && !(await runIsLive(deps, executionId))) {
|
|
128
158
|
deps.logger.debug(
|
|
129
|
-
"
|
|
159
|
+
"Run credential presented for a run that is over - redacting execution context secrets",
|
|
130
160
|
{ executionId },
|
|
131
161
|
);
|
|
132
|
-
return
|
|
162
|
+
return false;
|
|
133
163
|
}
|
|
134
|
-
|
|
164
|
+
deps.logger.debug(
|
|
165
|
+
"Scope-bound runner token presented - decrypting execution context secrets",
|
|
166
|
+
{ executionId },
|
|
167
|
+
);
|
|
168
|
+
return true;
|
|
135
169
|
}
|
|
136
170
|
|
|
137
171
|
/**
|
|
@@ -148,10 +182,9 @@ async function runnerMayDecrypt(
|
|
|
148
182
|
*/
|
|
149
183
|
function verifyRunnerToken(
|
|
150
184
|
deps: ResolveValuesDeps,
|
|
151
|
-
|
|
185
|
+
token: string,
|
|
152
186
|
ec: ExecutionContext,
|
|
153
187
|
): string | undefined {
|
|
154
|
-
const token = bearerToken(ctx);
|
|
155
188
|
if (token === "") {
|
|
156
189
|
return undefined;
|
|
157
190
|
}
|
|
@@ -183,6 +216,30 @@ function verifyRunnerToken(
|
|
|
183
216
|
return tokenExecutionId;
|
|
184
217
|
}
|
|
185
218
|
|
|
219
|
+
/**
|
|
220
|
+
* A run credential's liveness: the bound execution exists, IS a run
|
|
221
|
+
* (`bindsARun` — a clockless token bound to a connect is a shape no mint
|
|
222
|
+
* produces, refused here and by the verifier through the one predicate)
|
|
223
|
+
* and is live (runnerauth/bound-execution.ts). A missing row is "not
|
|
224
|
+
* live" — the credential opens nothing. A store fault is an
|
|
225
|
+
* infrastructure fault, sanitized here as every direct handler does (the
|
|
226
|
+
* store-fault doctrine): an outage must not read as a redaction decision,
|
|
227
|
+
* and the same store just served the row this read is for.
|
|
228
|
+
*/
|
|
229
|
+
async function runIsLive(
|
|
230
|
+
deps: ResolveValuesDeps,
|
|
231
|
+
executionId: string,
|
|
232
|
+
): Promise<boolean> {
|
|
233
|
+
try {
|
|
234
|
+
const execution = await loadBoundExecution(deps.store, executionId);
|
|
235
|
+
return (
|
|
236
|
+
execution !== undefined && bindsARun(execution.kind) && execution.live
|
|
237
|
+
);
|
|
238
|
+
} catch (error) {
|
|
239
|
+
throw internalError(error, "failed to load the run credential's execution");
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
186
243
|
/**
|
|
187
244
|
* The Bearer credential from the request's authorization header; empty
|
|
188
245
|
* when absent or differently shaped. The parsing shape (Go's exact
|