@stigmer/server 3.15.3-dev.20260914100347 → 3.15.3-dev.20260916211208
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/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 +157 -32
- 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 +62 -20
- 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/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 +26 -0
- package/dist/domain/identityaccount/actor.d.ts.map +1 -0
- package/dist/domain/identityaccount/actor.js +17 -0
- package/dist/domain/identityaccount/actor.js.map +1 -0
- 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/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 +101 -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/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 +75 -11
- package/dist/extensions/list-read-scope.d.ts.map +1 -1
- package/dist/extensions/list-read-scope.js +40 -7
- 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/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 +21 -0
- package/dist/pipeline/apiresource-meta.d.ts.map +1 -1
- package/dist/pipeline/apiresource-meta.js +28 -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/authorization-tuples.d.ts.map +1 -1
- package/dist/pipeline/steps/authorization-tuples.js +7 -26
- package/dist/pipeline/steps/authorization-tuples.js.map +1 -1
- 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-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/shapes.d.ts +18 -0
- package/dist/pipeline/steps/shapes.d.ts.map +1 -1
- package/dist/pipeline/steps/shapes.js +29 -0
- package/dist/pipeline/steps/shapes.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/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/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__/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/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 +91 -0
- package/src/authorization/store-test-kit.ts +454 -0
- package/src/authorization/tuples.ts +190 -0
- package/src/boot/compose.ts +175 -38
- package/src/boot/inprocess.ts +108 -30
- package/src/domain/agent/controller.ts +11 -0
- 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/actor.ts +44 -0
- package/src/domain/mcpserver/controller.ts +11 -0
- 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 +681 -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 +149 -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/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 +35 -0
- package/src/extensions/__tests__/list-read-scope.test.ts +245 -3
- 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 +116 -16
- 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/index.ts +51 -1
- package/src/pipeline/__tests__/inherited-authorization-parent.test.ts +51 -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 +37 -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 +3 -9
- 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/authorization-tuples.ts +7 -28
- package/src/pipeline/steps/delete.ts +11 -3
- package/src/pipeline/steps/duplicate.ts +8 -2
- 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/shapes.ts +31 -0
- 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/temporal/schedule/__tests__/run-starter.test.ts +86 -24
- package/src/temporal/schedule/run-starter.ts +31 -8
- 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
|
@@ -3,10 +3,15 @@
|
|
|
3
3
|
* arm-for-arm. Validates an uploaded artifact (size caps, ZIP-bomb
|
|
4
4
|
* budgets, entry-count and filename rules, root-SKILL.md presence with the
|
|
5
5
|
* #452 hint), extracts SKILL.md IN MEMORY ONLY (never to disk), and parses
|
|
6
|
-
* its frontmatter.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* its frontmatter.
|
|
7
|
+
*
|
|
8
|
+
* The kind-agnostic half (open, hash, prefilter, structural walk, capped
|
|
9
|
+
* inflate with CRC) is src/archive's, shared with the plugin gate since
|
|
10
|
+
* plugins are pushed as archives too; this module composes it and owns
|
|
11
|
+
* what is a SKILL's: the root-SKILL.md rule, the 1 MB document cap, the
|
|
12
|
+
* frontmatter parse, and every sentence below. The observable error order
|
|
13
|
+
* is the Go gate's exactly: the structural walk tracks SKILL.md placement
|
|
14
|
+
* in the same pass it validates, and rules on presence last.
|
|
10
15
|
*
|
|
11
16
|
* Error strings are wire-visible contract (the push pipeline wraps them
|
|
12
17
|
* into the InvalidArgument "failed to extract SKILL.md: ..." arm), pinned
|
|
@@ -21,113 +26,57 @@
|
|
|
21
26
|
* Proven by __tests__/zip-gate.test.ts and the skill conformance suite's
|
|
22
27
|
* push-validation negatives (CONFORMANCE_TARGET=local).
|
|
23
28
|
*/
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import { applyEntryPrefilter } from "./prefilter.js";
|
|
29
|
+
import { InflateError, inflateEntry } from "../../../archive/inflate.js";
|
|
30
|
+
import { PLATFORM_ARCHIVE_LIMITS } from "../../../archive/limits.js";
|
|
31
|
+
import { openArchive, validateArchiveStructure, } from "../../../archive/open.js";
|
|
32
|
+
import { MAX_SKILL_MD_SIZE, MAX_ZIP_SIZE, NESTED_SKILL_MD_HINT, } from "../constants.js";
|
|
29
33
|
import { parseFrontmatter } from "./frontmatter.js";
|
|
30
|
-
|
|
31
|
-
const METHOD_STORED = 0;
|
|
32
|
-
const METHOD_DEFLATED = 8;
|
|
34
|
+
export { calculateHash } from "../../../archive/open.js";
|
|
33
35
|
/**
|
|
34
36
|
* Validates the artifact and extracts SKILL.md + frontmatter (Go
|
|
35
37
|
* ExtractSkillMd). Throws plain Errors with byte-pinned messages; the
|
|
36
38
|
* push pipeline owns the gRPC code.
|
|
37
39
|
*/
|
|
38
40
|
export function extractSkillMd(zipData) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
let entries;
|
|
44
|
-
try {
|
|
45
|
-
entries = parseZipStructure(zipData);
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Go's zip.NewReader surfaces stdlib ErrFormat here; its text is what
|
|
49
|
-
// clients see via the %w chain, so it is pinned verbatim.
|
|
50
|
-
throw new Error("invalid ZIP file: zip: not a valid zip file");
|
|
51
|
-
}
|
|
52
|
-
// safearchive MaximumSecurityMode rewrites the entry list before any
|
|
53
|
-
// validation sees it (DD-001) — sanitized names, shadowed/special/8.3
|
|
54
|
-
// entries dropped.
|
|
55
|
-
const filtered = applyEntryPrefilter(entries);
|
|
56
|
-
validateZipContent(filtered);
|
|
57
|
-
const content = extractSkillMdContent(filtered);
|
|
58
|
-
let frontmatter;
|
|
59
|
-
try {
|
|
60
|
-
frontmatter = parseFrontmatter(content);
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
throw new Error(`invalid SKILL.md frontmatter: ${error instanceof Error ? error.message : String(error)}`);
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
content,
|
|
67
|
-
hash,
|
|
68
|
-
name: frontmatter.name,
|
|
69
|
-
description: frontmatter.description,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Security validation over the (pre-filtered) entry list — Go
|
|
74
|
-
* validateZipContent, checks in its exact order: empty archive, file-count
|
|
75
|
-
* cap, then per entry SKILL.md placement tracking, filename
|
|
76
|
-
* control-character rejection, the running declared-uncompressed budget
|
|
77
|
-
* (fail-fast), and the per-file compression-ratio cap; finally the
|
|
78
|
-
* root-SKILL.md presence rule with the #452 nested-only hint.
|
|
79
|
-
*/
|
|
80
|
-
function validateZipContent(entries) {
|
|
81
|
-
if (entries.length === 0) {
|
|
82
|
-
throw new Error("ZIP file is empty");
|
|
83
|
-
}
|
|
84
|
-
if (entries.length > MAX_FILES) {
|
|
85
|
-
throw new Error(`too many files in ZIP: ${entries.length} (max: ${MAX_FILES})`);
|
|
86
|
-
}
|
|
87
|
-
let totalUncompressedSize = 0;
|
|
41
|
+
const { hash, entries } = openArchive(zipData, MAX_ZIP_SIZE);
|
|
42
|
+
// SKILL.md must be at the archive root. Nested occurrences are tracked
|
|
43
|
+
// only to make the rejection actionable (the #452 hint), in the same
|
|
44
|
+
// pass the structural checks run so their precedence stays Go's.
|
|
88
45
|
let hasSkillMd = false;
|
|
89
46
|
let hasNestedSkillMd = false;
|
|
90
|
-
|
|
91
|
-
// SKILL.md must be at the archive root. Nested occurrences are tracked
|
|
92
|
-
// only to make the rejection actionable (below).
|
|
47
|
+
validateArchiveStructure(entries, PLATFORM_ARCHIVE_LIMITS, (name) => {
|
|
93
48
|
if (name === "SKILL.md") {
|
|
94
49
|
hasSkillMd = true;
|
|
95
50
|
}
|
|
96
51
|
else if (name.endsWith("/SKILL.md")) {
|
|
97
52
|
hasNestedSkillMd = true;
|
|
98
53
|
}
|
|
99
|
-
|
|
100
|
-
// points, not UTF-16 units — Go ranges over runes).
|
|
101
|
-
for (const ch of name) {
|
|
102
|
-
const codePoint = ch.codePointAt(0);
|
|
103
|
-
if (codePoint < 32 || codePoint === 127) {
|
|
104
|
-
throw new Error(`invalid character in filename: ${name}`);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// Track the declared uncompressed total (fail fast once exceeded).
|
|
108
|
-
totalUncompressedSize += entry.uncompressedSize;
|
|
109
|
-
if (totalUncompressedSize > MAX_UNCOMPRESSED_SIZE) {
|
|
110
|
-
throw new Error(`total uncompressed size too large: ${totalUncompressedSize} bytes (max: ${MAX_UNCOMPRESSED_SIZE})`);
|
|
111
|
-
}
|
|
112
|
-
// Per-file compression ratio (ZIP-bomb guard); integer division as Go.
|
|
113
|
-
if (entry.compressedSize > 0) {
|
|
114
|
-
const ratio = Math.floor(entry.uncompressedSize / entry.compressedSize);
|
|
115
|
-
if (ratio > MAX_COMPRESSION_RATIO) {
|
|
116
|
-
throw new Error(`suspicious compression ratio in ${name}: ${ratio}:1 (max: ${MAX_COMPRESSION_RATIO}:1)`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
54
|
+
});
|
|
120
55
|
if (!hasSkillMd) {
|
|
121
56
|
if (hasNestedSkillMd) {
|
|
122
57
|
throw new Error(NESTED_SKILL_MD_HINT);
|
|
123
58
|
}
|
|
124
59
|
throw new Error("SKILL.md not found in ZIP archive");
|
|
125
60
|
}
|
|
61
|
+
const content = extractSkillMdContent(entries);
|
|
62
|
+
let frontmatter;
|
|
63
|
+
try {
|
|
64
|
+
frontmatter = parseFrontmatter(content);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
throw new Error(`invalid SKILL.md frontmatter: ${error instanceof Error ? error.message : String(error)}`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
content,
|
|
71
|
+
hash,
|
|
72
|
+
name: frontmatter.name,
|
|
73
|
+
description: frontmatter.description,
|
|
74
|
+
};
|
|
126
75
|
}
|
|
127
76
|
/**
|
|
128
77
|
* Extracts SKILL.md's content in memory (Go extractSkillMdContent): the
|
|
129
|
-
* first root-named entry, decompressed under the 1MB cap, CRC-verified
|
|
130
|
-
*
|
|
78
|
+
* first root-named entry, decompressed under the 1MB cap, CRC-verified,
|
|
79
|
+
* UTF-8 decoded. The typed inflate outcome maps to Go's sentences here.
|
|
131
80
|
*/
|
|
132
81
|
function extractSkillMdContent(entries) {
|
|
133
82
|
for (const { name, entry } of entries) {
|
|
@@ -135,36 +84,27 @@ function extractSkillMdContent(entries) {
|
|
|
135
84
|
continue;
|
|
136
85
|
}
|
|
137
86
|
let contentBytes;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
contentBytes = entry.compressedData;
|
|
141
|
-
break;
|
|
142
|
-
case METHOD_DEFLATED:
|
|
143
|
-
try {
|
|
144
|
-
// The cap bounds the ACTUAL inflated output — declared sizes are
|
|
145
|
-
// client claims (the ratio check upstream only sees declarations).
|
|
146
|
-
contentBytes = new Uint8Array(inflateRawSync(entry.compressedData, {
|
|
147
|
-
maxOutputLength: MAX_SKILL_MD_SIZE + 1,
|
|
148
|
-
}));
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
if (isOutputLengthError(error)) {
|
|
152
|
-
throw new Error(`SKILL.md too large (max: ${MAX_SKILL_MD_SIZE} bytes)`);
|
|
153
|
-
}
|
|
154
|
-
throw new Error(`failed to read SKILL.md: ${error instanceof Error ? error.message : String(error)}`);
|
|
155
|
-
}
|
|
156
|
-
break;
|
|
157
|
-
default:
|
|
158
|
-
// Go: File.Open returns ErrAlgorithm for methods without a
|
|
159
|
-
// registered decompressor; the text is pinned via the %w chain.
|
|
160
|
-
throw new Error("failed to open SKILL.md: zip: unsupported compression algorithm");
|
|
87
|
+
try {
|
|
88
|
+
contentBytes = inflateEntry(entry, MAX_SKILL_MD_SIZE);
|
|
161
89
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (!(error instanceof InflateError)) {
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
switch (error.kind) {
|
|
95
|
+
case "too-large":
|
|
96
|
+
throw new Error(`SKILL.md too large (max: ${MAX_SKILL_MD_SIZE} bytes)`);
|
|
97
|
+
case "read-failed":
|
|
98
|
+
throw new Error(`failed to read SKILL.md: ${error.detail}`);
|
|
99
|
+
case "unsupported-method":
|
|
100
|
+
throw new Error(`failed to open SKILL.md: ${error.detail}`);
|
|
101
|
+
case "checksum":
|
|
102
|
+
throw new Error(`failed to read SKILL.md: ${error.detail}`);
|
|
103
|
+
default: {
|
|
104
|
+
const exhaustive = error.kind;
|
|
105
|
+
throw new Error(`unknown inflate failure ${String(exhaustive)}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
168
108
|
}
|
|
169
109
|
if (contentBytes.length === 0) {
|
|
170
110
|
throw new Error("SKILL.md is empty");
|
|
@@ -173,14 +113,4 @@ function extractSkillMdContent(entries) {
|
|
|
173
113
|
}
|
|
174
114
|
throw new Error("SKILL.md not found in ZIP archive");
|
|
175
115
|
}
|
|
176
|
-
/** node:zlib's maxOutputLength violation (the output-cap arm). */
|
|
177
|
-
function isOutputLengthError(error) {
|
|
178
|
-
return (error instanceof Error &&
|
|
179
|
-
(("code" in error && error.code === "ERR_BUFFER_TOO_LARGE") ||
|
|
180
|
-
error.message.includes("maxOutputLength")));
|
|
181
|
-
}
|
|
182
|
-
/** SHA-256 hex of the artifact bytes (Go CalculateHash). */
|
|
183
|
-
export function calculateHash(data) {
|
|
184
|
-
return createHash("sha256").update(data).digest("hex");
|
|
185
|
-
}
|
|
186
116
|
//# sourceMappingURL=zip-gate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip-gate.js","sourceRoot":"","sources":["../../../../src/domain/skill/storage/zip-gate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"zip-gate.js","sourceRoot":"","sources":["../../../../src/domain/skill/storage/zip-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { SkillQueryController } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/query_pb";
|
|
2
2
|
import type { PipelineStep } from "../../pipeline/pipeline.js";
|
|
3
3
|
import type { Store } from "../../store/interface.js";
|
|
4
|
+
import { LIST_VERSIONS_HEAD_HASH_KEY, LIST_VERSIONS_RESPONSE_KEY } from "../../pipeline/steps/version-history.js";
|
|
5
|
+
/** The context keys the controller's mid-chain authorize step reads. */
|
|
6
|
+
export declare const LIST_VERSIONS_SKILL_ID_KEY = "listVersionsResourceId";
|
|
7
|
+
export { LIST_VERSIONS_HEAD_HASH_KEY, LIST_VERSIONS_RESPONSE_KEY };
|
|
4
8
|
type GetByReferenceDesc = typeof SkillQueryController.method.getByReference.input;
|
|
9
|
+
type ListVersionsDesc = typeof SkillQueryController.method.listVersions.input;
|
|
5
10
|
/** Go LoadSkillByReferenceStep — the reference + version ladder. */
|
|
6
11
|
export declare function newLoadSkillByReferenceStep(store: Store): PipelineStep<GetByReferenceDesc>;
|
|
7
|
-
export declare const LIST_VERSIONS_SKILL_ID_KEY = "listVersionsSkillId";
|
|
8
|
-
export declare const LIST_VERSIONS_HEAD_HASH_KEY = "listVersionsHeadHash";
|
|
9
|
-
export declare const LIST_VERSIONS_RESPONSE_KEY = "listVersionsResponse";
|
|
10
|
-
type ListVersionsDesc = typeof SkillQueryController.method.listVersions.input;
|
|
11
12
|
/** Go ResolveSkillBySlugStep — resolves the skill and captures the head hash. */
|
|
12
13
|
export declare function newResolveSkillBySlugStep(store: Store): PipelineStep<ListVersionsDesc>;
|
|
13
14
|
/** Go LoadAndMapVersionsStep — audit records → entries → one page. */
|
|
14
15
|
export declare function newLoadAndMapVersionsStep(store: Store): PipelineStep<ListVersionsDesc>;
|
|
15
|
-
export {};
|
|
16
16
|
//# sourceMappingURL=version-resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-resolution.d.ts","sourceRoot":"","sources":["../../../src/domain/skill/version-resolution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"version-resolution.d.ts","sourceRoot":"","sources":["../../../src/domain/skill/version-resolution.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAW5F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACL,2BAA2B,EAE3B,0BAA0B,EAI3B,MAAM,yCAAyC,CAAC;AAGjD,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,2BAAgC,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,CAAC;AAEnE,KAAK,kBAAkB,GACrB,OAAO,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1D,KAAK,gBAAgB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAwB9E,oEAAoE;AACpE,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,KAAK,GACX,YAAY,CAAC,kBAAkB,CAAC,CAMlC;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,GACX,YAAY,CAAC,gBAAgB,CAAC,CAMhC;AAED,sEAAsE;AACtE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,GACX,YAAY,CAAC,gBAAgB,CAAC,CAMhC"}
|
|
@@ -1,238 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Skill version resolution —
|
|
3
|
-
*
|
|
4
|
-
* version ladder and the paginated version history
|
|
5
|
-
*
|
|
6
|
-
* The ladder
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* audit-by-tag lookup.
|
|
13
|
-
*
|
|
14
|
-
* listVersions marks is_current by HEAD-HASH match, not recency: under
|
|
15
|
-
* repoint semantics (#475) re-pushing archived content re-activates its
|
|
16
|
-
* existing row, so the current version need not be the newest-archived
|
|
17
|
-
* one. Tags come from the audit COLUMN (the single-holder source of
|
|
18
|
-
* truth), never from the snapshot — snapshots archive tagless and a legacy
|
|
19
|
-
* snapshot's embedded tag may have moved since it was written.
|
|
2
|
+
* Skill version resolution — the skill binding of the shared
|
|
3
|
+
* content-addressed version steps (pipeline/steps/version-history.ts): the
|
|
4
|
+
* getByReference version ladder and the paginated version history, ported
|
|
5
|
+
* from pkg/domain/skill/controller/load_skill_by_reference.go and
|
|
6
|
+
* list_versions.go. The ladder, the is_current rule and the pagination
|
|
7
|
+
* live in the shared module since plugins needed the identical shape; what
|
|
8
|
+
* is a skill's is here: the schema, the noun in sentences, the head hash in
|
|
9
|
+
* status.version_hash, the live tag in spec.tag, and the SkillVersionEntry
|
|
10
|
+
* mapping (pushed_at/pushed_by prefer the spec-audit updated stamps and fall
|
|
11
|
+
* back to created, because first pushes only carry created).
|
|
20
12
|
*
|
|
21
13
|
* Proven by __tests__/skill.test.ts's ladder and pagination blocks and
|
|
22
14
|
* the conformance suite's getByReference/listVersions blocks.
|
|
23
15
|
*/
|
|
24
|
-
import { create
|
|
16
|
+
import { create } from "@bufbuild/protobuf";
|
|
25
17
|
import { SkillSchema } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/api_pb";
|
|
26
18
|
import { ListSkillVersionsResponseSchema, SkillVersionEntrySchema, } from "@stigmer/protos/ai/stigmer/agentic/skill/v1/io_pb";
|
|
27
19
|
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
28
|
-
import {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
20
|
+
import { LIST_VERSIONS_HEAD_HASH_KEY, LIST_VERSIONS_RESOURCE_ID_KEY, LIST_VERSIONS_RESPONSE_KEY, newLoadAndMapVersionsStep as newSharedLoadAndMapVersionsStep, newLoadByReferenceWithVersionStep, newResolveBySlugForVersionsStep, } from "../../pipeline/steps/version-history.js";
|
|
21
|
+
/** The context keys the controller's mid-chain authorize step reads. */
|
|
22
|
+
export const LIST_VERSIONS_SKILL_ID_KEY = LIST_VERSIONS_RESOURCE_ID_KEY;
|
|
23
|
+
export { LIST_VERSIONS_HEAD_HASH_KEY, LIST_VERSIONS_RESPONSE_KEY };
|
|
24
|
+
/** Where a skill keeps its hash and its tag, and how its history renders. */
|
|
25
|
+
const skillVersionBinding = {
|
|
26
|
+
kind: ApiResourceKind.skill,
|
|
27
|
+
schema: SkillSchema,
|
|
28
|
+
noun: "skill",
|
|
29
|
+
headHashOf: (skill) => skill.status?.versionHash ?? "",
|
|
30
|
+
liveTagOf: (skill) => skill.spec?.tag ?? "",
|
|
31
|
+
input: (req) => req,
|
|
32
|
+
mapEntry: mapSkillToVersionEntry,
|
|
33
|
+
response: (versions, nextPageToken, totalCount) => create(ListSkillVersionsResponseSchema, {
|
|
34
|
+
versions,
|
|
35
|
+
nextPageToken,
|
|
36
|
+
totalCount,
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
37
39
|
/** Go LoadSkillByReferenceStep — the reference + version ladder. */
|
|
38
40
|
export function newLoadSkillByReferenceStep(store) {
|
|
39
|
-
return
|
|
40
|
-
name: "LoadSkillByReference",
|
|
41
|
-
async execute(ctx) {
|
|
42
|
-
const ref = ctx.input;
|
|
43
|
-
if (ref.slug === "") {
|
|
44
|
-
throw invalidArgumentError("slug is required in reference");
|
|
45
|
-
}
|
|
46
|
-
// Skill is org-scoped: its slug is unique only within an org, so an
|
|
47
|
-
// empty-org reference is under-specified.
|
|
48
|
-
requireOrgForReference(ctx.apiResourceKind, ref.org);
|
|
49
|
-
if (ref.kind !== ApiResourceKind.api_resource_kind_unknown &&
|
|
50
|
-
ref.kind !== ApiResourceKind.skill) {
|
|
51
|
-
throw invalidArgumentError(`kind mismatch: expected ${ApiResourceKind[ApiResourceKind.skill]}, got ${ApiResourceKind[ref.kind]}`);
|
|
52
|
-
}
|
|
53
|
-
let mainSkill;
|
|
54
|
-
try {
|
|
55
|
-
mainSkill = await findResourceBySlug(store, ctx.apiResourceKind, SkillSchema, ref.slug, ref.org);
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
throw internalError(error, "failed to list skills");
|
|
59
|
-
}
|
|
60
|
-
if (mainSkill === undefined) {
|
|
61
|
-
throw notFoundError("skill", ref.slug);
|
|
62
|
-
}
|
|
63
|
-
const version = ref.version.trim();
|
|
64
|
-
if (version === "" || version === "latest") {
|
|
65
|
-
ctx.set(TARGET_RESOURCE_KEY, mainSkill);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (skillMatchesVersion(mainSkill, version)) {
|
|
69
|
-
ctx.set(TARGET_RESOURCE_KEY, mainSkill);
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const auditSkill = await findAuditSkillByVersion(store, ctx.apiResourceKind, mainSkill.metadata.id, version);
|
|
73
|
-
if (auditSkill === undefined) {
|
|
74
|
-
throw notFoundError("skill version", `${ref.slug}:${version}`);
|
|
75
|
-
}
|
|
76
|
-
ctx.set(TARGET_RESOURCE_KEY, auditSkill);
|
|
77
|
-
},
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Whether the live head IS the requested version — by hash, or by its
|
|
82
|
-
* live spec.tag (honest under the single-holder tag model, see module doc).
|
|
83
|
-
*/
|
|
84
|
-
function skillMatchesVersion(skill, version) {
|
|
85
|
-
if (skill.status === undefined) {
|
|
86
|
-
return false;
|
|
87
|
-
}
|
|
88
|
-
if (isHash(version)) {
|
|
89
|
-
return skill.status.versionHash === version;
|
|
90
|
-
}
|
|
91
|
-
return skill.spec !== undefined && skill.spec.tag === version;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Indexed audit lookup by hash or tag (Go findAuditSkillByVersion) —
|
|
95
|
-
* not-found is a normal outcome (undefined), storage failures are
|
|
96
|
-
* Internal.
|
|
97
|
-
*/
|
|
98
|
-
async function findAuditSkillByVersion(store, kind, skillId, version) {
|
|
99
|
-
if (isHash(version)) {
|
|
100
|
-
try {
|
|
101
|
-
return await store.getAuditByHash(kind, skillId, version, SkillSchema);
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
if (error instanceof AuditNotFoundError) {
|
|
105
|
-
return undefined;
|
|
106
|
-
}
|
|
107
|
-
throw internalError(error, "failed to query audit by hash");
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
try {
|
|
111
|
-
return await store.getAuditByTag(kind, skillId, version, SkillSchema);
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
if (error instanceof AuditNotFoundError) {
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
throw internalError(error, "failed to query audit by tag");
|
|
118
|
-
}
|
|
41
|
+
return newLoadByReferenceWithVersionStep(store, skillVersionBinding, "LoadSkillByReference");
|
|
119
42
|
}
|
|
120
|
-
// ─── listVersions ────────────────────────────────────────────────────────
|
|
121
|
-
const DEFAULT_PAGE_SIZE = 50;
|
|
122
|
-
const MAX_PAGE_SIZE = 100;
|
|
123
|
-
export const LIST_VERSIONS_SKILL_ID_KEY = "listVersionsSkillId";
|
|
124
|
-
export const LIST_VERSIONS_HEAD_HASH_KEY = "listVersionsHeadHash";
|
|
125
|
-
export const LIST_VERSIONS_RESPONSE_KEY = "listVersionsResponse";
|
|
126
43
|
/** Go ResolveSkillBySlugStep — resolves the skill and captures the head hash. */
|
|
127
44
|
export function newResolveSkillBySlugStep(store) {
|
|
128
|
-
return
|
|
129
|
-
name: "ResolveSkillBySlug",
|
|
130
|
-
async execute(ctx) {
|
|
131
|
-
const req = ctx.input;
|
|
132
|
-
let skill;
|
|
133
|
-
try {
|
|
134
|
-
skill = await findResourceBySlug(store, ctx.apiResourceKind, SkillSchema, req.slug, req.org);
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
throw internalError(error, "failed to search for skill");
|
|
138
|
-
}
|
|
139
|
-
if (skill === undefined) {
|
|
140
|
-
throw notFoundError("skill", `${req.slug} (org: ${req.org})`);
|
|
141
|
-
}
|
|
142
|
-
ctx.set(LIST_VERSIONS_SKILL_ID_KEY, skill.metadata.id);
|
|
143
|
-
// The live head's hash decides is_current downstream. Under repoint
|
|
144
|
-
// semantics the current version need not be the newest-archived row,
|
|
145
|
-
// so recency cannot stand in for currency.
|
|
146
|
-
ctx.set(LIST_VERSIONS_HEAD_HASH_KEY, skill.status?.versionHash ?? "");
|
|
147
|
-
},
|
|
148
|
-
};
|
|
45
|
+
return newResolveBySlugForVersionsStep(store, skillVersionBinding, "ResolveSkillBySlug");
|
|
149
46
|
}
|
|
150
47
|
/** Go LoadAndMapVersionsStep — audit records → entries → one page. */
|
|
151
48
|
export function newLoadAndMapVersionsStep(store) {
|
|
152
|
-
return
|
|
153
|
-
name: "LoadAndMapVersions",
|
|
154
|
-
async execute(ctx) {
|
|
155
|
-
const req = ctx.input;
|
|
156
|
-
const skillId = ctx.get(LIST_VERSIONS_SKILL_ID_KEY);
|
|
157
|
-
let records;
|
|
158
|
-
try {
|
|
159
|
-
records = await store.listAuditRecords(ctx.apiResourceKind, skillId);
|
|
160
|
-
}
|
|
161
|
-
catch (error) {
|
|
162
|
-
throw internalError(error, "failed to load version history");
|
|
163
|
-
}
|
|
164
|
-
// is_current = the entry whose hash matches the live head, not the
|
|
165
|
-
// newest row. Legacy data may hold duplicate-hash rows (predating
|
|
166
|
-
// repoint semantics); marking only the first match keeps
|
|
167
|
-
// exactly-one-current true for them too.
|
|
168
|
-
const headHash = ctx.get(LIST_VERSIONS_HEAD_HASH_KEY);
|
|
169
|
-
let currentMarked = false;
|
|
170
|
-
const entries = [];
|
|
171
|
-
for (const record of records) {
|
|
172
|
-
let skill;
|
|
173
|
-
try {
|
|
174
|
-
skill = fromBinary(SkillSchema, record.data);
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
const isCurrent = !currentMarked &&
|
|
180
|
-
headHash !== "" &&
|
|
181
|
-
(skill.status?.versionHash ?? "") === headHash;
|
|
182
|
-
currentMarked = currentMarked || isCurrent;
|
|
183
|
-
// Tag comes from the audit column (source of truth), not the snapshot.
|
|
184
|
-
entries.push(mapSkillToVersionEntry(skill, isCurrent, record.tag));
|
|
185
|
-
}
|
|
186
|
-
let pageSize = req.pageSize;
|
|
187
|
-
if (pageSize <= 0) {
|
|
188
|
-
pageSize = DEFAULT_PAGE_SIZE;
|
|
189
|
-
}
|
|
190
|
-
if (pageSize > MAX_PAGE_SIZE) {
|
|
191
|
-
pageSize = MAX_PAGE_SIZE;
|
|
192
|
-
}
|
|
193
|
-
let startIndex = 0;
|
|
194
|
-
if (req.pageToken !== "") {
|
|
195
|
-
startIndex = decodePageToken(req.pageToken);
|
|
196
|
-
}
|
|
197
|
-
let pageEntries = [];
|
|
198
|
-
let nextPageToken = "";
|
|
199
|
-
if (startIndex < entries.length) {
|
|
200
|
-
const end = Math.min(startIndex + pageSize, entries.length);
|
|
201
|
-
pageEntries = entries.slice(startIndex, end);
|
|
202
|
-
if (end < entries.length) {
|
|
203
|
-
nextPageToken = Buffer.from(String(end)).toString("base64");
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
ctx.set(LIST_VERSIONS_RESPONSE_KEY, create(ListSkillVersionsResponseSchema, {
|
|
207
|
-
versions: pageEntries,
|
|
208
|
-
nextPageToken,
|
|
209
|
-
totalCount: entries.length,
|
|
210
|
-
}));
|
|
211
|
-
},
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Decodes the base64 cursor with Go's strictness: base64.StdEncoding
|
|
216
|
-
* rejects malformed input and strconv.Atoi rejects trailing garbage —
|
|
217
|
-
* Buffer.from is lenient on both, so validity is checked explicitly.
|
|
218
|
-
*/
|
|
219
|
-
function decodePageToken(token) {
|
|
220
|
-
const decoded = Buffer.from(token, "base64");
|
|
221
|
-
if (decoded.toString("base64") !== token) {
|
|
222
|
-
throw invalidArgumentError("invalid page_token");
|
|
223
|
-
}
|
|
224
|
-
const text = decoded.toString("utf8");
|
|
225
|
-
const index = Number.parseInt(text, 10);
|
|
226
|
-
if (!Number.isSafeInteger(index) || String(index) !== text || index < 0) {
|
|
227
|
-
throw invalidArgumentError("invalid page_token");
|
|
228
|
-
}
|
|
229
|
-
return index;
|
|
49
|
+
return newSharedLoadAndMapVersionsStep(store, skillVersionBinding, "LoadAndMapVersions");
|
|
230
50
|
}
|
|
231
51
|
/**
|
|
232
52
|
* Maps an archived Skill snapshot to a version entry (Go
|
|
233
|
-
* mapSkillToVersionEntry).
|
|
234
|
-
* updated stamps and fall back to created (first pushes only carry
|
|
235
|
-
* created).
|
|
53
|
+
* mapSkillToVersionEntry).
|
|
236
54
|
*/
|
|
237
55
|
function mapSkillToVersionEntry(skill, isCurrent, tag) {
|
|
238
56
|
const entry = create(SkillVersionEntrySchema, { isCurrent, tag });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version-resolution.js","sourceRoot":"","sources":["../../../src/domain/skill/version-resolution.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"version-resolution.js","sourceRoot":"","sources":["../../../src/domain/skill/version-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/domain/workflow/controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AAuCzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/domain/workflow/controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,qBAAqB,CAAC;AAuCzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,4CAA4C,CAAC;AA4EjG,OAAO,KAAK,EAAe,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAepE,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,YAAY,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kHAAkH;IAClH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,qFAAqF;IACrF,QAAQ,CAAC,sBAAsB,EAAE,8BAA8B,GAAG,SAAS,CAAC;IAC5E,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;CACnE;AAED,qEAAqE;AACrE,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,sBAAsB,GAC3B,IAAI,CAsBN"}
|