@inkeep/agents-manage-api 0.39.4 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/create-app.d.ts +21 -0
  2. package/dist/create-app.js +144 -0
  3. package/dist/data/agentFull.d.ts +15 -0
  4. package/dist/data/agentFull.js +84 -0
  5. package/dist/data/conversations.d.ts +77 -0
  6. package/dist/data/conversations.js +152 -0
  7. package/dist/data/db/dbClient.d.ts +6 -0
  8. package/dist/data/db/dbClient.js +17 -0
  9. package/dist/env.d.ts +61 -0
  10. package/dist/env.js +55 -0
  11. package/dist/factory.d.ts +17 -2
  12. package/dist/factory.js +35 -2
  13. package/dist/index.d.ts +119 -22
  14. package/dist/index.js +8 -5
  15. package/dist/initialization.d.ts +6 -0
  16. package/dist/initialization.js +79 -0
  17. package/dist/logger.d.ts +2 -0
  18. package/dist/logger.js +3 -0
  19. package/dist/middleware/auth.d.ts +24 -0
  20. package/dist/middleware/auth.js +55 -0
  21. package/dist/middleware/error-handler.d.ts +12 -0
  22. package/dist/middleware/error-handler.js +88 -0
  23. package/dist/middleware/require-permission.d.ts +19 -0
  24. package/dist/middleware/require-permission.js +80 -0
  25. package/dist/middleware/session-auth.d.ts +6 -0
  26. package/dist/middleware/session-auth.js +26 -0
  27. package/dist/middleware/tenant-access.d.ts +12 -0
  28. package/dist/middleware/tenant-access.js +54 -0
  29. package/dist/openapi.d.ts +7 -0
  30. package/dist/openapi.js +157 -0
  31. package/dist/routes/agent.d.ts +9 -0
  32. package/dist/routes/agent.js +244 -0
  33. package/dist/routes/agentFull.d.ts +9 -0
  34. package/dist/routes/agentFull.js +188 -0
  35. package/dist/routes/agentToolRelations.d.ts +9 -0
  36. package/dist/routes/agentToolRelations.js +284 -0
  37. package/dist/routes/apiKeys.d.ts +9 -0
  38. package/dist/routes/apiKeys.js +217 -0
  39. package/dist/routes/artifactComponents.d.ts +9 -0
  40. package/dist/routes/artifactComponents.js +204 -0
  41. package/dist/routes/cliAuth.d.ts +9 -0
  42. package/dist/routes/cliAuth.js +60 -0
  43. package/dist/routes/contextConfigs.d.ts +9 -0
  44. package/dist/routes/contextConfigs.js +175 -0
  45. package/dist/routes/conversations.d.ts +7 -0
  46. package/dist/routes/conversations.js +59 -0
  47. package/dist/routes/credentialStores.d.ts +9 -0
  48. package/dist/routes/credentialStores.js +81 -0
  49. package/dist/routes/credentials.d.ts +9 -0
  50. package/dist/routes/credentials.js +204 -0
  51. package/dist/routes/dataComponents.d.ts +9 -0
  52. package/dist/routes/dataComponents.js +188 -0
  53. package/dist/routes/externalAgents.d.ts +9 -0
  54. package/dist/routes/externalAgents.js +195 -0
  55. package/dist/routes/functionTools.d.ts +9 -0
  56. package/dist/routes/functionTools.js +252 -0
  57. package/dist/routes/functions.d.ts +9 -0
  58. package/dist/routes/functions.js +281 -0
  59. package/dist/routes/index.d.ts +7 -0
  60. package/dist/routes/index.js +54 -0
  61. package/dist/routes/invitations.d.ts +9 -0
  62. package/dist/routes/invitations.js +41 -0
  63. package/dist/routes/mcp.d.ts +7 -0
  64. package/dist/routes/mcp.js +45 -0
  65. package/dist/routes/mcpCatalog.d.ts +13 -0
  66. package/dist/routes/mcpCatalog.js +454 -0
  67. package/dist/routes/oauth.d.ts +10 -0
  68. package/dist/routes/oauth.js +314 -0
  69. package/dist/routes/playgroundToken.d.ts +9 -0
  70. package/dist/routes/playgroundToken.js +108 -0
  71. package/dist/routes/projectFull.d.ts +9 -0
  72. package/dist/routes/projectFull.js +193 -0
  73. package/dist/routes/projects.d.ts +9 -0
  74. package/dist/routes/projects.js +188 -0
  75. package/dist/routes/shared.d.ts +93 -0
  76. package/dist/routes/shared.js +44 -0
  77. package/dist/routes/signoz.d.ts +10 -0
  78. package/dist/routes/signoz.js +155 -0
  79. package/dist/routes/subAgentArtifactComponents.d.ts +9 -0
  80. package/dist/routes/subAgentArtifactComponents.js +198 -0
  81. package/dist/routes/subAgentDataComponents.d.ts +9 -0
  82. package/dist/routes/subAgentDataComponents.js +197 -0
  83. package/dist/routes/subAgentExternalAgentRelations.d.ts +9 -0
  84. package/dist/routes/subAgentExternalAgentRelations.js +213 -0
  85. package/dist/routes/subAgentRelations.d.ts +9 -0
  86. package/dist/routes/subAgentRelations.js +259 -0
  87. package/dist/routes/subAgentTeamAgentRelations.d.ts +9 -0
  88. package/dist/routes/subAgentTeamAgentRelations.js +213 -0
  89. package/dist/routes/subAgentToolRelations.d.ts +9 -0
  90. package/dist/routes/subAgentToolRelations.js +284 -0
  91. package/dist/routes/subAgents.d.ts +9 -0
  92. package/dist/routes/subAgents.js +210 -0
  93. package/dist/routes/thirdPartyMCPServers.d.ts +14 -0
  94. package/dist/routes/thirdPartyMCPServers.js +72 -0
  95. package/dist/routes/tools.d.ts +9 -0
  96. package/dist/routes/tools.js +256 -0
  97. package/dist/routes/userOrganizations.d.ts +9 -0
  98. package/dist/routes/userOrganizations.js +58 -0
  99. package/dist/sso-helpers.d.ts +20 -0
  100. package/dist/sso-helpers.js +51 -0
  101. package/dist/types/app.d.ts +47 -0
  102. package/dist/types/app.js +1 -0
  103. package/dist/utils/cors.d.ts +33 -0
  104. package/dist/utils/cors.js +98 -0
  105. package/dist/utils/oauth-service.d.ts +71 -0
  106. package/dist/utils/oauth-service.js +106 -0
  107. package/dist/utils/signoz-helpers.d.ts +9 -0
  108. package/dist/utils/signoz-helpers.js +33 -0
  109. package/dist/utils/temp-api-keys.d.ts +17 -0
  110. package/dist/utils/temp-api-keys.js +26 -0
  111. package/package.json +6 -13
  112. package/dist/chunk-VBDAOXYI.js +0 -832
  113. package/dist/chunk-VBDAOXYI.js.map +0 -1
  114. package/dist/factory2.d.ts +0 -41
  115. package/dist/factory2.d.ts.map +0 -1
  116. package/dist/factory2.js +0 -37085
  117. package/dist/factory2.js.map +0 -1
  118. package/dist/index.d.ts.map +0 -1
  119. package/dist/index.js.map +0 -1
  120. package/dist/nodefs.js +0 -27
  121. package/dist/nodefs.js.map +0 -1
  122. package/dist/opfs-ahp.js +0 -368
  123. package/dist/opfs-ahp.js.map +0 -1
@@ -0,0 +1,80 @@
1
+ import { env } from "../env.js";
2
+ import { createApiError } from "@inkeep/agents-core";
3
+ import { createMiddleware } from "hono/factory";
4
+ import { HTTPException } from "hono/http-exception";
5
+
6
+ //#region src/middleware/require-permission.ts
7
+ function formatPermissionsForDisplay(permissions) {
8
+ const formatted = [];
9
+ for (const [resource, actions] of Object.entries(permissions)) {
10
+ const actionList = Array.isArray(actions) ? actions : [actions];
11
+ for (const action of actionList) formatted.push(`${resource}:${action}`);
12
+ }
13
+ return formatted;
14
+ }
15
+ const requirePermission = (permissions) => createMiddleware(async (c, next) => {
16
+ const isTestEnvironment = process.env.ENVIRONMENT === "test";
17
+ const auth = c.get("auth");
18
+ if (env.DISABLE_AUTH || isTestEnvironment || !auth) {
19
+ await next();
20
+ return;
21
+ }
22
+ const userId = c.get("userId");
23
+ const tenantId = c.get("tenantId");
24
+ const tenantRole = c.get("tenantRole");
25
+ const requiredPermissions = formatPermissionsForDisplay(permissions);
26
+ if (userId === "system" || userId?.startsWith("apikey:")) {
27
+ await next();
28
+ return;
29
+ }
30
+ if (!userId || !tenantId) throw createApiError({
31
+ code: "unauthorized",
32
+ message: "User or organization context not found. Ensure you are authenticated and belong to an organization.",
33
+ instance: c.req.path,
34
+ extensions: {
35
+ requiredPermissions,
36
+ context: {
37
+ hasUserId: !!userId,
38
+ hasTenantId: !!tenantId
39
+ }
40
+ }
41
+ });
42
+ try {
43
+ const result = await auth.api.hasPermission({
44
+ body: {
45
+ permissions,
46
+ organizationId: tenantId
47
+ },
48
+ headers: c.req.raw.headers
49
+ });
50
+ if (!result || !result.success) throw createApiError({
51
+ code: "forbidden",
52
+ message: `Permission denied. Required: ${requiredPermissions.join(", ")}`,
53
+ instance: c.req.path,
54
+ extensions: {
55
+ requiredPermissions,
56
+ context: {
57
+ userId,
58
+ organizationId: tenantId,
59
+ currentRole: tenantRole || "unknown"
60
+ }
61
+ }
62
+ });
63
+ await next();
64
+ } catch (error) {
65
+ if (error instanceof HTTPException) throw error;
66
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
67
+ throw createApiError({
68
+ code: "internal_server_error",
69
+ message: "Failed to verify permissions",
70
+ instance: c.req.path,
71
+ extensions: {
72
+ requiredPermissions,
73
+ internalError: errorMessage
74
+ }
75
+ });
76
+ }
77
+ });
78
+
79
+ //#endregion
80
+ export { requirePermission };
@@ -0,0 +1,6 @@
1
+ import * as hono0 from "hono";
2
+
3
+ //#region src/middleware/session-auth.d.ts
4
+ declare const sessionAuth: () => hono0.MiddlewareHandler<any, string, {}, Response>;
5
+ //#endregion
6
+ export { sessionAuth };
@@ -0,0 +1,26 @@
1
+ import { createApiError } from "@inkeep/agents-core";
2
+ import { createMiddleware } from "hono/factory";
3
+ import { HTTPException } from "hono/http-exception";
4
+
5
+ //#region src/middleware/session-auth.ts
6
+ const sessionAuth = () => createMiddleware(async (c, next) => {
7
+ try {
8
+ const user = c.get("user");
9
+ if (!user) throw createApiError({
10
+ code: "unauthorized",
11
+ message: "Please log in to access this resource"
12
+ });
13
+ c.set("userId", user.id);
14
+ c.set("userEmail", user.email);
15
+ await next();
16
+ } catch (error) {
17
+ if (error instanceof HTTPException) throw error;
18
+ throw createApiError({
19
+ code: "unauthorized",
20
+ message: "Authentication failed"
21
+ });
22
+ }
23
+ });
24
+
25
+ //#endregion
26
+ export { sessionAuth };
@@ -0,0 +1,12 @@
1
+ import * as hono0 from "hono";
2
+
3
+ //#region src/middleware/tenant-access.d.ts
4
+ declare const requireTenantAccess: () => hono0.MiddlewareHandler<{
5
+ Variables: {
6
+ userId: string;
7
+ tenantId: string;
8
+ tenantRole: string;
9
+ };
10
+ }, string, {}, Response>;
11
+ //#endregion
12
+ export { requireTenantAccess };
@@ -0,0 +1,54 @@
1
+ import dbClient_default from "../data/db/dbClient.js";
2
+ import { createApiError, getUserOrganizations } from "@inkeep/agents-core";
3
+ import { createMiddleware } from "hono/factory";
4
+ import { HTTPException } from "hono/http-exception";
5
+
6
+ //#region src/middleware/tenant-access.ts
7
+ const requireTenantAccess = () => createMiddleware(async (c, next) => {
8
+ const userId = c.get("userId");
9
+ const tenantId = c.req.param("tenantId");
10
+ if (!userId) throw createApiError({
11
+ code: "unauthorized",
12
+ message: "User ID not found"
13
+ });
14
+ if (!tenantId) throw createApiError({
15
+ code: "bad_request",
16
+ message: "Organization ID is required"
17
+ });
18
+ if (userId === "system") {
19
+ c.set("tenantId", tenantId);
20
+ c.set("tenantRole", "owner");
21
+ await next();
22
+ return;
23
+ }
24
+ if (userId.startsWith("apikey:")) {
25
+ const apiKeyTenantId = c.get("tenantId");
26
+ if (apiKeyTenantId && apiKeyTenantId !== tenantId) throw createApiError({
27
+ code: "forbidden",
28
+ message: "API key does not have access to this organization"
29
+ });
30
+ c.set("tenantId", tenantId);
31
+ c.set("tenantRole", "owner");
32
+ await next();
33
+ return;
34
+ }
35
+ try {
36
+ const organizationAccess = (await getUserOrganizations(dbClient_default)(userId)).find((org) => org.organizationId === tenantId);
37
+ if (!organizationAccess) throw createApiError({
38
+ code: "forbidden",
39
+ message: "Access denied to this organization"
40
+ });
41
+ c.set("tenantId", tenantId);
42
+ c.set("tenantRole", organizationAccess.role);
43
+ await next();
44
+ } catch (error) {
45
+ if (error instanceof HTTPException) throw error;
46
+ throw createApiError({
47
+ code: "internal_server_error",
48
+ message: "Failed to verify organization access"
49
+ });
50
+ }
51
+ });
52
+
53
+ //#endregion
54
+ export { requireTenantAccess };
@@ -0,0 +1,7 @@
1
+ import { OpenAPIHono } from "@hono/zod-openapi";
2
+ import { Env } from "hono";
3
+
4
+ //#region src/openapi.d.ts
5
+ declare function setupOpenAPIRoutes<E extends Env = Env>(app: OpenAPIHono<E>): void;
6
+ //#endregion
7
+ export { setupOpenAPIRoutes };
@@ -0,0 +1,157 @@
1
+ import { env } from "./env.js";
2
+ import { swaggerUI } from "@hono/swagger-ui";
3
+
4
+ //#region src/openapi.ts
5
+ function setupOpenAPIRoutes(app) {
6
+ app.get("/openapi.json", (c) => {
7
+ try {
8
+ const serverUrl = process.env.VERCEL_ENV === "production" && process.env.VERCEL_PROJECT_PRODUCTION_URL ? `https://${process.env.VERCEL_PROJECT_PRODUCTION_URL}` : process.env.VERCEL_ENV === "preview" && process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : env.INKEEP_AGENTS_MANAGE_API_URL;
9
+ const document = app.getOpenAPIDocument({
10
+ openapi: "3.0.0",
11
+ info: {
12
+ title: "Inkeep Agents Manage API",
13
+ version: "1.0.0",
14
+ description: "REST API for the management of the Inkeep Agent Framework."
15
+ },
16
+ servers: [{
17
+ url: serverUrl,
18
+ description: "API Server"
19
+ }],
20
+ tags: [
21
+ {
22
+ name: "Agent",
23
+ description: "Operations for managing individual agents"
24
+ },
25
+ {
26
+ name: "Agent Artifact Component Relations",
27
+ description: "Operations for managing agent artifact component relationships"
28
+ },
29
+ {
30
+ name: "Agent Data Component Relations",
31
+ description: "Operations for managing agent data component relationships"
32
+ },
33
+ {
34
+ name: "Agents",
35
+ description: "Operations for managing agents"
36
+ },
37
+ {
38
+ name: "API Keys",
39
+ description: "Operations for managing API keys"
40
+ },
41
+ {
42
+ name: "Artifact Component",
43
+ description: "Operations for managing artifact components"
44
+ },
45
+ {
46
+ name: "Context Config",
47
+ description: "Operations for managing context configurations"
48
+ },
49
+ {
50
+ name: "Credential",
51
+ description: "Operations for managing credentials"
52
+ },
53
+ {
54
+ name: "Credential Store",
55
+ description: "Operations for managing credential stores"
56
+ },
57
+ {
58
+ name: "Data Component",
59
+ description: "Operations for managing data components"
60
+ },
61
+ {
62
+ name: "External Agents",
63
+ description: "Operations for managing external agents"
64
+ },
65
+ {
66
+ name: "Full Agent",
67
+ description: "Operations for managing complete agent definitions"
68
+ },
69
+ {
70
+ name: "Full Project",
71
+ description: "Operations for managing complete project definitions"
72
+ },
73
+ {
74
+ name: "Function Tools",
75
+ description: "Operations for managing function tools"
76
+ },
77
+ {
78
+ name: "Functions",
79
+ description: "Operations for managing functions"
80
+ },
81
+ {
82
+ name: "OAuth",
83
+ description: "OAuth authentication endpoints for MCP tools"
84
+ },
85
+ {
86
+ name: "Projects",
87
+ description: "Operations for managing projects"
88
+ },
89
+ {
90
+ name: "Sub Agent External Agent Relations",
91
+ description: "Operations for managing sub agent external agent relationships"
92
+ },
93
+ {
94
+ name: "Sub Agent Relations",
95
+ description: "Operations for managing sub agent relationships"
96
+ },
97
+ {
98
+ name: "Sub Agent Team Agent Relations",
99
+ description: "Operations for managing sub agent team agent relationships"
100
+ },
101
+ {
102
+ name: "SubAgent",
103
+ description: "Operations for managing sub agents"
104
+ },
105
+ {
106
+ name: "SubAgent Tool Relations",
107
+ description: "Operations for managing sub agent tool relationships"
108
+ },
109
+ {
110
+ name: "Tools",
111
+ description: "Operations for managing MCP tools"
112
+ }
113
+ ]
114
+ });
115
+ document.components = {
116
+ ...document.components,
117
+ securitySchemes: {
118
+ ...document.components?.securitySchemes || {},
119
+ cookieAuth: {
120
+ type: "apiKey",
121
+ in: "cookie",
122
+ name: "better-auth.session_token",
123
+ description: "Session-based authentication using HTTP-only cookies. Cookies are automatically sent by browsers. For server-side requests, include cookies with names starting with \"better-auth.\" in the Cookie header."
124
+ },
125
+ bearerAuth: {
126
+ type: "http",
127
+ scheme: "bearer",
128
+ bearerFormat: "Token",
129
+ description: "Bearer token authentication. Use this for API clients and service-to-service communication. Set the Authorization header to \"Bearer <token>\"."
130
+ }
131
+ }
132
+ };
133
+ document.security = [{
134
+ cookieAuth: [],
135
+ bearerAuth: []
136
+ }];
137
+ return c.json(document);
138
+ } catch (error) {
139
+ console.error("OpenAPI document generation failed:", error);
140
+ const errorDetails = error instanceof Error ? {
141
+ message: error.message,
142
+ stack: error.stack
143
+ } : JSON.stringify(error, null, 2);
144
+ return c.json({
145
+ error: "Failed to generate OpenAPI document",
146
+ details: errorDetails
147
+ }, 500);
148
+ }
149
+ });
150
+ app.get("/docs", swaggerUI({
151
+ url: "/openapi.json",
152
+ title: "Inkeep Agents Manage API Documentation"
153
+ }));
154
+ }
155
+
156
+ //#endregion
157
+ export { setupOpenAPIRoutes };
@@ -0,0 +1,9 @@
1
+ import { BaseAppVariables } from "../types/app.js";
2
+ import { OpenAPIHono } from "@hono/zod-openapi";
3
+
4
+ //#region src/routes/agent.d.ts
5
+ declare const app: OpenAPIHono<{
6
+ Variables: BaseAppVariables;
7
+ }, {}, "/">;
8
+ //#endregion
9
+ export { app as default };
@@ -0,0 +1,244 @@
1
+ import dbClient_default from "../data/db/dbClient.js";
2
+ import { requirePermission } from "../middleware/require-permission.js";
3
+ import { speakeasyOffsetLimitPagination } from "./shared.js";
4
+ import { OpenAPIHono, createRoute } from "@hono/zod-openapi";
5
+ import { AgentApiInsertSchema, AgentApiUpdateSchema, AgentListResponse, AgentResponse, AgentWithinContextOfProjectResponse, ErrorResponseSchema, PaginationQueryParamsSchema, RelatedAgentInfoListResponse, TenantProjectAgentParamsSchema, TenantProjectAgentSubAgentParamsSchema, TenantProjectIdParamsSchema, TenantProjectParamsSchema, commonGetErrorResponses, createAgent, createApiError, deleteAgent, generateId, getAgentById, getAgentSubAgentInfos, getFullAgentDefinition, listAgentsPaginated, updateAgent } from "@inkeep/agents-core";
6
+
7
+ //#region src/routes/agent.ts
8
+ const app = new OpenAPIHono();
9
+ app.use("/", async (c, next) => {
10
+ if (c.req.method === "POST") return requirePermission({ agent: ["create"] })(c, next);
11
+ return next();
12
+ });
13
+ app.use("/:id", async (c, next) => {
14
+ if (c.req.method === "PUT") return requirePermission({ agent: ["update"] })(c, next);
15
+ if (c.req.method === "DELETE") return requirePermission({ agent: ["delete"] })(c, next);
16
+ return next();
17
+ });
18
+ app.openapi(createRoute({
19
+ method: "get",
20
+ path: "/",
21
+ summary: "List Agents",
22
+ operationId: "list-agents",
23
+ tags: ["Agents"],
24
+ request: {
25
+ params: TenantProjectParamsSchema,
26
+ query: PaginationQueryParamsSchema
27
+ },
28
+ responses: {
29
+ 200: {
30
+ description: "List of agents retrieved successfully",
31
+ content: { "application/json": { schema: AgentListResponse } }
32
+ },
33
+ ...commonGetErrorResponses
34
+ },
35
+ ...speakeasyOffsetLimitPagination
36
+ }), async (c) => {
37
+ const { tenantId, projectId } = c.req.valid("param");
38
+ const page = Number(c.req.query("page")) || 1;
39
+ const limit = Math.min(Number(c.req.query("limit")) || 10, 100);
40
+ const result = await listAgentsPaginated(dbClient_default)({
41
+ scopes: {
42
+ tenantId,
43
+ projectId
44
+ },
45
+ pagination: {
46
+ page,
47
+ limit
48
+ }
49
+ });
50
+ return c.json(result);
51
+ });
52
+ app.openapi(createRoute({
53
+ method: "get",
54
+ path: "/{id}",
55
+ summary: "Get Agent",
56
+ operationId: "get-agent",
57
+ tags: ["Agents"],
58
+ request: { params: TenantProjectIdParamsSchema },
59
+ responses: {
60
+ 200: {
61
+ description: "Agent found",
62
+ content: { "application/json": { schema: AgentResponse } }
63
+ },
64
+ ...commonGetErrorResponses
65
+ }
66
+ }), async (c) => {
67
+ const { tenantId, projectId, id } = c.req.valid("param");
68
+ const agent = await getAgentById(dbClient_default)({ scopes: {
69
+ tenantId,
70
+ projectId,
71
+ agentId: id
72
+ } });
73
+ if (!agent) throw createApiError({
74
+ code: "not_found",
75
+ message: "Agent not found"
76
+ });
77
+ return c.json({ data: agent });
78
+ });
79
+ app.openapi(createRoute({
80
+ method: "get",
81
+ path: "/{agentId}/sub-agents/{subAgentId}/related",
82
+ summary: "Get Related Agent Infos",
83
+ operationId: "get-related-agent-infos",
84
+ tags: ["Agent"],
85
+ request: { params: TenantProjectAgentSubAgentParamsSchema },
86
+ responses: {
87
+ 200: {
88
+ description: "Related agent infos retrieved successfully",
89
+ content: { "application/json": { schema: RelatedAgentInfoListResponse } }
90
+ },
91
+ ...commonGetErrorResponses
92
+ }
93
+ }), async (c) => {
94
+ const { tenantId, projectId, agentId, subAgentId } = c.req.valid("param");
95
+ const relatedAgents = await getAgentSubAgentInfos(dbClient_default)({
96
+ scopes: {
97
+ tenantId,
98
+ projectId
99
+ },
100
+ agentId,
101
+ subAgentId
102
+ });
103
+ return c.json({
104
+ data: relatedAgents,
105
+ pagination: {
106
+ page: 1,
107
+ limit: relatedAgents.length,
108
+ total: relatedAgents.length,
109
+ pages: 1
110
+ }
111
+ });
112
+ });
113
+ app.openapi(createRoute({
114
+ method: "get",
115
+ path: "/{agentId}/full",
116
+ summary: "Get Full Agent Definition",
117
+ operationId: "get-full-agent-definition",
118
+ tags: ["Agent"],
119
+ request: { params: TenantProjectAgentParamsSchema },
120
+ responses: {
121
+ 200: {
122
+ description: "Full agent definition retrieved successfully",
123
+ content: { "application/json": { schema: AgentWithinContextOfProjectResponse } }
124
+ },
125
+ ...commonGetErrorResponses
126
+ }
127
+ }), async (c) => {
128
+ const { tenantId, projectId, agentId } = c.req.valid("param");
129
+ const fullAgent = await getFullAgentDefinition(dbClient_default)({ scopes: {
130
+ tenantId,
131
+ projectId,
132
+ agentId
133
+ } });
134
+ if (!fullAgent) throw createApiError({
135
+ code: "not_found",
136
+ message: "Agent not found"
137
+ });
138
+ return c.json({ data: fullAgent });
139
+ });
140
+ app.openapi(createRoute({
141
+ method: "post",
142
+ path: "/",
143
+ summary: "Create Agent",
144
+ operationId: "create-agent",
145
+ tags: ["Agents"],
146
+ request: {
147
+ params: TenantProjectParamsSchema,
148
+ body: { content: { "application/json": { schema: AgentApiInsertSchema } } }
149
+ },
150
+ responses: {
151
+ 201: {
152
+ description: "Agent created successfully",
153
+ content: { "application/json": { schema: AgentResponse } }
154
+ },
155
+ ...commonGetErrorResponses
156
+ }
157
+ }), async (c) => {
158
+ const { tenantId, projectId } = c.req.valid("param");
159
+ const validatedBody = c.req.valid("json");
160
+ try {
161
+ const agent = await createAgent(dbClient_default)({
162
+ tenantId,
163
+ projectId,
164
+ id: validatedBody.id || generateId(),
165
+ name: validatedBody.name,
166
+ defaultSubAgentId: validatedBody.defaultSubAgentId,
167
+ contextConfigId: validatedBody.contextConfigId ?? void 0
168
+ });
169
+ return c.json({ data: agent }, 201);
170
+ } catch (error) {
171
+ if (error?.cause?.code === "23505") throw createApiError({
172
+ code: "conflict",
173
+ message: `An agent with ID '${validatedBody.id || "unknown"}' already exists`
174
+ });
175
+ throw error;
176
+ }
177
+ });
178
+ app.openapi(createRoute({
179
+ method: "put",
180
+ path: "/{id}",
181
+ summary: "Update Agent",
182
+ operationId: "update-agent",
183
+ tags: ["Agents"],
184
+ request: {
185
+ params: TenantProjectIdParamsSchema,
186
+ body: { content: { "application/json": { schema: AgentApiUpdateSchema } } }
187
+ },
188
+ responses: {
189
+ 200: {
190
+ description: "Agent updated successfully",
191
+ content: { "application/json": { schema: AgentResponse } }
192
+ },
193
+ ...commonGetErrorResponses
194
+ }
195
+ }), async (c) => {
196
+ const { tenantId, projectId, id } = c.req.valid("param");
197
+ const validatedBody = c.req.valid("json");
198
+ const updatedAgent = await updateAgent(dbClient_default)({
199
+ scopes: {
200
+ tenantId,
201
+ projectId,
202
+ agentId: id
203
+ },
204
+ data: {
205
+ defaultSubAgentId: validatedBody.defaultSubAgentId,
206
+ contextConfigId: validatedBody.contextConfigId ?? void 0
207
+ }
208
+ });
209
+ if (!updatedAgent) throw createApiError({
210
+ code: "not_found",
211
+ message: "Agent not found"
212
+ });
213
+ return c.json({ data: updatedAgent });
214
+ });
215
+ app.openapi(createRoute({
216
+ method: "delete",
217
+ path: "/{id}",
218
+ summary: "Delete Agent",
219
+ operationId: "delete-agent",
220
+ tags: ["Agents"],
221
+ request: { params: TenantProjectIdParamsSchema },
222
+ responses: {
223
+ 204: { description: "Agent deleted successfully" },
224
+ 404: {
225
+ description: "Agent not found",
226
+ content: { "application/json": { schema: ErrorResponseSchema } }
227
+ }
228
+ }
229
+ }), async (c) => {
230
+ const { tenantId, projectId, id } = c.req.valid("param");
231
+ if (!await deleteAgent(dbClient_default)({ scopes: {
232
+ tenantId,
233
+ projectId,
234
+ agentId: id
235
+ } })) throw createApiError({
236
+ code: "not_found",
237
+ message: "Agent not found"
238
+ });
239
+ return c.body(null, 204);
240
+ });
241
+ var agent_default = app;
242
+
243
+ //#endregion
244
+ export { agent_default as default };
@@ -0,0 +1,9 @@
1
+ import { BaseAppVariables } from "../types/app.js";
2
+ import { OpenAPIHono } from "@hono/zod-openapi";
3
+
4
+ //#region src/routes/agentFull.d.ts
5
+ declare const app: OpenAPIHono<{
6
+ Variables: BaseAppVariables;
7
+ }, {}, "/">;
8
+ //#endregion
9
+ export { app as default };