From 593af1e5557d99a6b9197eb6d1d4f970ff53d9c9 Mon Sep 17 00:00:00 2001 From: Casey Brooks Date: Wed, 18 Mar 2026 00:58:35 +0000 Subject: [PATCH 1/3] feat(teams): rewrite teams contracts --- openapi/team/v1/components/schemas/Agent.yaml | 12 +- .../v1/components/schemas/AgentConfig.yaml | 16 - .../schemas/AgentCreateRequest.yaml | 12 +- .../schemas/AgentUpdateRequest.yaml | 10 +- .../v1/components/schemas/Attachment.yaml | 10 - .../schemas/AttachmentCreateRequest.yaml | 9 - .../v1/components/schemas/AttachmentKind.yaml | 8 - .../components/schemas/ComputeResources.yaml | 6 + .../v1/components/schemas/EntityType.yaml | 8 - openapi/team/v1/components/schemas/Env.yaml | 26 + .../components/schemas/EnvCreateRequest.yaml | 24 + ...dateRequest.yaml => EnvUpdateRequest.yaml} | 5 +- openapi/team/v1/components/schemas/Hook.yaml | 11 + .../components/schemas/HookCreateRequest.yaml | 9 + .../components/schemas/HookUpdateRequest.yaml | 8 + .../v1/components/schemas/InitScript.yaml | 19 + .../schemas/InitScriptCreateRequest.yaml | 17 + ...uest.yaml => InitScriptUpdateRequest.yaml} | 3 +- openapi/team/v1/components/schemas/Mcp.yaml | 10 + .../components/schemas/McpCreateRequest.yaml | 8 + .../v1/components/schemas/McpEnvItem.yaml | 5 - .../team/v1/components/schemas/McpServer.yaml | 8 - .../components/schemas/McpServerConfig.yaml | 35 - .../schemas/McpServerCreateRequest.yaml | 6 - .../components/schemas/McpUpdateRequest.yaml | 7 + .../v1/components/schemas/MemoryBucket.yaml | 8 - .../schemas/MemoryBucketConfig.yaml | 7 - .../schemas/MemoryBucketCreateRequest.yaml | 6 - .../schemas/MemoryBucketUpdateRequest.yaml | 6 - .../components/schemas/PaginatedAgents.yaml | 6 +- .../schemas/PaginatedAttachments.yaml | 9 - .../v1/components/schemas/PaginatedEnvs.yaml | 7 + .../v1/components/schemas/PaginatedHooks.yaml | 7 + .../schemas/PaginatedInitScripts.yaml | 7 + .../schemas/PaginatedMcpServers.yaml | 9 - .../v1/components/schemas/PaginatedMcps.yaml | 7 + .../schemas/PaginatedMemoryBuckets.yaml | 9 - .../components/schemas/PaginatedSkills.yaml | 7 + .../v1/components/schemas/PaginatedTools.yaml | 9 - .../schemas/PaginatedVariables.yaml | 9 - .../schemas/PaginatedVolumeAttachments.yaml | 7 + .../components/schemas/PaginatedVolumes.yaml | 7 + .../PaginatedWorkspaceConfigurations.yaml | 9 - .../v1/components/schemas/Pagination.yaml | 6 - .../schemas/{Tool.yaml => Skill.yaml} | 6 +- .../schemas/SkillCreateRequest.yaml | 7 + ...teRequest.yaml => SkillUpdateRequest.yaml} | 2 +- .../components/schemas/ToolCreateRequest.yaml | 7 - .../team/v1/components/schemas/ToolType.yaml | 10 - .../team/v1/components/schemas/Variable.yaml | 8 - .../schemas/VariableCreateRequest.yaml | 6 - .../team/v1/components/schemas/Volume.yaml | 11 + .../components/schemas/VolumeAttachment.yaml | 18 + .../VolumeAttachmentCreateRequest.yaml | 16 + .../schemas/VolumeCreateRequest.yaml | 9 + .../schemas/VolumeUpdateRequest.yaml | 9 + .../components/schemas/WorkspaceConfig.yaml | 21 - .../schemas/WorkspaceConfiguration.yaml | 8 - .../WorkspaceConfigurationCreateRequest.yaml | 6 - .../WorkspaceConfigurationUpdateRequest.yaml | 6 - .../components/schemas/WorkspaceEnvItem.yaml | 5 - .../components/schemas/WorkspacePlatform.yaml | 2 - .../schemas/WorkspaceVolumeConfig.yaml | 5 - openapi/team/v1/openapi.yaml | 193 +++-- openapi/team/v1/paths/agents.yaml | 17 +- openapi/team/v1/paths/attachment-by-id.yaml | 10 - openapi/team/v1/paths/attachments.yaml | 66 -- .../paths/{tool-by-id.yaml => env-by-id.yaml} | 18 +- .../paths/{memory-buckets.yaml => envs.yaml} | 26 +- .../{variable-by-id.yaml => hook-by-id.yaml} | 18 +- .../v1/paths/{variables.yaml => hooks.yaml} | 31 +- ...cket-by-id.yaml => init-script-by-id.yaml} | 18 +- .../{mcp-servers.yaml => init-scripts.yaml} | 26 +- .../{mcp-server-by-id.yaml => mcp-by-id.yaml} | 18 +- ...orkspace-configurations.yaml => mcps.yaml} | 26 +- openapi/team/v1/paths/skill-by-id.yaml | 44 ++ openapi/team/v1/paths/skills.yaml | 42 ++ openapi/team/v1/paths/tools.yaml | 49 -- openapi/team/v1/paths/variable-resolve.yaml | 25 - .../v1/paths/volume-attachment-by-id.yaml | 24 + openapi/team/v1/paths/volume-attachments.yaml | 42 ++ openapi/team/v1/paths/volume-by-id.yaml | 44 ++ openapi/team/v1/paths/volumes.yaml | 42 ++ .../paths/workspace-configuration-by-id.yaml | 44 -- proto/agynio/api/teams/v1/teams.proto | 694 +++++++++--------- 85 files changed, 1048 insertions(+), 1065 deletions(-) delete mode 100644 openapi/team/v1/components/schemas/AgentConfig.yaml delete mode 100644 openapi/team/v1/components/schemas/Attachment.yaml delete mode 100644 openapi/team/v1/components/schemas/AttachmentCreateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/AttachmentKind.yaml create mode 100644 openapi/team/v1/components/schemas/ComputeResources.yaml delete mode 100644 openapi/team/v1/components/schemas/EntityType.yaml create mode 100644 openapi/team/v1/components/schemas/Env.yaml create mode 100644 openapi/team/v1/components/schemas/EnvCreateRequest.yaml rename openapi/team/v1/components/schemas/{VariableUpdateRequest.yaml => EnvUpdateRequest.yaml} (62%) create mode 100644 openapi/team/v1/components/schemas/Hook.yaml create mode 100644 openapi/team/v1/components/schemas/HookCreateRequest.yaml create mode 100644 openapi/team/v1/components/schemas/HookUpdateRequest.yaml create mode 100644 openapi/team/v1/components/schemas/InitScript.yaml create mode 100644 openapi/team/v1/components/schemas/InitScriptCreateRequest.yaml rename openapi/team/v1/components/schemas/{McpServerUpdateRequest.yaml => InitScriptUpdateRequest.yaml} (54%) create mode 100644 openapi/team/v1/components/schemas/Mcp.yaml create mode 100644 openapi/team/v1/components/schemas/McpCreateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/McpEnvItem.yaml delete mode 100644 openapi/team/v1/components/schemas/McpServer.yaml delete mode 100644 openapi/team/v1/components/schemas/McpServerConfig.yaml delete mode 100644 openapi/team/v1/components/schemas/McpServerCreateRequest.yaml create mode 100644 openapi/team/v1/components/schemas/McpUpdateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/MemoryBucket.yaml delete mode 100644 openapi/team/v1/components/schemas/MemoryBucketConfig.yaml delete mode 100644 openapi/team/v1/components/schemas/MemoryBucketCreateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/MemoryBucketUpdateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/PaginatedAttachments.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedEnvs.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedHooks.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedInitScripts.yaml delete mode 100644 openapi/team/v1/components/schemas/PaginatedMcpServers.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedMcps.yaml delete mode 100644 openapi/team/v1/components/schemas/PaginatedMemoryBuckets.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedSkills.yaml delete mode 100644 openapi/team/v1/components/schemas/PaginatedTools.yaml delete mode 100644 openapi/team/v1/components/schemas/PaginatedVariables.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedVolumeAttachments.yaml create mode 100644 openapi/team/v1/components/schemas/PaginatedVolumes.yaml delete mode 100644 openapi/team/v1/components/schemas/PaginatedWorkspaceConfigurations.yaml delete mode 100644 openapi/team/v1/components/schemas/Pagination.yaml rename openapi/team/v1/components/schemas/{Tool.yaml => Skill.yaml} (54%) create mode 100644 openapi/team/v1/components/schemas/SkillCreateRequest.yaml rename openapi/team/v1/components/schemas/{ToolUpdateRequest.yaml => SkillUpdateRequest.yaml} (80%) delete mode 100644 openapi/team/v1/components/schemas/ToolCreateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/ToolType.yaml delete mode 100644 openapi/team/v1/components/schemas/Variable.yaml delete mode 100644 openapi/team/v1/components/schemas/VariableCreateRequest.yaml create mode 100644 openapi/team/v1/components/schemas/Volume.yaml create mode 100644 openapi/team/v1/components/schemas/VolumeAttachment.yaml create mode 100644 openapi/team/v1/components/schemas/VolumeAttachmentCreateRequest.yaml create mode 100644 openapi/team/v1/components/schemas/VolumeCreateRequest.yaml create mode 100644 openapi/team/v1/components/schemas/VolumeUpdateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspaceConfig.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspaceConfiguration.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspaceConfigurationCreateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspaceConfigurationUpdateRequest.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspaceEnvItem.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspacePlatform.yaml delete mode 100644 openapi/team/v1/components/schemas/WorkspaceVolumeConfig.yaml delete mode 100644 openapi/team/v1/paths/attachment-by-id.yaml delete mode 100644 openapi/team/v1/paths/attachments.yaml rename openapi/team/v1/paths/{tool-by-id.yaml => env-by-id.yaml} (72%) rename openapi/team/v1/paths/{memory-buckets.yaml => envs.yaml} (59%) rename openapi/team/v1/paths/{variable-by-id.yaml => hook-by-id.yaml} (70%) rename openapi/team/v1/paths/{variables.yaml => hooks.yaml} (57%) rename openapi/team/v1/paths/{memory-bucket-by-id.yaml => init-script-by-id.yaml} (67%) rename openapi/team/v1/paths/{mcp-servers.yaml => init-scripts.yaml} (61%) rename openapi/team/v1/paths/{mcp-server-by-id.yaml => mcp-by-id.yaml} (69%) rename openapi/team/v1/paths/{workspace-configurations.yaml => mcps.yaml} (56%) create mode 100644 openapi/team/v1/paths/skill-by-id.yaml create mode 100644 openapi/team/v1/paths/skills.yaml delete mode 100644 openapi/team/v1/paths/tools.yaml delete mode 100644 openapi/team/v1/paths/variable-resolve.yaml create mode 100644 openapi/team/v1/paths/volume-attachment-by-id.yaml create mode 100644 openapi/team/v1/paths/volume-attachments.yaml create mode 100644 openapi/team/v1/paths/volume-by-id.yaml create mode 100644 openapi/team/v1/paths/volumes.yaml delete mode 100644 openapi/team/v1/paths/workspace-configuration-by-id.yaml diff --git a/openapi/team/v1/components/schemas/Agent.yaml b/openapi/team/v1/components/schemas/Agent.yaml index 69d93d6..a2029fd 100644 --- a/openapi/team/v1/components/schemas/Agent.yaml +++ b/openapi/team/v1/components/schemas/Agent.yaml @@ -2,7 +2,13 @@ allOf: - $ref: './EntityMeta.yaml' - type: object properties: - title: { type: string } + name: { type: string } + role: { type: string } + model: { type: string, format: uuid } description: { type: string } - config: { $ref: './AgentConfig.yaml' } - required: [config] + configuration: + type: string + description: JSON-encoded agent configuration payload. + image: { type: string } + resources: { $ref: './ComputeResources.yaml' } + required: [name, role, model, configuration, image] diff --git a/openapi/team/v1/components/schemas/AgentConfig.yaml b/openapi/team/v1/components/schemas/AgentConfig.yaml deleted file mode 100644 index e53938c..0000000 --- a/openapi/team/v1/components/schemas/AgentConfig.yaml +++ /dev/null @@ -1,16 +0,0 @@ -type: object -properties: - model: { type: string } - systemPrompt: { type: string } - debounceMs: { type: integer, minimum: 0 } - whenBusy: { type: string, enum: ['wait', 'injectAfterTools'] } - processBuffer: { type: string, enum: ['allTogether', 'oneByOne'] } - sendFinalResponseToThread: { type: boolean } - summarizationKeepTokens: { type: integer, minimum: 0 } - summarizationMaxTokens: { type: integer, minimum: 1 } - restrictOutput: { type: boolean } - restrictionMessage: { type: string } - restrictionMaxInjections: { type: integer, minimum: 0 } - name: { type: string } - role: { type: string } -additionalProperties: false diff --git a/openapi/team/v1/components/schemas/AgentCreateRequest.yaml b/openapi/team/v1/components/schemas/AgentCreateRequest.yaml index 5e54c33..892d08c 100644 --- a/openapi/team/v1/components/schemas/AgentCreateRequest.yaml +++ b/openapi/team/v1/components/schemas/AgentCreateRequest.yaml @@ -1,6 +1,12 @@ type: object properties: - title: { type: string } + name: { type: string } + role: { type: string } + model: { type: string, format: uuid } description: { type: string } - config: { $ref: './AgentConfig.yaml' } -required: [config] + configuration: + type: string + description: JSON-encoded agent configuration payload. + image: { type: string } + resources: { $ref: './ComputeResources.yaml' } +required: [name, role, model, image] diff --git a/openapi/team/v1/components/schemas/AgentUpdateRequest.yaml b/openapi/team/v1/components/schemas/AgentUpdateRequest.yaml index 1dc01e5..3d40306 100644 --- a/openapi/team/v1/components/schemas/AgentUpdateRequest.yaml +++ b/openapi/team/v1/components/schemas/AgentUpdateRequest.yaml @@ -1,6 +1,12 @@ type: object properties: - title: { type: string } + name: { type: string } + role: { type: string } + model: { type: string, format: uuid } description: { type: string } - config: { $ref: './AgentConfig.yaml' } + configuration: + type: string + description: JSON-encoded agent configuration payload. + image: { type: string } + resources: { $ref: './ComputeResources.yaml' } additionalProperties: false diff --git a/openapi/team/v1/components/schemas/Attachment.yaml b/openapi/team/v1/components/schemas/Attachment.yaml deleted file mode 100644 index 967cf37..0000000 --- a/openapi/team/v1/components/schemas/Attachment.yaml +++ /dev/null @@ -1,10 +0,0 @@ -allOf: - - $ref: './EntityMeta.yaml' - - type: object - properties: - kind: { $ref: './AttachmentKind.yaml' } - sourceType: { $ref: './EntityType.yaml' } - sourceId: { type: string, format: uuid } - targetType: { $ref: './EntityType.yaml' } - targetId: { type: string, format: uuid } - required: [kind, sourceType, sourceId, targetType, targetId] diff --git a/openapi/team/v1/components/schemas/AttachmentCreateRequest.yaml b/openapi/team/v1/components/schemas/AttachmentCreateRequest.yaml deleted file mode 100644 index 96df702..0000000 --- a/openapi/team/v1/components/schemas/AttachmentCreateRequest.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -description: | - Create an attachment (relation) between two entities using a predefined `kind`. - Source/target types are implied by `kind` and validated by the backend; do not include them to avoid duplication. -properties: - kind: { $ref: './AttachmentKind.yaml' } - sourceId: { type: string, format: uuid } - targetId: { type: string, format: uuid } -required: [kind, sourceId, targetId] diff --git a/openapi/team/v1/components/schemas/AttachmentKind.yaml b/openapi/team/v1/components/schemas/AttachmentKind.yaml deleted file mode 100644 index db4785c..0000000 --- a/openapi/team/v1/components/schemas/AttachmentKind.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: string -description: Relation type between entities -enum: - - agent_tool - - agent_memoryBucket - - agent_workspaceConfiguration - - agent_mcpServer - - mcpServer_workspaceConfiguration diff --git a/openapi/team/v1/components/schemas/ComputeResources.yaml b/openapi/team/v1/components/schemas/ComputeResources.yaml new file mode 100644 index 0000000..ebd8d81 --- /dev/null +++ b/openapi/team/v1/components/schemas/ComputeResources.yaml @@ -0,0 +1,6 @@ +type: object +properties: + requestsCpu: { type: string } + requestsMemory: { type: string } + limitsCpu: { type: string } + limitsMemory: { type: string } diff --git a/openapi/team/v1/components/schemas/EntityType.yaml b/openapi/team/v1/components/schemas/EntityType.yaml deleted file mode 100644 index 78b199f..0000000 --- a/openapi/team/v1/components/schemas/EntityType.yaml +++ /dev/null @@ -1,8 +0,0 @@ -type: string -enum: - - agent - - tool - - mcpServer - - workspaceConfiguration - - memoryBucket - - variable diff --git a/openapi/team/v1/components/schemas/Env.yaml b/openapi/team/v1/components/schemas/Env.yaml new file mode 100644 index 0000000..6b7bd78 --- /dev/null +++ b/openapi/team/v1/components/schemas/Env.yaml @@ -0,0 +1,26 @@ +allOf: + - $ref: './EntityMeta.yaml' + - type: object + properties: + name: { type: string } + description: { type: string } + agentId: + type: string + format: uuid + description: Target agent. Mutually exclusive with mcpId and hookId. + mcpId: + type: string + format: uuid + description: Target MCP. Mutually exclusive with agentId and hookId. + hookId: + type: string + format: uuid + description: Target hook. Mutually exclusive with agentId and mcpId. + value: + type: string + description: Plain-text value. Mutually exclusive with secretId. + secretId: + type: string + format: uuid + description: Secret reference. Mutually exclusive with value. + required: [name] diff --git a/openapi/team/v1/components/schemas/EnvCreateRequest.yaml b/openapi/team/v1/components/schemas/EnvCreateRequest.yaml new file mode 100644 index 0000000..a502c6d --- /dev/null +++ b/openapi/team/v1/components/schemas/EnvCreateRequest.yaml @@ -0,0 +1,24 @@ +type: object +properties: + name: { type: string } + description: { type: string } + agentId: + type: string + format: uuid + description: Target agent. Mutually exclusive with mcpId and hookId. + mcpId: + type: string + format: uuid + description: Target MCP. Mutually exclusive with agentId and hookId. + hookId: + type: string + format: uuid + description: Target hook. Mutually exclusive with agentId and mcpId. + value: + type: string + description: Plain-text value. Mutually exclusive with secretId. + secretId: + type: string + format: uuid + description: Secret reference. Mutually exclusive with value. +required: [name] diff --git a/openapi/team/v1/components/schemas/VariableUpdateRequest.yaml b/openapi/team/v1/components/schemas/EnvUpdateRequest.yaml similarity index 62% rename from openapi/team/v1/components/schemas/VariableUpdateRequest.yaml rename to openapi/team/v1/components/schemas/EnvUpdateRequest.yaml index 40470d9..adc2512 100644 --- a/openapi/team/v1/components/schemas/VariableUpdateRequest.yaml +++ b/openapi/team/v1/components/schemas/EnvUpdateRequest.yaml @@ -1,6 +1,7 @@ type: object properties: - key: { type: string, minLength: 1 } - value: { type: string } + name: { type: string } description: { type: string } + value: { type: string } + secretId: { type: string, format: uuid } additionalProperties: false diff --git a/openapi/team/v1/components/schemas/Hook.yaml b/openapi/team/v1/components/schemas/Hook.yaml new file mode 100644 index 0000000..5a0060e --- /dev/null +++ b/openapi/team/v1/components/schemas/Hook.yaml @@ -0,0 +1,11 @@ +allOf: + - $ref: './EntityMeta.yaml' + - type: object + properties: + agentId: { type: string, format: uuid } + event: { type: string } + function: { type: string } + image: { type: string } + resources: { $ref: './ComputeResources.yaml' } + description: { type: string } + required: [agentId, event, function, image] diff --git a/openapi/team/v1/components/schemas/HookCreateRequest.yaml b/openapi/team/v1/components/schemas/HookCreateRequest.yaml new file mode 100644 index 0000000..2d3ecbb --- /dev/null +++ b/openapi/team/v1/components/schemas/HookCreateRequest.yaml @@ -0,0 +1,9 @@ +type: object +properties: + agentId: { type: string, format: uuid } + event: { type: string } + function: { type: string } + image: { type: string } + resources: { $ref: './ComputeResources.yaml' } + description: { type: string } +required: [agentId, event, function, image] diff --git a/openapi/team/v1/components/schemas/HookUpdateRequest.yaml b/openapi/team/v1/components/schemas/HookUpdateRequest.yaml new file mode 100644 index 0000000..8887093 --- /dev/null +++ b/openapi/team/v1/components/schemas/HookUpdateRequest.yaml @@ -0,0 +1,8 @@ +type: object +properties: + event: { type: string } + function: { type: string } + image: { type: string } + resources: { $ref: './ComputeResources.yaml' } + description: { type: string } +additionalProperties: false diff --git a/openapi/team/v1/components/schemas/InitScript.yaml b/openapi/team/v1/components/schemas/InitScript.yaml new file mode 100644 index 0000000..6b48250 --- /dev/null +++ b/openapi/team/v1/components/schemas/InitScript.yaml @@ -0,0 +1,19 @@ +allOf: + - $ref: './EntityMeta.yaml' + - type: object + properties: + script: { type: string } + description: { type: string } + agentId: + type: string + format: uuid + description: Target agent. Mutually exclusive with mcpId and hookId. + mcpId: + type: string + format: uuid + description: Target MCP. Mutually exclusive with agentId and hookId. + hookId: + type: string + format: uuid + description: Target hook. Mutually exclusive with agentId and mcpId. + required: [script] diff --git a/openapi/team/v1/components/schemas/InitScriptCreateRequest.yaml b/openapi/team/v1/components/schemas/InitScriptCreateRequest.yaml new file mode 100644 index 0000000..e9bd9fd --- /dev/null +++ b/openapi/team/v1/components/schemas/InitScriptCreateRequest.yaml @@ -0,0 +1,17 @@ +type: object +properties: + script: { type: string } + description: { type: string } + agentId: + type: string + format: uuid + description: Target agent. Mutually exclusive with mcpId and hookId. + mcpId: + type: string + format: uuid + description: Target MCP. Mutually exclusive with agentId and hookId. + hookId: + type: string + format: uuid + description: Target hook. Mutually exclusive with agentId and mcpId. +required: [script] diff --git a/openapi/team/v1/components/schemas/McpServerUpdateRequest.yaml b/openapi/team/v1/components/schemas/InitScriptUpdateRequest.yaml similarity index 54% rename from openapi/team/v1/components/schemas/McpServerUpdateRequest.yaml rename to openapi/team/v1/components/schemas/InitScriptUpdateRequest.yaml index 0dd6777..ad151d1 100644 --- a/openapi/team/v1/components/schemas/McpServerUpdateRequest.yaml +++ b/openapi/team/v1/components/schemas/InitScriptUpdateRequest.yaml @@ -1,6 +1,5 @@ type: object properties: - title: { type: string } + script: { type: string } description: { type: string } - config: { $ref: './McpServerConfig.yaml' } additionalProperties: false diff --git a/openapi/team/v1/components/schemas/Mcp.yaml b/openapi/team/v1/components/schemas/Mcp.yaml new file mode 100644 index 0000000..a6ab3f5 --- /dev/null +++ b/openapi/team/v1/components/schemas/Mcp.yaml @@ -0,0 +1,10 @@ +allOf: + - $ref: './EntityMeta.yaml' + - type: object + properties: + agentId: { type: string, format: uuid } + image: { type: string } + command: { type: string } + resources: { $ref: './ComputeResources.yaml' } + description: { type: string } + required: [agentId, image, command] diff --git a/openapi/team/v1/components/schemas/McpCreateRequest.yaml b/openapi/team/v1/components/schemas/McpCreateRequest.yaml new file mode 100644 index 0000000..43823a6 --- /dev/null +++ b/openapi/team/v1/components/schemas/McpCreateRequest.yaml @@ -0,0 +1,8 @@ +type: object +properties: + agentId: { type: string, format: uuid } + image: { type: string } + command: { type: string } + resources: { $ref: './ComputeResources.yaml' } + description: { type: string } +required: [agentId, image, command] diff --git a/openapi/team/v1/components/schemas/McpEnvItem.yaml b/openapi/team/v1/components/schemas/McpEnvItem.yaml deleted file mode 100644 index c8e84d6..0000000 --- a/openapi/team/v1/components/schemas/McpEnvItem.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: object -properties: - name: { type: string } - value: { type: string } -required: [name, value] diff --git a/openapi/team/v1/components/schemas/McpServer.yaml b/openapi/team/v1/components/schemas/McpServer.yaml deleted file mode 100644 index 37c3e73..0000000 --- a/openapi/team/v1/components/schemas/McpServer.yaml +++ /dev/null @@ -1,8 +0,0 @@ -allOf: - - $ref: './EntityMeta.yaml' - - type: object - properties: - title: { type: string } - description: { type: string } - config: { $ref: './McpServerConfig.yaml' } - required: [config] diff --git a/openapi/team/v1/components/schemas/McpServerConfig.yaml b/openapi/team/v1/components/schemas/McpServerConfig.yaml deleted file mode 100644 index 7bb4865..0000000 --- a/openapi/team/v1/components/schemas/McpServerConfig.yaml +++ /dev/null @@ -1,35 +0,0 @@ -type: object -properties: - namespace: { type: string } - command: { type: string } - workdir: { type: string } - env: - type: array - items: { $ref: './McpEnvItem.yaml' } - requestTimeoutMs: { type: integer, minimum: 1 } - startupTimeoutMs: { type: integer, minimum: 1 } - heartbeatIntervalMs: { type: integer, minimum: 1 } - staleTimeoutMs: { type: integer, minimum: 0 } - restart: - type: object - properties: - maxAttempts: { type: integer, minimum: 1 } - backoffMs: { type: integer, minimum: 1 } - additionalProperties: false - toolFilter: - type: object - properties: - mode: - type: string - enum: [allow, deny] - rules: - type: array - items: - type: object - properties: - pattern: { type: string, minLength: 1 } - required: [pattern] - additionalProperties: false - required: [mode] - additionalProperties: false -additionalProperties: false diff --git a/openapi/team/v1/components/schemas/McpServerCreateRequest.yaml b/openapi/team/v1/components/schemas/McpServerCreateRequest.yaml deleted file mode 100644 index d60a80a..0000000 --- a/openapi/team/v1/components/schemas/McpServerCreateRequest.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - title: { type: string } - description: { type: string } - config: { $ref: './McpServerConfig.yaml' } -required: [config] diff --git a/openapi/team/v1/components/schemas/McpUpdateRequest.yaml b/openapi/team/v1/components/schemas/McpUpdateRequest.yaml new file mode 100644 index 0000000..f3011f3 --- /dev/null +++ b/openapi/team/v1/components/schemas/McpUpdateRequest.yaml @@ -0,0 +1,7 @@ +type: object +properties: + image: { type: string } + command: { type: string } + resources: { $ref: './ComputeResources.yaml' } + description: { type: string } +additionalProperties: false diff --git a/openapi/team/v1/components/schemas/MemoryBucket.yaml b/openapi/team/v1/components/schemas/MemoryBucket.yaml deleted file mode 100644 index 5064716..0000000 --- a/openapi/team/v1/components/schemas/MemoryBucket.yaml +++ /dev/null @@ -1,8 +0,0 @@ -allOf: - - $ref: './EntityMeta.yaml' - - type: object - properties: - title: { type: string } - description: { type: string } - config: { $ref: './MemoryBucketConfig.yaml' } - required: [config] diff --git a/openapi/team/v1/components/schemas/MemoryBucketConfig.yaml b/openapi/team/v1/components/schemas/MemoryBucketConfig.yaml deleted file mode 100644 index 0bf3daa..0000000 --- a/openapi/team/v1/components/schemas/MemoryBucketConfig.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: object -properties: - scope: - type: string - enum: [global, perThread] - collectionPrefix: { type: string } -additionalProperties: false diff --git a/openapi/team/v1/components/schemas/MemoryBucketCreateRequest.yaml b/openapi/team/v1/components/schemas/MemoryBucketCreateRequest.yaml deleted file mode 100644 index 02adac3..0000000 --- a/openapi/team/v1/components/schemas/MemoryBucketCreateRequest.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - title: { type: string } - description: { type: string } - config: { $ref: './MemoryBucketConfig.yaml' } -required: [config] diff --git a/openapi/team/v1/components/schemas/MemoryBucketUpdateRequest.yaml b/openapi/team/v1/components/schemas/MemoryBucketUpdateRequest.yaml deleted file mode 100644 index d713fa1..0000000 --- a/openapi/team/v1/components/schemas/MemoryBucketUpdateRequest.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - title: { type: string } - description: { type: string } - config: { $ref: './MemoryBucketConfig.yaml' } -additionalProperties: false diff --git a/openapi/team/v1/components/schemas/PaginatedAgents.yaml b/openapi/team/v1/components/schemas/PaginatedAgents.yaml index 940abd0..556441a 100644 --- a/openapi/team/v1/components/schemas/PaginatedAgents.yaml +++ b/openapi/team/v1/components/schemas/PaginatedAgents.yaml @@ -3,7 +3,5 @@ properties: items: type: array items: { $ref: './Agent.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedAttachments.yaml b/openapi/team/v1/components/schemas/PaginatedAttachments.yaml deleted file mode 100644 index f9a4269..0000000 --- a/openapi/team/v1/components/schemas/PaginatedAttachments.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -properties: - items: - type: array - items: { $ref: './Attachment.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] diff --git a/openapi/team/v1/components/schemas/PaginatedEnvs.yaml b/openapi/team/v1/components/schemas/PaginatedEnvs.yaml new file mode 100644 index 0000000..6cc68c0 --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedEnvs.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './Env.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedHooks.yaml b/openapi/team/v1/components/schemas/PaginatedHooks.yaml new file mode 100644 index 0000000..55094bf --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedHooks.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './Hook.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedInitScripts.yaml b/openapi/team/v1/components/schemas/PaginatedInitScripts.yaml new file mode 100644 index 0000000..5159cf9 --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedInitScripts.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './InitScript.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedMcpServers.yaml b/openapi/team/v1/components/schemas/PaginatedMcpServers.yaml deleted file mode 100644 index cc1bdd2..0000000 --- a/openapi/team/v1/components/schemas/PaginatedMcpServers.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -properties: - items: - type: array - items: { $ref: './McpServer.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] diff --git a/openapi/team/v1/components/schemas/PaginatedMcps.yaml b/openapi/team/v1/components/schemas/PaginatedMcps.yaml new file mode 100644 index 0000000..652f5ed --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedMcps.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './Mcp.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedMemoryBuckets.yaml b/openapi/team/v1/components/schemas/PaginatedMemoryBuckets.yaml deleted file mode 100644 index feb04d0..0000000 --- a/openapi/team/v1/components/schemas/PaginatedMemoryBuckets.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -properties: - items: - type: array - items: { $ref: './MemoryBucket.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] diff --git a/openapi/team/v1/components/schemas/PaginatedSkills.yaml b/openapi/team/v1/components/schemas/PaginatedSkills.yaml new file mode 100644 index 0000000..e502258 --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedSkills.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './Skill.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedTools.yaml b/openapi/team/v1/components/schemas/PaginatedTools.yaml deleted file mode 100644 index 02fa226..0000000 --- a/openapi/team/v1/components/schemas/PaginatedTools.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -properties: - items: - type: array - items: { $ref: './Tool.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] diff --git a/openapi/team/v1/components/schemas/PaginatedVariables.yaml b/openapi/team/v1/components/schemas/PaginatedVariables.yaml deleted file mode 100644 index 34ddd27..0000000 --- a/openapi/team/v1/components/schemas/PaginatedVariables.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -properties: - items: - type: array - items: { $ref: './Variable.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] diff --git a/openapi/team/v1/components/schemas/PaginatedVolumeAttachments.yaml b/openapi/team/v1/components/schemas/PaginatedVolumeAttachments.yaml new file mode 100644 index 0000000..33b680f --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedVolumeAttachments.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './VolumeAttachment.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedVolumes.yaml b/openapi/team/v1/components/schemas/PaginatedVolumes.yaml new file mode 100644 index 0000000..276ce71 --- /dev/null +++ b/openapi/team/v1/components/schemas/PaginatedVolumes.yaml @@ -0,0 +1,7 @@ +type: object +properties: + items: + type: array + items: { $ref: './Volume.yaml' } + nextPageToken: { type: string } +required: [items] diff --git a/openapi/team/v1/components/schemas/PaginatedWorkspaceConfigurations.yaml b/openapi/team/v1/components/schemas/PaginatedWorkspaceConfigurations.yaml deleted file mode 100644 index 80e8f9d..0000000 --- a/openapi/team/v1/components/schemas/PaginatedWorkspaceConfigurations.yaml +++ /dev/null @@ -1,9 +0,0 @@ -type: object -properties: - items: - type: array - items: { $ref: './WorkspaceConfiguration.yaml' } - page: { type: integer } - perPage: { type: integer } - total: { type: integer } -required: [items, page, perPage, total] diff --git a/openapi/team/v1/components/schemas/Pagination.yaml b/openapi/team/v1/components/schemas/Pagination.yaml deleted file mode 100644 index 82421f7..0000000 --- a/openapi/team/v1/components/schemas/Pagination.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - page: { type: integer, minimum: 1 } - perPage: { type: integer, minimum: 1 } - total: { type: integer, minimum: 0 } -required: [page, perPage, total] diff --git a/openapi/team/v1/components/schemas/Tool.yaml b/openapi/team/v1/components/schemas/Skill.yaml similarity index 54% rename from openapi/team/v1/components/schemas/Tool.yaml rename to openapi/team/v1/components/schemas/Skill.yaml index 693ccf3..ca37cc8 100644 --- a/openapi/team/v1/components/schemas/Tool.yaml +++ b/openapi/team/v1/components/schemas/Skill.yaml @@ -2,8 +2,8 @@ allOf: - $ref: './EntityMeta.yaml' - type: object properties: - type: { $ref: './ToolType.yaml' } + agentId: { type: string, format: uuid } name: { type: string } + body: { type: string } description: { type: string } - config: { type: object } - required: [type] + required: [agentId, name, body] diff --git a/openapi/team/v1/components/schemas/SkillCreateRequest.yaml b/openapi/team/v1/components/schemas/SkillCreateRequest.yaml new file mode 100644 index 0000000..3267525 --- /dev/null +++ b/openapi/team/v1/components/schemas/SkillCreateRequest.yaml @@ -0,0 +1,7 @@ +type: object +properties: + agentId: { type: string, format: uuid } + name: { type: string } + body: { type: string } + description: { type: string } +required: [agentId, name, body] diff --git a/openapi/team/v1/components/schemas/ToolUpdateRequest.yaml b/openapi/team/v1/components/schemas/SkillUpdateRequest.yaml similarity index 80% rename from openapi/team/v1/components/schemas/ToolUpdateRequest.yaml rename to openapi/team/v1/components/schemas/SkillUpdateRequest.yaml index 9746958..573a4d8 100644 --- a/openapi/team/v1/components/schemas/ToolUpdateRequest.yaml +++ b/openapi/team/v1/components/schemas/SkillUpdateRequest.yaml @@ -1,6 +1,6 @@ type: object properties: name: { type: string } + body: { type: string } description: { type: string } - config: { type: object } additionalProperties: false diff --git a/openapi/team/v1/components/schemas/ToolCreateRequest.yaml b/openapi/team/v1/components/schemas/ToolCreateRequest.yaml deleted file mode 100644 index 7407ecb..0000000 --- a/openapi/team/v1/components/schemas/ToolCreateRequest.yaml +++ /dev/null @@ -1,7 +0,0 @@ -type: object -properties: - type: { $ref: './ToolType.yaml' } - name: { type: string } - description: { type: string } - config: { type: object } -required: [type] diff --git a/openapi/team/v1/components/schemas/ToolType.yaml b/openapi/team/v1/components/schemas/ToolType.yaml deleted file mode 100644 index 4711af7..0000000 --- a/openapi/team/v1/components/schemas/ToolType.yaml +++ /dev/null @@ -1,10 +0,0 @@ -type: string -enum: - - manage - - memory - - shell_command - - send_message - - send_slack_message - - remind_me - - github_clone_repo - - call_agent diff --git a/openapi/team/v1/components/schemas/Variable.yaml b/openapi/team/v1/components/schemas/Variable.yaml deleted file mode 100644 index 411fd90..0000000 --- a/openapi/team/v1/components/schemas/Variable.yaml +++ /dev/null @@ -1,8 +0,0 @@ -allOf: - - $ref: './EntityMeta.yaml' - - type: object - properties: - key: { type: string } - value: { type: string } - description: { type: string } - required: [key, value] diff --git a/openapi/team/v1/components/schemas/VariableCreateRequest.yaml b/openapi/team/v1/components/schemas/VariableCreateRequest.yaml deleted file mode 100644 index 75a6aca..0000000 --- a/openapi/team/v1/components/schemas/VariableCreateRequest.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - key: { type: string, minLength: 1 } - value: { type: string } - description: { type: string } -required: [key, value] diff --git a/openapi/team/v1/components/schemas/Volume.yaml b/openapi/team/v1/components/schemas/Volume.yaml new file mode 100644 index 0000000..8b868fd --- /dev/null +++ b/openapi/team/v1/components/schemas/Volume.yaml @@ -0,0 +1,11 @@ +allOf: + - $ref: './EntityMeta.yaml' + - type: object + properties: + persistent: { type: boolean } + mountPath: { type: string } + size: + type: string + description: Required when persistent is true. + description: { type: string } + required: [persistent, mountPath] diff --git a/openapi/team/v1/components/schemas/VolumeAttachment.yaml b/openapi/team/v1/components/schemas/VolumeAttachment.yaml new file mode 100644 index 0000000..299282a --- /dev/null +++ b/openapi/team/v1/components/schemas/VolumeAttachment.yaml @@ -0,0 +1,18 @@ +allOf: + - $ref: './EntityMeta.yaml' + - type: object + properties: + volumeId: { type: string, format: uuid } + agentId: + type: string + format: uuid + description: Target agent. Mutually exclusive with mcpId and hookId. + mcpId: + type: string + format: uuid + description: Target MCP. Mutually exclusive with agentId and hookId. + hookId: + type: string + format: uuid + description: Target hook. Mutually exclusive with agentId and mcpId. + required: [volumeId] diff --git a/openapi/team/v1/components/schemas/VolumeAttachmentCreateRequest.yaml b/openapi/team/v1/components/schemas/VolumeAttachmentCreateRequest.yaml new file mode 100644 index 0000000..72d1c99 --- /dev/null +++ b/openapi/team/v1/components/schemas/VolumeAttachmentCreateRequest.yaml @@ -0,0 +1,16 @@ +type: object +properties: + volumeId: { type: string, format: uuid } + agentId: + type: string + format: uuid + description: Target agent. Mutually exclusive with mcpId and hookId. + mcpId: + type: string + format: uuid + description: Target MCP. Mutually exclusive with agentId and hookId. + hookId: + type: string + format: uuid + description: Target hook. Mutually exclusive with agentId and mcpId. +required: [volumeId] diff --git a/openapi/team/v1/components/schemas/VolumeCreateRequest.yaml b/openapi/team/v1/components/schemas/VolumeCreateRequest.yaml new file mode 100644 index 0000000..c3620c4 --- /dev/null +++ b/openapi/team/v1/components/schemas/VolumeCreateRequest.yaml @@ -0,0 +1,9 @@ +type: object +properties: + persistent: { type: boolean } + mountPath: { type: string } + size: + type: string + description: Required when persistent is true. + description: { type: string } +required: [persistent, mountPath] diff --git a/openapi/team/v1/components/schemas/VolumeUpdateRequest.yaml b/openapi/team/v1/components/schemas/VolumeUpdateRequest.yaml new file mode 100644 index 0000000..f0c5f60 --- /dev/null +++ b/openapi/team/v1/components/schemas/VolumeUpdateRequest.yaml @@ -0,0 +1,9 @@ +type: object +properties: + persistent: { type: boolean } + mountPath: { type: string } + size: + type: string + description: Required when persistent is true. + description: { type: string } +additionalProperties: false diff --git a/openapi/team/v1/components/schemas/WorkspaceConfig.yaml b/openapi/team/v1/components/schemas/WorkspaceConfig.yaml deleted file mode 100644 index ec4bcbe..0000000 --- a/openapi/team/v1/components/schemas/WorkspaceConfig.yaml +++ /dev/null @@ -1,21 +0,0 @@ -type: object -properties: - image: { type: string } - env: - type: array - items: { $ref: './WorkspaceEnvItem.yaml' } - initialScript: { type: string } - cpu_limit: - oneOf: - - { type: number } - - { type: string } - memory_limit: - oneOf: - - { type: number } - - { type: string } - platform: { $ref: './WorkspacePlatform.yaml' } - enableDinD: { type: boolean } - ttlSeconds: { type: integer, minimum: 0 } - nix: { type: object } - volumes: { $ref: './WorkspaceVolumeConfig.yaml' } -additionalProperties: false diff --git a/openapi/team/v1/components/schemas/WorkspaceConfiguration.yaml b/openapi/team/v1/components/schemas/WorkspaceConfiguration.yaml deleted file mode 100644 index 6e868bc..0000000 --- a/openapi/team/v1/components/schemas/WorkspaceConfiguration.yaml +++ /dev/null @@ -1,8 +0,0 @@ -allOf: - - $ref: './EntityMeta.yaml' - - type: object - properties: - title: { type: string } - description: { type: string } - config: { $ref: './WorkspaceConfig.yaml' } - required: [config] diff --git a/openapi/team/v1/components/schemas/WorkspaceConfigurationCreateRequest.yaml b/openapi/team/v1/components/schemas/WorkspaceConfigurationCreateRequest.yaml deleted file mode 100644 index c110c2a..0000000 --- a/openapi/team/v1/components/schemas/WorkspaceConfigurationCreateRequest.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - title: { type: string } - description: { type: string } - config: { $ref: './WorkspaceConfig.yaml' } -required: [config] diff --git a/openapi/team/v1/components/schemas/WorkspaceConfigurationUpdateRequest.yaml b/openapi/team/v1/components/schemas/WorkspaceConfigurationUpdateRequest.yaml deleted file mode 100644 index 62a6069..0000000 --- a/openapi/team/v1/components/schemas/WorkspaceConfigurationUpdateRequest.yaml +++ /dev/null @@ -1,6 +0,0 @@ -type: object -properties: - title: { type: string } - description: { type: string } - config: { $ref: './WorkspaceConfig.yaml' } -additionalProperties: false diff --git a/openapi/team/v1/components/schemas/WorkspaceEnvItem.yaml b/openapi/team/v1/components/schemas/WorkspaceEnvItem.yaml deleted file mode 100644 index c8e84d6..0000000 --- a/openapi/team/v1/components/schemas/WorkspaceEnvItem.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: object -properties: - name: { type: string } - value: { type: string } -required: [name, value] diff --git a/openapi/team/v1/components/schemas/WorkspacePlatform.yaml b/openapi/team/v1/components/schemas/WorkspacePlatform.yaml deleted file mode 100644 index a0f62dc..0000000 --- a/openapi/team/v1/components/schemas/WorkspacePlatform.yaml +++ /dev/null @@ -1,2 +0,0 @@ -type: string -enum: [linux/amd64, linux/arm64, auto] diff --git a/openapi/team/v1/components/schemas/WorkspaceVolumeConfig.yaml b/openapi/team/v1/components/schemas/WorkspaceVolumeConfig.yaml deleted file mode 100644 index 5ee6465..0000000 --- a/openapi/team/v1/components/schemas/WorkspaceVolumeConfig.yaml +++ /dev/null @@ -1,5 +0,0 @@ -type: object -properties: - enabled: { type: boolean } - mountPath: { type: string, pattern: '^/' } -additionalProperties: false diff --git a/openapi/team/v1/openapi.yaml b/openapi/team/v1/openapi.yaml index 95ae28a..3e00925 100644 --- a/openapi/team/v1/openapi.yaml +++ b/openapi/team/v1/openapi.yaml @@ -6,43 +6,46 @@ servers: - url: https://api.example.com tags: - name: Agents - - name: Tools - - name: MCP Servers - - name: WorkspaceConfigurations - - name: MemoryBuckets - - name: Variables - - name: Attachments + - name: Volumes + - name: Volume Attachments + - name: MCPs + - name: Skills + - name: Hooks + - name: Envs + - name: Init Scripts paths: /agents: $ref: './paths/agents.yaml' /agents/{id}: $ref: './paths/agent-by-id.yaml' - /tools: - $ref: './paths/tools.yaml' - /tools/{id}: - $ref: './paths/tool-by-id.yaml' - /mcp-servers: - $ref: './paths/mcp-servers.yaml' - /mcp-servers/{id}: - $ref: './paths/mcp-server-by-id.yaml' - /workspace-configurations: - $ref: './paths/workspace-configurations.yaml' - /workspace-configurations/{id}: - $ref: './paths/workspace-configuration-by-id.yaml' - /memory-buckets: - $ref: './paths/memory-buckets.yaml' - /memory-buckets/{id}: - $ref: './paths/memory-bucket-by-id.yaml' - /variables: - $ref: './paths/variables.yaml' - /variables/{id}: - $ref: './paths/variable-by-id.yaml' - /variables/resolve/{key}: - $ref: './paths/variable-resolve.yaml' - /attachments: - $ref: './paths/attachments.yaml' - /attachments/{id}: - $ref: './paths/attachment-by-id.yaml' + /volumes: + $ref: './paths/volumes.yaml' + /volumes/{id}: + $ref: './paths/volume-by-id.yaml' + /volume-attachments: + $ref: './paths/volume-attachments.yaml' + /volume-attachments/{id}: + $ref: './paths/volume-attachment-by-id.yaml' + /mcps: + $ref: './paths/mcps.yaml' + /mcps/{id}: + $ref: './paths/mcp-by-id.yaml' + /skills: + $ref: './paths/skills.yaml' + /skills/{id}: + $ref: './paths/skill-by-id.yaml' + /hooks: + $ref: './paths/hooks.yaml' + /hooks/{id}: + $ref: './paths/hook-by-id.yaml' + /envs: + $ref: './paths/envs.yaml' + /envs/{id}: + $ref: './paths/env-by-id.yaml' + /init-scripts: + $ref: './paths/init-scripts.yaml' + /init-scripts/{id}: + $ref: './paths/init-script-by-id.yaml' components: parameters: IdPath: @@ -53,83 +56,69 @@ components: schemas: Problem: $ref: './components/schemas/Problem.yaml' - Pagination: - $ref: './components/schemas/Pagination.yaml' EntityMeta: $ref: './components/schemas/EntityMeta.yaml' + ComputeResources: + $ref: './components/schemas/ComputeResources.yaml' Agent: $ref: './components/schemas/Agent.yaml' - AgentConfig: - $ref: './components/schemas/AgentConfig.yaml' AgentCreateRequest: $ref: './components/schemas/AgentCreateRequest.yaml' AgentUpdateRequest: $ref: './components/schemas/AgentUpdateRequest.yaml' PaginatedAgents: $ref: './components/schemas/PaginatedAgents.yaml' - Tool: - $ref: './components/schemas/Tool.yaml' - ToolType: - $ref: './components/schemas/ToolType.yaml' - ToolCreateRequest: - $ref: './components/schemas/ToolCreateRequest.yaml' - ToolUpdateRequest: - $ref: './components/schemas/ToolUpdateRequest.yaml' - PaginatedTools: - $ref: './components/schemas/PaginatedTools.yaml' - McpServer: - $ref: './components/schemas/McpServer.yaml' - McpEnvItem: - $ref: './components/schemas/McpEnvItem.yaml' - McpServerConfig: - $ref: './components/schemas/McpServerConfig.yaml' - McpServerCreateRequest: - $ref: './components/schemas/McpServerCreateRequest.yaml' - McpServerUpdateRequest: - $ref: './components/schemas/McpServerUpdateRequest.yaml' - PaginatedMcpServers: - $ref: './components/schemas/PaginatedMcpServers.yaml' - WorkspaceConfiguration: - $ref: './components/schemas/WorkspaceConfiguration.yaml' - WorkspaceEnvItem: - $ref: './components/schemas/WorkspaceEnvItem.yaml' - WorkspaceVolumeConfig: - $ref: './components/schemas/WorkspaceVolumeConfig.yaml' - WorkspacePlatform: - $ref: './components/schemas/WorkspacePlatform.yaml' - WorkspaceConfig: - $ref: './components/schemas/WorkspaceConfig.yaml' - WorkspaceConfigurationCreateRequest: - $ref: './components/schemas/WorkspaceConfigurationCreateRequest.yaml' - WorkspaceConfigurationUpdateRequest: - $ref: './components/schemas/WorkspaceConfigurationUpdateRequest.yaml' - PaginatedWorkspaceConfigurations: - $ref: './components/schemas/PaginatedWorkspaceConfigurations.yaml' - MemoryBucket: - $ref: './components/schemas/MemoryBucket.yaml' - MemoryBucketConfig: - $ref: './components/schemas/MemoryBucketConfig.yaml' - MemoryBucketCreateRequest: - $ref: './components/schemas/MemoryBucketCreateRequest.yaml' - MemoryBucketUpdateRequest: - $ref: './components/schemas/MemoryBucketUpdateRequest.yaml' - PaginatedMemoryBuckets: - $ref: './components/schemas/PaginatedMemoryBuckets.yaml' - Variable: - $ref: './components/schemas/Variable.yaml' - VariableCreateRequest: - $ref: './components/schemas/VariableCreateRequest.yaml' - VariableUpdateRequest: - $ref: './components/schemas/VariableUpdateRequest.yaml' - PaginatedVariables: - $ref: './components/schemas/PaginatedVariables.yaml' - EntityType: - $ref: './components/schemas/EntityType.yaml' - AttachmentKind: - $ref: './components/schemas/AttachmentKind.yaml' - Attachment: - $ref: './components/schemas/Attachment.yaml' - AttachmentCreateRequest: - $ref: './components/schemas/AttachmentCreateRequest.yaml' - PaginatedAttachments: - $ref: './components/schemas/PaginatedAttachments.yaml' + Volume: + $ref: './components/schemas/Volume.yaml' + VolumeCreateRequest: + $ref: './components/schemas/VolumeCreateRequest.yaml' + VolumeUpdateRequest: + $ref: './components/schemas/VolumeUpdateRequest.yaml' + PaginatedVolumes: + $ref: './components/schemas/PaginatedVolumes.yaml' + VolumeAttachment: + $ref: './components/schemas/VolumeAttachment.yaml' + VolumeAttachmentCreateRequest: + $ref: './components/schemas/VolumeAttachmentCreateRequest.yaml' + PaginatedVolumeAttachments: + $ref: './components/schemas/PaginatedVolumeAttachments.yaml' + Mcp: + $ref: './components/schemas/Mcp.yaml' + McpCreateRequest: + $ref: './components/schemas/McpCreateRequest.yaml' + McpUpdateRequest: + $ref: './components/schemas/McpUpdateRequest.yaml' + PaginatedMcps: + $ref: './components/schemas/PaginatedMcps.yaml' + Skill: + $ref: './components/schemas/Skill.yaml' + SkillCreateRequest: + $ref: './components/schemas/SkillCreateRequest.yaml' + SkillUpdateRequest: + $ref: './components/schemas/SkillUpdateRequest.yaml' + PaginatedSkills: + $ref: './components/schemas/PaginatedSkills.yaml' + Hook: + $ref: './components/schemas/Hook.yaml' + HookCreateRequest: + $ref: './components/schemas/HookCreateRequest.yaml' + HookUpdateRequest: + $ref: './components/schemas/HookUpdateRequest.yaml' + PaginatedHooks: + $ref: './components/schemas/PaginatedHooks.yaml' + Env: + $ref: './components/schemas/Env.yaml' + EnvCreateRequest: + $ref: './components/schemas/EnvCreateRequest.yaml' + EnvUpdateRequest: + $ref: './components/schemas/EnvUpdateRequest.yaml' + PaginatedEnvs: + $ref: './components/schemas/PaginatedEnvs.yaml' + InitScript: + $ref: './components/schemas/InitScript.yaml' + InitScriptCreateRequest: + $ref: './components/schemas/InitScriptCreateRequest.yaml' + InitScriptUpdateRequest: + $ref: './components/schemas/InitScriptUpdateRequest.yaml' + PaginatedInitScripts: + $ref: './components/schemas/PaginatedInitScripts.yaml' diff --git a/openapi/team/v1/paths/agents.yaml b/openapi/team/v1/paths/agents.yaml index 3bda6af..c3efdd1 100644 --- a/openapi/team/v1/paths/agents.yaml +++ b/openapi/team/v1/paths/agents.yaml @@ -3,23 +3,16 @@ get: summary: List agents parameters: - in: query - name: q - schema: - type: string - description: Free-text search (name/role). - - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage + name: pageSize schema: type: integer minimum: 1 maximum: 100 default: 20 + - in: query + name: pageToken + schema: + type: string responses: '200': description: OK diff --git a/openapi/team/v1/paths/attachment-by-id.yaml b/openapi/team/v1/paths/attachment-by-id.yaml deleted file mode 100644 index c16eb7b..0000000 --- a/openapi/team/v1/paths/attachment-by-id.yaml +++ /dev/null @@ -1,10 +0,0 @@ -delete: - tags: [Attachments] - summary: Delete attachment - parameters: - - $ref: '../components/parameters/IdPath.yaml' - responses: - '204': - description: No Content - default: - $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/attachments.yaml b/openapi/team/v1/paths/attachments.yaml deleted file mode 100644 index 412f728..0000000 --- a/openapi/team/v1/paths/attachments.yaml +++ /dev/null @@ -1,66 +0,0 @@ -get: - tags: [Attachments] - summary: List attachments - parameters: - - in: query - name: sourceType - schema: - $ref: '../components/schemas/EntityType.yaml' - - in: query - name: sourceId - schema: - type: string - format: uuid - - in: query - name: targetType - schema: - $ref: '../components/schemas/EntityType.yaml' - - in: query - name: targetId - schema: - type: string - format: uuid - - in: query - name: kind - schema: - $ref: '../components/schemas/AttachmentKind.yaml' - - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage - schema: - type: integer - minimum: 1 - maximum: 100 - default: 20 - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '../components/schemas/PaginatedAttachments.yaml' - default: - $ref: '../components/responses/ProblemResponse.yaml' -post: - tags: [Attachments] - summary: Create attachment (relation) - requestBody: - required: true - content: - application/json: - schema: - $ref: '../components/schemas/AttachmentCreateRequest.yaml' - responses: - '201': - description: Created - content: - application/json: - schema: - $ref: '../components/schemas/Attachment.yaml' - default: - $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/tool-by-id.yaml b/openapi/team/v1/paths/env-by-id.yaml similarity index 72% rename from openapi/team/v1/paths/tool-by-id.yaml rename to openapi/team/v1/paths/env-by-id.yaml index f759c33..95ad47b 100644 --- a/openapi/team/v1/paths/tool-by-id.yaml +++ b/openapi/team/v1/paths/env-by-id.yaml @@ -1,6 +1,6 @@ get: - tags: [Tools] - summary: Get tool by ID + tags: [Envs] + summary: Get env by ID parameters: - $ref: '../components/parameters/IdPath.yaml' responses: @@ -9,12 +9,12 @@ get: content: application/json: schema: - $ref: '../components/schemas/Tool.yaml' + $ref: '../components/schemas/Env.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' patch: - tags: [Tools] - summary: Update tool (partial) + tags: [Envs] + summary: Update env (partial) parameters: - $ref: '../components/parameters/IdPath.yaml' requestBody: @@ -22,19 +22,19 @@ patch: content: application/json: schema: - $ref: '../components/schemas/ToolUpdateRequest.yaml' + $ref: '../components/schemas/EnvUpdateRequest.yaml' responses: '200': description: Updated content: application/json: schema: - $ref: '../components/schemas/Tool.yaml' + $ref: '../components/schemas/Env.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' delete: - tags: [Tools] - summary: Delete tool + tags: [Envs] + summary: Delete env parameters: - $ref: '../components/parameters/IdPath.yaml' responses: diff --git a/openapi/team/v1/paths/memory-buckets.yaml b/openapi/team/v1/paths/envs.yaml similarity index 59% rename from openapi/team/v1/paths/memory-buckets.yaml rename to openapi/team/v1/paths/envs.yaml index 7767210..611fa57 100644 --- a/openapi/team/v1/paths/memory-buckets.yaml +++ b/openapi/team/v1/paths/envs.yaml @@ -1,44 +1,42 @@ get: - tags: [MemoryBuckets] - summary: List memory buckets + tags: [Envs] + summary: List envs parameters: - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage + name: pageSize schema: type: integer minimum: 1 maximum: 100 default: 20 + - in: query + name: pageToken + schema: + type: string responses: '200': description: OK content: application/json: schema: - $ref: '../components/schemas/PaginatedMemoryBuckets.yaml' + $ref: '../components/schemas/PaginatedEnvs.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' post: - tags: [MemoryBuckets] - summary: Create memory bucket + tags: [Envs] + summary: Create env requestBody: required: true content: application/json: schema: - $ref: '../components/schemas/MemoryBucketCreateRequest.yaml' + $ref: '../components/schemas/EnvCreateRequest.yaml' responses: '201': description: Created content: application/json: schema: - $ref: '../components/schemas/MemoryBucket.yaml' + $ref: '../components/schemas/Env.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/variable-by-id.yaml b/openapi/team/v1/paths/hook-by-id.yaml similarity index 70% rename from openapi/team/v1/paths/variable-by-id.yaml rename to openapi/team/v1/paths/hook-by-id.yaml index 86354bd..77d821f 100644 --- a/openapi/team/v1/paths/variable-by-id.yaml +++ b/openapi/team/v1/paths/hook-by-id.yaml @@ -1,6 +1,6 @@ get: - tags: [Variables] - summary: Get variable by ID + tags: [Hooks] + summary: Get hook by ID parameters: - $ref: '../components/parameters/IdPath.yaml' responses: @@ -9,12 +9,12 @@ get: content: application/json: schema: - $ref: '../components/schemas/Variable.yaml' + $ref: '../components/schemas/Hook.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' patch: - tags: [Variables] - summary: Update variable (partial) + tags: [Hooks] + summary: Update hook (partial) parameters: - $ref: '../components/parameters/IdPath.yaml' requestBody: @@ -22,19 +22,19 @@ patch: content: application/json: schema: - $ref: '../components/schemas/VariableUpdateRequest.yaml' + $ref: '../components/schemas/HookUpdateRequest.yaml' responses: '200': description: Updated content: application/json: schema: - $ref: '../components/schemas/Variable.yaml' + $ref: '../components/schemas/Hook.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' delete: - tags: [Variables] - summary: Delete variable + tags: [Hooks] + summary: Delete hook parameters: - $ref: '../components/parameters/IdPath.yaml' responses: diff --git a/openapi/team/v1/paths/variables.yaml b/openapi/team/v1/paths/hooks.yaml similarity index 57% rename from openapi/team/v1/paths/variables.yaml rename to openapi/team/v1/paths/hooks.yaml index afc2613..9cbd3e8 100644 --- a/openapi/team/v1/paths/variables.yaml +++ b/openapi/team/v1/paths/hooks.yaml @@ -1,49 +1,42 @@ get: - tags: [Variables] - summary: List variables + tags: [Hooks] + summary: List hooks parameters: - in: query - name: q - schema: - type: string - description: Free-text search (key/description). - - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage + name: pageSize schema: type: integer minimum: 1 maximum: 100 default: 20 + - in: query + name: pageToken + schema: + type: string responses: '200': description: OK content: application/json: schema: - $ref: '../components/schemas/PaginatedVariables.yaml' + $ref: '../components/schemas/PaginatedHooks.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' post: - tags: [Variables] - summary: Create variable + tags: [Hooks] + summary: Create hook requestBody: required: true content: application/json: schema: - $ref: '../components/schemas/VariableCreateRequest.yaml' + $ref: '../components/schemas/HookCreateRequest.yaml' responses: '201': description: Created content: application/json: schema: - $ref: '../components/schemas/Variable.yaml' + $ref: '../components/schemas/Hook.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/memory-bucket-by-id.yaml b/openapi/team/v1/paths/init-script-by-id.yaml similarity index 67% rename from openapi/team/v1/paths/memory-bucket-by-id.yaml rename to openapi/team/v1/paths/init-script-by-id.yaml index 2800f4f..d99e84f 100644 --- a/openapi/team/v1/paths/memory-bucket-by-id.yaml +++ b/openapi/team/v1/paths/init-script-by-id.yaml @@ -1,6 +1,6 @@ get: - tags: [MemoryBuckets] - summary: Get memory bucket by ID + tags: [Init Scripts] + summary: Get init script by ID parameters: - $ref: '../components/parameters/IdPath.yaml' responses: @@ -9,12 +9,12 @@ get: content: application/json: schema: - $ref: '../components/schemas/MemoryBucket.yaml' + $ref: '../components/schemas/InitScript.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' patch: - tags: [MemoryBuckets] - summary: Update memory bucket (partial) + tags: [Init Scripts] + summary: Update init script (partial) parameters: - $ref: '../components/parameters/IdPath.yaml' requestBody: @@ -22,19 +22,19 @@ patch: content: application/json: schema: - $ref: '../components/schemas/MemoryBucketUpdateRequest.yaml' + $ref: '../components/schemas/InitScriptUpdateRequest.yaml' responses: '200': description: Updated content: application/json: schema: - $ref: '../components/schemas/MemoryBucket.yaml' + $ref: '../components/schemas/InitScript.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' delete: - tags: [MemoryBuckets] - summary: Delete memory bucket + tags: [Init Scripts] + summary: Delete init script parameters: - $ref: '../components/parameters/IdPath.yaml' responses: diff --git a/openapi/team/v1/paths/mcp-servers.yaml b/openapi/team/v1/paths/init-scripts.yaml similarity index 61% rename from openapi/team/v1/paths/mcp-servers.yaml rename to openapi/team/v1/paths/init-scripts.yaml index 9579704..08e583e 100644 --- a/openapi/team/v1/paths/mcp-servers.yaml +++ b/openapi/team/v1/paths/init-scripts.yaml @@ -1,44 +1,42 @@ get: - tags: [MCP Servers] - summary: List MCP servers + tags: [Init Scripts] + summary: List init scripts parameters: - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage + name: pageSize schema: type: integer minimum: 1 maximum: 100 default: 20 + - in: query + name: pageToken + schema: + type: string responses: '200': description: OK content: application/json: schema: - $ref: '../components/schemas/PaginatedMcpServers.yaml' + $ref: '../components/schemas/PaginatedInitScripts.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' post: - tags: [MCP Servers] - summary: Create MCP server + tags: [Init Scripts] + summary: Create init script requestBody: required: true content: application/json: schema: - $ref: '../components/schemas/McpServerCreateRequest.yaml' + $ref: '../components/schemas/InitScriptCreateRequest.yaml' responses: '201': description: Created content: application/json: schema: - $ref: '../components/schemas/McpServer.yaml' + $ref: '../components/schemas/InitScript.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/mcp-server-by-id.yaml b/openapi/team/v1/paths/mcp-by-id.yaml similarity index 69% rename from openapi/team/v1/paths/mcp-server-by-id.yaml rename to openapi/team/v1/paths/mcp-by-id.yaml index a34f8a4..8bcf9de 100644 --- a/openapi/team/v1/paths/mcp-server-by-id.yaml +++ b/openapi/team/v1/paths/mcp-by-id.yaml @@ -1,6 +1,6 @@ get: - tags: [MCP Servers] - summary: Get MCP server by ID + tags: [MCPs] + summary: Get MCP by ID parameters: - $ref: '../components/parameters/IdPath.yaml' responses: @@ -9,12 +9,12 @@ get: content: application/json: schema: - $ref: '../components/schemas/McpServer.yaml' + $ref: '../components/schemas/Mcp.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' patch: - tags: [MCP Servers] - summary: Update MCP server (partial) + tags: [MCPs] + summary: Update MCP (partial) parameters: - $ref: '../components/parameters/IdPath.yaml' requestBody: @@ -22,19 +22,19 @@ patch: content: application/json: schema: - $ref: '../components/schemas/McpServerUpdateRequest.yaml' + $ref: '../components/schemas/McpUpdateRequest.yaml' responses: '200': description: Updated content: application/json: schema: - $ref: '../components/schemas/McpServer.yaml' + $ref: '../components/schemas/Mcp.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' delete: - tags: [MCP Servers] - summary: Delete MCP server + tags: [MCPs] + summary: Delete MCP parameters: - $ref: '../components/parameters/IdPath.yaml' responses: diff --git a/openapi/team/v1/paths/workspace-configurations.yaml b/openapi/team/v1/paths/mcps.yaml similarity index 56% rename from openapi/team/v1/paths/workspace-configurations.yaml rename to openapi/team/v1/paths/mcps.yaml index 6011e5f..a4f319e 100644 --- a/openapi/team/v1/paths/workspace-configurations.yaml +++ b/openapi/team/v1/paths/mcps.yaml @@ -1,44 +1,42 @@ get: - tags: [WorkspaceConfigurations] - summary: List workspace configurations + tags: [MCPs] + summary: List MCPs parameters: - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage + name: pageSize schema: type: integer minimum: 1 maximum: 100 default: 20 + - in: query + name: pageToken + schema: + type: string responses: '200': description: OK content: application/json: schema: - $ref: '../components/schemas/PaginatedWorkspaceConfigurations.yaml' + $ref: '../components/schemas/PaginatedMcps.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' post: - tags: [WorkspaceConfigurations] - summary: Create workspace configuration + tags: [MCPs] + summary: Create MCP requestBody: required: true content: application/json: schema: - $ref: '../components/schemas/WorkspaceConfigurationCreateRequest.yaml' + $ref: '../components/schemas/McpCreateRequest.yaml' responses: '201': description: Created content: application/json: schema: - $ref: '../components/schemas/WorkspaceConfiguration.yaml' + $ref: '../components/schemas/Mcp.yaml' default: $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/skill-by-id.yaml b/openapi/team/v1/paths/skill-by-id.yaml new file mode 100644 index 0000000..088a642 --- /dev/null +++ b/openapi/team/v1/paths/skill-by-id.yaml @@ -0,0 +1,44 @@ +get: + tags: [Skills] + summary: Get skill by ID + parameters: + - $ref: '../components/parameters/IdPath.yaml' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../components/schemas/Skill.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +patch: + tags: [Skills] + summary: Update skill (partial) + parameters: + - $ref: '../components/parameters/IdPath.yaml' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/SkillUpdateRequest.yaml' + responses: + '200': + description: Updated + content: + application/json: + schema: + $ref: '../components/schemas/Skill.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +delete: + tags: [Skills] + summary: Delete skill + parameters: + - $ref: '../components/parameters/IdPath.yaml' + responses: + '204': + description: No Content + default: + $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/skills.yaml b/openapi/team/v1/paths/skills.yaml new file mode 100644 index 0000000..c9bde4e --- /dev/null +++ b/openapi/team/v1/paths/skills.yaml @@ -0,0 +1,42 @@ +get: + tags: [Skills] + summary: List skills + parameters: + - in: query + name: pageSize + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + - in: query + name: pageToken + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../components/schemas/PaginatedSkills.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +post: + tags: [Skills] + summary: Create skill + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/SkillCreateRequest.yaml' + responses: + '201': + description: Created + content: + application/json: + schema: + $ref: '../components/schemas/Skill.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/tools.yaml b/openapi/team/v1/paths/tools.yaml deleted file mode 100644 index 0c97a9b..0000000 --- a/openapi/team/v1/paths/tools.yaml +++ /dev/null @@ -1,49 +0,0 @@ -get: - tags: [Tools] - summary: List tools - parameters: - - in: query - name: type - schema: - $ref: '../components/schemas/ToolType.yaml' - description: Filter by tool type - - in: query - name: page - schema: - type: integer - minimum: 1 - default: 1 - - in: query - name: perPage - schema: - type: integer - minimum: 1 - maximum: 100 - default: 20 - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '../components/schemas/PaginatedTools.yaml' - default: - $ref: '../components/responses/ProblemResponse.yaml' -post: - tags: [Tools] - summary: Create tool - requestBody: - required: true - content: - application/json: - schema: - $ref: '../components/schemas/ToolCreateRequest.yaml' - responses: - '201': - description: Created - content: - application/json: - schema: - $ref: '../components/schemas/Tool.yaml' - default: - $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/variable-resolve.yaml b/openapi/team/v1/paths/variable-resolve.yaml deleted file mode 100644 index 2ac5dda..0000000 --- a/openapi/team/v1/paths/variable-resolve.yaml +++ /dev/null @@ -1,25 +0,0 @@ -get: - tags: [Variables] - summary: Resolve variable by key - parameters: - - in: path - name: key - required: true - schema: - type: string - responses: - '200': - description: OK - content: - application/json: - schema: - type: object - properties: - value: - type: string - description: Only present when found is true. - found: { type: boolean } - required: [found] - additionalProperties: false - default: - $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/volume-attachment-by-id.yaml b/openapi/team/v1/paths/volume-attachment-by-id.yaml new file mode 100644 index 0000000..5ec753f --- /dev/null +++ b/openapi/team/v1/paths/volume-attachment-by-id.yaml @@ -0,0 +1,24 @@ +get: + tags: [Volume Attachments] + summary: Get volume attachment by ID + parameters: + - $ref: '../components/parameters/IdPath.yaml' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../components/schemas/VolumeAttachment.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +delete: + tags: [Volume Attachments] + summary: Delete volume attachment + parameters: + - $ref: '../components/parameters/IdPath.yaml' + responses: + '204': + description: No Content + default: + $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/volume-attachments.yaml b/openapi/team/v1/paths/volume-attachments.yaml new file mode 100644 index 0000000..d9317f3 --- /dev/null +++ b/openapi/team/v1/paths/volume-attachments.yaml @@ -0,0 +1,42 @@ +get: + tags: [Volume Attachments] + summary: List volume attachments + parameters: + - in: query + name: pageSize + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + - in: query + name: pageToken + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../components/schemas/PaginatedVolumeAttachments.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +post: + tags: [Volume Attachments] + summary: Create volume attachment + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/VolumeAttachmentCreateRequest.yaml' + responses: + '201': + description: Created + content: + application/json: + schema: + $ref: '../components/schemas/VolumeAttachment.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/volume-by-id.yaml b/openapi/team/v1/paths/volume-by-id.yaml new file mode 100644 index 0000000..ec4ed4f --- /dev/null +++ b/openapi/team/v1/paths/volume-by-id.yaml @@ -0,0 +1,44 @@ +get: + tags: [Volumes] + summary: Get volume by ID + parameters: + - $ref: '../components/parameters/IdPath.yaml' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../components/schemas/Volume.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +patch: + tags: [Volumes] + summary: Update volume (partial) + parameters: + - $ref: '../components/parameters/IdPath.yaml' + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/VolumeUpdateRequest.yaml' + responses: + '200': + description: Updated + content: + application/json: + schema: + $ref: '../components/schemas/Volume.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +delete: + tags: [Volumes] + summary: Delete volume + parameters: + - $ref: '../components/parameters/IdPath.yaml' + responses: + '204': + description: No Content + default: + $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/volumes.yaml b/openapi/team/v1/paths/volumes.yaml new file mode 100644 index 0000000..e886aa0 --- /dev/null +++ b/openapi/team/v1/paths/volumes.yaml @@ -0,0 +1,42 @@ +get: + tags: [Volumes] + summary: List volumes + parameters: + - in: query + name: pageSize + schema: + type: integer + minimum: 1 + maximum: 100 + default: 20 + - in: query + name: pageToken + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '../components/schemas/PaginatedVolumes.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' +post: + tags: [Volumes] + summary: Create volume + requestBody: + required: true + content: + application/json: + schema: + $ref: '../components/schemas/VolumeCreateRequest.yaml' + responses: + '201': + description: Created + content: + application/json: + schema: + $ref: '../components/schemas/Volume.yaml' + default: + $ref: '../components/responses/ProblemResponse.yaml' diff --git a/openapi/team/v1/paths/workspace-configuration-by-id.yaml b/openapi/team/v1/paths/workspace-configuration-by-id.yaml deleted file mode 100644 index 20c96a2..0000000 --- a/openapi/team/v1/paths/workspace-configuration-by-id.yaml +++ /dev/null @@ -1,44 +0,0 @@ -get: - tags: [WorkspaceConfigurations] - summary: Get workspace configuration by ID - parameters: - - $ref: '../components/parameters/IdPath.yaml' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '../components/schemas/WorkspaceConfiguration.yaml' - default: - $ref: '../components/responses/ProblemResponse.yaml' -patch: - tags: [WorkspaceConfigurations] - summary: Update workspace configuration (partial) - parameters: - - $ref: '../components/parameters/IdPath.yaml' - requestBody: - required: true - content: - application/json: - schema: - $ref: '../components/schemas/WorkspaceConfigurationUpdateRequest.yaml' - responses: - '200': - description: Updated - content: - application/json: - schema: - $ref: '../components/schemas/WorkspaceConfiguration.yaml' - default: - $ref: '../components/responses/ProblemResponse.yaml' -delete: - tags: [WorkspaceConfigurations] - summary: Delete workspace configuration - parameters: - - $ref: '../components/parameters/IdPath.yaml' - responses: - '204': - description: No Content - default: - $ref: '../components/responses/ProblemResponse.yaml' diff --git a/proto/agynio/api/teams/v1/teams.proto b/proto/agynio/api/teams/v1/teams.proto index aecd74f..c1ca0ac 100644 --- a/proto/agynio/api/teams/v1/teams.proto +++ b/proto/agynio/api/teams/v1/teams.proto @@ -2,13 +2,12 @@ syntax = "proto3"; package agynio.api.teams.v1; -import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; option go_package = "github.com/agynio/api/gen/agynio/api/teams/v1;teamsv1"; -// TeamsService manages team resources: agents, tools, MCP servers, -// workspace configurations, memory buckets, variables, and attachments (relations). +// TeamsService manages team resources: agents, volumes, volume attachments, +// MCP servers, skills, hooks, environment variables, and init scripts. // // This is a control-plane service. It stores desired state; // other services reconcile toward it. @@ -20,47 +19,53 @@ service TeamsService { rpc DeleteAgent(DeleteAgentRequest) returns (DeleteAgentResponse); rpc ListAgents(ListAgentsRequest) returns (ListAgentsResponse); - // --- Tools --- - rpc CreateTool(CreateToolRequest) returns (CreateToolResponse); - rpc GetTool(GetToolRequest) returns (GetToolResponse); - rpc UpdateTool(UpdateToolRequest) returns (UpdateToolResponse); - rpc DeleteTool(DeleteToolRequest) returns (DeleteToolResponse); - rpc ListTools(ListToolsRequest) returns (ListToolsResponse); + // --- Volumes --- + rpc CreateVolume(CreateVolumeRequest) returns (CreateVolumeResponse); + rpc GetVolume(GetVolumeRequest) returns (GetVolumeResponse); + rpc UpdateVolume(UpdateVolumeRequest) returns (UpdateVolumeResponse); + rpc DeleteVolume(DeleteVolumeRequest) returns (DeleteVolumeResponse); + rpc ListVolumes(ListVolumesRequest) returns (ListVolumesResponse); + + // --- Volume Attachments (no Update) --- + rpc CreateVolumeAttachment(CreateVolumeAttachmentRequest) returns (CreateVolumeAttachmentResponse); + rpc GetVolumeAttachment(GetVolumeAttachmentRequest) returns (GetVolumeAttachmentResponse); + rpc DeleteVolumeAttachment(DeleteVolumeAttachmentRequest) returns (DeleteVolumeAttachmentResponse); + rpc ListVolumeAttachments(ListVolumeAttachmentsRequest) returns (ListVolumeAttachmentsResponse); // --- MCP Servers --- - rpc CreateMcpServer(CreateMcpServerRequest) returns (CreateMcpServerResponse); - rpc GetMcpServer(GetMcpServerRequest) returns (GetMcpServerResponse); - rpc UpdateMcpServer(UpdateMcpServerRequest) returns (UpdateMcpServerResponse); - rpc DeleteMcpServer(DeleteMcpServerRequest) returns (DeleteMcpServerResponse); - rpc ListMcpServers(ListMcpServersRequest) returns (ListMcpServersResponse); - - // --- Workspace Configurations --- - rpc CreateWorkspaceConfiguration(CreateWorkspaceConfigurationRequest) returns (CreateWorkspaceConfigurationResponse); - rpc GetWorkspaceConfiguration(GetWorkspaceConfigurationRequest) returns (GetWorkspaceConfigurationResponse); - rpc UpdateWorkspaceConfiguration(UpdateWorkspaceConfigurationRequest) returns (UpdateWorkspaceConfigurationResponse); - rpc DeleteWorkspaceConfiguration(DeleteWorkspaceConfigurationRequest) returns (DeleteWorkspaceConfigurationResponse); - rpc ListWorkspaceConfigurations(ListWorkspaceConfigurationsRequest) returns (ListWorkspaceConfigurationsResponse); - - // --- Memory Buckets --- - rpc CreateMemoryBucket(CreateMemoryBucketRequest) returns (CreateMemoryBucketResponse); - rpc GetMemoryBucket(GetMemoryBucketRequest) returns (GetMemoryBucketResponse); - rpc UpdateMemoryBucket(UpdateMemoryBucketRequest) returns (UpdateMemoryBucketResponse); - rpc DeleteMemoryBucket(DeleteMemoryBucketRequest) returns (DeleteMemoryBucketResponse); - rpc ListMemoryBuckets(ListMemoryBucketsRequest) returns (ListMemoryBucketsResponse); - - // --- Variables --- - rpc CreateVariable(CreateVariableRequest) returns (CreateVariableResponse); - rpc GetVariable(GetVariableRequest) returns (GetVariableResponse); - rpc UpdateVariable(UpdateVariableRequest) returns (UpdateVariableResponse); - rpc DeleteVariable(DeleteVariableRequest) returns (DeleteVariableResponse); - rpc ListVariables(ListVariablesRequest) returns (ListVariablesResponse); - rpc ResolveVariable(ResolveVariableRequest) returns (ResolveVariableResponse); - - // --- Attachments (no Update) --- - rpc CreateAttachment(CreateAttachmentRequest) returns (CreateAttachmentResponse); - rpc GetAttachment(GetAttachmentRequest) returns (GetAttachmentResponse); - rpc DeleteAttachment(DeleteAttachmentRequest) returns (DeleteAttachmentResponse); - rpc ListAttachments(ListAttachmentsRequest) returns (ListAttachmentsResponse); + rpc CreateMcp(CreateMcpRequest) returns (CreateMcpResponse); + rpc GetMcp(GetMcpRequest) returns (GetMcpResponse); + rpc UpdateMcp(UpdateMcpRequest) returns (UpdateMcpResponse); + rpc DeleteMcp(DeleteMcpRequest) returns (DeleteMcpResponse); + rpc ListMcps(ListMcpsRequest) returns (ListMcpsResponse); + + // --- Skills --- + rpc CreateSkill(CreateSkillRequest) returns (CreateSkillResponse); + rpc GetSkill(GetSkillRequest) returns (GetSkillResponse); + rpc UpdateSkill(UpdateSkillRequest) returns (UpdateSkillResponse); + rpc DeleteSkill(DeleteSkillRequest) returns (DeleteSkillResponse); + rpc ListSkills(ListSkillsRequest) returns (ListSkillsResponse); + + // --- Hooks --- + rpc CreateHook(CreateHookRequest) returns (CreateHookResponse); + rpc GetHook(GetHookRequest) returns (GetHookResponse); + rpc UpdateHook(UpdateHookRequest) returns (UpdateHookResponse); + rpc DeleteHook(DeleteHookRequest) returns (DeleteHookResponse); + rpc ListHooks(ListHooksRequest) returns (ListHooksResponse); + + // --- Envs --- + rpc CreateEnv(CreateEnvRequest) returns (CreateEnvResponse); + rpc GetEnv(GetEnvRequest) returns (GetEnvResponse); + rpc UpdateEnv(UpdateEnvRequest) returns (UpdateEnvResponse); + rpc DeleteEnv(DeleteEnvRequest) returns (DeleteEnvResponse); + rpc ListEnvs(ListEnvsRequest) returns (ListEnvsResponse); + + // --- Init Scripts --- + rpc CreateInitScript(CreateInitScriptRequest) returns (CreateInitScriptResponse); + rpc GetInitScript(GetInitScriptRequest) returns (GetInitScriptResponse); + rpc UpdateInitScript(UpdateInitScriptRequest) returns (UpdateInitScriptResponse); + rpc DeleteInitScript(DeleteInitScriptRequest) returns (DeleteInitScriptResponse); + rpc ListInitScripts(ListInitScriptsRequest) returns (ListInitScriptsResponse); } // =========================================================================== @@ -74,103 +79,37 @@ message EntityMeta { google.protobuf.Timestamp updated_at = 3; } -// =========================================================================== -// Enums -// =========================================================================== - -enum ToolType { - TOOL_TYPE_UNSPECIFIED = 0; - TOOL_TYPE_MANAGE = 1; - TOOL_TYPE_MEMORY = 2; - TOOL_TYPE_SHELL_COMMAND = 3; - TOOL_TYPE_SEND_MESSAGE = 4; - TOOL_TYPE_SEND_SLACK_MESSAGE = 5; - TOOL_TYPE_REMIND_ME = 6; - TOOL_TYPE_GITHUB_CLONE_REPO = 7; - TOOL_TYPE_CALL_AGENT = 8; -} - -enum EntityType { - ENTITY_TYPE_UNSPECIFIED = 0; - ENTITY_TYPE_AGENT = 1; - ENTITY_TYPE_TOOL = 2; - ENTITY_TYPE_MCP_SERVER = 3; - ENTITY_TYPE_WORKSPACE_CONFIGURATION = 4; - ENTITY_TYPE_MEMORY_BUCKET = 5; - ENTITY_TYPE_VARIABLE = 6; -} - -enum AttachmentKind { - ATTACHMENT_KIND_UNSPECIFIED = 0; - ATTACHMENT_KIND_AGENT_TOOL = 1; - ATTACHMENT_KIND_AGENT_MEMORY_BUCKET = 2; - ATTACHMENT_KIND_AGENT_WORKSPACE_CONFIGURATION = 3; - ATTACHMENT_KIND_AGENT_MCP_SERVER = 4; - ATTACHMENT_KIND_MCP_SERVER_WORKSPACE_CONFIGURATION = 5; -} - -enum MemoryBucketScope { - MEMORY_BUCKET_SCOPE_UNSPECIFIED = 0; - MEMORY_BUCKET_SCOPE_GLOBAL = 1; - MEMORY_BUCKET_SCOPE_PER_THREAD = 2; -} - -enum WorkspacePlatform { - WORKSPACE_PLATFORM_UNSPECIFIED = 0; - WORKSPACE_PLATFORM_LINUX_AMD64 = 1; - WORKSPACE_PLATFORM_LINUX_ARM64 = 2; - WORKSPACE_PLATFORM_AUTO = 3; -} - -enum AgentWhenBusy { - AGENT_WHEN_BUSY_UNSPECIFIED = 0; - AGENT_WHEN_BUSY_WAIT = 1; - AGENT_WHEN_BUSY_INJECT_AFTER_TOOLS = 2; -} - -enum AgentProcessBuffer { - AGENT_PROCESS_BUFFER_UNSPECIFIED = 0; - AGENT_PROCESS_BUFFER_ALL_TOGETHER = 1; - AGENT_PROCESS_BUFFER_ONE_BY_ONE = 2; -} - -enum McpToolFilterMode { - MCP_TOOL_FILTER_MODE_UNSPECIFIED = 0; - MCP_TOOL_FILTER_MODE_ALLOW = 1; - MCP_TOOL_FILTER_MODE_DENY = 2; +// Kubernetes-style container resource requests and limits. +message ComputeResources { + string requests_cpu = 1; + string requests_memory = 2; + string limits_cpu = 3; + string limits_memory = 4; } // =========================================================================== // Agent // =========================================================================== -message AgentConfig { - string model = 1; - string system_prompt = 2; - int32 debounce_ms = 3; - AgentWhenBusy when_busy = 4; - AgentProcessBuffer process_buffer = 5; - bool send_final_response_to_thread = 6; - int32 summarization_keep_tokens = 7; - int32 summarization_max_tokens = 8; - bool restrict_output = 9; - string restriction_message = 10; - int32 restriction_max_injections = 11; - string name = 12; - string role = 13; -} - message Agent { EntityMeta meta = 1; - string title = 2; - string description = 3; - AgentConfig config = 4; + string name = 2; + string role = 3; + string model = 4; // UUID + string description = 5; + string configuration = 6; + string image = 7; + ComputeResources resources = 8; } message CreateAgentRequest { - string title = 1; - string description = 2; - AgentConfig config = 3; // required + string name = 1; + string role = 2; + string model = 3; // UUID + string description = 4; + string configuration = 5; + string image = 6; + ComputeResources resources = 7; } message CreateAgentResponse { @@ -187,9 +126,13 @@ message GetAgentResponse { message UpdateAgentRequest { string id = 1; // UUID - optional string title = 2; - optional string description = 3; - optional AgentConfig config = 4; + optional string name = 2; + optional string role = 3; + optional string model = 4; + optional string description = 5; + optional string configuration = 6; + optional string image = 7; + optional ComputeResources resources = 8; } message UpdateAgentResponse { @@ -205,7 +148,6 @@ message DeleteAgentResponse {} message ListAgentsRequest { int32 page_size = 1; string page_token = 2; - string query = 3; } message ListAgentsResponse { @@ -214,406 +156,430 @@ message ListAgentsResponse { } // =========================================================================== -// Tool +// Volume // =========================================================================== -message Tool { +message Volume { EntityMeta meta = 1; - ToolType type = 2; - string name = 3; - string description = 4; - google.protobuf.Struct config = 5; + bool persistent = 2; + string mount_path = 3; + string size = 4; + string description = 5; } -message CreateToolRequest { - ToolType type = 1; - string name = 2; - string description = 3; - google.protobuf.Struct config = 4; +message CreateVolumeRequest { + bool persistent = 1; + string mount_path = 2; + string size = 3; + string description = 4; } -message CreateToolResponse { - Tool tool = 1; +message CreateVolumeResponse { + Volume volume = 1; } -message GetToolRequest { - string id = 1; +message GetVolumeRequest { + string id = 1; // UUID } -message GetToolResponse { - Tool tool = 1; +message GetVolumeResponse { + Volume volume = 1; } -message UpdateToolRequest { - string id = 1; - optional string name = 2; - optional string description = 3; - optional google.protobuf.Struct config = 4; +message UpdateVolumeRequest { + string id = 1; // UUID + optional bool persistent = 2; + optional string mount_path = 3; + optional string size = 4; + optional string description = 5; } -message UpdateToolResponse { - Tool tool = 1; +message UpdateVolumeResponse { + Volume volume = 1; } -message DeleteToolRequest { - string id = 1; +message DeleteVolumeRequest { + string id = 1; // UUID } -message DeleteToolResponse {} +message DeleteVolumeResponse {} -message ListToolsRequest { +message ListVolumesRequest { int32 page_size = 1; string page_token = 2; - ToolType type = 3; } -message ListToolsResponse { - repeated Tool tools = 1; +message ListVolumesResponse { + repeated Volume volumes = 1; string next_page_token = 2; } // =========================================================================== -// MCP Server +// Volume Attachment // =========================================================================== -message McpEnvItem { - string name = 1; - string value = 2; +message VolumeAttachment { + EntityMeta meta = 1; + string volume_id = 2; // UUID + oneof target { + string agent_id = 3; + string mcp_id = 4; + string hook_id = 5; + } +} + +message CreateVolumeAttachmentRequest { + string volume_id = 1; // UUID + oneof target { + string agent_id = 2; + string mcp_id = 3; + string hook_id = 4; + } +} + +message CreateVolumeAttachmentResponse { + VolumeAttachment volume_attachment = 1; } -message McpToolFilterRule { - string pattern = 1; +message GetVolumeAttachmentRequest { + string id = 1; // UUID } -message McpToolFilter { - McpToolFilterMode mode = 1; - repeated McpToolFilterRule rules = 2; +message GetVolumeAttachmentResponse { + VolumeAttachment volume_attachment = 1; } -message McpServerRestartConfig { - int32 max_attempts = 1; - int32 backoff_ms = 2; +message DeleteVolumeAttachmentRequest { + string id = 1; // UUID +} + +message DeleteVolumeAttachmentResponse {} + +message ListVolumeAttachmentsRequest { + int32 page_size = 1; + string page_token = 2; } -message McpServerConfig { - string namespace = 1; - string command = 2; - string workdir = 3; - repeated McpEnvItem env = 4; - int32 request_timeout_ms = 5; - int32 startup_timeout_ms = 6; - int32 heartbeat_interval_ms = 7; - int32 stale_timeout_ms = 8; - McpServerRestartConfig restart = 9; - McpToolFilter tool_filter = 10; +message ListVolumeAttachmentsResponse { + repeated VolumeAttachment volume_attachments = 1; + string next_page_token = 2; } -message McpServer { +// =========================================================================== +// MCP +// =========================================================================== + +message Mcp { EntityMeta meta = 1; - string title = 2; - string description = 3; - McpServerConfig config = 4; + string agent_id = 2; // UUID + string image = 3; + string command = 4; + ComputeResources resources = 5; + string description = 6; } -message CreateMcpServerRequest { - string title = 1; - string description = 2; - McpServerConfig config = 3; +message CreateMcpRequest { + string agent_id = 1; // UUID + string image = 2; + string command = 3; + ComputeResources resources = 4; + string description = 5; } -message CreateMcpServerResponse { - McpServer mcp_server = 1; +message CreateMcpResponse { + Mcp mcp = 1; } -message GetMcpServerRequest { - string id = 1; +message GetMcpRequest { + string id = 1; // UUID } -message GetMcpServerResponse { - McpServer mcp_server = 1; +message GetMcpResponse { + Mcp mcp = 1; } -message UpdateMcpServerRequest { - string id = 1; - optional string title = 2; - optional string description = 3; - optional McpServerConfig config = 4; +message UpdateMcpRequest { + string id = 1; // UUID + optional string image = 2; + optional string command = 3; + optional ComputeResources resources = 4; + optional string description = 5; } -message UpdateMcpServerResponse { - McpServer mcp_server = 1; +message UpdateMcpResponse { + Mcp mcp = 1; } -message DeleteMcpServerRequest { - string id = 1; +message DeleteMcpRequest { + string id = 1; // UUID } -message DeleteMcpServerResponse {} +message DeleteMcpResponse {} -message ListMcpServersRequest { +message ListMcpsRequest { int32 page_size = 1; string page_token = 2; } -message ListMcpServersResponse { - repeated McpServer mcp_servers = 1; +message ListMcpsResponse { + repeated Mcp mcps = 1; string next_page_token = 2; } // =========================================================================== -// Workspace Configuration +// Skill // =========================================================================== -message WorkspaceEnvItem { - string name = 1; - string value = 2; -} - -message WorkspaceVolumeConfig { - bool enabled = 1; - string mount_path = 2; -} - -message WorkspaceConfig { - string image = 1; - repeated WorkspaceEnvItem env = 2; - string initial_script = 3; - string cpu_limit = 4; - string memory_limit = 5; - WorkspacePlatform platform = 6; - bool enable_dind = 7; - int32 ttl_seconds = 8; - google.protobuf.Struct nix = 9; - WorkspaceVolumeConfig volumes = 10; -} - -message WorkspaceConfiguration { +message Skill { EntityMeta meta = 1; - string title = 2; - string description = 3; - WorkspaceConfig config = 4; + string agent_id = 2; // UUID + string name = 3; + string body = 4; + string description = 5; } -message CreateWorkspaceConfigurationRequest { - string title = 1; - string description = 2; - WorkspaceConfig config = 3; +message CreateSkillRequest { + string agent_id = 1; // UUID + string name = 2; + string body = 3; + string description = 4; } -message CreateWorkspaceConfigurationResponse { - WorkspaceConfiguration workspace_configuration = 1; +message CreateSkillResponse { + Skill skill = 1; } -message GetWorkspaceConfigurationRequest { - string id = 1; +message GetSkillRequest { + string id = 1; // UUID } -message GetWorkspaceConfigurationResponse { - WorkspaceConfiguration workspace_configuration = 1; +message GetSkillResponse { + Skill skill = 1; } -message UpdateWorkspaceConfigurationRequest { - string id = 1; - optional string title = 2; - optional string description = 3; - optional WorkspaceConfig config = 4; +message UpdateSkillRequest { + string id = 1; // UUID + optional string name = 2; + optional string body = 3; + optional string description = 4; } -message UpdateWorkspaceConfigurationResponse { - WorkspaceConfiguration workspace_configuration = 1; +message UpdateSkillResponse { + Skill skill = 1; } -message DeleteWorkspaceConfigurationRequest { - string id = 1; +message DeleteSkillRequest { + string id = 1; // UUID } -message DeleteWorkspaceConfigurationResponse {} +message DeleteSkillResponse {} -message ListWorkspaceConfigurationsRequest { +message ListSkillsRequest { int32 page_size = 1; string page_token = 2; } -message ListWorkspaceConfigurationsResponse { - repeated WorkspaceConfiguration workspace_configurations = 1; +message ListSkillsResponse { + repeated Skill skills = 1; string next_page_token = 2; } // =========================================================================== -// Memory Bucket +// Hook // =========================================================================== -message MemoryBucketConfig { - MemoryBucketScope scope = 1; - string collection_prefix = 2; -} - -message MemoryBucket { +message Hook { EntityMeta meta = 1; - string title = 2; - string description = 3; - MemoryBucketConfig config = 4; + string agent_id = 2; // UUID + string event = 3; + string function = 4; + string image = 5; + ComputeResources resources = 6; + string description = 7; } -message CreateMemoryBucketRequest { - string title = 1; - string description = 2; - MemoryBucketConfig config = 3; +message CreateHookRequest { + string agent_id = 1; // UUID + string event = 2; + string function = 3; + string image = 4; + ComputeResources resources = 5; + string description = 6; } -message CreateMemoryBucketResponse { - MemoryBucket memory_bucket = 1; +message CreateHookResponse { + Hook hook = 1; } -message GetMemoryBucketRequest { - string id = 1; +message GetHookRequest { + string id = 1; // UUID } -message GetMemoryBucketResponse { - MemoryBucket memory_bucket = 1; +message GetHookResponse { + Hook hook = 1; } -message UpdateMemoryBucketRequest { - string id = 1; - optional string title = 2; - optional string description = 3; - optional MemoryBucketConfig config = 4; +message UpdateHookRequest { + string id = 1; // UUID + optional string event = 2; + optional string function = 3; + optional string image = 4; + optional ComputeResources resources = 5; + optional string description = 6; } -message UpdateMemoryBucketResponse { - MemoryBucket memory_bucket = 1; +message UpdateHookResponse { + Hook hook = 1; } -message DeleteMemoryBucketRequest { - string id = 1; +message DeleteHookRequest { + string id = 1; // UUID } -message DeleteMemoryBucketResponse {} +message DeleteHookResponse {} -message ListMemoryBucketsRequest { +message ListHooksRequest { int32 page_size = 1; string page_token = 2; } -message ListMemoryBucketsResponse { - repeated MemoryBucket memory_buckets = 1; +message ListHooksResponse { + repeated Hook hooks = 1; string next_page_token = 2; } // =========================================================================== -// Variable +// Env // =========================================================================== -message Variable { +message Env { EntityMeta meta = 1; - string key = 2; - string value = 3; - string description = 4; -} - -message CreateVariableRequest { - string key = 1; - string value = 2; + string name = 2; string description = 3; + oneof target { + string agent_id = 4; + string mcp_id = 5; + string hook_id = 6; + } + oneof source { + string value = 7; + string secret_id = 8; // UUID + } +} + +message CreateEnvRequest { + string name = 1; + string description = 2; + oneof target { + string agent_id = 3; + string mcp_id = 4; + string hook_id = 5; + } + oneof source { + string value = 6; + string secret_id = 7; // UUID + } } -message CreateVariableResponse { - Variable variable = 1; +message CreateEnvResponse { + Env env = 1; } -message GetVariableRequest { - string id = 1; +message GetEnvRequest { + string id = 1; // UUID } -message GetVariableResponse { - Variable variable = 1; +message GetEnvResponse { + Env env = 1; } -message UpdateVariableRequest { - string id = 1; - optional string key = 2; - optional string value = 3; - optional string description = 4; +message UpdateEnvRequest { + string id = 1; // UUID + optional string name = 2; + optional string description = 3; + optional string value = 4; + optional string secret_id = 5; } -message UpdateVariableResponse { - Variable variable = 1; +message UpdateEnvResponse { + Env env = 1; } -message DeleteVariableRequest { - string id = 1; +message DeleteEnvRequest { + string id = 1; // UUID } -message DeleteVariableResponse {} +message DeleteEnvResponse {} -message ListVariablesRequest { +message ListEnvsRequest { int32 page_size = 1; string page_token = 2; - string query = 3; } -message ListVariablesResponse { - repeated Variable variables = 1; +message ListEnvsResponse { + repeated Env envs = 1; string next_page_token = 2; } -message ResolveVariableRequest { - string key = 1; -} - -message ResolveVariableResponse { - string value = 1; - bool found = 2; -} - // =========================================================================== -// Attachment (relation between entities; no Update) +// Init Script // =========================================================================== -message Attachment { +message InitScript { EntityMeta meta = 1; - AttachmentKind kind = 2; - EntityType source_type = 3; - string source_id = 4; - EntityType target_type = 5; - string target_id = 6; + string script = 2; + string description = 3; + oneof target { + string agent_id = 4; + string mcp_id = 5; + string hook_id = 6; + } +} + +message CreateInitScriptRequest { + string script = 1; + string description = 2; + oneof target { + string agent_id = 3; + string mcp_id = 4; + string hook_id = 5; + } } -message CreateAttachmentRequest { - AttachmentKind kind = 1; - string source_id = 2; - string target_id = 3; +message CreateInitScriptResponse { + InitScript init_script = 1; } -message CreateAttachmentResponse { - Attachment attachment = 1; +message GetInitScriptRequest { + string id = 1; // UUID } -message GetAttachmentRequest { - string id = 1; +message GetInitScriptResponse { + InitScript init_script = 1; } -message GetAttachmentResponse { - Attachment attachment = 1; +message UpdateInitScriptRequest { + string id = 1; // UUID + optional string script = 2; + optional string description = 3; } -message DeleteAttachmentRequest { - string id = 1; +message UpdateInitScriptResponse { + InitScript init_script = 1; +} + +message DeleteInitScriptRequest { + string id = 1; // UUID } -message DeleteAttachmentResponse {} +message DeleteInitScriptResponse {} -message ListAttachmentsRequest { +message ListInitScriptsRequest { int32 page_size = 1; string page_token = 2; - EntityType source_type = 3; - string source_id = 4; - EntityType target_type = 5; - string target_id = 6; - AttachmentKind kind = 7; } -message ListAttachmentsResponse { - repeated Attachment attachments = 1; +message ListInitScriptsResponse { + repeated InitScript init_scripts = 1; string next_page_token = 2; } From e10b0ccb6e78f8012fe88e2e31ede65e6a3cacc3 Mon Sep 17 00:00:00 2001 From: Casey Brooks Date: Wed, 18 Mar 2026 01:07:31 +0000 Subject: [PATCH 2/3] fix(teams): add list filters --- openapi/team/v1/paths/envs.yaml | 15 ++++++++++++++ openapi/team/v1/paths/hooks.yaml | 5 +++++ openapi/team/v1/paths/init-scripts.yaml | 15 ++++++++++++++ openapi/team/v1/paths/mcps.yaml | 5 +++++ openapi/team/v1/paths/skills.yaml | 5 +++++ openapi/team/v1/paths/volume-attachments.yaml | 20 +++++++++++++++++++ proto/agynio/api/teams/v1/teams.proto | 13 ++++++++++++ 7 files changed, 78 insertions(+) diff --git a/openapi/team/v1/paths/envs.yaml b/openapi/team/v1/paths/envs.yaml index 611fa57..c189306 100644 --- a/openapi/team/v1/paths/envs.yaml +++ b/openapi/team/v1/paths/envs.yaml @@ -13,6 +13,21 @@ get: name: pageToken schema: type: string + - in: query + name: agentId + schema: + type: string + format: uuid + - in: query + name: mcpId + schema: + type: string + format: uuid + - in: query + name: hookId + schema: + type: string + format: uuid responses: '200': description: OK diff --git a/openapi/team/v1/paths/hooks.yaml b/openapi/team/v1/paths/hooks.yaml index 9cbd3e8..4117a20 100644 --- a/openapi/team/v1/paths/hooks.yaml +++ b/openapi/team/v1/paths/hooks.yaml @@ -13,6 +13,11 @@ get: name: pageToken schema: type: string + - in: query + name: agentId + schema: + type: string + format: uuid responses: '200': description: OK diff --git a/openapi/team/v1/paths/init-scripts.yaml b/openapi/team/v1/paths/init-scripts.yaml index 08e583e..4dba6c7 100644 --- a/openapi/team/v1/paths/init-scripts.yaml +++ b/openapi/team/v1/paths/init-scripts.yaml @@ -13,6 +13,21 @@ get: name: pageToken schema: type: string + - in: query + name: agentId + schema: + type: string + format: uuid + - in: query + name: mcpId + schema: + type: string + format: uuid + - in: query + name: hookId + schema: + type: string + format: uuid responses: '200': description: OK diff --git a/openapi/team/v1/paths/mcps.yaml b/openapi/team/v1/paths/mcps.yaml index a4f319e..ed26f68 100644 --- a/openapi/team/v1/paths/mcps.yaml +++ b/openapi/team/v1/paths/mcps.yaml @@ -13,6 +13,11 @@ get: name: pageToken schema: type: string + - in: query + name: agentId + schema: + type: string + format: uuid responses: '200': description: OK diff --git a/openapi/team/v1/paths/skills.yaml b/openapi/team/v1/paths/skills.yaml index c9bde4e..bee016c 100644 --- a/openapi/team/v1/paths/skills.yaml +++ b/openapi/team/v1/paths/skills.yaml @@ -13,6 +13,11 @@ get: name: pageToken schema: type: string + - in: query + name: agentId + schema: + type: string + format: uuid responses: '200': description: OK diff --git a/openapi/team/v1/paths/volume-attachments.yaml b/openapi/team/v1/paths/volume-attachments.yaml index d9317f3..a64376e 100644 --- a/openapi/team/v1/paths/volume-attachments.yaml +++ b/openapi/team/v1/paths/volume-attachments.yaml @@ -13,6 +13,26 @@ get: name: pageToken schema: type: string + - in: query + name: volumeId + schema: + type: string + format: uuid + - in: query + name: agentId + schema: + type: string + format: uuid + - in: query + name: mcpId + schema: + type: string + format: uuid + - in: query + name: hookId + schema: + type: string + format: uuid responses: '200': description: OK diff --git a/proto/agynio/api/teams/v1/teams.proto b/proto/agynio/api/teams/v1/teams.proto index c1ca0ac..6421ff3 100644 --- a/proto/agynio/api/teams/v1/teams.proto +++ b/proto/agynio/api/teams/v1/teams.proto @@ -258,6 +258,10 @@ message DeleteVolumeAttachmentResponse {} message ListVolumeAttachmentsRequest { int32 page_size = 1; string page_token = 2; + string volume_id = 3; + string agent_id = 4; + string mcp_id = 5; + string hook_id = 6; } message ListVolumeAttachmentsResponse { @@ -319,6 +323,7 @@ message DeleteMcpResponse {} message ListMcpsRequest { int32 page_size = 1; string page_token = 2; + string agent_id = 3; } message ListMcpsResponse { @@ -377,6 +382,7 @@ message DeleteSkillResponse {} message ListSkillsRequest { int32 page_size = 1; string page_token = 2; + string agent_id = 3; } message ListSkillsResponse { @@ -441,6 +447,7 @@ message DeleteHookResponse {} message ListHooksRequest { int32 page_size = 1; string page_token = 2; + string agent_id = 3; } message ListHooksResponse { @@ -514,6 +521,9 @@ message DeleteEnvResponse {} message ListEnvsRequest { int32 page_size = 1; string page_token = 2; + string agent_id = 3; + string mcp_id = 4; + string hook_id = 5; } message ListEnvsResponse { @@ -577,6 +587,9 @@ message DeleteInitScriptResponse {} message ListInitScriptsRequest { int32 page_size = 1; string page_token = 2; + string agent_id = 3; + string mcp_id = 4; + string hook_id = 5; } message ListInitScriptsResponse { From a12a5fbfb2e6356133c5b0b79db03ee4c0810018 Mon Sep 17 00:00:00 2001 From: Casey Brooks Date: Wed, 18 Mar 2026 01:14:51 +0000 Subject: [PATCH 3/3] chore(teams): align mcp comment --- proto/agynio/api/teams/v1/teams.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/agynio/api/teams/v1/teams.proto b/proto/agynio/api/teams/v1/teams.proto index 6421ff3..449c442 100644 --- a/proto/agynio/api/teams/v1/teams.proto +++ b/proto/agynio/api/teams/v1/teams.proto @@ -32,7 +32,7 @@ service TeamsService { rpc DeleteVolumeAttachment(DeleteVolumeAttachmentRequest) returns (DeleteVolumeAttachmentResponse); rpc ListVolumeAttachments(ListVolumeAttachmentsRequest) returns (ListVolumeAttachmentsResponse); - // --- MCP Servers --- + // --- MCPs --- rpc CreateMcp(CreateMcpRequest) returns (CreateMcpResponse); rpc GetMcp(GetMcpRequest) returns (GetMcpResponse); rpc UpdateMcp(UpdateMcpRequest) returns (UpdateMcpResponse);