@inkeep/agents-core 0.79.1 → 0.80.2

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 (43) hide show
  1. package/dist/auth/auth-schema.d.ts +163 -163
  2. package/dist/auth/auth-validation-schemas.d.ts +154 -154
  3. package/dist/auth/auth.d.ts +9 -9
  4. package/dist/auth/auth.js +1 -1
  5. package/dist/auth/permissions.d.ts +13 -13
  6. package/dist/constants/otel-attributes.d.ts +3 -0
  7. package/dist/constants/otel-attributes.js +4 -1
  8. package/dist/data-access/manage/agents.d.ts +46 -46
  9. package/dist/data-access/manage/artifactComponents.d.ts +8 -8
  10. package/dist/data-access/manage/contextConfigs.d.ts +8 -8
  11. package/dist/data-access/manage/dataComponents.d.ts +4 -4
  12. package/dist/data-access/manage/functionTools.d.ts +10 -10
  13. package/dist/data-access/manage/skills.d.ts +9 -9
  14. package/dist/data-access/manage/subAgentExternalAgentRelations.d.ts +18 -18
  15. package/dist/data-access/manage/subAgentRelations.d.ts +20 -20
  16. package/dist/data-access/manage/subAgentTeamAgentRelations.d.ts +18 -18
  17. package/dist/data-access/manage/subAgents.d.ts +18 -18
  18. package/dist/data-access/manage/tools.d.ts +24 -24
  19. package/dist/data-access/manage/tools.js +33 -8
  20. package/dist/data-access/manage/triggers.d.ts +7 -7
  21. package/dist/data-access/runtime/apiKeys.d.ts +12 -12
  22. package/dist/data-access/runtime/apps.d.ts +7 -7
  23. package/dist/data-access/runtime/conversations.d.ts +32 -32
  24. package/dist/data-access/runtime/evalRuns.d.ts +5 -0
  25. package/dist/data-access/runtime/evalRuns.js +3 -0
  26. package/dist/data-access/runtime/events.d.ts +5 -5
  27. package/dist/data-access/runtime/feedback.d.ts +4 -4
  28. package/dist/data-access/runtime/feedback.js +2 -2
  29. package/dist/data-access/runtime/messages.d.ts +24 -24
  30. package/dist/data-access/runtime/scheduledTriggerInvocations.d.ts +5 -5
  31. package/dist/data-access/runtime/scheduledTriggerUsers.d.ts +1 -1
  32. package/dist/data-access/runtime/tasks.d.ts +6 -6
  33. package/dist/db/manage/manage-schema.d.ts +8 -8
  34. package/dist/db/runtime/runtime-schema.d.ts +14 -14
  35. package/dist/utils/error.d.ts +51 -51
  36. package/dist/utils/json-schema-walk.d.ts +50 -0
  37. package/dist/utils/json-schema-walk.js +202 -0
  38. package/dist/utils/mcp-client.js +14 -32
  39. package/dist/validation/drizzle-schema-helpers.d.ts +3 -3
  40. package/dist/validation/schemas/skills.d.ts +17 -17
  41. package/dist/validation/schemas.d.ts +2389 -2384
  42. package/dist/validation/schemas.js +2 -0
  43. package/package.json +5 -1
@@ -0,0 +1,202 @@
1
+ //#region src/utils/json-schema-walk.ts
2
+ const DEFAULT_MAX_DEPTH = 12;
3
+ function resolveRef(node, ctx) {
4
+ if (node && typeof node === "object" && typeof node.$ref === "string") {
5
+ const ref = node.$ref;
6
+ if (ref === "#") return {
7
+ node: ctx.root ?? node,
8
+ refName: "#"
9
+ };
10
+ const refName = ref.split("/").pop();
11
+ const resolved = ctx.defs[refName];
12
+ return resolved ? {
13
+ node: resolved,
14
+ refName
15
+ } : {
16
+ node,
17
+ refName
18
+ };
19
+ }
20
+ return { node };
21
+ }
22
+ function unwrapNullable(node) {
23
+ if (!node || typeof node !== "object") return {
24
+ inner: node,
25
+ nullable: false
26
+ };
27
+ if (Array.isArray(node.type) && node.type.includes("null")) {
28
+ const nonNull = node.type.filter((t) => t !== "null");
29
+ return {
30
+ inner: {
31
+ ...node,
32
+ type: nonNull.length === 1 ? nonNull[0] : nonNull
33
+ },
34
+ nullable: true
35
+ };
36
+ }
37
+ const variants = node.anyOf ?? node.oneOf;
38
+ if (Array.isArray(variants)) {
39
+ const nonNull = variants.filter((v) => v?.type !== "null");
40
+ const hasNull = variants.some((v) => v?.type === "null");
41
+ if (hasNull && nonNull.length === 1) return {
42
+ inner: nonNull[0],
43
+ nullable: true
44
+ };
45
+ if (!hasNull && nonNull.length === 1) return {
46
+ inner: nonNull[0],
47
+ nullable: false
48
+ };
49
+ if (hasNull) {
50
+ const key = node.anyOf ? "anyOf" : "oneOf";
51
+ return {
52
+ inner: {
53
+ ...node,
54
+ [key]: nonNull
55
+ },
56
+ nullable: true
57
+ };
58
+ }
59
+ }
60
+ return {
61
+ inner: node,
62
+ nullable: false
63
+ };
64
+ }
65
+ /**
66
+ * Flatten an `allOf` composition into a single node by merging the (deref'd) branches'
67
+ * properties, required, type, description, and enum. Pydantic v2 emits this shape when it
68
+ * combines a `$ref` with extra constraints (e.g. `{ allOf: [{ $ref }], description }`).
69
+ */
70
+ function mergeAllOf(node, ctx) {
71
+ if (!node || typeof node !== "object" || !Array.isArray(node.allOf)) return node;
72
+ const merged = { ...node };
73
+ merged.allOf = void 0;
74
+ merged.properties = { ...node.properties ?? {} };
75
+ const required = new Set(Array.isArray(node.required) ? node.required : []);
76
+ const stack = [...node.allOf];
77
+ const visited = /* @__PURE__ */ new Set();
78
+ while (stack.length > 0) {
79
+ const { node: branch, refName } = resolveRef(stack.pop(), ctx);
80
+ if (refName) {
81
+ if (visited.has(refName)) continue;
82
+ visited.add(refName);
83
+ }
84
+ if (!branch || typeof branch !== "object") continue;
85
+ if (Array.isArray(branch.allOf)) stack.push(...branch.allOf);
86
+ if (branch.properties && typeof branch.properties === "object") Object.assign(merged.properties, branch.properties);
87
+ if (Array.isArray(branch.required)) for (const r of branch.required) required.add(r);
88
+ if (!merged.type && typeof branch.type === "string") merged.type = branch.type;
89
+ if (!merged.description && typeof branch.description === "string") merged.description = branch.description;
90
+ if (!merged.enum && Array.isArray(branch.enum)) merged.enum = branch.enum;
91
+ }
92
+ if (Object.keys(merged.properties).length === 0) merged.properties = void 0;
93
+ if (required.size > 0) merged.required = [...required];
94
+ if (!merged.type && merged.properties) merged.type = "object";
95
+ return merged;
96
+ }
97
+ function nodeType(node) {
98
+ if (!node) return "string";
99
+ if (typeof node.type === "string") return node.type;
100
+ if (Array.isArray(node.type)) return node.type.filter((t) => t !== "null")[0] || "string";
101
+ if (Array.isArray(node.anyOf) || Array.isArray(node.oneOf)) return "union";
102
+ if (Array.isArray(node.enum)) return typeof node.enum[0] === "number" ? "number" : "string";
103
+ return "string";
104
+ }
105
+ function enumValues(node) {
106
+ if (Array.isArray(node?.enum)) return node.enum;
107
+ if (node?.const !== void 0) return [node.const];
108
+ }
109
+ function walkNode(name, rawNode, required, ctx) {
110
+ const { node: derefed, refName: outerRef } = resolveRef(rawNode, ctx);
111
+ const { inner: unwrapped, nullable } = unwrapNullable(derefed);
112
+ const { node: reResolved, refName: innerRef } = resolveRef(unwrapped, ctx);
113
+ const inner = mergeAllOf(reResolved, ctx);
114
+ const refName = outerRef ?? innerRef;
115
+ const descRaw = inner?.description ?? rawNode?.description;
116
+ const description = typeof descRaw === "string" ? descRaw.trim() || void 0 : void 0;
117
+ const type = nodeType(inner);
118
+ const base = {
119
+ name,
120
+ type,
121
+ required,
122
+ nullable,
123
+ description
124
+ };
125
+ if ((refName ? ctx.seen.has(refName) : false) || ctx.depth >= ctx.maxDepth) return {
126
+ ...base,
127
+ recursive: true
128
+ };
129
+ const childCtx = refName ? {
130
+ ...ctx,
131
+ depth: ctx.depth + 1,
132
+ seen: new Set([...ctx.seen, refName])
133
+ } : {
134
+ ...ctx,
135
+ depth: ctx.depth + 1
136
+ };
137
+ if (inner?.properties && typeof inner.properties === "object") {
138
+ const entries = Object.entries(inner.properties);
139
+ if (entries.length > 0) {
140
+ const childRequired = Array.isArray(inner.required) ? inner.required : [];
141
+ const properties = entries.map(([k, v]) => walkNode(k, v, childRequired.includes(k), childCtx));
142
+ return {
143
+ ...base,
144
+ type: "object",
145
+ properties
146
+ };
147
+ }
148
+ }
149
+ if (type === "array" && inner?.items && typeof inner.items === "object") return {
150
+ ...base,
151
+ type: "array",
152
+ items: walkNode("item", inner.items, false, childCtx)
153
+ };
154
+ const branches = inner?.anyOf ?? inner?.oneOf;
155
+ if (Array.isArray(branches) && branches.length > 1) {
156
+ const variants = branches.map((branch, i) => walkNode(`variant${i}`, branch, false, childCtx));
157
+ return {
158
+ ...base,
159
+ type: "union",
160
+ variants
161
+ };
162
+ }
163
+ const ev = enumValues(inner);
164
+ return ev ? {
165
+ ...base,
166
+ enumValues: ev
167
+ } : base;
168
+ }
169
+ /**
170
+ * Normalize a schema's top-level `properties` into ref-resolved, cycle-safe nodes.
171
+ * `$defs`/`definitions` and `$ref: "#"` are resolved against the passed schema root.
172
+ */
173
+ function normalizeJsonSchemaProperties(schema, options = {}) {
174
+ if (!schema || typeof schema !== "object") return [];
175
+ const properties = schema.properties ?? {};
176
+ const required = Array.isArray(schema.required) ? schema.required : [];
177
+ const ctx = {
178
+ defs: schema.$defs ?? schema.definitions ?? {},
179
+ root: schema,
180
+ depth: 0,
181
+ maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,
182
+ seen: /* @__PURE__ */ new Set()
183
+ };
184
+ return Object.entries(properties).map(([name, node]) => walkNode(name, node, required.includes(name), ctx));
185
+ }
186
+ /**
187
+ * Unwrap an AI SDK `jsonSchema()` wrapper (`{ jsonSchema, validate, _type }`) to the
188
+ * underlying JSON Schema. The MCP ingestion fallback wraps a raw schema this way; without
189
+ * unwrapping, downstream readers (provider tool def, prompt renderer, manage UI) see the
190
+ * wrapper's top-level keys instead of the real `properties`/`$defs`. A non-wrapper value
191
+ * (plain JSON Schema, or a Zod schema, which has no `jsonSchema` property) passes through.
192
+ */
193
+ function unwrapJsonSchemaWrapper(value) {
194
+ if (value && typeof value === "object") {
195
+ const inner = value.jsonSchema;
196
+ if (inner && typeof inner === "object") return inner;
197
+ }
198
+ return value;
199
+ }
200
+
201
+ //#endregion
202
+ export { normalizeJsonSchemaProperties, unwrapJsonSchemaWrapper };
@@ -1,4 +1,5 @@
1
1
  import { MCPTransportType } from "../types/utility.js";
2
+ import { getLogger } from "./logger.js";
2
3
  import { MCP_TOOL_CONNECTION_TIMEOUT_MS, MCP_TOOL_INITIAL_RECONNECTION_DELAY_MS, MCP_TOOL_MAX_RECONNECTION_DELAY_MS, MCP_TOOL_MAX_RETRIES, MCP_TOOL_RECONNECTION_DELAY_GROWTH_FACTOR } from "../constants/execution-limits-shared/index.js";
3
4
  import { z } from "@hono/zod-openapi";
4
5
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
@@ -6,11 +7,12 @@ import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js";
6
7
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
7
8
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
8
9
  import { DEFAULT_REQUEST_TIMEOUT_MSEC } from "@modelcontextprotocol/sdk/shared/protocol.js";
9
- import { tool } from "ai";
10
+ import { jsonSchema, tool } from "ai";
10
11
  import { asyncExitHook } from "exit-hook";
11
12
  import { match } from "ts-pattern";
12
13
 
13
14
  //#region src/utils/mcp-client.ts
15
+ const logger = getLogger("mcp-client");
14
16
  const activeMcpClients = /* @__PURE__ */ new Set();
15
17
  let exitHookRegistered = false;
16
18
  function ensureExitHook() {
@@ -141,37 +143,17 @@ var McpClient = class {
141
143
  const tools = await this.selectTools();
142
144
  const results = {};
143
145
  for (const def of tools) try {
144
- const createZodSchema = (inputSchema) => {
145
- if (!inputSchema || !inputSchema.properties) return z.object({});
146
- const zodProperties = {};
147
- for (const [key, prop] of Object.entries(inputSchema.properties)) {
148
- const propDef = prop;
149
- let zodType;
150
- switch (propDef.type) {
151
- case "string":
152
- zodType = z.string();
153
- break;
154
- case "number":
155
- zodType = z.number();
156
- break;
157
- case "boolean":
158
- zodType = z.boolean();
159
- break;
160
- case "array":
161
- zodType = z.array(z.any());
162
- break;
163
- case "object":
164
- zodType = createZodSchema(propDef);
165
- break;
166
- default: zodType = z.any();
167
- }
168
- if (propDef.description) zodType = zodType.describe(propDef.description);
169
- if (!inputSchema.required?.includes(key)) zodType = zodType.optional();
170
- zodProperties[key] = zodType;
171
- }
172
- return z.object(zodProperties);
173
- };
174
- const schema = createZodSchema(def.inputSchema);
146
+ let schema;
147
+ try {
148
+ schema = z.fromJSONSchema(def.inputSchema);
149
+ } catch (conversionError) {
150
+ logger.warn({
151
+ server: this.name,
152
+ tool: def.name,
153
+ error: conversionError instanceof Error ? conversionError.message : String(conversionError)
154
+ }, "z.fromJSONSchema failed; passing raw JSON Schema through");
155
+ schema = jsonSchema(def.inputSchema ?? {});
156
+ }
175
157
  const createdTool = tool({
176
158
  id: `${this.name}.${def.name}`,
177
159
  description: def.description || "",
@@ -1,10 +1,10 @@
1
1
  import { z } from "@hono/zod-openapi";
2
- import * as drizzle_zod403 from "drizzle-zod";
2
+ import * as drizzle_zod0 from "drizzle-zod";
3
3
  import { AnySQLiteTable } from "drizzle-orm/sqlite-core";
4
4
 
5
5
  //#region src/validation/drizzle-schema-helpers.d.ts
6
- declare function createSelectSchemaWithModifiers<T extends AnySQLiteTable>(table: T, overrides?: Partial<Record<keyof T['_']['columns'], (schema: z.ZodTypeAny) => z.ZodTypeAny>>): drizzle_zod403.BuildSchema<"select", T["_"]["columns"], drizzle_zod403.BuildRefine<T["_"]["columns"], undefined>, undefined>;
7
- declare function createInsertSchemaWithModifiers<T extends AnySQLiteTable>(table: T, overrides?: Partial<Record<keyof T['_']['columns'], (schema: z.ZodTypeAny) => z.ZodTypeAny>>): drizzle_zod403.BuildSchema<"insert", T["_"]["columns"], drizzle_zod403.BuildRefine<Pick<T["_"]["columns"], keyof T["$inferInsert"]>, undefined>, undefined>;
6
+ declare function createSelectSchemaWithModifiers<T extends AnySQLiteTable>(table: T, overrides?: Partial<Record<keyof T['_']['columns'], (schema: z.ZodTypeAny) => z.ZodTypeAny>>): drizzle_zod0.BuildSchema<"select", T["_"]["columns"], drizzle_zod0.BuildRefine<T["_"]["columns"], undefined>, undefined>;
7
+ declare function createInsertSchemaWithModifiers<T extends AnySQLiteTable>(table: T, overrides?: Partial<Record<keyof T['_']['columns'], (schema: z.ZodTypeAny) => z.ZodTypeAny>>): drizzle_zod0.BuildSchema<"insert", T["_"]["columns"], drizzle_zod0.BuildRefine<Pick<T["_"]["columns"], keyof T["$inferInsert"]>, undefined>, undefined>;
8
8
  declare const createSelectSchema: typeof createSelectSchemaWithModifiers;
9
9
  declare const createInsertSchema: typeof createInsertSchemaWithModifiers;
10
10
  /**
@@ -337,9 +337,9 @@ declare const SkillFileInsertSchema: z.ZodObject<{
337
337
  }>;
338
338
  declare const SkillInsertSchema: z.ZodObject<{
339
339
  name: z.ZodString;
340
- metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
341
340
  description: z.ZodString;
342
341
  content: z.ZodString;
342
+ metadata: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
343
343
  }, {
344
344
  out: {};
345
345
  in: {};
@@ -353,11 +353,11 @@ declare const SkillUpdateSchema: z.ZodObject<{
353
353
  declare const SkillApiSelectSchema: z.ZodObject<{
354
354
  id: z.ZodString;
355
355
  name: z.ZodString;
356
+ description: z.ZodString;
356
357
  createdAt: z.ZodString;
357
358
  updatedAt: z.ZodString;
358
- metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
359
- description: z.ZodString;
360
359
  content: z.ZodString;
360
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
361
361
  }, z.core.$strip>;
362
362
  declare const SkillApiInsertSchema: z.ZodPipe<z.ZodPipe<z.ZodObject<{
363
363
  files: z.ZodArray<z.ZodObject<{
@@ -426,11 +426,11 @@ declare const SkillFileApiUpdateSchema: z.ZodObject<{
426
426
  declare const SkillWithFilesApiSelectSchema: z.ZodObject<{
427
427
  id: z.ZodString;
428
428
  name: z.ZodString;
429
+ description: z.ZodString;
429
430
  createdAt: z.ZodString;
430
431
  updatedAt: z.ZodString;
431
- metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
432
- description: z.ZodString;
433
432
  content: z.ZodString;
433
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
434
434
  files: z.ZodArray<z.ZodObject<{
435
435
  id: z.ZodString;
436
436
  createdAt: z.ZodString;
@@ -489,17 +489,17 @@ declare const SubAgentSkillApiSelectSchema: z.ZodObject<{
489
489
  id: z.ZodString;
490
490
  createdAt: z.ZodString;
491
491
  updatedAt: z.ZodString;
492
- subAgentId: z.ZodString;
493
492
  skillId: z.ZodString;
494
493
  index: z.ZodInt;
495
494
  alwaysLoaded: z.ZodBoolean;
495
+ subAgentId: z.ZodString;
496
496
  }, z.core.$strip>;
497
497
  declare const SubAgentSkillApiInsertSchema: z.ZodObject<{
498
498
  agentId: z.ZodString;
499
- subAgentId: z.ZodString;
500
499
  skillId: z.ZodString;
501
500
  index: z.ZodInt;
502
501
  alwaysLoaded: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
502
+ subAgentId: z.ZodString;
503
503
  }, {
504
504
  out: {};
505
505
  in: {};
@@ -508,19 +508,19 @@ declare const SubAgentSkillApiUpdateSchema: z.ZodObject<{
508
508
  id: z.ZodOptional<z.ZodOptional<z.ZodString>>;
509
509
  createdAt: z.ZodOptional<z.ZodOptional<z.ZodOptional<z.ZodString>>>;
510
510
  updatedAt: z.ZodOptional<z.ZodOptional<z.ZodOptional<z.ZodString>>>;
511
- subAgentId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
512
511
  skillId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
513
512
  index: z.ZodOptional<z.ZodOptional<z.ZodInt>>;
514
513
  alwaysLoaded: z.ZodOptional<z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodBoolean>>>>;
514
+ subAgentId: z.ZodOptional<z.ZodOptional<z.ZodString>>;
515
515
  }, z.core.$strip>;
516
516
  declare const SubAgentSkillWithIndexSchema: z.ZodObject<{
517
517
  id: z.ZodString;
518
518
  name: z.ZodString;
519
+ description: z.ZodString;
519
520
  createdAt: z.ZodString;
520
521
  updatedAt: z.ZodString;
521
- metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
522
- description: z.ZodString;
523
522
  content: z.ZodString;
523
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
524
524
  subAgentSkillId: z.ZodString;
525
525
  subAgentId: z.ZodString;
526
526
  index: z.ZodInt;
@@ -540,11 +540,11 @@ declare const SkillWithFilesResponse: z.ZodObject<{
540
540
  data: z.ZodObject<{
541
541
  id: z.ZodString;
542
542
  name: z.ZodString;
543
+ description: z.ZodString;
543
544
  createdAt: z.ZodString;
544
545
  updatedAt: z.ZodString;
545
- metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
546
- description: z.ZodString;
547
546
  content: z.ZodString;
547
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
548
548
  files: z.ZodArray<z.ZodObject<{
549
549
  id: z.ZodString;
550
550
  createdAt: z.ZodString;
@@ -559,11 +559,11 @@ declare const SkillListResponse: z.ZodObject<{
559
559
  data: z.ZodArray<z.ZodObject<{
560
560
  id: z.ZodString;
561
561
  name: z.ZodString;
562
+ description: z.ZodString;
562
563
  createdAt: z.ZodString;
563
564
  updatedAt: z.ZodString;
564
- metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
565
- description: z.ZodString;
566
565
  content: z.ZodString;
566
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
567
567
  }, z.core.$strip>>;
568
568
  pagination: z.ZodObject<{
569
569
  page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
@@ -578,21 +578,21 @@ declare const SubAgentSkillResponse: z.ZodObject<{
578
578
  id: z.ZodString;
579
579
  createdAt: z.ZodString;
580
580
  updatedAt: z.ZodString;
581
- subAgentId: z.ZodString;
582
581
  skillId: z.ZodString;
583
582
  index: z.ZodInt;
584
583
  alwaysLoaded: z.ZodBoolean;
584
+ subAgentId: z.ZodString;
585
585
  }, z.core.$strip>;
586
586
  }, z.core.$strip>;
587
587
  declare const SubAgentSkillWithIndexArrayResponse: z.ZodObject<{
588
588
  data: z.ZodArray<z.ZodObject<{
589
589
  id: z.ZodString;
590
590
  name: z.ZodString;
591
+ description: z.ZodString;
591
592
  createdAt: z.ZodString;
592
593
  updatedAt: z.ZodString;
593
- metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
594
- description: z.ZodString;
595
594
  content: z.ZodString;
595
+ metadata: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
596
596
  subAgentSkillId: z.ZodString;
597
597
  subAgentId: z.ZodString;
598
598
  index: z.ZodInt;