Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
4f00dea
[US-001] Add request/response validation schemas for agent duplication
sarah-inkeep Jan 30, 2026
d48cb1f
[US-002] Add agent duplication data access layer
sarah-inkeep Jan 30, 2026
b300dc6
[US-003] Implement agent duplication API endpoint
sarah-inkeep Jan 30, 2026
c16de04
[US-004] Add duplicate option to agent card dropdown
sarah-inkeep Jan 30, 2026
bde46cb
[US-005] Create duplicate agent modal
sarah-inkeep Jan 30, 2026
48ebb7c
fix(agents-core): prevent cross-contamination of data/artifact compon…
sarah-inkeep Jan 31, 2026
4a6d348
docs: update API reference to include duplicate agent endpoint
sarah-inkeep Jan 31, 2026
fbbb6b6
fix(agents-core): wrap duplicateAgent in database transaction for ato…
sarah-inkeep Jan 31, 2026
e14b543
perf(agents-core): batch database inserts in duplicateAgent for bette…
sarah-inkeep Jan 31, 2026
c8d3840
refactor(agents-core): remove unused subAgentIdMapping dead code
sarah-inkeep Jan 31, 2026
200fda0
remove auto gen files and old changeset
sarah-inkeep Jan 31, 2026
b8d41d2
test: remove placeholder UI tests that provided no coverage
sarah-inkeep Jan 31, 2026
dd07026
feat(agents-manage-ui): add loading toast to agent duplication
sarah-inkeep Jan 31, 2026
aadcab1
Remove consolelog
sarah-inkeep Jan 31, 2026
88c3840
Fix duplicate key error toast
sarah-inkeep Jan 31, 2026
b4601a6
Use same schmea for duplicate agent name and id as agent, use same sc…
sarah-inkeep Feb 2, 2026
8013a9e
Make newAgentName required in api, regen open api spec
sarah-inkeep Feb 3, 2026
e5fa41e
Update tests
sarah-inkeep Feb 3, 2026
66b58bb
Fix missed newAgentName optional
sarah-inkeep Feb 3, 2026
eed3947
fix(agents-core): duplicate functions when duplicating agent to preve…
sarah-inkeep Feb 3, 2026
983118f
Fix type err
sarah-inkeep Feb 3, 2026
000e528
Fix merge conflict
sarah-inkeep Feb 6, 2026
3e94ec9
Add parallelization for duplicate agent
sarah-inkeep Feb 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/loud-views-camp.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@inkeep/agents-core": patch
"@inkeep/agents-manage-ui": patch
"@inkeep/agents-api": patch
---

Add duplicate agent functionality with full sub-agent and relationship copying
132 changes: 132 additions & 0 deletions agents-api/__snapshots__/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -3040,6 +3040,39 @@
},
"type": "object"
},
"DuplicateAgentRequest": {
"properties": {
"newAgentId": {
"description": "Unique identifier for the new duplicated agent",
"example": "resource_789",
"maxLength": 255,
"minLength": 1,
"pattern": "^[a-zA-Z0-9\\-_.]+$",
"type": "string"
},
"newAgentName": {
"description": "Name for the duplicated agent.",
"minLength": 1,
"type": "string"
}
},
"required": [
"newAgentId",
"newAgentName"
],
"type": "object"
},
"DuplicateAgentResponse": {
"properties": {
"data": {
"$ref": "#/components/schemas/Agent"
}
},
"required": [
"data"
],
"type": "object"
},
"ErrorResponse": {
"properties": {
"details": {
Expand Down Expand Up @@ -13372,6 +13405,105 @@
]
}
},
"/manage/tenants/{tenantId}/projects/{projectId}/agents/{agentId}/duplicate": {
"post": {
"operationId": "duplicate-agent",
"parameters": [
{
"description": "Tenant identifier",
"in": "path",
"name": "tenantId",
"required": true,
"schema": {
"$ref": "#/components/schemas/TenantIdPathParam"
}
},
{
"description": "Project identifier",
"in": "path",
"name": "projectId",
"required": true,
"schema": {
"$ref": "#/components/schemas/ProjectIdPathParam"
}
},
{
"description": "Agent identifier",
"in": "path",
"name": "agentId",
"required": true,
"schema": {
"$ref": "#/components/schemas/AgentIdPathParam"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DuplicateAgentRequest"
}
}
}
},
"responses": {
"201": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/DuplicateAgentResponse"
}
}
},
"description": "Agent duplicated successfully"
},
"400": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
},
"description": "Invalid request body"
},
"403": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
},
"description": "Insufficient permissions"
},
"404": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
},
"description": "Agent not found"
},
"409": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
},
"description": "Agent with new ID already exists"
}
},
"summary": "Duplicate Agent",
"tags": [
"Agents"
]
}
},
"/manage/tenants/{tenantId}/projects/{projectId}/agents/{agentId}/full": {
"get": {
"operationId": "get-full-agent-definition",
Expand Down
Loading
Loading