@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
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `default_of` derived rule, shared by the two instance kinds. The
|
|
3
|
+
* model reads `viewer from default_of` so a blueprint's system-managed
|
|
4
|
+
* default instance is exactly as reachable as its template and never
|
|
5
|
+
* more; the tuple that link stands on is not a `kind_meta` fact — the
|
|
6
|
+
* cloud writes `<instance>#default_of@<blueprint>` iff the blueprint's
|
|
7
|
+
* `status.default_instance_id` names the instance (stigmer-cloud
|
|
8
|
+
* iam/tuple-lifecycle.ts `onDefaultInstanceLinked`, fired when the
|
|
9
|
+
* pointer persists), and open source derives it from the same pointer at
|
|
10
|
+
* check time: load the blueprint the instance names, compare.
|
|
11
|
+
*
|
|
12
|
+
* The blueprint is read through the source's memoised loader, so the
|
|
13
|
+
* row this rule loads is the very row `viewer from default_of` then
|
|
14
|
+
* resolves the blueprint's `viewer` on — one read serves both. Which spec
|
|
15
|
+
* field names the blueprint is `kind_meta`'s to say (the instance kind's
|
|
16
|
+
* `additional_parents` entry for the blueprint kind), never restated
|
|
17
|
+
* here; an instance kind without that entry is a transcript bug and
|
|
18
|
+
* throws at first use rather than deriving nothing.
|
|
19
|
+
*
|
|
20
|
+
* A user-created instance points at a blueprint whose pointer names a
|
|
21
|
+
* different row (or none), so the rule derives nothing for it and its
|
|
22
|
+
* personal configuration stays its owner's — the invariant the model's
|
|
23
|
+
* comment states. A blueprint that no longer exists grants nothing, as in
|
|
24
|
+
* the cloud, where the tuple died with the row.
|
|
25
|
+
*/
|
|
26
|
+
import type { DescMessage, MessageShape } from "@bufbuild/protobuf";
|
|
27
|
+
import { isMessage } from "@bufbuild/protobuf";
|
|
28
|
+
|
|
29
|
+
import type { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
30
|
+
|
|
31
|
+
import {
|
|
32
|
+
getKindEnum,
|
|
33
|
+
getKindMeta,
|
|
34
|
+
kindByEnumName,
|
|
35
|
+
kindEnumName,
|
|
36
|
+
} from "../../pipeline/apiresource-meta.js";
|
|
37
|
+
import { parentIdOf } from "../../pipeline/steps/shapes.js";
|
|
38
|
+
import type { Tuple } from "../tuples.js";
|
|
39
|
+
import type { DerivedRelation } from "./rewrite.js";
|
|
40
|
+
|
|
41
|
+
export interface BlueprintOfInstance<Desc extends DescMessage> {
|
|
42
|
+
/** The blueprint kind (`agent`, `workflow`). */
|
|
43
|
+
readonly kind: ApiResourceKind;
|
|
44
|
+
/** Its message schema: what the loaded blueprint row decodes with. */
|
|
45
|
+
readonly schema: Desc;
|
|
46
|
+
/** The blueprint's default-instance pointer, read from the typed row; "" when unset. */
|
|
47
|
+
defaultInstanceIdOf(blueprint: MessageShape<Desc>): string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function defaultOfBlueprint<Desc extends DescMessage>(
|
|
51
|
+
blueprint: BlueprintOfInstance<Desc>,
|
|
52
|
+
): DerivedRelation {
|
|
53
|
+
const blueprintType = kindEnumName(blueprint.kind);
|
|
54
|
+
return async (object, row, loader): Promise<ReadonlyArray<Tuple>> => {
|
|
55
|
+
const blueprintId = parentIdOf(
|
|
56
|
+
row,
|
|
57
|
+
blueprintSpecFieldOf(object.type, blueprint.kind),
|
|
58
|
+
);
|
|
59
|
+
if (blueprintId === "") {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
const loaded = await loader.load({ type: blueprintType, id: blueprintId });
|
|
63
|
+
if (
|
|
64
|
+
loaded === undefined ||
|
|
65
|
+
!isMessage(loaded, blueprint.schema) ||
|
|
66
|
+
blueprint.defaultInstanceIdOf(loaded) !== object.id
|
|
67
|
+
) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
return [
|
|
71
|
+
{
|
|
72
|
+
object,
|
|
73
|
+
relation: "default_of",
|
|
74
|
+
subject: {
|
|
75
|
+
form: "object",
|
|
76
|
+
object: { type: blueprintType, id: blueprintId },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** The instance kind's `kind_meta` parent entry for the blueprint kind: the spec field that names it. */
|
|
84
|
+
function blueprintSpecFieldOf(
|
|
85
|
+
instanceType: string,
|
|
86
|
+
blueprintKind: ApiResourceKind,
|
|
87
|
+
): string {
|
|
88
|
+
const instanceKind = kindByEnumName(instanceType);
|
|
89
|
+
const parents = getKindMeta(instanceKind).authorization?.additionalParents;
|
|
90
|
+
const entry = parents?.find(
|
|
91
|
+
(parent) => getKindEnum(parent.kind) === blueprintKind,
|
|
92
|
+
);
|
|
93
|
+
if (entry === undefined) {
|
|
94
|
+
throw new Error(
|
|
95
|
+
`${instanceType} declares default_of but kind_meta names no ${kindEnumName(blueprintKind)} parent`,
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
return entry.specField;
|
|
99
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/agentic/environment.fga — a member's credential
|
|
3
|
+
* store: owner-only writes (no admin arm), an org-visibility axis capped
|
|
4
|
+
* at the organization (`kind_meta` supports_org only — no public
|
|
5
|
+
* wildcard on the viewer line, and the evaluator would ignore one), and
|
|
6
|
+
* `can_read_secrets: creator`, the one verb that stays with the person
|
|
7
|
+
* who typed the values whatever the visibility, standing on the creator
|
|
8
|
+
* tuple `kind_meta` flags with requires_creator_tuple.
|
|
9
|
+
*/
|
|
10
|
+
import { EnvironmentSchema } from "@stigmer/protos/ai/stigmer/agentic/environment/v1/api_pb";
|
|
11
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
computed,
|
|
15
|
+
declareKind,
|
|
16
|
+
direct,
|
|
17
|
+
objectOf,
|
|
18
|
+
union,
|
|
19
|
+
usersetOf,
|
|
20
|
+
} from "./rewrite.js";
|
|
21
|
+
|
|
22
|
+
export const environmentDeclaration = declareKind({
|
|
23
|
+
kind: ApiResourceKind.environment,
|
|
24
|
+
schema: EnvironmentSchema,
|
|
25
|
+
source: "fga/model/agentic/environment.fga",
|
|
26
|
+
relations: [
|
|
27
|
+
["organization", direct(objectOf("organization"))],
|
|
28
|
+
["creator", direct(objectOf("identity_account"))],
|
|
29
|
+
["owner", direct(objectOf("identity_account"))],
|
|
30
|
+
[
|
|
31
|
+
"viewer",
|
|
32
|
+
union(
|
|
33
|
+
direct(
|
|
34
|
+
objectOf("identity_account"),
|
|
35
|
+
usersetOf("organization", "member"),
|
|
36
|
+
usersetOf("organization", "viewer"),
|
|
37
|
+
),
|
|
38
|
+
computed("owner"),
|
|
39
|
+
),
|
|
40
|
+
],
|
|
41
|
+
["can_view", computed("viewer")],
|
|
42
|
+
["can_edit", computed("owner")],
|
|
43
|
+
["can_delete", computed("owner")],
|
|
44
|
+
["can_read_secrets", computed("creator")],
|
|
45
|
+
["can_grant_access", computed("owner")],
|
|
46
|
+
["can_view_access", computed("viewer")],
|
|
47
|
+
],
|
|
48
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/agentic/execution_context.fga — a run's working
|
|
3
|
+
* state, owner-only and unscoped (`kind_meta` OWNER_ONLY): two verbs,
|
|
4
|
+
* both `owner`, and no access list to grant on.
|
|
5
|
+
*/
|
|
6
|
+
import { ExecutionContextSchema } from "@stigmer/protos/ai/stigmer/agentic/executioncontext/v1/api_pb";
|
|
7
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
8
|
+
|
|
9
|
+
import { computed, declareKind, direct, objectOf } from "./rewrite.js";
|
|
10
|
+
|
|
11
|
+
export const executionContextDeclaration = declareKind({
|
|
12
|
+
kind: ApiResourceKind.execution_context,
|
|
13
|
+
schema: ExecutionContextSchema,
|
|
14
|
+
source: "fga/model/agentic/execution_context.fga",
|
|
15
|
+
relations: [
|
|
16
|
+
["owner", direct(objectOf("identity_account"))],
|
|
17
|
+
["can_view", computed("owner")],
|
|
18
|
+
["can_edit", computed("owner")],
|
|
19
|
+
],
|
|
20
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/iam/iam_policy.fga — the access-list row as an
|
|
3
|
+
* object of the model: its organization's admins own and view it. Declared
|
|
4
|
+
* for completeness of the transcript set (the drift compare reads every
|
|
5
|
+
* open-source file); no wire check targets it — the IamPolicy RPCs
|
|
6
|
+
* authorize against the policy's RESOURCE (`can_grant_access` on the
|
|
7
|
+
* organization; `get` loads the row and asks about what it names), and the
|
|
8
|
+
* tuple lifecycle writes nothing for it.
|
|
9
|
+
*/
|
|
10
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
11
|
+
import { IamPolicySchema } from "@stigmer/protos/ai/stigmer/iam/iampolicy/v1/api_pb";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
computed,
|
|
15
|
+
declareKind,
|
|
16
|
+
direct,
|
|
17
|
+
from,
|
|
18
|
+
objectOf,
|
|
19
|
+
union,
|
|
20
|
+
} from "./rewrite.js";
|
|
21
|
+
|
|
22
|
+
export const iamPolicyDeclaration = declareKind({
|
|
23
|
+
kind: ApiResourceKind.iam_policy,
|
|
24
|
+
schema: IamPolicySchema,
|
|
25
|
+
source: "fga/model/iam/iam_policy.fga",
|
|
26
|
+
relations: [
|
|
27
|
+
["organization", direct(objectOf("organization"))],
|
|
28
|
+
[
|
|
29
|
+
"owner",
|
|
30
|
+
union(
|
|
31
|
+
direct(objectOf("identity_account")),
|
|
32
|
+
from("admin", "organization"),
|
|
33
|
+
),
|
|
34
|
+
],
|
|
35
|
+
["viewer", from("admin", "organization")],
|
|
36
|
+
["can_view", computed("viewer")],
|
|
37
|
+
["can_edit", computed("owner")],
|
|
38
|
+
["can_delete", computed("owner")],
|
|
39
|
+
["can_grant_access", computed("owner")],
|
|
40
|
+
["can_view_access", computed("viewer")],
|
|
41
|
+
],
|
|
42
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/iam/identity_account.fga — a person's own
|
|
3
|
+
* record: every verb is `owner`, and the owner is the account itself
|
|
4
|
+
* (`kind_meta` attribution SELF, so the derivation writes
|
|
5
|
+
* `identity_account:<id>#owner@identity_account:<id>`). No organization
|
|
6
|
+
* link and no admin arm: an admin manages members through IamPolicy rows
|
|
7
|
+
* on the organization, never through the account row.
|
|
8
|
+
*/
|
|
9
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
10
|
+
import { IdentityAccountSchema } from "@stigmer/protos/ai/stigmer/iam/identityaccount/v1/api_pb";
|
|
11
|
+
|
|
12
|
+
import { computed, declareKind, direct, objectOf } from "./rewrite.js";
|
|
13
|
+
|
|
14
|
+
export const identityAccountDeclaration = declareKind({
|
|
15
|
+
kind: ApiResourceKind.identity_account,
|
|
16
|
+
schema: IdentityAccountSchema,
|
|
17
|
+
source: "fga/model/iam/identity_account.fga",
|
|
18
|
+
relations: [
|
|
19
|
+
["owner", direct(objectOf("identity_account"))],
|
|
20
|
+
["can_view", computed("owner")],
|
|
21
|
+
["can_edit", computed("owner")],
|
|
22
|
+
["can_delete", computed("owner")],
|
|
23
|
+
["can_grant_access", computed("owner")],
|
|
24
|
+
["can_view_access", computed("owner")],
|
|
25
|
+
],
|
|
26
|
+
});
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The built-in model — every kind declaration open source evaluates,
|
|
3
|
+
* registered once in the order the cloud's `fga.mod` files them, and
|
|
4
|
+
* reached by kind (the driver's `AuthzCheck.resourceKind`) or by FGA type
|
|
5
|
+
* name (an object reference inside a tuple). A kind with no declaration
|
|
6
|
+
* is one this edition does not evaluate: as a check TARGET that is a
|
|
7
|
+
* registry gap the evaluator throws on (the driver refuses unserved kinds
|
|
8
|
+
* before any evaluation, so the throw is a backstop); reached through a
|
|
9
|
+
* tuple it is simply an object with no relations.
|
|
10
|
+
*
|
|
11
|
+
* `newModel` exists for tests that need a throwaway model (a cycle, a
|
|
12
|
+
* chain past the depth bound) and for the cloud's drift test, which
|
|
13
|
+
* builds a model from the live `.fga` files and compares.
|
|
14
|
+
*
|
|
15
|
+
* Registered: every kind of the open-source tier — the twenty-four
|
|
16
|
+
* `kind_meta.tier: open_source` members — and nothing else. The four
|
|
17
|
+
* files `fga.mod` lists that have no declaration here (`platform`,
|
|
18
|
+
* `identity_provider`, `platform_client`, `invitation`) are kinds this
|
|
19
|
+
* edition does not serve: a check that targets one is refused by the
|
|
20
|
+
* driver, and a tuple that names one (`identity_provider#platform_user`)
|
|
21
|
+
* resolves to nobody. The registry test pins the list against the tier.
|
|
22
|
+
*/
|
|
23
|
+
import type { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
24
|
+
|
|
25
|
+
import { agentDeclaration } from "./agent.js";
|
|
26
|
+
import { agentChannelDeclaration } from "./agent_channel.js";
|
|
27
|
+
import { agentExecutionDeclaration } from "./agent_execution.js";
|
|
28
|
+
import { agentInstanceDeclaration } from "./agent_instance.js";
|
|
29
|
+
import { agentShareDeclaration } from "./agent_share.js";
|
|
30
|
+
import { apiKeyDeclaration } from "./api_key.js";
|
|
31
|
+
import { artifactDeclaration } from "./artifact.js";
|
|
32
|
+
import { channelAppDeclaration } from "./channel_app.js";
|
|
33
|
+
import { environmentDeclaration } from "./environment.js";
|
|
34
|
+
import { executionContextDeclaration } from "./execution_context.js";
|
|
35
|
+
import { iamPolicyDeclaration } from "./iam_policy.js";
|
|
36
|
+
import { identityAccountDeclaration } from "./identity_account.js";
|
|
37
|
+
import { mcpServerDeclaration } from "./mcp_server.js";
|
|
38
|
+
import { memoryDeclaration } from "./memory.js";
|
|
39
|
+
import { oauthAppDeclaration } from "./oauth_app.js";
|
|
40
|
+
import { organizationDeclaration } from "./organization.js";
|
|
41
|
+
import { pluginDeclaration } from "./plugin.js";
|
|
42
|
+
import { projectDeclaration } from "./project.js";
|
|
43
|
+
import type { KindDeclaration } from "./rewrite.js";
|
|
44
|
+
import { scheduleDeclaration } from "./schedule.js";
|
|
45
|
+
import { sessionDeclaration } from "./session.js";
|
|
46
|
+
import { skillDeclaration } from "./skill.js";
|
|
47
|
+
import { workflowDeclaration } from "./workflow.js";
|
|
48
|
+
import { workflowExecutionDeclaration } from "./workflow_execution.js";
|
|
49
|
+
import { workflowInstanceDeclaration } from "./workflow_instance.js";
|
|
50
|
+
|
|
51
|
+
export interface Model {
|
|
52
|
+
/** In registry order. */
|
|
53
|
+
readonly declarations: ReadonlyArray<KindDeclaration>;
|
|
54
|
+
byKind(kind: ApiResourceKind): KindDeclaration | undefined;
|
|
55
|
+
byType(type: string): KindDeclaration | undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function newModel(declarations: ReadonlyArray<KindDeclaration>): Model {
|
|
59
|
+
const byKind = new Map<ApiResourceKind, KindDeclaration>();
|
|
60
|
+
const byType = new Map<string, KindDeclaration>();
|
|
61
|
+
for (const declaration of declarations) {
|
|
62
|
+
if (byKind.has(declaration.kind)) {
|
|
63
|
+
throw new Error(`${declaration.type} is declared twice in the model`);
|
|
64
|
+
}
|
|
65
|
+
byKind.set(declaration.kind, declaration);
|
|
66
|
+
byType.set(declaration.type, declaration);
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
declarations,
|
|
70
|
+
byKind: (kind) => byKind.get(kind),
|
|
71
|
+
byType: (type) => byType.get(type),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The declarations this edition evaluates, in `fga.mod` order. */
|
|
76
|
+
export const builtInModel: Model = newModel([
|
|
77
|
+
identityAccountDeclaration,
|
|
78
|
+
iamPolicyDeclaration,
|
|
79
|
+
apiKeyDeclaration,
|
|
80
|
+
oauthAppDeclaration,
|
|
81
|
+
organizationDeclaration,
|
|
82
|
+
projectDeclaration,
|
|
83
|
+
agentDeclaration,
|
|
84
|
+
agentChannelDeclaration,
|
|
85
|
+
agentShareDeclaration,
|
|
86
|
+
channelAppDeclaration,
|
|
87
|
+
agentInstanceDeclaration,
|
|
88
|
+
agentExecutionDeclaration,
|
|
89
|
+
artifactDeclaration,
|
|
90
|
+
environmentDeclaration,
|
|
91
|
+
executionContextDeclaration,
|
|
92
|
+
mcpServerDeclaration,
|
|
93
|
+
memoryDeclaration,
|
|
94
|
+
scheduleDeclaration,
|
|
95
|
+
sessionDeclaration,
|
|
96
|
+
skillDeclaration,
|
|
97
|
+
workflowDeclaration,
|
|
98
|
+
workflowInstanceDeclaration,
|
|
99
|
+
workflowExecutionDeclaration,
|
|
100
|
+
pluginDeclaration,
|
|
101
|
+
]);
|
|
102
|
+
|
|
103
|
+
/** The built-in model's declaration for a kind, or undefined for a kind it does not evaluate. */
|
|
104
|
+
export function declarationFor(
|
|
105
|
+
kind: ApiResourceKind,
|
|
106
|
+
): KindDeclaration | undefined {
|
|
107
|
+
return builtInModel.byKind(kind);
|
|
108
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/agentic/mcp_server.fga — a blueprint with three
|
|
3
|
+
* read-side verbs: `can_use`, `can_clone` and `can_connect` (the OAuth
|
|
4
|
+
* connect lane's gate), all `viewer`.
|
|
5
|
+
*/
|
|
6
|
+
import { McpServerSchema } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
7
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
computed,
|
|
11
|
+
declareKind,
|
|
12
|
+
direct,
|
|
13
|
+
from,
|
|
14
|
+
objectOf,
|
|
15
|
+
publicWith,
|
|
16
|
+
union,
|
|
17
|
+
usersetOf,
|
|
18
|
+
} from "./rewrite.js";
|
|
19
|
+
|
|
20
|
+
export const mcpServerDeclaration = declareKind({
|
|
21
|
+
kind: ApiResourceKind.mcp_server,
|
|
22
|
+
schema: McpServerSchema,
|
|
23
|
+
source: "fga/model/agentic/mcp_server.fga",
|
|
24
|
+
relations: [
|
|
25
|
+
["organization", direct(objectOf("organization"))],
|
|
26
|
+
[
|
|
27
|
+
"owner",
|
|
28
|
+
union(
|
|
29
|
+
direct(objectOf("identity_account")),
|
|
30
|
+
from("admin", "organization"),
|
|
31
|
+
),
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
"platform_viewer",
|
|
35
|
+
direct(usersetOf("identity_provider", "platform_user")),
|
|
36
|
+
],
|
|
37
|
+
[
|
|
38
|
+
"viewer",
|
|
39
|
+
union(
|
|
40
|
+
direct(
|
|
41
|
+
objectOf("identity_account"),
|
|
42
|
+
publicWith("identity_account", "allow_public"),
|
|
43
|
+
usersetOf("organization", "member"),
|
|
44
|
+
usersetOf("organization", "viewer"),
|
|
45
|
+
),
|
|
46
|
+
computed("owner"),
|
|
47
|
+
computed("platform_viewer"),
|
|
48
|
+
),
|
|
49
|
+
],
|
|
50
|
+
["can_view", computed("viewer")],
|
|
51
|
+
["can_edit", computed("owner")],
|
|
52
|
+
["can_delete", computed("owner")],
|
|
53
|
+
["can_use", computed("viewer")],
|
|
54
|
+
["can_clone", computed("viewer")],
|
|
55
|
+
["can_connect", computed("viewer")],
|
|
56
|
+
["can_grant_access", computed("owner")],
|
|
57
|
+
["can_view_access", computed("viewer")],
|
|
58
|
+
],
|
|
59
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/agentic/memory.fga — subject-only: the person a
|
|
3
|
+
* memory is ABOUT is its one principal (no owner, no creator, no
|
|
4
|
+
* visibility, nothing grantable; `kind_meta` attribution NONE with
|
|
5
|
+
* `subject` as an additional parent on `spec.subject_identity_account_id`).
|
|
6
|
+
* Organization admins govern the organization's memory switch and never
|
|
7
|
+
* read content, in the contract's own words. A row whose subject field is
|
|
8
|
+
* empty derives no principal at all — the derivation's rule for an
|
|
9
|
+
* absent parent — and is then nobody's under this evaluator.
|
|
10
|
+
*/
|
|
11
|
+
import { MemorySchema } from "@stigmer/protos/ai/stigmer/agentic/memory/v1/api_pb";
|
|
12
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
13
|
+
|
|
14
|
+
import { computed, declareKind, direct, objectOf } from "./rewrite.js";
|
|
15
|
+
|
|
16
|
+
export const memoryDeclaration = declareKind({
|
|
17
|
+
kind: ApiResourceKind.memory,
|
|
18
|
+
schema: MemorySchema,
|
|
19
|
+
source: "fga/model/agentic/memory.fga",
|
|
20
|
+
relations: [
|
|
21
|
+
["organization", direct(objectOf("organization"))],
|
|
22
|
+
["subject", direct(objectOf("identity_account"))],
|
|
23
|
+
["can_view", computed("subject")],
|
|
24
|
+
["can_edit", computed("subject")],
|
|
25
|
+
["can_delete", computed("subject")],
|
|
26
|
+
],
|
|
27
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/iam/oauth_app.fga — the one organization-scoped
|
|
3
|
+
* kind whose `owner` has NO admin arm while its `viewer` does: the file's
|
|
4
|
+
* "administrative visibility" for the organization's admins over a
|
|
5
|
+
* registration that holds vendor client credentials, with change and
|
|
6
|
+
* deletion the creator's (or an explicit grant's) alone, and no public
|
|
7
|
+
* level at all.
|
|
8
|
+
*/
|
|
9
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
10
|
+
import { OAuthAppSchema } from "@stigmer/protos/ai/stigmer/iam/oauthapp/v1/api_pb";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
computed,
|
|
14
|
+
declareKind,
|
|
15
|
+
direct,
|
|
16
|
+
from,
|
|
17
|
+
objectOf,
|
|
18
|
+
union,
|
|
19
|
+
} from "./rewrite.js";
|
|
20
|
+
|
|
21
|
+
export const oauthAppDeclaration = declareKind({
|
|
22
|
+
kind: ApiResourceKind.oauth_app,
|
|
23
|
+
schema: OAuthAppSchema,
|
|
24
|
+
source: "fga/model/iam/oauth_app.fga",
|
|
25
|
+
relations: [
|
|
26
|
+
["organization", direct(objectOf("organization"))],
|
|
27
|
+
["owner", direct(objectOf("identity_account"))],
|
|
28
|
+
[
|
|
29
|
+
"viewer",
|
|
30
|
+
union(
|
|
31
|
+
direct(objectOf("identity_account")),
|
|
32
|
+
computed("owner"),
|
|
33
|
+
from("admin", "organization"),
|
|
34
|
+
),
|
|
35
|
+
],
|
|
36
|
+
["can_view", computed("viewer")],
|
|
37
|
+
["can_edit", computed("owner")],
|
|
38
|
+
["can_delete", computed("owner")],
|
|
39
|
+
["can_grant_access", computed("owner")],
|
|
40
|
+
["can_view_access", computed("viewer")],
|
|
41
|
+
],
|
|
42
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/tenancy/organization.fga — the root of the
|
|
3
|
+
* model: no parent, the four roles as a ladder (`owner ⊂ admin ⊂ member
|
|
4
|
+
* ⊂ viewer`, each `[identity_account] or <the rung above>`), and every
|
|
5
|
+
* `can_create_*` an organization gates.
|
|
6
|
+
*
|
|
7
|
+
* In open source the `[identity_account]` tuples of this type ARE the
|
|
8
|
+
* IamPolicy rows: 2b's role lifecycle writes the creator's `owner` row and
|
|
9
|
+
* the grant path writes every other role, so the tuple source reads them
|
|
10
|
+
* from the IamPolicyStore and the derivation writes no owner tuple for
|
|
11
|
+
* this kind (derived-tuples.ts). `guest` is the cloud's anonymous
|
|
12
|
+
* share-link visitor; no open-source lane mints one (claim check C5), so
|
|
13
|
+
* the relation resolves to nothing and `can_create_session: member or
|
|
14
|
+
* guest` is `member` here — the transcript still carries the line.
|
|
15
|
+
*/
|
|
16
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
17
|
+
import { OrganizationSchema } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
|
|
18
|
+
|
|
19
|
+
import { computed, declareKind, direct, objectOf, union } from "./rewrite.js";
|
|
20
|
+
|
|
21
|
+
export const organizationDeclaration = declareKind({
|
|
22
|
+
kind: ApiResourceKind.organization,
|
|
23
|
+
schema: OrganizationSchema,
|
|
24
|
+
source: "fga/model/tenancy/organization.fga",
|
|
25
|
+
relations: [
|
|
26
|
+
["owner", direct(objectOf("identity_account"))],
|
|
27
|
+
["admin", union(direct(objectOf("identity_account")), computed("owner"))],
|
|
28
|
+
["member", union(direct(objectOf("identity_account")), computed("admin"))],
|
|
29
|
+
["viewer", union(direct(objectOf("identity_account")), computed("member"))],
|
|
30
|
+
["guest", direct(objectOf("identity_account"))],
|
|
31
|
+
["can_view", computed("viewer")],
|
|
32
|
+
["can_edit", computed("admin")],
|
|
33
|
+
["can_delete", computed("owner")],
|
|
34
|
+
["can_manage_members", computed("admin")],
|
|
35
|
+
["can_assign_roles", computed("owner")],
|
|
36
|
+
["can_create_project", computed("admin")],
|
|
37
|
+
["can_create_agent", computed("admin")],
|
|
38
|
+
["can_create_workflow", computed("admin")],
|
|
39
|
+
["can_create_session", union(computed("member"), computed("guest"))],
|
|
40
|
+
["can_create_environment", computed("member")],
|
|
41
|
+
["can_create_skill", computed("admin")],
|
|
42
|
+
["can_create_plugin", computed("admin")],
|
|
43
|
+
["can_create_idp", computed("admin")],
|
|
44
|
+
["can_create_identity_account", computed("admin")],
|
|
45
|
+
["can_create_oauth_app", computed("admin")],
|
|
46
|
+
["can_create_platform_client", computed("admin")],
|
|
47
|
+
["can_create_channel_app", computed("admin")],
|
|
48
|
+
["can_create_execution_in", union(computed("member"), computed("guest"))],
|
|
49
|
+
["can_create_agent_share", computed("admin")],
|
|
50
|
+
["can_grant_access", computed("admin")],
|
|
51
|
+
["can_view_access", computed("viewer")],
|
|
52
|
+
["can_view_billing", computed("viewer")],
|
|
53
|
+
["can_manage_billing", computed("admin")],
|
|
54
|
+
],
|
|
55
|
+
});
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/agentic/plugin.fga — the unit of install, shaped
|
|
3
|
+
* exactly like a skill: an organization-owned blueprint whose owner is the
|
|
4
|
+
* installer (and, through the organization, its admins), whose viewers are
|
|
5
|
+
* the org's members and viewers, public readers when published, and the
|
|
6
|
+
* platform viewer. Its verbs are the blueprint set: `can_view`, `can_edit`
|
|
7
|
+
* (visibility), `can_delete` (uninstall), `can_grant_access`,
|
|
8
|
+
* `can_view_access`; `can_use` is carried as the model's word for
|
|
9
|
+
* "install from" though no wire permission names it yet.
|
|
10
|
+
*
|
|
11
|
+
* The members a plugin materialises are NOT reached through this type:
|
|
12
|
+
* each is an ordinary skill, MCP server, agent or workflow with its own
|
|
13
|
+
* tuples, written by its own chain as the installing caller.
|
|
14
|
+
*/
|
|
15
|
+
import { PluginSchema } from "@stigmer/protos/ai/stigmer/agentic/plugin/v1/api_pb";
|
|
16
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
computed,
|
|
20
|
+
declareKind,
|
|
21
|
+
direct,
|
|
22
|
+
from,
|
|
23
|
+
objectOf,
|
|
24
|
+
publicWith,
|
|
25
|
+
union,
|
|
26
|
+
usersetOf,
|
|
27
|
+
} from "./rewrite.js";
|
|
28
|
+
|
|
29
|
+
export const pluginDeclaration = declareKind({
|
|
30
|
+
kind: ApiResourceKind.plugin,
|
|
31
|
+
schema: PluginSchema,
|
|
32
|
+
source: "fga/model/agentic/plugin.fga",
|
|
33
|
+
relations: [
|
|
34
|
+
["organization", direct(objectOf("organization"))],
|
|
35
|
+
[
|
|
36
|
+
"owner",
|
|
37
|
+
union(
|
|
38
|
+
direct(objectOf("identity_account")),
|
|
39
|
+
from("admin", "organization"),
|
|
40
|
+
),
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
"platform_viewer",
|
|
44
|
+
direct(usersetOf("identity_provider", "platform_user")),
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
"viewer",
|
|
48
|
+
union(
|
|
49
|
+
direct(
|
|
50
|
+
objectOf("identity_account"),
|
|
51
|
+
publicWith("identity_account", "allow_public"),
|
|
52
|
+
usersetOf("organization", "member"),
|
|
53
|
+
usersetOf("organization", "viewer"),
|
|
54
|
+
),
|
|
55
|
+
computed("owner"),
|
|
56
|
+
computed("platform_viewer"),
|
|
57
|
+
),
|
|
58
|
+
],
|
|
59
|
+
["can_view", computed("viewer")],
|
|
60
|
+
["can_edit", computed("owner")],
|
|
61
|
+
["can_delete", computed("owner")],
|
|
62
|
+
["can_use", computed("viewer")],
|
|
63
|
+
["can_grant_access", computed("owner")],
|
|
64
|
+
["can_view_access", computed("viewer")],
|
|
65
|
+
],
|
|
66
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transcript of fga/model/tenancy/project.fga — an organization's
|
|
3
|
+
* grouping: admins own it, and `viewer from organization` lets every
|
|
4
|
+
* organization viewer read it without a visibility tuple (projects have
|
|
5
|
+
* no visibility axis in `kind_meta`; the whole organization is their
|
|
6
|
+
* audience by the model's own line).
|
|
7
|
+
*/
|
|
8
|
+
import { ApiResourceKind } from "@stigmer/protos/ai/stigmer/commons/apiresource/apiresourcekind/api_resource_kind_pb";
|
|
9
|
+
import { ProjectSchema } from "@stigmer/protos/ai/stigmer/tenancy/project/v1/api_pb";
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
computed,
|
|
13
|
+
declareKind,
|
|
14
|
+
direct,
|
|
15
|
+
from,
|
|
16
|
+
objectOf,
|
|
17
|
+
union,
|
|
18
|
+
} from "./rewrite.js";
|
|
19
|
+
|
|
20
|
+
export const projectDeclaration = declareKind({
|
|
21
|
+
kind: ApiResourceKind.project,
|
|
22
|
+
schema: ProjectSchema,
|
|
23
|
+
source: "fga/model/tenancy/project.fga",
|
|
24
|
+
relations: [
|
|
25
|
+
["organization", direct(objectOf("organization"))],
|
|
26
|
+
[
|
|
27
|
+
"owner",
|
|
28
|
+
union(
|
|
29
|
+
direct(objectOf("identity_account")),
|
|
30
|
+
from("admin", "organization"),
|
|
31
|
+
),
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
"viewer",
|
|
35
|
+
union(
|
|
36
|
+
direct(objectOf("identity_account")),
|
|
37
|
+
computed("owner"),
|
|
38
|
+
from("viewer", "organization"),
|
|
39
|
+
),
|
|
40
|
+
],
|
|
41
|
+
["can_view", computed("viewer")],
|
|
42
|
+
["can_edit", computed("owner")],
|
|
43
|
+
["can_delete", computed("owner")],
|
|
44
|
+
["can_grant_access", computed("owner")],
|
|
45
|
+
["can_view_access", computed("viewer")],
|
|
46
|
+
],
|
|
47
|
+
});
|